softkave-node-utils 0.1.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 (203) hide show
  1. package/README.md +3 -0
  2. package/build/src/contexts/SessionContext.d.ts +15 -0
  3. package/build/src/contexts/SessionContext.js +70 -0
  4. package/build/src/contexts/SessionContext.js.map +1 -0
  5. package/build/src/contexts/asyncLocalStorage.d.ts +27 -0
  6. package/build/src/contexts/asyncLocalStorage.js +115 -0
  7. package/build/src/contexts/asyncLocalStorage.js.map +1 -0
  8. package/build/src/contexts/config.d.ts +49 -0
  9. package/build/src/contexts/config.js +25 -0
  10. package/build/src/contexts/config.js.map +1 -0
  11. package/build/src/contexts/data/BaseMongoDataProvider.d.ts +21 -0
  12. package/build/src/contexts/data/BaseMongoDataProvider.js +157 -0
  13. package/build/src/contexts/data/BaseMongoDataProvider.js.map +1 -0
  14. package/build/src/contexts/data/MongoDataProviderUtils.d.ts +6 -0
  15. package/build/src/contexts/data/MongoDataProviderUtils.js +35 -0
  16. package/build/src/contexts/data/MongoDataProviderUtils.js.map +1 -0
  17. package/build/src/contexts/data/dataQueryToMongoQuery.d.ts +3 -0
  18. package/build/src/contexts/data/dataQueryToMongoQuery.js +85 -0
  19. package/build/src/contexts/data/dataQueryToMongoQuery.js.map +1 -0
  20. package/build/src/contexts/data/types.d.ts +114 -0
  21. package/build/src/contexts/data/types.js +15 -0
  22. package/build/src/contexts/data/types.js.map +1 -0
  23. package/build/src/contexts/data/utils.d.ts +2 -0
  24. package/build/src/contexts/data/utils.js +24 -0
  25. package/build/src/contexts/data/utils.js.map +1 -0
  26. package/build/src/contexts/email/SESEmailProviderContext.d.ts +9 -0
  27. package/build/src/contexts/email/SESEmailProviderContext.js +49 -0
  28. package/build/src/contexts/email/SESEmailProviderContext.js.map +1 -0
  29. package/build/src/contexts/email/types.d.ts +13 -0
  30. package/build/src/contexts/email/types.js +3 -0
  31. package/build/src/contexts/email/types.js.map +1 -0
  32. package/build/src/contexts/encryption/AWSSecretsManagerProvider.d.ts +12 -0
  33. package/build/src/contexts/encryption/AWSSecretsManagerProvider.js +51 -0
  34. package/build/src/contexts/encryption/AWSSecretsManagerProvider.js.map +1 -0
  35. package/build/src/contexts/encryption/MemorySecretsManagerProvider.d.ts +12 -0
  36. package/build/src/contexts/encryption/MemorySecretsManagerProvider.js +35 -0
  37. package/build/src/contexts/encryption/MemorySecretsManagerProvider.js.map +1 -0
  38. package/build/src/contexts/encryption/types.d.ts +29 -0
  39. package/build/src/contexts/encryption/types.js +3 -0
  40. package/build/src/contexts/encryption/types.js.map +1 -0
  41. package/build/src/contexts/globalUtils.d.ts +2 -0
  42. package/build/src/contexts/globalUtils.js +17 -0
  43. package/build/src/contexts/globalUtils.js.map +1 -0
  44. package/build/src/contexts/injection/injectables.d.ts +56 -0
  45. package/build/src/contexts/injection/injectables.js +26 -0
  46. package/build/src/contexts/injection/injectables.js.map +1 -0
  47. package/build/src/contexts/injection/keys.d.ts +22 -0
  48. package/build/src/contexts/injection/keys.js +33 -0
  49. package/build/src/contexts/injection/keys.js.map +1 -0
  50. package/build/src/contexts/injection/register.d.ts +33 -0
  51. package/build/src/contexts/injection/register.js +107 -0
  52. package/build/src/contexts/injection/register.js.map +1 -0
  53. package/build/src/contexts/logger/noop.d.ts +5 -0
  54. package/build/src/contexts/logger/noop.js +12 -0
  55. package/build/src/contexts/logger/noop.js.map +1 -0
  56. package/build/src/contexts/logger/types.d.ts +11 -0
  57. package/build/src/contexts/logger/types.js +8 -0
  58. package/build/src/contexts/logger/types.js.map +1 -0
  59. package/build/src/contexts/logger/utils.d.ts +2 -0
  60. package/build/src/contexts/logger/utils.js +15 -0
  61. package/build/src/contexts/logger/utils.js.map +1 -0
  62. package/build/src/contexts/semantic/DataSemanticDataAccessBaseProvider.d.ts +28 -0
  63. package/build/src/contexts/semantic/DataSemanticDataAccessBaseProvider.js +115 -0
  64. package/build/src/contexts/semantic/DataSemanticDataAccessBaseProvider.js.map +1 -0
  65. package/build/src/contexts/semantic/types.d.ts +48 -0
  66. package/build/src/contexts/semantic/types.js +3 -0
  67. package/build/src/contexts/semantic/types.js.map +1 -0
  68. package/build/src/contexts/semantic/utils.d.ts +16 -0
  69. package/build/src/contexts/semantic/utils.js +68 -0
  70. package/build/src/contexts/semantic/utils.js.map +1 -0
  71. package/build/src/contexts/types.d.ts +6 -0
  72. package/build/src/contexts/types.js +3 -0
  73. package/build/src/contexts/types.js.map +1 -0
  74. package/build/src/definitions/agent.d.ts +10 -0
  75. package/build/src/definitions/agent.js +3 -0
  76. package/build/src/definitions/agent.js.map +1 -0
  77. package/build/src/definitions/resource.d.ts +17 -0
  78. package/build/src/definitions/resource.js +3 -0
  79. package/build/src/definitions/resource.js.map +1 -0
  80. package/build/src/definitions/resourceTypes.d.ts +10 -0
  81. package/build/src/definitions/resourceTypes.js +19 -0
  82. package/build/src/definitions/resourceTypes.js.map +1 -0
  83. package/build/src/definitions/token.d.ts +17 -0
  84. package/build/src/definitions/token.js +10 -0
  85. package/build/src/definitions/token.js.map +1 -0
  86. package/build/src/endpoints/RequestData.d.ts +20 -0
  87. package/build/src/endpoints/RequestData.js +52 -0
  88. package/build/src/endpoints/RequestData.js.map +1 -0
  89. package/build/src/endpoints/constants.d.ts +20 -0
  90. package/build/src/endpoints/constants.js +24 -0
  91. package/build/src/endpoints/constants.js.map +1 -0
  92. package/build/src/endpoints/endpoints.d.ts +7 -0
  93. package/build/src/endpoints/endpoints.js +33 -0
  94. package/build/src/endpoints/endpoints.js.map +1 -0
  95. package/build/src/endpoints/endpoints.mddoc.d.ts +62 -0
  96. package/build/src/endpoints/endpoints.mddoc.js +437 -0
  97. package/build/src/endpoints/endpoints.mddoc.js.map +1 -0
  98. package/build/src/endpoints/extractors.d.ts +9 -0
  99. package/build/src/endpoints/extractors.js +24 -0
  100. package/build/src/endpoints/extractors.js.map +1 -0
  101. package/build/src/endpoints/jobs/types.d.ts +6 -0
  102. package/build/src/endpoints/jobs/types.js +3 -0
  103. package/build/src/endpoints/jobs/types.js.map +1 -0
  104. package/build/src/endpoints/pagination.d.ts +3 -0
  105. package/build/src/endpoints/pagination.js +27 -0
  106. package/build/src/endpoints/pagination.js.map +1 -0
  107. package/build/src/endpoints/types.d.ts +68 -0
  108. package/build/src/endpoints/types.js +13 -0
  109. package/build/src/endpoints/types.js.map +1 -0
  110. package/build/src/endpoints/utils.d.ts +23 -0
  111. package/build/src/endpoints/utils.js +131 -0
  112. package/build/src/endpoints/utils.js.map +1 -0
  113. package/build/src/endpoints/validation.d.ts +47 -0
  114. package/build/src/endpoints/validation.js +73 -0
  115. package/build/src/endpoints/validation.js.map +1 -0
  116. package/build/src/errors/OperationError.d.ts +20 -0
  117. package/build/src/errors/OperationError.js +38 -0
  118. package/build/src/errors/OperationError.js.map +1 -0
  119. package/build/src/errors/commonErrors.d.ts +24 -0
  120. package/build/src/errors/commonErrors.js +72 -0
  121. package/build/src/errors/commonErrors.js.map +1 -0
  122. package/build/src/errors/endpointErrors.d.ts +31 -0
  123. package/build/src/errors/endpointErrors.js +83 -0
  124. package/build/src/errors/endpointErrors.js.map +1 -0
  125. package/build/src/errors/messages.d.ts +11 -0
  126. package/build/src/errors/messages.js +27 -0
  127. package/build/src/errors/messages.js.map +1 -0
  128. package/build/src/errors/reusableErrors.d.ts +12 -0
  129. package/build/src/errors/reusableErrors.js +25 -0
  130. package/build/src/errors/reusableErrors.js.map +1 -0
  131. package/build/src/errors/sessionErrors.d.ts +18 -0
  132. package/build/src/errors/sessionErrors.js +60 -0
  133. package/build/src/errors/sessionErrors.js.map +1 -0
  134. package/build/src/index.d.ts +0 -0
  135. package/build/src/index.js +2 -0
  136. package/build/src/index.js.map +1 -0
  137. package/build/src/mddoc/jsSdkCodeGen.d.ts +7 -0
  138. package/build/src/mddoc/jsSdkCodeGen.js +546 -0
  139. package/build/src/mddoc/jsSdkCodeGen.js.map +1 -0
  140. package/build/src/mddoc/mddoc.d.ts +206 -0
  141. package/build/src/mddoc/mddoc.js +142 -0
  142. package/build/src/mddoc/mddoc.js.map +1 -0
  143. package/build/src/mddoc/restApiEndpointsInfoGen.d.ts +10 -0
  144. package/build/src/mddoc/restApiEndpointsInfoGen.js +92 -0
  145. package/build/src/mddoc/restApiEndpointsInfoGen.js.map +1 -0
  146. package/build/src/mddoc/restApiTableOfContentGen.d.ts +2 -0
  147. package/build/src/mddoc/restApiTableOfContentGen.js +51 -0
  148. package/build/src/mddoc/restApiTableOfContentGen.js.map +1 -0
  149. package/build/src/mongodb/connection.d.ts +26 -0
  150. package/build/src/mongodb/connection.js +50 -0
  151. package/build/src/mongodb/connection.js.map +1 -0
  152. package/build/src/mongodb/constants.d.ts +4 -0
  153. package/build/src/mongodb/constants.js +7 -0
  154. package/build/src/mongodb/constants.js.map +1 -0
  155. package/build/src/mongodb/utils.d.ts +20 -0
  156. package/build/src/mongodb/utils.js +26 -0
  157. package/build/src/mongodb/utils.js.map +1 -0
  158. package/build/src/testUtils/context/email/MockTestEmailProviderContext.d.ts +6 -0
  159. package/build/src/testUtils/context/email/MockTestEmailProviderContext.js +10 -0
  160. package/build/src/testUtils/context/email/MockTestEmailProviderContext.js.map +1 -0
  161. package/build/src/testUtils/context/email/NoopEmailProviderContext.d.ts +6 -0
  162. package/build/src/testUtils/context/email/NoopEmailProviderContext.js +11 -0
  163. package/build/src/testUtils/context/email/NoopEmailProviderContext.js.map +1 -0
  164. package/build/src/testUtils/context/email/TestSESEmailProviderContext.d.ts +8 -0
  165. package/build/src/testUtils/context/email/TestSESEmailProviderContext.js +14 -0
  166. package/build/src/testUtils/context/email/TestSESEmailProviderContext.js.map +1 -0
  167. package/build/src/testUtils/context/types.d.ts +9 -0
  168. package/build/src/testUtils/context/types.js +3 -0
  169. package/build/src/testUtils/context/types.js.map +1 -0
  170. package/build/src/testUtils/generate/utils.d.ts +37 -0
  171. package/build/src/testUtils/generate/utils.js +79 -0
  172. package/build/src/testUtils/generate/utils.js.map +1 -0
  173. package/build/src/testUtils/helpers/assertion.d.ts +25 -0
  174. package/build/src/testUtils/helpers/assertion.js +63 -0
  175. package/build/src/testUtils/helpers/assertion.js.map +1 -0
  176. package/build/src/testUtils/helpers/binary.d.ts +4 -0
  177. package/build/src/testUtils/helpers/binary.js +19 -0
  178. package/build/src/testUtils/helpers/binary.js.map +1 -0
  179. package/build/src/testUtils/helpers/error.d.ts +3 -0
  180. package/build/src/testUtils/helpers/error.js +43 -0
  181. package/build/src/testUtils/helpers/error.js.map +1 -0
  182. package/build/src/testUtils/helpers/mock.d.ts +2 -0
  183. package/build/src/testUtils/helpers/mock.js +15 -0
  184. package/build/src/testUtils/helpers/mock.js.map +1 -0
  185. package/build/src/testUtils/helpers/mongodb.d.ts +3 -0
  186. package/build/src/testUtils/helpers/mongodb.js +17 -0
  187. package/build/src/testUtils/helpers/mongodb.js.map +1 -0
  188. package/build/src/testUtils/helpers/testFns.d.ts +30 -0
  189. package/build/src/testUtils/helpers/testFns.js +96 -0
  190. package/build/src/testUtils/helpers/testFns.js.map +1 -0
  191. package/build/src/testUtils/testUtils.d.ts +13 -0
  192. package/build/src/testUtils/testUtils.js +50 -0
  193. package/build/src/testUtils/testUtils.js.map +1 -0
  194. package/build/src/utils/assertion.d.ts +2 -0
  195. package/build/src/utils/assertion.js +31 -0
  196. package/build/src/utils/assertion.js.map +1 -0
  197. package/build/src/utils/aws.d.ts +5 -0
  198. package/build/src/utils/aws.js +3 -0
  199. package/build/src/utils/aws.js.map +1 -0
  200. package/build/src/utils/streamToBuffer.d.ts +4 -0
  201. package/build/src/utils/streamToBuffer.js +19 -0
  202. package/build/src/utils/streamToBuffer.js.map +1 -0
  203. package/package.json +72 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Softkave Node Utils
2
+
3
+ **Work in progress!**
@@ -0,0 +1,15 @@
1
+ import { BaseTokenData, TokenAccessScope, TokenSubjectDefault } from '../definitions/token';
2
+ export interface SessionContextType {
3
+ decodeToken: (token: string) => BaseTokenData<TokenSubjectDefault>;
4
+ tokenContainsScope: (tokenData: {
5
+ scope: string[];
6
+ }, expectedTokenScopes: TokenAccessScope | TokenAccessScope[]) => boolean;
7
+ encodeToken: (tokenId: string, expires?: string | Date | number | null, issuedAt?: string | Date | number | null) => string;
8
+ }
9
+ export default class SessionContext implements SessionContextType {
10
+ decodeToken: (token: string) => BaseTokenData<TokenSubjectDefault>;
11
+ tokenContainsScope: (tokenData: {
12
+ scope: string[];
13
+ }, expectedTokenScopes: TokenAccessScope | TokenAccessScope[]) => boolean;
14
+ encodeToken: (tokenId: string, expires?: string | Date | number | null, issuedAt?: string | Date | number | null) => string;
15
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const date_fns_1 = require("date-fns");
27
+ const jwt = __importStar(require("jsonwebtoken"));
28
+ const lodash_1 = require("lodash");
29
+ const softkave_js_utils_1 = require("softkave-js-utils");
30
+ const token_1 = require("../definitions/token");
31
+ const assertion_1 = require("../utils/assertion");
32
+ const injectables_1 = require("./injection/injectables");
33
+ const sessionErrors_1 = require("../errors/sessionErrors");
34
+ class SessionContext {
35
+ constructor() {
36
+ this.decodeToken = (token) => {
37
+ const suppliedConfig = injectables_1.kUtilsInjectables.suppliedConfig();
38
+ (0, assertion_1.appAssert)(suppliedConfig.jwtSecret);
39
+ const tokenData = (0, softkave_js_utils_1.cast)(jwt.verify(token, suppliedConfig.jwtSecret, { complete: false }));
40
+ if (tokenData.version < token_1.kCurrentJWTTokenVersion) {
41
+ throw new sessionErrors_1.CredentialsExpiredError();
42
+ }
43
+ return tokenData;
44
+ };
45
+ this.tokenContainsScope = (tokenData, expectedTokenScopes) => {
46
+ var _a;
47
+ const tokenScopes = (_a = tokenData.scope) !== null && _a !== void 0 ? _a : [];
48
+ const expectedTokenScopesMap = (0, softkave_js_utils_1.indexArray)((0, softkave_js_utils_1.convertToArray)(expectedTokenScopes), { reducer: () => true, indexer: lodash_1.identity });
49
+ const hasTokenAccessScope = !!tokenScopes.find(nextScope => expectedTokenScopesMap[nextScope]);
50
+ return hasTokenAccessScope;
51
+ };
52
+ this.encodeToken = (tokenId, expires, issuedAt) => {
53
+ const suppliedConfig = injectables_1.kUtilsInjectables.suppliedConfig();
54
+ (0, assertion_1.appAssert)(suppliedConfig.jwtSecret);
55
+ const payload = {
56
+ version: token_1.kCurrentJWTTokenVersion,
57
+ sub: { id: tokenId },
58
+ };
59
+ if (expires) {
60
+ payload.exp = (0, date_fns_1.millisecondsToSeconds)((0, date_fns_1.toDate)(expires).valueOf());
61
+ }
62
+ if (issuedAt) {
63
+ payload.iat = (0, date_fns_1.millisecondsToSeconds)((0, date_fns_1.toDate)(issuedAt).valueOf());
64
+ }
65
+ return jwt.sign(payload, suppliedConfig.jwtSecret);
66
+ };
67
+ }
68
+ }
69
+ exports.default = SessionContext;
70
+ //# sourceMappingURL=SessionContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionContext.js","sourceRoot":"","sources":["../../../src/contexts/SessionContext.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuD;AACvD,kDAAoC;AACpC,mCAAgC;AAChC,yDAAmE;AACnE,gDAK8B;AAC9B,kDAA6C;AAC7C,yDAA0D;AAC1D,2DAAgE;AAehE,MAAqB,cAAc;IAAnC;QACE,gBAAW,GAAG,CAAC,KAAa,EAAE,EAAE;YAC9B,MAAM,cAAc,GAAG,+BAAiB,CAAC,cAAc,EAAE,CAAC;YAC1D,IAAA,qBAAS,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAEpC,MAAM,SAAS,GAAG,IAAA,wBAAI,EACpB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC,CAC/D,CAAC;YAEF,IAAI,SAAS,CAAC,OAAO,GAAG,+BAAuB,EAAE;gBAC/C,MAAM,IAAI,uCAAuB,EAAE,CAAC;aACrC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QAEF,uBAAkB,GAAG,CACnB,SAA4B,EAC5B,mBAA0D,EAC1D,EAAE;;YACF,MAAM,WAAW,GAAG,MAAA,SAAS,CAAC,KAAK,mCAAI,EAAE,CAAC;YAC1C,MAAM,sBAAsB,GAAG,IAAA,8BAAU,EACvC,IAAA,kCAAc,EAAC,mBAAmB,CAAC,EACnC,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAQ,EAAC,CACzC,CAAC;YACF,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAC5C,SAAS,CAAC,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAC/C,CAAC;YACF,OAAO,mBAAmB,CAAC;QAC7B,CAAC,CAAC;QAEF,gBAAW,GAAG,CACZ,OAAe,EACf,OAAuC,EACvC,QAAwC,EACxC,EAAE;YACF,MAAM,cAAc,GAAG,+BAAiB,CAAC,cAAc,EAAE,CAAC;YAC1D,IAAA,qBAAS,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAEpC,MAAM,OAAO,GAAgD;gBAC3D,OAAO,EAAE,+BAAuB;gBAChC,GAAG,EAAE,EAAC,EAAE,EAAE,OAAO,EAAC;aACnB,CAAC;YAEF,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,GAAG,GAAG,IAAA,gCAAqB,EAAC,IAAA,iBAAM,EAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aAChE;YAED,IAAI,QAAQ,EAAE;gBACZ,OAAO,CAAC,GAAG,GAAG,IAAA,gCAAqB,EAAC,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACjE;YAED,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC;CAAA;AAtDD,iCAsDC"}
@@ -0,0 +1,27 @@
1
+ /// <reference types="node" />
2
+ import { AsyncLocalStorage } from 'async_hooks';
3
+ import { AnyFn, AnyObject, DisposablesStore } from 'softkave-js-utils';
4
+ import { ReadonlyDeep } from 'type-fest';
5
+ export type FimidaraAsyncLocalStorageStore = Record<string, unknown>;
6
+ export type FimidaraAsyncLocalStorage = AsyncLocalStorage<FimidaraAsyncLocalStorageStore>;
7
+ export interface AsyncLocalStorageUtils {
8
+ run: <TFn extends AnyFn>(cb: TFn, store?: AnyObject) => Promise<ReturnType<TFn>>;
9
+ inheritAndRun: <TFn extends AnyFn>(cb: TFn, store?: AnyObject) => Promise<ReturnType<TFn>>;
10
+ get: <T = unknown>(key: string) => T | undefined;
11
+ getStore: () => ReadonlyDeep<AnyObject>;
12
+ set: <T = unknown>(key: string, value: T) => T;
13
+ /** Set if `key` does not exist in store, or use `run()` inheriting parent
14
+ * store to shadow set `key`. Shadow setting means shadow keys are stored in a
15
+ * separate store so they don't collide, but other keys are store in the
16
+ * closest real parent store. */
17
+ shadowSet: <TFn extends AnyFn>(key: string, value: unknown, cb: TFn) => Promise<ReturnType<TFn>>;
18
+ /** Like `shadowSet` but creates a shadow store whether key exists or not. */
19
+ shadowSetForce: <TFn extends AnyFn>(key: string, value: unknown, cb: TFn) => Promise<ReturnType<TFn>>;
20
+ delete: (key: string) => void;
21
+ disposables: () => DisposablesStore;
22
+ }
23
+ export declare const kAsyncLocalStorageUtils: AsyncLocalStorageUtils;
24
+ export declare const kAsyncLocalStorageKeys: {
25
+ txn: string;
26
+ disposables: string;
27
+ };
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kAsyncLocalStorageKeys = exports.kAsyncLocalStorageUtils = void 0;
4
+ const async_hooks_1 = require("async_hooks");
5
+ const lodash_1 = require("lodash");
6
+ const softkave_js_utils_1 = require("softkave-js-utils");
7
+ const injectables_1 = require("./injection/injectables");
8
+ const asyncLocalStorage = new async_hooks_1.AsyncLocalStorage();
9
+ const kInternalKeys = {
10
+ realStore: Symbol.for('realStore'),
11
+ };
12
+ function getAsyncLocalStore() {
13
+ var _a;
14
+ return (_a = asyncLocalStorage.getStore()) !== null && _a !== void 0 ? _a : {};
15
+ }
16
+ function startShadowStore(realStore) {
17
+ const shadowStore = {};
18
+ shadowStore[kInternalKeys.realStore] = realStore;
19
+ return shadowStore;
20
+ }
21
+ /** Returns immedaite real store from shadow store. The real store returned may
22
+ * itself be a shadow of another store. */
23
+ function getImmediateRealStore(shadowStore) {
24
+ return shadowStore ? shadowStore[kInternalKeys.realStore] : undefined;
25
+ }
26
+ function shadowGet(store, key) {
27
+ let item;
28
+ for (; store && !item; store = getImmediateRealStore(store)) {
29
+ item = (0, lodash_1.get)(store, key);
30
+ }
31
+ return item;
32
+ }
33
+ function getDeepestRealStore(store) {
34
+ let realStore;
35
+ for (; store; store = getImmediateRealStore(store)) {
36
+ realStore = store;
37
+ }
38
+ return realStore;
39
+ }
40
+ function shadowSet(store, key, value) {
41
+ const realStore = getDeepestRealStore(store);
42
+ if (realStore) {
43
+ (0, lodash_1.set)(realStore, key, value);
44
+ }
45
+ }
46
+ function shadowDelete(store, key) {
47
+ const realStore = getDeepestRealStore(store);
48
+ if (realStore) {
49
+ delete realStore[key];
50
+ }
51
+ }
52
+ function isShadowStore(store) {
53
+ return !!getImmediateRealStore(store);
54
+ }
55
+ exports.kAsyncLocalStorageUtils = {
56
+ run: (cb, store = {}) => {
57
+ return asyncLocalStorage.run(store, async () => {
58
+ try {
59
+ return await cb();
60
+ }
61
+ finally {
62
+ if (!isShadowStore(getAsyncLocalStore())) {
63
+ exports.kAsyncLocalStorageUtils.disposables().disposeAll();
64
+ }
65
+ }
66
+ });
67
+ },
68
+ inheritAndRun: (cb, store = {}) => {
69
+ return exports.kAsyncLocalStorageUtils.run(cb, (0, softkave_js_utils_1.mergeObjects)(store, getAsyncLocalStore(), {
70
+ arrayUpdateStrategy: 'replace',
71
+ }));
72
+ },
73
+ get: (key) => {
74
+ var _a;
75
+ return shadowGet((_a = asyncLocalStorage.getStore()) !== null && _a !== void 0 ? _a : {}, key);
76
+ },
77
+ set: (key, value) => {
78
+ var _a;
79
+ shadowSet((_a = asyncLocalStorage.getStore()) !== null && _a !== void 0 ? _a : {}, key, value);
80
+ return value;
81
+ },
82
+ delete: (key) => {
83
+ var _a;
84
+ // TODO: delete deep
85
+ const store = (_a = asyncLocalStorage.getStore()) !== null && _a !== void 0 ? _a : {};
86
+ shadowDelete(store, key);
87
+ },
88
+ disposables() {
89
+ return (this.get(exports.kAsyncLocalStorageKeys.disposables) ||
90
+ this.set(exports.kAsyncLocalStorageKeys.disposables, new softkave_js_utils_1.DisposablesStore(injectables_1.kUtilsInjectables.promises())));
91
+ },
92
+ getStore() {
93
+ var _a;
94
+ return (_a = asyncLocalStorage.getStore()) !== null && _a !== void 0 ? _a : {};
95
+ },
96
+ shadowSet: (key, value, cb) => {
97
+ if (exports.kAsyncLocalStorageUtils.get(key)) {
98
+ return exports.kAsyncLocalStorageUtils.shadowSetForce(key, value, cb);
99
+ }
100
+ else {
101
+ exports.kAsyncLocalStorageUtils.set(key, value);
102
+ return cb();
103
+ }
104
+ },
105
+ shadowSetForce: async (key, value, cb) => {
106
+ const shadowStore = startShadowStore(getAsyncLocalStore());
107
+ (0, lodash_1.set)(shadowStore, key, value);
108
+ return await exports.kAsyncLocalStorageUtils.run(cb, shadowStore);
109
+ },
110
+ };
111
+ exports.kAsyncLocalStorageKeys = {
112
+ txn: 'txn',
113
+ disposables: 'disposables',
114
+ };
115
+ //# sourceMappingURL=asyncLocalStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncLocalStorage.js","sourceRoot":"","sources":["../../../src/contexts/asyncLocalStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { LoggerType } from 'softkave-js-utils';
2
+ import { ValueOf } from 'type-fest';
3
+ import { AWSConfig } from '../utils/aws';
4
+ export declare const kFimidaraConfigEmailProvider: {
5
+ readonly ses: "ses";
6
+ readonly noop: "noop";
7
+ };
8
+ export type FimidaraConfigEmailProvider = ValueOf<typeof kFimidaraConfigEmailProvider>;
9
+ export declare const kFimidaraConfigSecretsManagerProvider: {
10
+ readonly awsSecretsManager: "awsSecretsManager";
11
+ readonly memory: "memory";
12
+ };
13
+ export type FimidaraConfigSecretsManagerProvider = ValueOf<typeof kFimidaraConfigSecretsManagerProvider>;
14
+ export declare const kFimidaraConfigDbType: {
15
+ readonly mongoDb: "mongoDb";
16
+ readonly noop: "noop";
17
+ };
18
+ export type FimidaraConfigDbType = ValueOf<typeof kFimidaraConfigDbType>;
19
+ export type FimidaraSuppliedConfig = Partial<{
20
+ clientDomain: string;
21
+ dbType: FimidaraConfigDbType;
22
+ mongoDbURI: string;
23
+ mongoDbDatabaseName: string;
24
+ jwtSecret: string;
25
+ exposeHttpServer: boolean;
26
+ httpPort: string;
27
+ exposeHttpsServer: boolean;
28
+ httpsPort: string;
29
+ httpsPublicKeyFilepath: string;
30
+ httpsPrivateKeyFilepath: string;
31
+ emailProvider: FimidaraConfigEmailProvider;
32
+ secretsManagerProvider: FimidaraConfigSecretsManagerProvider;
33
+ awsConfig: AWSConfig;
34
+ appName: string;
35
+ appDefaultEmailAddressFrom: string;
36
+ awsEmailEncoding: string;
37
+ dateFormat: string;
38
+ clientLoginLink: string;
39
+ clientSignupLink: string;
40
+ changePasswordLink: string;
41
+ verifyEmailLink: string;
42
+ test: {
43
+ awsConfig?: AWSConfig;
44
+ bucket?: string;
45
+ };
46
+ loggerType: LoggerType;
47
+ }>;
48
+ export type FimidaraConfig = FimidaraSuppliedConfig;
49
+ export declare function getSuppliedConfig(): FimidaraSuppliedConfig;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getSuppliedConfig = exports.kFimidaraConfigDbType = exports.kFimidaraConfigSecretsManagerProvider = exports.kFimidaraConfigEmailProvider = void 0;
7
+ const config_1 = __importDefault(require("config"));
8
+ exports.kFimidaraConfigEmailProvider = {
9
+ ses: 'ses',
10
+ noop: 'noop',
11
+ };
12
+ exports.kFimidaraConfigSecretsManagerProvider = {
13
+ awsSecretsManager: 'awsSecretsManager',
14
+ memory: 'memory',
15
+ };
16
+ exports.kFimidaraConfigDbType = {
17
+ mongoDb: 'mongoDb',
18
+ noop: 'noop',
19
+ };
20
+ function getSuppliedConfig() {
21
+ const envSuppliedConfig = config_1.default.util.toObject();
22
+ return envSuppliedConfig;
23
+ }
24
+ exports.getSuppliedConfig = getSuppliedConfig;
25
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/contexts/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAKf,QAAA,4BAA4B,GAAG;IAC1C,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACJ,CAAC;AAME,QAAA,qCAAqC,GAAG;IACnD,iBAAiB,EAAE,mBAAmB;IACtC,MAAM,EAAE,QAAQ;CACR,CAAC;AAME,QAAA,qBAAqB,GAAG;IACnC,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;CACJ,CAAC;AAoCX,SAAgB,iBAAiB;IAC/B,MAAM,iBAAiB,GAAG,gBAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAHD,8CAGC"}
@@ -0,0 +1,21 @@
1
+ import { AnyObject, Model } from 'mongoose';
2
+ import { BaseDataProvider, BulkOpItem, DataProviderOpParams, DataProviderQueryListParams, DataProviderQueryParams, DataQuery } from './types';
3
+ export declare abstract class BaseMongoDataProvider<T extends AnyObject, TQuery extends DataQuery<AnyObject> = DataQuery<T>> implements BaseDataProvider<T, TQuery> {
4
+ abstract throwNotFound: () => void;
5
+ model: Model<T>;
6
+ constructor(model: Model<T>);
7
+ insertItem: (item: T, otherProps?: DataProviderOpParams | undefined) => Promise<T>;
8
+ insertList: (items: T[], otherProps?: DataProviderOpParams | undefined) => Promise<void>;
9
+ getManyByQuery: (query: TQuery, otherProps?: DataProviderQueryListParams<T> | undefined) => Promise<T[]>;
10
+ getOneByQuery: (query: TQuery, otherProps?: DataProviderQueryParams<T> | undefined) => Promise<T | null>;
11
+ assertGetOneByQuery: (query: TQuery, otherProps?: DataProviderQueryParams<T> | undefined) => Promise<T>;
12
+ updateManyByQuery: (query: TQuery, data: Partial<T>, otherProps?: DataProviderOpParams | undefined) => Promise<void>;
13
+ updateOneByQuery: (query: TQuery, data: Partial<T>, otherProps?: DataProviderOpParams | undefined) => Promise<void>;
14
+ getAndUpdateOneByQuery: (query: TQuery, data: Partial<T>, otherProps?: DataProviderQueryParams<T> | undefined) => Promise<T>;
15
+ assertGetAndUpdateOneByQuery: (query: TQuery, data: Partial<T>, otherProps?: DataProviderQueryParams<T> | undefined) => Promise<T>;
16
+ existsByQuery: <ExtendedQueryType extends TQuery = TQuery>(query: ExtendedQueryType, otherProps?: DataProviderOpParams | undefined) => Promise<boolean>;
17
+ countByQuery: <ExtendedQueryType extends TQuery = TQuery>(query: ExtendedQueryType, otherProps?: DataProviderOpParams | undefined) => Promise<number>;
18
+ deleteManyByQuery: <ExtendedQueryType extends TQuery = TQuery>(query: ExtendedQueryType, otherProps?: DataProviderOpParams | undefined) => Promise<void>;
19
+ deleteOneByQuery: <ExtendedQueryType extends TQuery = TQuery>(query: ExtendedQueryType, otherProps?: DataProviderOpParams | undefined) => Promise<void>;
20
+ bulkWrite(ops: BulkOpItem<T>[], otherProps?: DataProviderOpParams | undefined): Promise<void>;
21
+ }
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseMongoDataProvider = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const types_1 = require("./types");
6
+ // eslint-disable-next-line node/no-extraneous-import
7
+ const dataQueryToMongoQuery_1 = require("./dataQueryToMongoQuery");
8
+ const utils_1 = require("./utils");
9
+ function getMongoQueryOptionsForOp(params) {
10
+ return { session: params === null || params === void 0 ? void 0 : params.txn, lean: true };
11
+ }
12
+ function getMongoBulkWriteOptions(params) {
13
+ return { session: params === null || params === void 0 ? void 0 : params.txn };
14
+ }
15
+ function getMongoQueryOptionsForOne(
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ params) {
18
+ return { ...getMongoQueryOptionsForOp(params), projection: params === null || params === void 0 ? void 0 : params.projection };
19
+ }
20
+ function getMongoQueryOptionsForMany(
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ params) {
23
+ const page = (0, utils_1.getPage)(params === null || params === void 0 ? void 0 : params.page);
24
+ const pageSize = (0, utils_1.getPageSize)(params === null || params === void 0 ? void 0 : params.pageSize, page);
25
+ const skip = (0, lodash_1.isNumber)(page) && (0, lodash_1.isNumber)(pageSize)
26
+ ? Math.max(page, 0) * pageSize
27
+ : undefined;
28
+ return {
29
+ ...getMongoQueryOptionsForOp(params),
30
+ skip,
31
+ limit: pageSize,
32
+ projection: params === null || params === void 0 ? void 0 : params.projection,
33
+ sort: params === null || params === void 0 ? void 0 : params.sort,
34
+ };
35
+ }
36
+ class BaseMongoDataProvider {
37
+ constructor(model) {
38
+ this.insertItem = async (item, otherProps) => {
39
+ await this.insertList([item], otherProps);
40
+ return item;
41
+ };
42
+ this.insertList = async (items, otherProps) => {
43
+ await this.model.insertMany(items, getMongoQueryOptionsForOp(otherProps));
44
+ };
45
+ this.getManyByQuery = async (query, otherProps) => {
46
+ const mongoQuery = (0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query);
47
+ const items = await this.model
48
+ .find(mongoQuery, otherProps === null || otherProps === void 0 ? void 0 : otherProps.projection, getMongoQueryOptionsForMany(otherProps))
49
+ .lean()
50
+ .exec();
51
+ return items;
52
+ };
53
+ this.getOneByQuery = async (query, otherProps) => {
54
+ const opts = getMongoQueryOptionsForOne(otherProps);
55
+ const mQuery = (0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query);
56
+ const item = await this.model
57
+ .findOne(mQuery, opts.projection, opts)
58
+ .lean()
59
+ .exec();
60
+ return item;
61
+ };
62
+ this.assertGetOneByQuery = async (query, otherProps) => {
63
+ const item = await this.getOneByQuery(query, otherProps);
64
+ if (!item)
65
+ this.throwNotFound();
66
+ return item;
67
+ };
68
+ this.updateManyByQuery = async (query, data, otherProps) => {
69
+ await this.model
70
+ .updateMany((0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query), data, getMongoQueryOptionsForOp(otherProps))
71
+ .exec();
72
+ };
73
+ this.updateOneByQuery = async (query, data, otherProps) => {
74
+ await this.model
75
+ .updateOne((0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query), data, getMongoQueryOptionsForOp(otherProps))
76
+ .exec();
77
+ };
78
+ this.getAndUpdateOneByQuery = async (query, data, otherProps) => {
79
+ const item = await this.model
80
+ .findOneAndUpdate((0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query), data, {
81
+ ...getMongoQueryOptionsForOne(otherProps),
82
+ new: true,
83
+ })
84
+ .exec();
85
+ return item;
86
+ };
87
+ this.assertGetAndUpdateOneByQuery = async (query, data, otherProps) => {
88
+ const item = await this.getAndUpdateOneByQuery(query, data, otherProps);
89
+ if (!item)
90
+ this.throwNotFound();
91
+ return item;
92
+ };
93
+ this.existsByQuery = async (query, otherProps) => {
94
+ return !!(await this.getOneByQuery(query, {
95
+ ...otherProps,
96
+ projection: '_id',
97
+ }));
98
+ };
99
+ this.countByQuery = async (query, otherProps) => {
100
+ return await this.model
101
+ .countDocuments((0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query), getMongoQueryOptionsForOp(otherProps))
102
+ .exec();
103
+ };
104
+ this.deleteManyByQuery = async (query, otherProps) => {
105
+ await this.model
106
+ .deleteMany((0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query), getMongoQueryOptionsForOp(otherProps))
107
+ .exec();
108
+ };
109
+ this.deleteOneByQuery = async (query, otherProps) => {
110
+ await this.model
111
+ .deleteOne((0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(query), getMongoQueryOptionsForOp(otherProps))
112
+ .exec();
113
+ };
114
+ this.model = model;
115
+ }
116
+ async bulkWrite(ops, otherProps) {
117
+ const mongoOps = [];
118
+ ops.forEach(op => {
119
+ let mongoOp = null;
120
+ switch (op.type) {
121
+ case types_1.BulkOpType.InsertOne:
122
+ mongoOp = { insertOne: { document: op.item } };
123
+ break;
124
+ case types_1.BulkOpType.UpdateOne:
125
+ mongoOp = {
126
+ updateOne: {
127
+ filter: (0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(op.query),
128
+ update: op.update,
129
+ upsert: op.upsert,
130
+ },
131
+ };
132
+ break;
133
+ case types_1.BulkOpType.UpdateMany:
134
+ mongoOp = {
135
+ updateMany: {
136
+ filter: (0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(op.query),
137
+ update: op.update,
138
+ },
139
+ };
140
+ break;
141
+ case types_1.BulkOpType.DeleteOne:
142
+ mongoOp = { deleteOne: { filter: (0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(op.query) } };
143
+ break;
144
+ case types_1.BulkOpType.DeleteMany:
145
+ mongoOp = { deleteMany: { filter: (0, dataQueryToMongoQuery_1.dataQueryToMongoQuery)(op.query) } };
146
+ break;
147
+ default: // do nothing
148
+ }
149
+ if (mongoOp) {
150
+ mongoOps.push(mongoOp);
151
+ }
152
+ });
153
+ await this.model.bulkWrite(mongoOps, getMongoBulkWriteOptions(otherProps));
154
+ }
155
+ }
156
+ exports.BaseMongoDataProvider = BaseMongoDataProvider;
157
+ //# sourceMappingURL=BaseMongoDataProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseMongoDataProvider.js","sourceRoot":"","sources":["../../../../src/contexts/data/BaseMongoDataProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ClientSession } from 'mongoose';
2
+ import { AnyFn } from 'softkave-js-utils';
3
+ import { DataProviderUtils } from './types';
4
+ export declare class MongoDataProviderUtils implements DataProviderUtils {
5
+ withTxn<TResult>(fn: AnyFn<[txn: ClientSession], Promise<TResult>>, reuseAsyncLocalTxn?: boolean, existingSession?: unknown): Promise<TResult>;
6
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MongoDataProviderUtils = void 0;
4
+ const connection_1 = require("../../mongodb/connection");
5
+ const assertion_1 = require("../../utils/assertion");
6
+ const asyncLocalStorage_1 = require("../asyncLocalStorage");
7
+ const injectables_1 = require("../injection/injectables");
8
+ class MongoDataProviderUtils {
9
+ async withTxn(fn, reuseAsyncLocalTxn = true, existingSession) {
10
+ let result = undefined;
11
+ if (!existingSession && reuseAsyncLocalTxn) {
12
+ existingSession = injectables_1.kUtilsInjectables
13
+ .asyncLocalStorage()
14
+ .get(asyncLocalStorage_1.kAsyncLocalStorageKeys.txn);
15
+ }
16
+ if (existingSession) {
17
+ (0, assertion_1.appAssert)((0, connection_1.isMongoClientSession)(existingSession));
18
+ result = await fn(existingSession);
19
+ }
20
+ else {
21
+ const connection = injectables_1.kUtilsInjectables.dbConnection().get();
22
+ (0, assertion_1.appAssert)((0, connection_1.isMongoConnection)(connection));
23
+ const session = await connection.startSession();
24
+ await session.withTransaction(async () => injectables_1.kUtilsInjectables
25
+ .asyncLocalStorage()
26
+ .shadowSetForce(asyncLocalStorage_1.kAsyncLocalStorageKeys.txn, session, async () => (result = await fn(session))));
27
+ await session.endSession();
28
+ }
29
+ // `connection.transaction` throws if error occurs so if the control flow
30
+ // gets here, `result` is set.
31
+ return result;
32
+ }
33
+ }
34
+ exports.MongoDataProviderUtils = MongoDataProviderUtils;
35
+ //# sourceMappingURL=MongoDataProviderUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoDataProviderUtils.js","sourceRoot":"","sources":["../../../../src/contexts/data/MongoDataProviderUtils.ts"],"names":[],"mappings":";;;AAEA,yDAGkC;AAClC,qDAAgD;AAChD,4DAA4D;AAC5D,0DAA2D;AAG3D,MAAa,sBAAsB;IACjC,KAAK,CAAC,OAAO,CACX,EAAiD,EACjD,kBAAkB,GAAG,IAAI,EACzB,eAAyB;QAEzB,IAAI,MAAM,GAAwB,SAAS,CAAC;QAE5C,IAAI,CAAC,eAAe,IAAI,kBAAkB,EAAE;YAC1C,eAAe,GAAG,+BAAiB;iBAChC,iBAAiB,EAAE;iBACnB,GAAG,CAAgB,0CAAsB,CAAC,GAAG,CAAC,CAAC;SACnD;QAED,IAAI,eAAe,EAAE;YACnB,IAAA,qBAAS,EAAC,IAAA,iCAAoB,EAAC,eAAe,CAAC,CAAC,CAAC;YACjD,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC;SACpC;aAAM;YACL,MAAM,UAAU,GAAG,+BAAiB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;YAC1D,IAAA,qBAAS,EAAC,IAAA,8BAAiB,EAAC,UAAU,CAAC,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;YAChD,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CACvC,+BAAiB;iBACd,iBAAiB,EAAE;iBACnB,cAAc,CACb,0CAAsB,CAAC,GAAG,EAC1B,OAAO,EACP,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CACzC,CACJ,CAAC;YACF,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;SAC5B;QAED,yEAAyE;QACzE,8BAA8B;QAC9B,OAAO,MAA4B,CAAC;IACtC,CAAC;CACF;AArCD,wDAqCC"}
@@ -0,0 +1,3 @@
1
+ import { AnyObject } from 'softkave-js-utils';
2
+ import { DataQuery } from './types';
3
+ export declare function dataQueryToMongoQuery<TQuery extends DataQuery<AnyObject>>(query: TQuery): TQuery;