@90soft/parse-server-kit 2.5.3 → 2.8.0

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.
Files changed (60) hide show
  1. package/README.md +613 -424
  2. package/dist/database/schema.d.ts +14 -0
  3. package/dist/database/schema.d.ts.map +1 -1
  4. package/dist/database/schema.js +2 -1
  5. package/dist/database/schema.js.map +1 -1
  6. package/dist/database/versionRegistry.d.ts +35 -0
  7. package/dist/database/versionRegistry.d.ts.map +1 -0
  8. package/dist/database/versionRegistry.js +153 -0
  9. package/dist/database/versionRegistry.js.map +1 -0
  10. package/dist/database/versionedMongoAdapter.d.ts +51 -0
  11. package/dist/database/versionedMongoAdapter.d.ts.map +1 -0
  12. package/dist/database/versionedMongoAdapter.js +131 -0
  13. package/dist/database/versionedMongoAdapter.js.map +1 -0
  14. package/dist/decorators/cloudRegistry.d.ts.map +1 -1
  15. package/dist/decorators/cloudRegistry.js +5 -0
  16. package/dist/decorators/cloudRegistry.js.map +1 -1
  17. package/dist/decorators/triggerDecorator.d.ts +8 -0
  18. package/dist/decorators/triggerDecorator.d.ts.map +1 -1
  19. package/dist/decorators/triggerDecorator.js +10 -1
  20. package/dist/decorators/triggerDecorator.js.map +1 -1
  21. package/dist/decorators/triggerRegistry.d.ts.map +1 -1
  22. package/dist/decorators/triggerRegistry.js +52 -8
  23. package/dist/decorators/triggerRegistry.js.map +1 -1
  24. package/dist/decorators/types/triggerTypes.d.ts +1 -1
  25. package/dist/decorators/types/triggerTypes.d.ts.map +1 -1
  26. package/dist/index.d.ts +8 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +30 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/middleware/middleware.d.ts.map +1 -1
  31. package/dist/middleware/middleware.js +34 -1
  32. package/dist/middleware/middleware.js.map +1 -1
  33. package/dist/middleware/rateLimit.d.ts.map +1 -1
  34. package/dist/middleware/rateLimit.js +7 -1
  35. package/dist/middleware/rateLimit.js.map +1 -1
  36. package/dist/swagger/index.d.ts +5 -1
  37. package/dist/swagger/index.d.ts.map +1 -1
  38. package/dist/swagger/index.js +32 -8
  39. package/dist/swagger/index.js.map +1 -1
  40. package/dist/transactions/ambientSession.d.ts +39 -0
  41. package/dist/transactions/ambientSession.d.ts.map +1 -0
  42. package/dist/transactions/ambientSession.js +88 -0
  43. package/dist/transactions/ambientSession.js.map +1 -0
  44. package/dist/transactions/context.d.ts +86 -0
  45. package/dist/transactions/context.d.ts.map +1 -0
  46. package/dist/transactions/context.js +124 -0
  47. package/dist/transactions/context.js.map +1 -0
  48. package/dist/utils/dynamicImport.d.ts +22 -1
  49. package/dist/utils/dynamicImport.d.ts.map +1 -1
  50. package/dist/utils/dynamicImport.js +13 -4
  51. package/dist/utils/dynamicImport.js.map +1 -1
  52. package/dist/utils/helper.d.ts +10 -1
  53. package/dist/utils/helper.d.ts.map +1 -1
  54. package/dist/utils/helper.js +10 -1
  55. package/dist/utils/helper.js.map +1 -1
  56. package/dist/utils/imageAcl.d.ts +28 -0
  57. package/dist/utils/imageAcl.d.ts.map +1 -0
  58. package/dist/utils/imageAcl.js +74 -0
  59. package/dist/utils/imageAcl.js.map +1 -0
  60. package/package.json +75 -54
@@ -1,6 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TriggerRegistry = void 0;
4
+ /**
5
+ * Triggers on Parse's own built-in entities.
6
+ *
7
+ * These are not registered by class *name* — parse-server wants the class
8
+ * itself, and maps it internally to a reserved name (`@File`, `@Config`). It
9
+ * used to expose a dedicated method per file trigger (`beforeSaveFile` and
10
+ * friends); those were removed, and calling them on parse-server 9 throws
11
+ * `TypeError: not a function`. The class-argument form is the supported one.
12
+ *
13
+ * Resolved lazily, inside `initialize()`: `Parse` is a global supplied by
14
+ * parse-server, and reading it at module load would break importing the kit
15
+ * before the server is up.
16
+ */
17
+ function builtInTarget(type) {
18
+ const P = Parse;
19
+ if (type.endsWith('File'))
20
+ return P.File;
21
+ if (type.endsWith('Config'))
22
+ return P.Config;
23
+ return undefined;
24
+ }
4
25
  class TriggerRegistry {
5
26
  static getKey(className, type) {
6
27
  return `${className}:${type}`;
@@ -27,6 +48,11 @@ class TriggerRegistry {
27
48
  console.log(`[Triggers] Registering ${triggers.length} trigger(s)...`);
28
49
  for (const metadata of triggers) {
29
50
  const { type, className, handler, validation } = metadata;
51
+ const Cloud = Parse.Cloud;
52
+ // For a built-in entity the "class" is Parse.File / Parse.Config itself;
53
+ // for everything else it is the registered class name.
54
+ const target = builtInTarget(type) ?? className;
55
+ const label = target === className ? className : type.replace(/^(before|after)/, '');
30
56
  switch (type) {
31
57
  case 'beforeSave':
32
58
  Parse.Cloud.beforeSave(className, handler, validation);
@@ -55,29 +81,47 @@ class TriggerRegistry {
55
81
  case 'afterLogout':
56
82
  Parse.Cloud.afterLogout(handler, validation);
57
83
  break;
84
+ case 'beforePasswordResetRequest':
85
+ Cloud.beforePasswordResetRequest(handler, validation);
86
+ break;
87
+ // File triggers — the class-argument form. The old dedicated methods
88
+ // (`beforeSaveFile` etc.) no longer exist on parse-server 9.
58
89
  case 'beforeSaveFile':
59
- Parse.Cloud.beforeSaveFile(handler, validation);
90
+ Cloud.beforeSave(target, handler, validation);
60
91
  break;
61
92
  case 'afterSaveFile':
62
- Parse.Cloud.afterSaveFile(handler, validation);
93
+ Cloud.afterSave(target, handler, validation);
63
94
  break;
64
95
  case 'beforeDeleteFile':
65
- Parse.Cloud.beforeDeleteFile(handler, validation);
96
+ Cloud.beforeDelete(target, handler, validation);
66
97
  break;
67
98
  case 'afterDeleteFile':
68
- Parse.Cloud.afterDeleteFile(handler, validation);
99
+ Cloud.afterDelete(target, handler, validation);
100
+ break;
101
+ case 'beforeFindFile':
102
+ Cloud.beforeFind(target, handler, validation);
103
+ break;
104
+ case 'afterFindFile':
105
+ Cloud.afterFind(target, handler, validation);
106
+ break;
107
+ // Parse Config triggers — same class-argument form.
108
+ case 'beforeSaveConfig':
109
+ Cloud.beforeSave(target, handler, validation);
110
+ break;
111
+ case 'afterSaveConfig':
112
+ Cloud.afterSave(target, handler, validation);
69
113
  break;
70
114
  case 'beforeConnect':
71
- Parse.Cloud.beforeConnect(handler, validation);
115
+ Cloud.beforeConnect(handler, validation);
72
116
  break;
73
117
  case 'beforeSubscribe':
74
- Parse.Cloud.beforeSubscribe(className, handler, validation);
118
+ Cloud.beforeSubscribe(className, handler, validation);
75
119
  break;
76
120
  case 'afterEvent':
77
- Parse.Cloud.afterLiveQueryEvent(className, handler, validation);
121
+ Cloud.afterLiveQueryEvent(className, handler, validation);
78
122
  break;
79
123
  }
80
- console.log(`[Triggers] Registered ${type} for: ${className}`);
124
+ console.log(`[Triggers] Registered ${type} for: ${label}`);
81
125
  }
82
126
  console.log('[Triggers] All triggers registered');
83
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"triggerRegistry.js","sourceRoot":"","sources":["../../src/decorators/triggerRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triggerRegistry.js","sourceRoot":"","sources":["../../src/decorators/triggerRegistry.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ClassNameType } from './schemaTypes';
2
- export type TriggerType = 'beforeSave' | 'afterSave' | 'beforeDelete' | 'afterDelete' | 'beforeFind' | 'afterFind' | 'beforeLogin' | 'afterLogin' | 'afterLogout' | 'beforeSaveFile' | 'afterSaveFile' | 'beforeDeleteFile' | 'afterDeleteFile' | 'beforeConnect' | 'beforeSubscribe' | 'afterEvent';
2
+ export type TriggerType = 'beforeSave' | 'afterSave' | 'beforeDelete' | 'afterDelete' | 'beforeFind' | 'afterFind' | 'beforeLogin' | 'afterLogin' | 'afterLogout' | 'beforePasswordResetRequest' | 'beforeSaveFile' | 'afterSaveFile' | 'beforeDeleteFile' | 'afterDeleteFile' | 'beforeFindFile' | 'afterFindFile' | 'beforeSaveConfig' | 'afterSaveConfig' | 'beforeConnect' | 'beforeSubscribe' | 'afterEvent';
3
3
  export interface TriggerMetadata {
4
4
  type: TriggerType;
5
5
  className: ClassNameType;
@@ -1 +1 @@
1
- {"version":3,"file":"triggerTypes.d.ts","sourceRoot":"","sources":["../../../src/decorators/types/triggerTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,GAC3D,YAAY,GAAG,WAAW,GAC1B,aAAa,GAAG,YAAY,GAAG,aAAa,GAC5C,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,GAAG,iBAAiB,GAC3E,eAAe,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC"}
1
+ {"version":3,"file":"triggerTypes.d.ts","sourceRoot":"","sources":["../../../src/decorators/types/triggerTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,GAC3D,YAAY,GAAG,WAAW,GAC1B,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,4BAA4B,GAC3E,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,GAAG,iBAAiB,GAC3E,gBAAgB,GAAG,eAAe,GAClC,kBAAkB,GAAG,iBAAiB,GACtC,eAAe,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { ParseClass, ParseField, getSchemaDefinition, onClassRegistered, onField
2
2
  export type { ParseClassOptions, ParseFieldOptions, AllowedFieldType } from './decorators/parseDecorators';
3
3
  export { CloudFunction, ProtectedCloudFunction, onFunctionRegistered } from './decorators/cloudDecorator';
4
4
  export { CloudFunctionRegistry } from './decorators/cloudRegistry';
5
- export { BeforeSave, AfterSave, BeforeDelete, AfterDelete, BeforeFind, AfterFind, BeforeLogin, AfterLogin, AfterLogout, BeforeSaveFile, AfterSaveFile, BeforeDeleteFile, AfterDeleteFile, BeforeConnect, BeforeSubscribe, AfterEvent } from './decorators/triggerDecorator';
5
+ export { BeforeSave, AfterSave, BeforeDelete, AfterDelete, BeforeFind, AfterFind, BeforeLogin, AfterLogin, AfterLogout, BeforePasswordResetRequest, BeforeSaveFile, AfterSaveFile, BeforeDeleteFile, AfterDeleteFile, BeforeFindFile, AfterFindFile, BeforeSaveConfig, AfterSaveConfig, BeforeConnect, BeforeSubscribe, AfterEvent } from './decorators/triggerDecorator';
6
6
  export { TriggerRegistry } from './decorators/triggerRegistry';
7
7
  export { Cron, CronSchedule, CronRegistry } from './decorators/cronDecorator';
8
8
  export { Route, RouteRegistry } from './decorators/routeDecorator';
@@ -15,6 +15,7 @@ export type { AuthRole, MultiLangs, Filter } from './decorators/types/common';
15
15
  export { validateObject, validateOrThrow, getValidators, applyMongoValidators } from './decorators/types/fieldValidation';
16
16
  export { BaseModel } from './models/BaseModel';
17
17
  export { implementACL } from './utils/ACL';
18
+ export { syncImageAcl, cloneAcl } from './utils/imageAcl';
18
19
  export { UserRoles, roleKey, MAX_QUERY_LIMIT } from './utils/constants';
19
20
  export type { RoleString } from './utils/constants';
20
21
  export { catchError, getUserRoles, getUsersRoles, formatCount, generateRandomPassword, generateRandomInteger, generateRandomString, sleep } from './utils/helper';
@@ -24,6 +25,12 @@ export { checkRateLimit } from './middleware/rateLimit';
24
25
  export { createSchemaConfig } from './database/schema';
25
26
  export type { SchemaConfigOptions } from './database/schema';
26
27
  export { applyAllIndexes, applyUniqueIndexes, getUniqueIndexes, getCompoundIndexes, getFieldIndexes } from './database/indexes';
28
+ export { ParseVersionField, VersionRegistry } from './database/versionRegistry';
29
+ export { createVersionedMongoAdapter, VERSION_CONFLICT, VERSION_CONFLICT_MESSAGE } from './database/versionedMongoAdapter';
30
+ export type { VersionedMongoAdapter, MongoAdapterConstructor } from './database/versionedMongoAdapter';
31
+ export { Transactional, withTransaction, inTransaction, currentSession, useTransactionAdapter, CONFLICT, CONFLICT_MESSAGE } from './transactions/context';
32
+ export type { TransactionalAdapter } from './transactions/context';
33
+ export { withAmbientSession, NO_AMBIENT_TRANSACTION } from './transactions/ambientSession';
27
34
  export { SwaggerRegistry } from './swagger/swaggerRegistry';
28
35
  export type { SwaggerModelSchema, SwaggerPropertySchema, SwaggerFunctionSchema } from './swagger/swaggerRegistry';
29
36
  export { generateSwaggerSpec, getSwaggerJson } from './swagger/swaggerSpec';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  // @90soft/parse-server-kit — complete toolkit for Parse Server
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.importFiles = exports.sleep = exports.generateRandomString = exports.generateRandomInteger = exports.generateRandomPassword = exports.formatCount = exports.getUsersRoles = exports.getUserRoles = exports.catchError = exports.MAX_QUERY_LIMIT = exports.roleKey = exports.UserRoles = exports.implementACL = exports.BaseModel = exports.applyMongoValidators = exports.getValidators = exports.validateOrThrow = exports.validateObject = exports.classNames = exports.RouteRegistry = exports.Route = exports.CronRegistry = exports.CronSchedule = exports.Cron = exports.TriggerRegistry = exports.AfterEvent = exports.BeforeSubscribe = exports.BeforeConnect = exports.AfterDeleteFile = exports.BeforeDeleteFile = exports.AfterSaveFile = exports.BeforeSaveFile = exports.AfterLogout = exports.AfterLogin = exports.BeforeLogin = exports.AfterFind = exports.BeforeFind = exports.AfterDelete = exports.BeforeDelete = exports.AfterSave = exports.BeforeSave = exports.CloudFunctionRegistry = exports.onFunctionRegistered = exports.ProtectedCloudFunction = exports.CloudFunction = exports.onFieldRegistered = exports.onClassRegistered = exports.getSchemaDefinition = exports.ParseField = exports.ParseClass = void 0;
5
- exports.setupSwagger = exports.getSwaggerJson = exports.generateSwaggerSpec = exports.SwaggerRegistry = exports.getFieldIndexes = exports.getCompoundIndexes = exports.getUniqueIndexes = exports.applyUniqueIndexes = exports.applyAllIndexes = exports.createSchemaConfig = exports.checkRateLimit = exports.conditionalJsonMiddleware = exports.removeResultMiddleware = exports.restrictRoutes = exports.validateEntityRoutes = exports.validateFunctionRoutes = void 0;
4
+ exports.getUserRoles = exports.catchError = exports.MAX_QUERY_LIMIT = exports.roleKey = exports.UserRoles = exports.cloneAcl = exports.syncImageAcl = exports.implementACL = exports.BaseModel = exports.applyMongoValidators = exports.getValidators = exports.validateOrThrow = exports.validateObject = exports.classNames = exports.RouteRegistry = exports.Route = exports.CronRegistry = exports.CronSchedule = exports.Cron = exports.TriggerRegistry = exports.AfterEvent = exports.BeforeSubscribe = exports.BeforeConnect = exports.AfterSaveConfig = exports.BeforeSaveConfig = exports.AfterFindFile = exports.BeforeFindFile = exports.AfterDeleteFile = exports.BeforeDeleteFile = exports.AfterSaveFile = exports.BeforeSaveFile = exports.BeforePasswordResetRequest = exports.AfterLogout = exports.AfterLogin = exports.BeforeLogin = exports.AfterFind = exports.BeforeFind = exports.AfterDelete = exports.BeforeDelete = exports.AfterSave = exports.BeforeSave = exports.CloudFunctionRegistry = exports.onFunctionRegistered = exports.ProtectedCloudFunction = exports.CloudFunction = exports.onFieldRegistered = exports.onClassRegistered = exports.getSchemaDefinition = exports.ParseField = exports.ParseClass = void 0;
5
+ exports.setupSwagger = exports.getSwaggerJson = exports.generateSwaggerSpec = exports.SwaggerRegistry = exports.NO_AMBIENT_TRANSACTION = exports.withAmbientSession = exports.CONFLICT_MESSAGE = exports.CONFLICT = exports.useTransactionAdapter = exports.currentSession = exports.inTransaction = exports.withTransaction = exports.Transactional = exports.VERSION_CONFLICT_MESSAGE = exports.VERSION_CONFLICT = exports.createVersionedMongoAdapter = exports.VersionRegistry = exports.ParseVersionField = exports.getFieldIndexes = exports.getCompoundIndexes = exports.getUniqueIndexes = exports.applyUniqueIndexes = exports.applyAllIndexes = exports.createSchemaConfig = exports.checkRateLimit = exports.conditionalJsonMiddleware = exports.removeResultMiddleware = exports.restrictRoutes = exports.validateEntityRoutes = exports.validateFunctionRoutes = exports.importFiles = exports.sleep = exports.generateRandomString = exports.generateRandomInteger = exports.generateRandomPassword = exports.formatCount = exports.getUsersRoles = void 0;
6
6
  // ── Decorators ──
7
7
  var parseDecorators_1 = require("./decorators/parseDecorators");
8
8
  Object.defineProperty(exports, "ParseClass", { enumerable: true, get: function () { return parseDecorators_1.ParseClass; } });
@@ -26,10 +26,15 @@ Object.defineProperty(exports, "AfterFind", { enumerable: true, get: function ()
26
26
  Object.defineProperty(exports, "BeforeLogin", { enumerable: true, get: function () { return triggerDecorator_1.BeforeLogin; } });
27
27
  Object.defineProperty(exports, "AfterLogin", { enumerable: true, get: function () { return triggerDecorator_1.AfterLogin; } });
28
28
  Object.defineProperty(exports, "AfterLogout", { enumerable: true, get: function () { return triggerDecorator_1.AfterLogout; } });
29
+ Object.defineProperty(exports, "BeforePasswordResetRequest", { enumerable: true, get: function () { return triggerDecorator_1.BeforePasswordResetRequest; } });
29
30
  Object.defineProperty(exports, "BeforeSaveFile", { enumerable: true, get: function () { return triggerDecorator_1.BeforeSaveFile; } });
30
31
  Object.defineProperty(exports, "AfterSaveFile", { enumerable: true, get: function () { return triggerDecorator_1.AfterSaveFile; } });
31
32
  Object.defineProperty(exports, "BeforeDeleteFile", { enumerable: true, get: function () { return triggerDecorator_1.BeforeDeleteFile; } });
32
33
  Object.defineProperty(exports, "AfterDeleteFile", { enumerable: true, get: function () { return triggerDecorator_1.AfterDeleteFile; } });
34
+ Object.defineProperty(exports, "BeforeFindFile", { enumerable: true, get: function () { return triggerDecorator_1.BeforeFindFile; } });
35
+ Object.defineProperty(exports, "AfterFindFile", { enumerable: true, get: function () { return triggerDecorator_1.AfterFindFile; } });
36
+ Object.defineProperty(exports, "BeforeSaveConfig", { enumerable: true, get: function () { return triggerDecorator_1.BeforeSaveConfig; } });
37
+ Object.defineProperty(exports, "AfterSaveConfig", { enumerable: true, get: function () { return triggerDecorator_1.AfterSaveConfig; } });
33
38
  Object.defineProperty(exports, "BeforeConnect", { enumerable: true, get: function () { return triggerDecorator_1.BeforeConnect; } });
34
39
  Object.defineProperty(exports, "BeforeSubscribe", { enumerable: true, get: function () { return triggerDecorator_1.BeforeSubscribe; } });
35
40
  Object.defineProperty(exports, "AfterEvent", { enumerable: true, get: function () { return triggerDecorator_1.AfterEvent; } });
@@ -57,6 +62,9 @@ Object.defineProperty(exports, "BaseModel", { enumerable: true, get: function ()
57
62
  // ── ACL & Permissions ──
58
63
  var ACL_1 = require("./utils/ACL");
59
64
  Object.defineProperty(exports, "implementACL", { enumerable: true, get: function () { return ACL_1.implementACL; } });
65
+ var imageAcl_1 = require("./utils/imageAcl");
66
+ Object.defineProperty(exports, "syncImageAcl", { enumerable: true, get: function () { return imageAcl_1.syncImageAcl; } });
67
+ Object.defineProperty(exports, "cloneAcl", { enumerable: true, get: function () { return imageAcl_1.cloneAcl; } });
60
68
  var constants_1 = require("./utils/constants");
61
69
  Object.defineProperty(exports, "UserRoles", { enumerable: true, get: function () { return constants_1.UserRoles; } });
62
70
  Object.defineProperty(exports, "roleKey", { enumerable: true, get: function () { return constants_1.roleKey; } });
@@ -91,6 +99,26 @@ Object.defineProperty(exports, "applyUniqueIndexes", { enumerable: true, get: fu
91
99
  Object.defineProperty(exports, "getUniqueIndexes", { enumerable: true, get: function () { return indexes_1.getUniqueIndexes; } });
92
100
  Object.defineProperty(exports, "getCompoundIndexes", { enumerable: true, get: function () { return indexes_1.getCompoundIndexes; } });
93
101
  Object.defineProperty(exports, "getFieldIndexes", { enumerable: true, get: function () { return indexes_1.getFieldIndexes; } });
102
+ // ── Optimistic Locking ──
103
+ var versionRegistry_1 = require("./database/versionRegistry");
104
+ Object.defineProperty(exports, "ParseVersionField", { enumerable: true, get: function () { return versionRegistry_1.ParseVersionField; } });
105
+ Object.defineProperty(exports, "VersionRegistry", { enumerable: true, get: function () { return versionRegistry_1.VersionRegistry; } });
106
+ var versionedMongoAdapter_1 = require("./database/versionedMongoAdapter");
107
+ Object.defineProperty(exports, "createVersionedMongoAdapter", { enumerable: true, get: function () { return versionedMongoAdapter_1.createVersionedMongoAdapter; } });
108
+ Object.defineProperty(exports, "VERSION_CONFLICT", { enumerable: true, get: function () { return versionedMongoAdapter_1.VERSION_CONFLICT; } });
109
+ Object.defineProperty(exports, "VERSION_CONFLICT_MESSAGE", { enumerable: true, get: function () { return versionedMongoAdapter_1.VERSION_CONFLICT_MESSAGE; } });
110
+ // ── Transactions ──
111
+ var context_1 = require("./transactions/context");
112
+ Object.defineProperty(exports, "Transactional", { enumerable: true, get: function () { return context_1.Transactional; } });
113
+ Object.defineProperty(exports, "withTransaction", { enumerable: true, get: function () { return context_1.withTransaction; } });
114
+ Object.defineProperty(exports, "inTransaction", { enumerable: true, get: function () { return context_1.inTransaction; } });
115
+ Object.defineProperty(exports, "currentSession", { enumerable: true, get: function () { return context_1.currentSession; } });
116
+ Object.defineProperty(exports, "useTransactionAdapter", { enumerable: true, get: function () { return context_1.useTransactionAdapter; } });
117
+ Object.defineProperty(exports, "CONFLICT", { enumerable: true, get: function () { return context_1.CONFLICT; } });
118
+ Object.defineProperty(exports, "CONFLICT_MESSAGE", { enumerable: true, get: function () { return context_1.CONFLICT_MESSAGE; } });
119
+ var ambientSession_1 = require("./transactions/ambientSession");
120
+ Object.defineProperty(exports, "withAmbientSession", { enumerable: true, get: function () { return ambientSession_1.withAmbientSession; } });
121
+ Object.defineProperty(exports, "NO_AMBIENT_TRANSACTION", { enumerable: true, get: function () { return ambientSession_1.NO_AMBIENT_TRANSACTION; } });
94
122
  // ── Swagger ──
95
123
  var swaggerRegistry_1 = require("./swagger/swaggerRegistry");
96
124
  Object.defineProperty(exports, "SwaggerRegistry", { enumerable: true, get: function () { return swaggerRegistry_1.SwaggerRegistry; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;;;;AAE/D,mBAAmB;AACnB,gEAAiI;AAAxH,6GAAA,UAAU,OAAA;AAAE,6GAAA,UAAU,OAAA;AAAE,sHAAA,mBAAmB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAG1F,8DAA0G;AAAjG,+GAAA,aAAa,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AACpE,4DAAmE;AAA1D,sHAAA,qBAAqB,OAAA;AAE9B,kEAGoF;AAH3E,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAC9E,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,+GAAA,WAAW,OAAA;AACpC,kHAAA,cAAc,OAAA;AAAE,iHAAA,aAAa,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAChE,iHAAA,aAAa,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,8GAAA,UAAU,OAAA;AAC5C,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AAExB,4DAA8E;AAArE,qGAAA,IAAI,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,6GAAA,YAAY,OAAA;AAEzC,8DAAmE;AAA1D,uGAAA,KAAK,OAAA;AAAE,+GAAA,aAAa,OAAA;AAE7B,cAAc;AACd,8DAA4D;AAAnD,yGAAA,UAAU,OAAA;AASnB,mBAAmB;AACnB,sEAA0H;AAAjH,iHAAA,cAAc,OAAA;AAAE,kHAAA,eAAe,OAAA;AAAE,gHAAA,aAAa,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAE7E,eAAe;AACf,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAElB,0BAA0B;AAC1B,mCAA2C;AAAlC,mGAAA,YAAY,OAAA;AACrB,+CAAwE;AAA/D,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA;AAAE,4GAAA,eAAe,OAAA;AAG5C,kBAAkB;AAClB,yCACqG;AAD5F,oGAAA,UAAU,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC3D,gHAAA,sBAAsB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,+FAAA,KAAK,OAAA;AAC5E,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AAEpB,mBAAmB;AACnB,sDACqF;AAD5E,oHAAA,sBAAsB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAAE,4GAAA,cAAc,OAAA;AACnE,oHAAA,sBAAsB,OAAA;AAAE,uHAAA,yBAAyB,OAAA;AACnD,oDAAwD;AAA/C,2GAAA,cAAc,OAAA;AAEvB,iBAAiB;AACjB,4CAAuD;AAA9C,4GAAA,kBAAkB,OAAA;AAE3B,8CAAgI;AAAvH,0GAAA,eAAe,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAEnG,gBAAgB;AAChB,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AAExB,qDAA4E;AAAnE,kHAAA,mBAAmB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAC5C,yCAA+C;AAAtC,qGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;;;;AAE/D,mBAAmB;AACnB,gEAAiI;AAAxH,6GAAA,UAAU,OAAA;AAAE,6GAAA,UAAU,OAAA;AAAE,sHAAA,mBAAmB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAG1F,8DAA0G;AAAjG,+GAAA,aAAa,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AACpE,4DAAmE;AAA1D,sHAAA,qBAAqB,OAAA;AAE9B,kEAKoF;AAL3E,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,6GAAA,SAAS,OAAA;AAC9E,+GAAA,WAAW,OAAA;AAAE,8GAAA,UAAU,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,8HAAA,0BAA0B,OAAA;AAChE,kHAAA,cAAc,OAAA;AAAE,iHAAA,aAAa,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAChE,kHAAA,cAAc,OAAA;AAAE,iHAAA,aAAa,OAAA;AAC7B,oHAAA,gBAAgB,OAAA;AAAE,mHAAA,eAAe,OAAA;AACjC,iHAAA,aAAa,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,8GAAA,UAAU,OAAA;AAC5C,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AAExB,4DAA8E;AAArE,qGAAA,IAAI,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,6GAAA,YAAY,OAAA;AAEzC,8DAAmE;AAA1D,uGAAA,KAAK,OAAA;AAAE,+GAAA,aAAa,OAAA;AAE7B,cAAc;AACd,8DAA4D;AAAnD,yGAAA,UAAU,OAAA;AASnB,mBAAmB;AACnB,sEAA0H;AAAjH,iHAAA,cAAc,OAAA;AAAE,kHAAA,eAAe,OAAA;AAAE,gHAAA,aAAa,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAE7E,eAAe;AACf,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAElB,0BAA0B;AAC1B,mCAA2C;AAAlC,mGAAA,YAAY,OAAA;AACrB,6CAA0D;AAAjD,wGAAA,YAAY,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAC/B,+CAAwE;AAA/D,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA;AAAE,4GAAA,eAAe,OAAA;AAG5C,kBAAkB;AAClB,yCACqG;AAD5F,oGAAA,UAAU,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC3D,gHAAA,sBAAsB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAAE,+FAAA,KAAK,OAAA;AAC5E,uDAAoD;AAA3C,4GAAA,WAAW,OAAA;AAEpB,mBAAmB;AACnB,sDACqF;AAD5E,oHAAA,sBAAsB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAAE,4GAAA,cAAc,OAAA;AACnE,oHAAA,sBAAsB,OAAA;AAAE,uHAAA,yBAAyB,OAAA;AACnD,oDAAwD;AAA/C,2GAAA,cAAc,OAAA;AAEvB,iBAAiB;AACjB,4CAAuD;AAA9C,4GAAA,kBAAkB,OAAA;AAE3B,8CAAgI;AAAvH,0GAAA,eAAe,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAEnG,2BAA2B;AAC3B,8DAAgF;AAAvE,oHAAA,iBAAiB,OAAA;AAAE,kHAAA,eAAe,OAAA;AAC3C,0EAA2H;AAAlH,oIAAA,2BAA2B,OAAA;AAAE,yHAAA,gBAAgB,OAAA;AAAE,iIAAA,wBAAwB,OAAA;AAGhF,qBAAqB;AACrB,kDACoF;AAD3E,wGAAA,aAAa,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,wGAAA,aAAa,OAAA;AAAE,yGAAA,cAAc,OAAA;AACpE,gHAAA,qBAAqB,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAEnD,gEAA2F;AAAlF,oHAAA,kBAAkB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAEnD,gBAAgB;AAChB,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AAExB,qDAA4E;AAAnE,kHAAA,mBAAmB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAC5C,yCAA+C;AAAtC,qGAAA,YAAY,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAoBnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAgDnB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,QAUzB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,qDAwBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAWnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAWnE"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAoBnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,qDAgDnB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,QAUzB;AAwCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,qDAwBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,QAWnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAWnE"}
@@ -100,6 +100,39 @@ function extractMasterKey(req, res, buf, encoding) {
100
100
  throw res.status(400).json({ message: 'Error parsing JSON body' });
101
101
  }
102
102
  }
103
+ /**
104
+ * Whether this request carries the master key.
105
+ *
106
+ * Two channels. The **header** is the one to use: it is where every Parse client
107
+ * already puts it, it never lands in a request-body log, and it survives a route
108
+ * that does not parse a body at all.
109
+ *
110
+ * The **body** channel is the original one and still works, so nothing that
111
+ * relies on it breaks — but it is deprecated and will be removed. A secret in a
112
+ * JSON body is a secret in every log, proxy and error report that ever echoes
113
+ * that body.
114
+ *
115
+ * An unset `masterKey` env var never matches, so a misconfigured server fails
116
+ * closed rather than letting every request through as master.
117
+ */
118
+ function hasMasterKey(req) {
119
+ const expected = process.env.masterKey;
120
+ if (!expected)
121
+ return false;
122
+ if (req.headers?.['x-parse-master-key'] === expected)
123
+ return true;
124
+ if (req['x-master-key'] === expected) {
125
+ if (!warnedBodyMasterKey) {
126
+ warnedBodyMasterKey = true;
127
+ console.warn('[Security] Master key received in the request body. This is deprecated ' +
128
+ 'and will be removed — send it as the X-Parse-Master-Key header instead. ' +
129
+ 'A key in the body ends up in any log that records request bodies.');
130
+ }
131
+ return true;
132
+ }
133
+ return false;
134
+ }
135
+ let warnedBodyMasterKey = false;
103
136
  /**
104
137
  * Restricts access to internal Parse Server endpoints.
105
138
  * Only entity routes, system routes, and rewritten /functions routes pass through.
@@ -108,7 +141,7 @@ function extractMasterKey(req, res, buf, encoding) {
108
141
  function restrictRoutes(req, res, next) {
109
142
  const systemRoutes = ['/health', '/serverInfo', '/files'];
110
143
  // Master key bypasses all restrictions
111
- if (req['x-master-key'] === process.env.masterKey) {
144
+ if (hasMasterKey(req)) {
112
145
  return next();
113
146
  }
114
147
  // Allow system routes
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../src/middleware/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAgC1C;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAiCT"}
1
+ {"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../src/middleware/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAuC1C;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAiCT"}
@@ -4,7 +4,7 @@ exports.checkRateLimit = checkRateLimit;
4
4
  // Map<functionName, Map<clientKey, RateLimitEntry>>
5
5
  const store = new Map();
6
6
  // Cleanup old entries every 5 minutes
7
- setInterval(() => {
7
+ const cleanupTimer = setInterval(() => {
8
8
  const now = Date.now();
9
9
  for (const [fnName, clients] of store) {
10
10
  for (const [key, entry] of clients) {
@@ -17,6 +17,12 @@ setInterval(() => {
17
17
  }
18
18
  }
19
19
  }, 5 * 60 * 1000);
20
+ // A sweep of an in-memory map is never a reason to hold the process open.
21
+ // Without this, merely importing the kit keeps the event loop alive forever —
22
+ // a seed script, a migration or a Jest run would hang instead of exiting.
23
+ // The sweep still runs for as long as something else is keeping the process up,
24
+ // which is the only time it has anything to do.
25
+ cleanupTimer.unref();
20
26
  /**
21
27
  * Get client key — session token if available, fallback to IP.
22
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/middleware/rateLimit.ts"],"names":[],"mappings":";;AAoCA,wCAsCC;AAnED,oDAAoD;AACpD,MAAM,KAAK,GAA6C,IAAI,GAAG,EAAE,CAAC;AAElE,sCAAsC;AACtC,WAAW,CAAC,GAAG,EAAE;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAElB;;GAEG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,OAAQ,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAY,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;AACjF,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAC5B,GAAY,EACZ,GAAa,EACb,YAAoB,EACpB,MAAyC;IAEzC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,6BAA6B;IAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;IAEzC,6BAA6B;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,CAAC,UAAU;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAC7B,cAAc;QACd,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,CAAC,UAAU;IACzB,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,OAAO,EAAE,mCAAmC,UAAU,WAAW;QACjE,UAAU;KACX,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,CAAC,UAAU;AAC1B,CAAC"}
1
+ {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/middleware/rateLimit.ts"],"names":[],"mappings":";;AA2CA,wCAsCC;AA1ED,oDAAoD;AACpD,MAAM,KAAK,GAA6C,IAAI,GAAG,EAAE,CAAC;AAElE,sCAAsC;AACtC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAElB,0EAA0E;AAC1E,8EAA8E;AAC9E,0EAA0E;AAC1E,gFAAgF;AAChF,gDAAgD;AAChD,YAAY,CAAC,KAAK,EAAE,CAAC;AAErB;;GAEG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,OAAQ,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAY,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;AACjF,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAC5B,GAAY,EACZ,GAAa,EACb,YAAoB,EACpB,MAAyC;IAEzC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,6BAA6B;IAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;IAEzC,6BAA6B;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,CAAC,UAAU;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAC7B,cAAc;QACd,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,CAAC,UAAU;IACzB,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,OAAO,EAAE,mCAAmC,UAAU,WAAW;QACjE,UAAU;KACX,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,CAAC,UAAU;AAC1B,CAAC"}
@@ -3,7 +3,11 @@ import { SwaggerConfig } from './swaggerSpec';
3
3
  export { SwaggerRegistry } from './swaggerRegistry';
4
4
  export { generateSwaggerSpec, getSwaggerJson } from './swaggerSpec';
5
5
  /**
6
- * Setup Swagger UI for the Express app
6
+ * Setup Swagger UI for the Express app.
7
+ *
8
+ * The spec itself has no dependencies, so `{path}/json` is served whether or not
9
+ * the UI package is installed — a missing `swagger-ui-express` costs you the
10
+ * browser page, not the document.
7
11
  */
8
12
  export declare function setupSwagger(app: Express, config: SwaggerConfig, path?: string): void;
9
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAsB,aAAa,EAAC,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAElE;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,MAAoB,QA0B3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAsB,aAAa,EAAC,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAqBlE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,MAAoB,QAkC3B"}
@@ -1,11 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.getSwaggerJson = exports.generateSwaggerSpec = exports.SwaggerRegistry = void 0;
7
4
  exports.setupSwagger = setupSwagger;
8
- const swagger_ui_express_1 = __importDefault(require("swagger-ui-express"));
9
5
  const swaggerSpec_1 = require("./swaggerSpec");
10
6
  var swaggerRegistry_1 = require("./swaggerRegistry");
11
7
  Object.defineProperty(exports, "SwaggerRegistry", { enumerable: true, get: function () { return swaggerRegistry_1.SwaggerRegistry; } });
@@ -13,18 +9,47 @@ var swaggerSpec_2 = require("./swaggerSpec");
13
9
  Object.defineProperty(exports, "generateSwaggerSpec", { enumerable: true, get: function () { return swaggerSpec_2.generateSwaggerSpec; } });
14
10
  Object.defineProperty(exports, "getSwaggerJson", { enumerable: true, get: function () { return swaggerSpec_2.getSwaggerJson; } });
15
11
  /**
16
- * Setup Swagger UI for the Express app
12
+ * `swagger-ui-express` is optional, so it is reached for only when the UI is
13
+ * actually being mounted.
14
+ *
15
+ * It used to be a top-level import, which made it mandatory in practice: the
16
+ * package root re-exports `setupSwagger`, so importing anything at all from the
17
+ * kit loaded this module and threw `MODULE_NOT_FOUND` for a dependency the docs
18
+ * called optional. Requiring it here, the way `node-cron` is handled, makes the
19
+ * promise true.
20
+ */
21
+ function loadSwaggerUi() {
22
+ try {
23
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
24
+ return require('swagger-ui-express');
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ /**
31
+ * Setup Swagger UI for the Express app.
32
+ *
33
+ * The spec itself has no dependencies, so `{path}/json` is served whether or not
34
+ * the UI package is installed — a missing `swagger-ui-express` costs you the
35
+ * browser page, not the document.
17
36
  */
18
37
  function setupSwagger(app, config, path = '/api-docs') {
19
- console.log(path);
20
38
  // Generate spec dynamically (after all models and functions are loaded)
21
39
  const getSpec = () => (0, swaggerSpec_1.generateSwaggerSpec)(config);
22
40
  // Serve Swagger JSON BEFORE the UI middleware (so it doesn't get caught)
23
41
  app.get(`${path}/json`, (req, res) => {
24
42
  res.json(getSpec());
25
43
  });
44
+ console.log(`[Swagger] API spec available at ${path}/json`);
45
+ const swaggerUi = loadSwaggerUi();
46
+ if (!swaggerUi) {
47
+ console.warn(`[Swagger] swagger-ui-express not installed — serving the spec at ${path}/json only. ` +
48
+ 'Install it to get the browser UI.');
49
+ return;
50
+ }
26
51
  // Serve Swagger UI
27
- app.use(path, swagger_ui_express_1.default.serve, swagger_ui_express_1.default.setup(null, {
52
+ app.use(path, swaggerUi.serve, swaggerUi.setup(null, {
28
53
  swaggerOptions: {
29
54
  url: `${path}/json`,
30
55
  persistAuthorization: true,
@@ -32,6 +57,5 @@ function setupSwagger(app, config, path = '/api-docs') {
32
57
  customSiteTitle: config.title || 'API Documentation',
33
58
  }));
34
59
  console.log(`[Swagger] API documentation available at ${path}`);
35
- console.log(`[Swagger] API spec available at ${path}/json`);
36
60
  }
37
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":";;;;;;AAUA,oCA6BC;AAtCD,4EAA2C;AAC3C,+CAAiE;AAEjE,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,6CAAkE;AAA1D,kHAAA,mBAAmB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAE3C;;GAEG;AACH,SAAgB,YAAY,CAC1B,GAAY,EACZ,MAAqB,EACrB,OAAe,WAAW;IAE1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,wEAAwE;IACxE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;IAElD,yEAAyE;IACzE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,GAAG,CAAC,GAAG,CACL,IAAI,EACJ,4BAAS,CAAC,KAAK,EACf,4BAAS,CAAC,KAAK,CAAC,IAAI,EAAE;QACpB,cAAc,EAAE;YACd,GAAG,EAAE,GAAG,IAAI,OAAO;YACnB,oBAAoB,EAAE,IAAI;SAC3B;QACD,eAAe,EAAE,MAAM,CAAC,KAAK,IAAI,mBAAmB;KACrD,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,4CAA4C,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,OAAO,CAAC,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":";;;AAgCA,oCAqCC;AApED,+CAAiE;AAEjE,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,6CAAkE;AAA1D,kHAAA,mBAAmB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAE3C;;;;;;;;;GASG;AACH,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAC1B,GAAY,EACZ,MAAqB,EACrB,OAAe,WAAW;IAE1B,wEAAwE;IACxE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;IAElD,yEAAyE;IACzE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,OAAO,CAAC,CAAC;IAE5D,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,oEAAoE,IAAI,cAAc;YACpF,mCAAmC,CACtC,CAAC;QACF,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,GAAG,CAAC,GAAG,CACL,IAAI,EACJ,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE;QACpB,cAAc,EAAE;YACd,GAAG,EAAE,GAAG,IAAI,OAAO;YACnB,oBAAoB,EAAE,IAAI;SAC3B;QACD,eAAe,EAAE,MAAM,CAAC,KAAK,IAAI,mBAAmB;KACrD,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,4CAA4C,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Where each driver method keeps its options argument.
3
+ *
4
+ * Both the injection table and the allowlist: a method that is not here is
5
+ * passed through untouched, which is what keeps index management, change
6
+ * streams and `drop` out of a transaction.
7
+ *
8
+ * `estimatedDocumentCount` is left out **deliberately**. Parse's own
9
+ * `MongoCollection.count()` switches to it whenever the query is empty, and
10
+ * MongoDB refuses the `count` command inside a transaction — joining one would
11
+ * break every unfiltered count. The price is that such a count reads outside
12
+ * the transaction's snapshot, which is the lesser problem.
13
+ *
14
+ * Exported so the integration tests can verify, against the driver parse-server
15
+ * actually ships, that every position here is still where the options live.
16
+ */
17
+ export declare const OPTIONS_ARGUMENT: Readonly<Record<string, number>>;
18
+ /**
19
+ * Classes that must never be dragged into somebody's transaction.
20
+ *
21
+ * Parse writes these as a side effect of ordinary work — creating a class on
22
+ * first insert, recording an idempotency key — and they have to survive whether
23
+ * or not the work does. A rolled-back schema would be worse than useless.
24
+ */
25
+ export declare const NO_AMBIENT_TRANSACTION: ReadonlySet<string>;
26
+ type DriverCollection = Record<string, unknown>;
27
+ /**
28
+ * A driver collection that joins whatever transaction the caller is in.
29
+ *
30
+ * The session is read at **call** time rather than when the collection is
31
+ * wrapped, because one collection object serves every caller and only the call
32
+ * knows whose transaction it belongs to.
33
+ *
34
+ * A session already threaded through by hand wins, so Parse Server's own
35
+ * transactional paths keep working untouched.
36
+ */
37
+ export declare function withAmbientSession<T extends DriverCollection>(raw: T): T;
38
+ export {};
39
+ //# sourceMappingURL=ambientSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambientSession.d.ts","sourceRoot":"","sources":["../../src/transactions/ambientSession.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe7D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAMrD,CAAC;AAEH,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,gBAAgB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CA6BxE"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NO_AMBIENT_TRANSACTION = exports.OPTIONS_ARGUMENT = void 0;
4
+ exports.withAmbientSession = withAmbientSession;
5
+ const context_1 = require("./context");
6
+ /**
7
+ * Where each driver method keeps its options argument.
8
+ *
9
+ * Both the injection table and the allowlist: a method that is not here is
10
+ * passed through untouched, which is what keeps index management, change
11
+ * streams and `drop` out of a transaction.
12
+ *
13
+ * `estimatedDocumentCount` is left out **deliberately**. Parse's own
14
+ * `MongoCollection.count()` switches to it whenever the query is empty, and
15
+ * MongoDB refuses the `count` command inside a transaction — joining one would
16
+ * break every unfiltered count. The price is that such a count reads outside
17
+ * the transaction's snapshot, which is the lesser problem.
18
+ *
19
+ * Exported so the integration tests can verify, against the driver parse-server
20
+ * actually ships, that every position here is still where the options live.
21
+ */
22
+ exports.OPTIONS_ARGUMENT = {
23
+ updateOne: 2,
24
+ updateMany: 2,
25
+ findOneAndUpdate: 2,
26
+ findOneAndDelete: 1,
27
+ replaceOne: 2,
28
+ distinct: 2,
29
+ insertOne: 1,
30
+ insertMany: 1,
31
+ deleteOne: 1,
32
+ deleteMany: 1,
33
+ find: 1,
34
+ findOne: 1,
35
+ aggregate: 1,
36
+ countDocuments: 1,
37
+ };
38
+ /**
39
+ * Classes that must never be dragged into somebody's transaction.
40
+ *
41
+ * Parse writes these as a side effect of ordinary work — creating a class on
42
+ * first insert, recording an idempotency key — and they have to survive whether
43
+ * or not the work does. A rolled-back schema would be worse than useless.
44
+ */
45
+ exports.NO_AMBIENT_TRANSACTION = new Set([
46
+ '_SCHEMA',
47
+ '_Idempotency',
48
+ '_Hooks',
49
+ '_JobStatus',
50
+ '_GlobalConfig',
51
+ ]);
52
+ /**
53
+ * A driver collection that joins whatever transaction the caller is in.
54
+ *
55
+ * The session is read at **call** time rather than when the collection is
56
+ * wrapped, because one collection object serves every caller and only the call
57
+ * knows whose transaction it belongs to.
58
+ *
59
+ * A session already threaded through by hand wins, so Parse Server's own
60
+ * transactional paths keep working untouched.
61
+ */
62
+ function withAmbientSession(raw) {
63
+ return new Proxy(raw, {
64
+ get(target, property) {
65
+ const optionsIndex = exports.OPTIONS_ARGUMENT[property];
66
+ if (optionsIndex === undefined) {
67
+ const value = target[property];
68
+ return typeof value === 'function' ? value.bind(target) : value;
69
+ }
70
+ return (...args) => {
71
+ const session = (0, context_1.currentSession)();
72
+ if (session) {
73
+ const options = {
74
+ ...(args[optionsIndex] ?? {}),
75
+ };
76
+ options.session ?? (options.session = session);
77
+ if (options.session === session) {
78
+ // A transaction reads from the primary; anything else is refused.
79
+ delete options.readPreference;
80
+ }
81
+ args[optionsIndex] = options;
82
+ }
83
+ return target[property](...args);
84
+ };
85
+ },
86
+ });
87
+ }
88
+ //# sourceMappingURL=ambientSession.js.map