Uploaded image for project: 'Compass '
  1. Compass
  2. COMPASS-7113

Investigate changes in NODE-5283: Move js logic from mongodb-client-encryption to the driver

    • Type: Icon: Investigation Investigation
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • No version
    • Affects Version/s: None
    • Component/s: None
    • Not Needed

      Use Case

      As a... node driver developer
      I want... fle bindings javascript logic to live in the driver
      So that... there is less code duplication and testing and releases require less work

      User Impact

      • Starting in driver 6.0.0 and mongodb-client-encryption 6.0.0, FLE logic will live in the driver instead of mongodb-client-encryption. If a user wishes to use FLE 6.0+, the user must
        • install a 6.0+ driver
        • install mongodb-client-encryption 6.0+
        • import the Javascript FLE code from the driver, instead of `mongodb-client-encryption`

      This is different from a pre-6.0 world, where the user was only required to install mongodb-client-encryption.

      Dependencies

      • N/A

      Unknowns

      • N/A

      Open Questions

      Do we want to generate documentation for mongodb-client-encryption after these changes? - No, see doc requirements

      Acceptance Criteria

      Implementation Requirements

      • Add js bindings code to the driver
        • [Subtask] Move JS logic and integrate into test suite 
          • Add @aws-sdk/credential-providers and gcp-metadata as optional peer dependencies in the driver. Ensure that these dependencies are lazy loaded.
            • If `socks` is not a peer optional dependency when doing this work, do nothing.  If `socks` is a peer optional dependency in the driver, make sure `socks` is lazy-loaded into the FLE code that uses it.
          • Move tests from bindings/node/test to driver relevant test directories. Ensure tests pass against the local linked mongodb-client-encryption.
          • Export any code needed from the libmongocrypt bindings needed to get the tests passing in the driver (i.e., class MongoCrypt).  A proper reworking of the bindings will come in a subsequent subtask but we need some restructuring here in order to run the driver's tests.
          • Add rough TS types for any changes to mongodb-client-encryption in deps.ts so that the driver can use it.
        • [Subtask] Clean up bindings in the driver
          • Convert to TS when moving - fix duplicate types.
          • Unify constants between the repos.
          • Make MongoCryptErrors (and subclasses) subclasses of MongoError
        • Release a 6.x pre-release of mongodb-client-encryption for driver to use (note: we plan to bump mongodb-client-encryption to 6.x at the next major so it aligns with the driver’s and bson’s major versions)
      • [Subtask] Remove js bindings code from libmongocrypt
        • Create unit tests in mongodb-client-encryption to test bindings only.
        • Cleanup driver evergreen tasks to no longer run the tests in mongodb-client-encryption.
        • Create public types for the bindings.
        • Cleanup unused dependencies from mongodb-client-encryption (@aws-sdk/credential-providers, gcp-metadata, socks, and mongodb)
      • [Subtask] Export new CSFLE types from the driver.
      • [Subtask] Add driver CI testing against the lowest supported peer dependency range version of the bindings alongside the latest version
      • [Subtask] Export javascript FLE logic from legacy mongodb package and setup driver testing with mongodb-legacy for all FLE logic.

      Testing Requirements

      • Unit tests if/as needed
      • CI test for lowest supported peer dependency range version (see above)

      Documentation Requirements

      The following changes are downstream docs changes (not driver API docs):

      • Adjust FLE documentation for Node to install the driver and mongodb-client-encryption, instead of just mongodb-client-encryption.
      • Adjust existing FLE examples to import explicit encryption code from the driver, instead of from `mongodb-client-encryption`
        • Coordinate with the docs team to ensure any example code is updated.
      • Add a note to mongodb-client-encryption readme stating that this package is not intended to be used in isolation and that we reserve the right to make changes that fall outside of semver
      • Adjust any internal documentation on generating docs and testing (in the driver and libmongocrypt) as necessary

      Follow Up Requirements

      • N/A

            Assignee:
            Unassigned Unassigned
            Reporter:
            dbeng-pm-bot PM Bot
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: