scimgateway 6.1.1 → 6.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,18 +1,19 @@
1
1
  # SCIM Gateway
2
2
 
3
- [![Build Status](https://app.travis-ci.com/jelhub/scimgateway.svg?branch=master)](https://app.travis-ci.com/github/jelhub/scimgateway) [![npm Version](https://img.shields.io/npm/v/scimgateway.svg?style=flat-square&label=latest)](https://www.npmjs.com/package/scimgateway)[![npm Downloads](https://img.shields.io/npm/dm/scimgateway.svg?style=flat-square)](https://www.npmjs.com/package/scimgateway) [![chat disqus](https://jelhub.github.io/images/chat.svg)](https://elshaug.xyz/docs/scimgateway#disqus_thread) [![GitHub forks](https://img.shields.io/github/forks/jelhub/scimgateway.svg?style=social&label=Fork)](https://github.com/jelhub/scimgateway)
3
+ [![Build Status](https://app.travis-ci.com/jelhub/scimgateway.svg?branch=master)](https://app.travis-ci.com/github/jelhub/scimgateway) [![npm Version](https://img.shields.io/npm/v/scimgateway.svg?style=flat-square&label=latest)](https://www.npmjs.com/package/scimgateway)[![npm Downloads](https://img.shields.io/npm/dm/scimgateway.svg?style=flat-square)](https://www.npmjs.com/package/scimgateway) [![chat disqus](https://jelhub.github.io/images/chat.svg)](https://elshaug.xyz/docs/scimgateway#disqus_thread) [![GitHub forks](https://img.shields.io/github/forks/jelhub/scimgateway.svg?style=social&label=Fork)](https://github.com/jelhub/scimgateway)
4
4
 
5
- ---
6
- Author: Jarle Elshaug
5
+ ---
6
+ **Author:** Jarle Elshaug
7
7
 
8
- Validated through IdP's:
8
+ **Validated through IdPs:**
9
9
 
10
- - Symantec/Broadcom Identity Manager
11
- - Microsoft Entra ID
12
- - One Identity Manager
13
- - Okta
14
- - Omada
15
- - SailPoint/IdentityNow
10
+ * Symantec/Broadcom Identity Manager
11
+ * Microsoft Entra ID
12
+ * One Identity Manager
13
+ * Okta
14
+ * Omada
15
+ * SailPoint/IdentityNow
16
+ ---
16
17
 
17
18
  Latest news:
18
19
 
@@ -20,7 +21,7 @@ Latest news:
20
21
  - Major release **v6.0.0** introduces changes to API method response bodies (not SCIM-related) and a new method `publicApi()` for handling public path `/pub/api` requests with no authentication required. In addition, the configuration option `bearerJwtAzure.tenantIdGUID` has been replaced by `bearerJwt.azureTenantId`. See the version history for details.
21
22
  - Support for Entra ID [Federated Identity Credentials](https://learn.microsoft.com/en-us/graph/api/resources/federatedidentitycredentials-overview?view=graph-rest-1.0) has been added through internal JWKS (JSON Web Key Set), allowing SCIM Gateway to access Microsoft Entra–protected resources without the need to manage secrets
22
23
  - External JWKS (JSON Web Key Set) is now supported by JWT authentication, allowing external applications to access SCIM Gateway without the need to manage secrets
23
- - [Azure Relay](https://learn.microsoft.com/en-us/azure/azure-relay/relay-what-is-it) is now supported for secure and hassle-free outbound communication — with just one minute of configuration
24
+ - [Azure Relay](https://learn.microsoft.com/en-us/azure/azure-relay/relay-what-is-it) is now supported for secure and hassle-free outbound-only communication — with just one minute of configuration
24
25
  - [ETag](https://datatracker.ietf.org/doc/html/rfc7644#section-3.14) is now supported
25
26
  - [Bulk Operations](https://datatracker.ietf.org/doc/html/rfc7644#section-3.7) is now supported
26
27
  - Remote real-time log subscription for centralized logging and monitoring. Using browser `https://<host>/logger`, curl or custom client API - see configuration notes
@@ -42,6 +43,8 @@ Latest news:
42
43
  - Includes API Gateway for none SCIM/provisioning - becomes what you want it to become
43
44
  - Running SCIM Gateway as a Docker container
44
45
 
46
+ ---
47
+
45
48
  ## Overview
46
49
 
47
50
  SCIM Gateway facilitates user management using the standardized REST-based SCIM 1.1 or 2.0 protocol, offering easier, more powerful, and consistent provisioning while avoiding vendor lock-in. Acting as a translator for incoming SCIM requests, the gateway seamlessly enables CRUD functionality (create, read, update, and delete) for users and groups. By implementing endpoint-specific protocols, it ensures provisioning across diverse destinations. With the gateway, your destinations become SCIM-compatible interfaces, streamlining integration and simplifying user management.
@@ -54,8 +57,8 @@ The following fully functional plugins are included for demonstration and produc
54
57
 
55
58
  | Plugin | Endpoint Type | Description |
56
59
  | :--- | :--- | :--- |
57
- | **Loki** | NoSQL Database | Makes the SCIM Gateway a standalone SCIM endpoint using internal [LokiJS](https://github.com/techfort/LokiJS) |
58
- | **MongoDB** | NoSQL Database | Like plugin Loki, but using external MongoDB. Demonstrates multi-tenant or multi-endpoint through `baseEntity`|
60
+ | **Loki** | NoSQL Database | Transforms the SCIM Gateway into a standalone SCIM endpoint utilizing the internal [LokiJS](https://github.com/techfort/LokiJS) database. Includes two test users and groups |
61
+ | **MongoDB** | NoSQL Database | Similar to the Loki plugin, but using an externally managed MongoDB database, showcasing multi-tenant and multi-endpoint capabilities via `baseEntity` |
59
62
  | **Entra ID** | REST Webservices | Entra ID user provisioning via Microsoft Graph API |
60
63
  | **SCIM** | REST Webservice | Using plugin Loki as a SCIM provisioning endpoint. May become a SCIM version-gateway (e.g., 1.1 => 2.0) |
61
64
  | **API** | REST Webservices | A non-SCIM plugin demonstrating API Gateway functionality for custom REST specifications |
@@ -65,6 +68,7 @@ The following fully functional plugins are included for demonstration and produc
65
68
  | **LDAP** | Directory | A fully functional LDAP plugin pre-configured for Microsoft Active Directory |
66
69
 
67
70
  ## Installation
71
+ To get started with SCIM Gateway, follow the instructions below.
68
72
 
69
73
  #### Install Bun
70
74
 
@@ -91,7 +95,7 @@ index.ts, lib and config directories containing example plugins are copied to yo
91
95
  Start a browser
92
96
 
93
97
  http://localhost:8880/ping
94
- => Health check with a "hello" response
98
+ => Returns a health check with a "hello" response
95
99
 
96
100
  http://localhost:8880/Users
97
101
  http://localhost:8880/Groups
@@ -126,7 +130,7 @@ The recommended upgrade method is to rename the existing package folder, perform
126
130
  - Minor Upgrade: `bun install scimgateway`
127
131
  - Major Upgrade: `bun install scimgateway@latest` (Use with caution, as it may break compatibility with existing custom plugins)
128
132
 
129
- ##### Avoid (re-)adding the files created during `postinstall`
133
+ ##### Avoid (re-)adding the example plugins created during `postinstall`
130
134
 
131
135
  For production we do not need example plugins to be incuded by the `postinstall` job
132
136
  Bun will by default exlude any `postinstall` jobs unless we have trusted the scimgateway package using the `bun pm trust scimgateway` that updates package.json `{ trustedDependencies: ["scimgateway"] }`
@@ -135,7 +139,7 @@ For Node.js (and also Bun), we might set the property `scimgateway_postinstall_s
135
139
 
136
140
  ## Configuration
137
141
 
138
- **index.ts** defines one or more plugins to be started
142
+ The `index.ts` file defines the plugins to be started.
139
143
 
140
144
  // start one or more plugins:
141
145
  import './lib/plugin-entra-id.ts'
@@ -143,7 +147,7 @@ For Node.js (and also Bun), we might set the property `scimgateway_postinstall_s
143
147
 
144
148
 
145
149
  Each endpoint plugin needs a TypeScript file (.ts) and a configuration file (.json).
146
- **They both must have the same naming prefix**. For Entra ID endpoint we have:
150
+ They both must have the **same naming prefix**. For the Entra ID endpoint, the corresponding files are:
147
151
  >lib\plugin-entra-id.ts
148
152
  >config\plugin-entra-id.json
149
153
 
@@ -158,39 +162,39 @@ A plugin configuration file has two main JSON objects: `scimgateway` and `endpoi
158
162
  }
159
163
  }
160
164
 
161
- `scimgateway`: Contains fixed attributes used by the core gateway functionality (e.g., port, logging, and authentication).
165
+ `scimgateway`: Contains fixed attributes used by the core gateway functionality, such as port, logging, and authentication.
162
166
 
163
- `endpoint`: Contains customized definitions required by the plugin code for communication with the destination system (e.g., host, port, credentials).
167
+ `endpoint`: Contains customized definitions required by the plugin code for communication with the destination system, including host, port, and credentials.
164
168
 
165
- - **port** - Gateway will listen on this port number. Clients (e.g. Provisioning Server) will be using this port number for communicating with the gateway
169
+ - **port**: The gateway will listen on this port number. Clients, such as a provisioning server, will use this port to communicate with the gateway.
166
170
 
167
- - **localhostonly** - true or false. False means gateway accepts incoming requests from all clients. True means traffic from only localhost (127.0.0.1) is accepted.
171
+ - **localhostonly**: Set to `true` to accept incoming requests only from localhost (127.0.0.1). Set to `false` to accept requests from all clients.
168
172
 
169
- - **chainingBaseUrl** - baseUrl for chaining anohter gateway, syntax: `http(s)://host:port`. If defined, gateway beave much like a reverse proxy, validating authorization unless PassThrough mode is enabled. See `Configuration notes` for details
173
+ - **chainingBaseUrl**: The base URL for chaining another gateway, with the syntax `http(s)://host:port`. When defined, the gateway behaves like a reverse proxy, validating authorization unless PassThrough mode is enabled. See `Configuration notes` for details.
170
174
 
171
- - **idleTimeout** - default 120, sets the the number of seconds to wait before timing out a connection due to inactivity
175
+ - **idleTimeout**: The number of seconds to wait before timing out a connection due to inactivity. The default value is 120 seconds.
172
176
 
173
- - **scim.version** - "1.1" or "2.0". Default is "2.0".
177
+ - **scim.version**: Specifies the SCIM protocol version to use, either "1.1" or "2.0". The default is "2.0".
174
178
 
175
- - **scim.skipTypeConvert** - true or false, default false. Multivalue attributes supporting types e.g. emails, phoneNumbers, ims, photos, addresses, entitlements and x509Certificates (but not roles, groups and members) will be become "type converted objects" when sent to modifyUser and createUser. This for simplicity of checking attributes included and also for the endpointMapper method (used by plugin-ldap and plugin-entra-id), e.g.:
179
+ - **scim.skipTypeConvert**: When set to `true`, multivalue attributes with types (e.g., emails, phoneNumbers, ims, photos, addresses, entitlements, and x509Certificates, but not roles, groups, and members) will not be converted into "type converted objects" when sent to `modifyUser` and `createUser`. This is useful for simplifying attribute checks and for the `endpointMapper` method used by `plugin-ldap` and `plugin-entra-id`. For example:
176
180
 
177
181
  "emails": {
178
182
  "work": {"value": "jsmith@example.com", "type": "work"},
179
183
  "home": {"value": "", "type": "home", "operation": "delete"},
180
184
  "undefined": {"value": "jsmith@hotmail.com"}
181
185
  }
182
-
183
- skipTypeConvert set to true gives attribute "as-is": array, allow duplicate types including blank, but values to be deleted have been marked with "operation": "delete"
184
186
 
187
+ When `skipTypeConvert` is set to `true`, the attribute is provided "as-is" as an array, allowing duplicate types including blank types. Values to be deleted are marked with `"operation": "delete"`.
188
+
185
189
  "emails": [
186
190
  {"value": "jsmith@example.com", "type": "work"},
187
191
  {"value": "john.smith.org", "type": "home", "operation": "delete"},
188
192
  {"value": "jsmith@hotmail.com"}
189
193
  ]
190
194
 
191
- - **scim.skipMetaLocation** - true or false, default false. If set to true, `meta.location` which contains protocol and hostname from request-url, will be excluded from response e.g. `"{...,meta":{"location":"https://my-company.com/<...>"}}`. If using reverse proxy and not including headers `X-Forwarded-Proto` and `X-Forwarded-Host`, originator will be the proxy and we might not want to expose internal protocol and hostname being used by the proxy request.
195
+ - **scim.skipMetaLocation**: When set to `true`, the `meta.location` attribute, which contains the protocol and hostname from the request URL, will be excluded from the response (e.g., `"{...,meta":{"location":"https://my-company.com/<...>"}}`). This is useful when using a reverse proxy and not including the `X-Forwarded-Proto` and `X-Forwarded-Host` headers, as the originator will be the proxy and the internal protocol and hostname should not be exposed.
192
196
 
193
- - **scim.groupMemberOfUser** - true or false, default false. If body contains groups and groupMemberOfUser=true, groups attribute will remain at user object (groups are member of user) instead of default user member of groups that will use modifyGroup method for maintaining group members.
197
+ - **scim.groupMemberOfUser**: When set to `true`, and the request body contains groups, the `groups` attribute will remain on the user object (groups are members of the user). The default behavior is for the user to be a member of the groups, which uses the `modifyGroup` method to maintain group members.
194
198
 
195
199
  - **scim.usePutSoftSync** - true or false, default false. `PUT /Users/bjensen` will replace the user bjensen with body content. If set to `true`, only PUT body content will be replaced. Any additional existing user attributes and groups supported by plugin will remain as-is.
196
200
 
@@ -1169,36 +1173,6 @@ Endpoint configuration example:
1169
1173
 
1170
1174
  For details, please see section "CA Identity Manager as IdP using SCIM Gateway"
1171
1175
 
1172
- ## SCIM Gateway REST API
1173
-
1174
- Create = POST http://localhost:8880/Users
1175
- (body contains the user information)
1176
-
1177
- Update = PATCH http://localhost:8880/Users/<id>
1178
- (body contains the attributes to be updated)
1179
-
1180
- Search/Read = GET http://localhost:8880/Users?userName eq
1181
- "userID"&attributes=<comma separated list of scim-schema defined attributes>
1182
-
1183
- Search/explore all users:
1184
- GET http://localhost:8880/Users?attributes=userName
1185
-
1186
- Delete = DELETE http://localhost:8880/Users/<id>
1187
-
1188
- Discovery:
1189
-
1190
- GET http://localhost:8880/ServiceProviderConfigs
1191
- Specification compliance, authentication schemes, data models.
1192
-
1193
- GET http://localhost:8880/Schemas
1194
- Introspect resources and attribute extensions.
1195
-
1196
- Note:
1197
-
1198
- - userName (mandatory) = UserID
1199
- - id (mandatory) = Unique id. Could be set to the same as UserID but don't have to.
1200
-
1201
-
1202
1176
  ## API Gateway
1203
1177
 
1204
1178
  SCIM Gateway also works as an API Gateway when using url `/api` or `/<baseEntity>/api`
@@ -1213,35 +1187,33 @@ Following methods for the none SCIM based api-plugin are supported:
1213
1187
  PATCH /api/{id} + body
1214
1188
  DELETE /api/{id}
1215
1189
 
1216
- These methods can also be used in standard SCIM plugins
1190
+ These methods can also be included in standard SCIM plugins
1217
1191
  Please see example plugin: **plugin-api.ts**
1218
1192
 
1219
-
1220
1193
  ## How to build your own plugins
1221
- For JavaScript coding editor you may use [Visual Studio Code](https://code.visualstudio.com/ "Visual Studio Code")
1194
+ For coding editor you may use [Visual Studio Code](https://code.visualstudio.com/ "Visual Studio Code")
1222
1195
 
1223
1196
  Preparation:
1224
1197
 
1225
1198
  * Copy "best matching" example plugin e.g. `lib\plugin-mssql.ts` and `config\plugin-mssql.json` and rename both copies to your plugin name prefix e.g. plugin-mine.ts and plugin-mine.json
1226
1199
  * Edit plugin-mine.json and define a unique port number for the gateway setting
1227
- * Edit index.ts and include your plugin in the startup e.g. `const plugins = ['mine']');`
1228
- * Start SCIM Gateway and verify using using your own SCIM API requests or your IdP/IGA system.
1200
+ * Edit index.ts and include your plugin in the startup e.g. `import './lib/plugin-mine.ts'`
1201
+ * Start SCIM Gateway and verify
1229
1202
 
1230
- Now we are ready for custom coding by editing plugin-mine.ts
1203
+ We are now ready for custom coding by editing plugin-mine.ts
1231
1204
  Coding should be done step by step and each step should be verified and tested before starting the next
1232
1205
 
1233
1206
  1. **Turn off group functionality** - getGroups to return empty response (gateway automatically use getGroups for some of the methods if groups not included)
1234
1207
  Please see plugin-saphana that do not use groups.
1235
1208
  2. **getUsers** (test provisioning retrieve all accounts and single account)
1236
- 4. **createUser** (test provisioning new account)
1237
- 5. **deleteUser** (test provisioning delete account)
1238
- 6. **modifyUser** (test provisioning modify account)
1239
- 7. **Turn on group functionality** - getGroups having logic for returning groups if groups are supported
1209
+ 3. **createUser** (test provisioning new account)
1210
+ 4. **deleteUser** (test provisioning delete account)
1211
+ 5. **modifyUser** (test provisioning modify account)
1212
+ 6. **Turn on group functionality** - getGroups having logic for returning groups if groups are supported
1240
1213
  7. **getGroups** (test provisioning retrieve groups)
1241
1214
  8. **modifyGroup** (test provisioning modify group members)
1242
- 12. **createGroup** (test provisioning new group)
1243
- 13. **deleteGroup** (test provisioning delete account)
1244
-
1215
+ 9. **createGroup** (test provisioning new group)
1216
+ 10. **deleteGroup** (test provisioning delete account)
1245
1217
 
1246
1218
  Template used by CA Provisioning role should only include endpoint supported attributes defined in our plugin. Template should therefore have no links to global user for none supported attributes (e.g. remove %UT% from "Job Title" if our endpoint/code do not support title)
1247
1219
 
@@ -1293,33 +1265,14 @@ advanced options - **Synchronized** = enabled (toggled on)
1293
1265
  Plugins should have following initialization:
1294
1266
 
1295
1267
  // start - mandatory plugin initialization
1296
- const ScimGateway: typeof import('scimgateway').ScimGateway = await (async () => {
1297
- try {
1298
- return (await import('scimgateway')).ScimGateway
1299
- } catch (err) {
1300
- const source = './scimgateway.ts'
1301
- return (await import(source)).ScimGateway
1302
- }
1303
- })()
1268
+ import { ScimGateway, HelperRest } from 'scimgateway'
1304
1269
  const scimgateway = new ScimGateway()
1270
+ const helper = new HelperRest(scimgateway)
1305
1271
  const config = scimgateway.getConfig()
1306
1272
  scimgateway.authPassThroughAllowed = false
1307
1273
  // end - mandatory plugin initialization
1308
-
1309
- If using REST, we could also include the HelperRest:
1310
1274
 
1311
- // start - mandatory plugin initialization
1312
- ...
1313
- const HelperRest: typeof import('scimgateway').HelperRest = await (async () => {
1314
- try {
1315
- return (await import('scimgateway')).HelperRest
1316
- } catch (err) {
1317
- const source = './scimgateway.ts'
1318
- return (await import(source)).HelperRest
1319
- }
1320
- })()
1321
- ...
1322
- // end - mandatory plugin initialization
1275
+ HelperRest could included and used by REST plugins
1323
1276
 
1324
1277
  Plugins should include following SCIM Gateway methods:
1325
1278
 
@@ -1350,6 +1303,25 @@ MIT © [Jarle Elshaug](https://www.elshaug.xyz)
1350
1303
 
1351
1304
  ## Change log
1352
1305
 
1306
+ ### v6.1.3
1307
+
1308
+ [Fixed]
1309
+
1310
+ - azure relay, recover on failure
1311
+ - plugin-ldap, some improvements for Active Directory and the use of objectGUID/mS-DS-ConsistencyGuid
1312
+ - plugin-mongodb, group meta.version not standarized
1313
+ - when modifying group members, if an error occurs, the gateway now checks whether it was caused by adding an existing member or removing a non-existing member. In such cases, it returns 200 OK instead of an error.
1314
+
1315
+ [Improved]
1316
+ - Dependencies bump
1317
+
1318
+ ### v6.1.2
1319
+
1320
+ [Fixed]
1321
+
1322
+ - SMTP mail functionality failed because of an updated dependency
1323
+ - endpointMapper failed when `mapTo` included multiple comma-separated attributes and one of them was a multivalued attribute, e.g. `{ "mail": { "mapTo": "userName,emails.work.value" } }`
1324
+
1353
1325
  ### v6.1.1
1354
1326
 
1355
1327
  [Fixed]
@@ -3572,5 +3544,3 @@ This plugin now replace previous `plugin-testmode`
3572
3544
 
3573
3545
  ### v0.2.0
3574
3546
  Initial version
3575
-
3576
-
package/bun.lock CHANGED
@@ -16,12 +16,12 @@
16
16
  "https-proxy-agent": "^7.0.6",
17
17
  "hyco-https": "^1.4.5",
18
18
  "is-in-subnet": "^4.0.1",
19
- "jose": "^6.1.0",
19
+ "jose": "^6.1.1",
20
20
  "ldapjs": "^3.0.7",
21
21
  "lokijs": "^1.5.12",
22
- "mongodb": "^6.20.0",
22
+ "mongodb": "^7.0.0",
23
23
  "node-machine-id": "1.1.12",
24
- "nodemailer": "^7.0.9",
24
+ "nodemailer": "^7.0.10",
25
25
  "saml": "^3.0.1",
26
26
  "tsx": "^4.20.6",
27
27
  },
@@ -233,7 +233,7 @@
233
233
 
234
234
  "@ldapjs/protocol": ["@ldapjs/protocol@1.2.1", "", {}, "sha512-O89xFDLW2gBoZWNXuXpBSM32/KealKCTb3JGtJdtUQc7RjAk8XzrRgyz02cPAwGKwKPxy0ivuC7UP9bmN87egQ=="],
235
235
 
236
- "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.3.1", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-6nZrq5kfAz0POWyhljnbWQQJQ5uT8oE2ddX303q1uY0tWsivWKgBDXBBvuFPwOqRRalXJuVO9EjOdVtuhLX0zg=="],
236
+ "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.3.2", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg=="],
237
237
 
238
238
  "@nats-io/jetstream": ["@nats-io/jetstream@3.2.0", "", { "dependencies": { "@nats-io/nats-core": "3.2.0" } }, "sha512-6H/vMjTMPsFEXKGK7dqScwHEtP1ZedZrwbCdRQuYDIVq4WLqZOD6ryeEZ/gMAP7YKLy82G6IixGUm2DVsDPCMw=="],
239
239
 
@@ -357,7 +357,7 @@
357
357
 
358
358
  "@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="],
359
359
 
360
- "@types/whatwg-url": ["@types/whatwg-url@11.0.5", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ=="],
360
+ "@types/whatwg-url": ["@types/whatwg-url@13.0.0", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q=="],
361
361
 
362
362
  "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.46.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/type-utils": "8.46.0", "@typescript-eslint/utils": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.46.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA=="],
363
363
 
@@ -421,7 +421,7 @@
421
421
 
422
422
  "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
423
423
 
424
- "bson": ["bson@6.10.4", "", {}, "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng=="],
424
+ "bson": ["bson@7.0.0", "", {}, "sha512-Kwc6Wh4lQ5OmkqqKhYGKIuELXl+EPYSCObVE6bWsp1T/cGkOCBN0I8wF/T44BiuhHyNi1mmKVPXk60d41xZ7kw=="],
425
425
 
426
426
  "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
427
427
 
@@ -617,7 +617,7 @@
617
617
 
618
618
  "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
619
619
 
620
- "jose": ["jose@6.1.0", "", {}, "sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA=="],
620
+ "jose": ["jose@6.1.1", "", {}, "sha512-GWSqjfOPf4cWOkBzw5THBjtGPhXKqYnfRBzh4Ni+ArTrQQ9unvmsA3oFLqaYKoKe5sjWmGu5wVKg9Ft1i+LQfg=="],
621
621
 
622
622
  "js-md4": ["js-md4@0.3.2", "", {}, "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA=="],
623
623
 
@@ -673,9 +673,9 @@
673
673
 
674
674
  "moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="],
675
675
 
676
- "mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="],
676
+ "mongodb": ["mongodb@7.0.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^7.0.0", "mongodb-connection-string-url": "^7.0.0" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.806.0", "@mongodb-js/zstd": "^7.0.0", "gcp-metadata": "^7.0.1", "kerberos": "^7.0.0", "mongodb-client-encryption": ">=7.0.0 <7.1.0", "snappy": "^7.3.2", "socks": "^2.8.6" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-vG/A5cQrvGGvZm2mTnCSz1LUcbOPl83hfB6bxULKQ8oFZauyox/2xbZOoGNl+64m8VBrETkdGCDBdOsCr3F3jg=="],
677
677
 
678
- "mongodb-connection-string-url": ["mongodb-connection-string-url@3.0.2", "", { "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^14.1.0 || ^13.0.0" } }, "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA=="],
678
+ "mongodb-connection-string-url": ["mongodb-connection-string-url@7.0.0", "", { "dependencies": { "@types/whatwg-url": "^13.0.0", "whatwg-url": "^14.1.0" } }, "sha512-irhhjRVLE20hbkRl4zpAYLnDMM+zIZnp0IDB9akAFFUZp/3XdOfwwddc7y6cNvF2WCEtfTYRwYbIfYa2kVY0og=="],
679
679
 
680
680
  "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
681
681
 
@@ -685,7 +685,7 @@
685
685
 
686
686
  "node-machine-id": ["node-machine-id@1.1.12", "", {}, "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ=="],
687
687
 
688
- "nodemailer": ["nodemailer@7.0.9", "", {}, "sha512-9/Qm0qXIByEP8lEV2qOqcAW7bRpL8CR9jcTwk3NBnHJNmP9fIJ86g2fgmIXqHY+nj55ZEMwWqYAT2QTDpRUYiQ=="],
688
+ "nodemailer": ["nodemailer@7.0.10", "", {}, "sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w=="],
689
689
 
690
690
  "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
691
691