@verana-labs/vs-agent-sdk 2.0.0-dev.8 → 2.0.0-pr.767.1

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 (173) hide show
  1. package/README.md +0 -2
  2. package/build/adminApi/AdminApiError.d.ts +28 -0
  3. package/build/adminApi/AdminApiError.js +60 -0
  4. package/build/adminApi/AdminApiError.js.map +1 -0
  5. package/build/adminApi/didcommModules.d.ts +2 -0
  6. package/build/adminApi/didcommModules.js +8 -0
  7. package/build/adminApi/didcommModules.js.map +1 -0
  8. package/build/adminApi/index.d.ts +4 -0
  9. package/build/adminApi/index.js +21 -0
  10. package/build/adminApi/index.js.map +1 -0
  11. package/build/adminApi/moduleEndpoint.d.ts +8 -0
  12. package/build/adminApi/moduleEndpoint.js +28 -0
  13. package/build/adminApi/moduleEndpoint.js.map +1 -0
  14. package/build/adminApi/pagination/PageDto.d.ts +7 -0
  15. package/build/adminApi/pagination/PageDto.js +50 -0
  16. package/build/adminApi/pagination/PageDto.js.map +1 -0
  17. package/build/adminApi/pagination/PaginationQueryDto.d.ts +11 -0
  18. package/build/adminApi/pagination/PaginationQueryDto.js +46 -0
  19. package/build/adminApi/pagination/PaginationQueryDto.js.map +1 -0
  20. package/build/adminApi/pagination/cursor.d.ts +28 -0
  21. package/build/adminApi/pagination/cursor.js +64 -0
  22. package/build/adminApi/pagination/cursor.js.map +1 -0
  23. package/build/adminApi/pagination/index.d.ts +4 -0
  24. package/build/adminApi/pagination/index.js +21 -0
  25. package/build/adminApi/pagination/index.js.map +1 -0
  26. package/build/adminApi/pagination/paginate.d.ts +27 -0
  27. package/build/adminApi/pagination/paginate.js +77 -0
  28. package/build/adminApi/pagination/paginate.js.map +1 -0
  29. package/build/agent/VsAgent.d.ts +17 -34
  30. package/build/agent/VsAgent.js +75 -205
  31. package/build/agent/VsAgent.js.map +1 -1
  32. package/build/agent/createVsAgent.d.ts +5 -6
  33. package/build/agent/createVsAgent.js +3 -5
  34. package/build/agent/createVsAgent.js.map +1 -1
  35. package/build/blockchain/AnonCredsTrustService.d.ts +62 -0
  36. package/build/blockchain/AnonCredsTrustService.js +256 -0
  37. package/build/blockchain/AnonCredsTrustService.js.map +1 -0
  38. package/build/blockchain/AuthorizationService.d.ts +5 -3
  39. package/build/blockchain/AuthorizationService.js +17 -29
  40. package/build/blockchain/AuthorizationService.js.map +1 -1
  41. package/build/blockchain/IndexerWebSocketService.d.ts +7 -1
  42. package/build/blockchain/IndexerWebSocketService.js +68 -36
  43. package/build/blockchain/IndexerWebSocketService.js.map +1 -1
  44. package/build/blockchain/VeranaChainService.d.ts +26 -19
  45. package/build/blockchain/VeranaChainService.js +136 -152
  46. package/build/blockchain/VeranaChainService.js.map +1 -1
  47. package/build/blockchain/VeranaIndexerService.d.ts +14 -1
  48. package/build/blockchain/VeranaIndexerService.js +122 -8
  49. package/build/blockchain/VeranaIndexerService.js.map +1 -1
  50. package/build/blockchain/handlers/authorizationHandlers.js +2 -2
  51. package/build/blockchain/handlers/authorizationHandlers.js.map +1 -1
  52. package/build/blockchain/handlers/defaultHandlers.js +6 -1
  53. package/build/blockchain/handlers/defaultHandlers.js.map +1 -1
  54. package/build/blockchain/handlers/index.d.ts +1 -0
  55. package/build/blockchain/handlers/index.js +1 -0
  56. package/build/blockchain/handlers/index.js.map +1 -1
  57. package/build/blockchain/handlers/selfIssuanceHandlers.d.ts +13 -0
  58. package/build/blockchain/handlers/selfIssuanceHandlers.js +76 -0
  59. package/build/blockchain/handlers/selfIssuanceHandlers.js.map +1 -0
  60. package/build/blockchain/handlers/stateMutations.d.ts +26 -3
  61. package/build/blockchain/handlers/stateMutations.js +317 -41
  62. package/build/blockchain/handlers/stateMutations.js.map +1 -1
  63. package/build/blockchain/index.d.ts +2 -0
  64. package/build/blockchain/index.js +2 -0
  65. package/build/blockchain/index.js.map +1 -1
  66. package/build/blockchain/indexerMappers.d.ts +3 -0
  67. package/build/blockchain/indexerMappers.js +53 -0
  68. package/build/blockchain/indexerMappers.js.map +1 -0
  69. package/build/blockchain/types.d.ts +13 -69
  70. package/build/blockchain/types.js.map +1 -1
  71. package/build/bootstrap/EcsBootstrapService.d.ts +13 -3
  72. package/build/bootstrap/EcsBootstrapService.js +168 -79
  73. package/build/bootstrap/EcsBootstrapService.js.map +1 -1
  74. package/build/connections/ParentConnectionModule.d.ts +20 -0
  75. package/build/connections/ParentConnectionModule.js +56 -0
  76. package/build/connections/ParentConnectionModule.js.map +1 -0
  77. package/build/credentials/FullTailsFileService.d.ts +0 -1
  78. package/build/credentials/FullTailsFileService.js +0 -49
  79. package/build/credentials/FullTailsFileService.js.map +1 -1
  80. package/build/did/CachedDocumentLoader.d.ts +3 -0
  81. package/build/did/CachedDocumentLoader.js +7 -1
  82. package/build/did/CachedDocumentLoader.js.map +1 -1
  83. package/build/did/CachedWebDidResolver.d.ts +0 -4
  84. package/build/did/CachedWebDidResolver.js +1 -5
  85. package/build/did/CachedWebDidResolver.js.map +1 -1
  86. package/build/did/artifactServices.d.ts +12 -0
  87. package/build/did/artifactServices.js +48 -0
  88. package/build/did/artifactServices.js.map +1 -0
  89. package/build/did/legacyDidWeb.d.ts +6 -4
  90. package/build/did/legacyDidWeb.js +17 -14
  91. package/build/did/legacyDidWeb.js.map +1 -1
  92. package/build/did/publicDid.d.ts +4 -0
  93. package/build/did/publicDid.js +19 -0
  94. package/build/did/publicDid.js.map +1 -0
  95. package/build/events/BaseMessageEvents.js +139 -5
  96. package/build/events/BaseMessageEvents.js.map +1 -1
  97. package/build/events/ConnectionEvents.js +154 -86
  98. package/build/events/ConnectionEvents.js.map +1 -1
  99. package/build/events/VsAgentEvents.d.ts +11 -9
  100. package/build/events/VsAgentEvents.js +8 -1
  101. package/build/events/VsAgentEvents.js.map +1 -1
  102. package/build/events/VtFlowEvents.d.ts +1 -1
  103. package/build/events/VtFlowEvents.js +29 -17
  104. package/build/events/VtFlowEvents.js.map +1 -1
  105. package/build/index.d.ts +7 -1
  106. package/build/index.js +15 -2
  107. package/build/index.js.map +1 -1
  108. package/build/plugins/setupBaseDidComm.js +9 -12
  109. package/build/plugins/setupBaseDidComm.js.map +1 -1
  110. package/build/transports/VsAgentWsInboundTransport.d.ts +1 -1
  111. package/build/transports/VsAgentWsInboundTransport.js +20 -14
  112. package/build/transports/VsAgentWsInboundTransport.js.map +1 -1
  113. package/build/types.d.ts +14 -13
  114. package/build/types.js +1 -2
  115. package/build/types.js.map +1 -1
  116. package/build/utils/agent.d.ts +29 -4
  117. package/build/utils/agent.js +91 -22
  118. package/build/utils/agent.js.map +1 -1
  119. package/build/utils/boundedFetch.d.ts +13 -0
  120. package/build/utils/boundedFetch.js +47 -0
  121. package/build/utils/boundedFetch.js.map +1 -0
  122. package/build/utils/didReadiness.d.ts +9 -0
  123. package/build/utils/didReadiness.js +42 -0
  124. package/build/utils/didReadiness.js.map +1 -0
  125. package/build/utils/ecsClaims.d.ts +46 -0
  126. package/build/utils/ecsClaims.js +115 -0
  127. package/build/utils/ecsClaims.js.map +1 -0
  128. package/build/utils/ecsService.d.ts +8 -0
  129. package/build/utils/ecsService.js +23 -0
  130. package/build/utils/ecsService.js.map +1 -0
  131. package/build/utils/index.d.ts +6 -0
  132. package/build/utils/index.js +6 -0
  133. package/build/utils/index.js.map +1 -1
  134. package/build/utils/selfIssuedEcsCredential.d.ts +8 -0
  135. package/build/utils/selfIssuedEcsCredential.js +158 -0
  136. package/build/utils/selfIssuedEcsCredential.js.map +1 -0
  137. package/build/utils/setupSelfTr.d.ts +35 -74
  138. package/build/utils/setupSelfTr.js +93 -312
  139. package/build/utils/setupSelfTr.js.map +1 -1
  140. package/build/utils/trustCredentialStore.d.ts +78 -9
  141. package/build/utils/trustCredentialStore.js +319 -126
  142. package/build/utils/trustCredentialStore.js.map +1 -1
  143. package/build/utils/typeMetadata.d.ts +43 -0
  144. package/build/utils/typeMetadata.js +77 -0
  145. package/build/utils/typeMetadata.js.map +1 -0
  146. package/build/utils/util.d.ts +19 -0
  147. package/build/utils/util.js +24 -0
  148. package/build/utils/util.js.map +1 -1
  149. package/build/utils/vcdm2.d.ts +34 -0
  150. package/build/utils/vcdm2.js +60 -0
  151. package/build/utils/vcdm2.js.map +1 -0
  152. package/build/utils/vtjscResolver.d.ts +23 -0
  153. package/build/utils/vtjscResolver.js +54 -0
  154. package/build/utils/vtjscResolver.js.map +1 -0
  155. package/build/vtFlow/VtFlowOrchestrator.d.ts +107 -14
  156. package/build/vtFlow/VtFlowOrchestrator.js +734 -109
  157. package/build/vtFlow/VtFlowOrchestrator.js.map +1 -1
  158. package/build/vtFlow/assertVerifiableService.d.ts +1 -0
  159. package/build/vtFlow/assertVerifiableService.js +45 -5
  160. package/build/vtFlow/assertVerifiableService.js.map +1 -1
  161. package/build/vtFlow/ecsIssuanceExemption.d.ts +12 -0
  162. package/build/vtFlow/ecsIssuanceExemption.js +84 -0
  163. package/build/vtFlow/ecsIssuanceExemption.js.map +1 -0
  164. package/build/vtFlow/index.d.ts +1 -0
  165. package/build/vtFlow/index.js +1 -0
  166. package/build/vtFlow/index.js.map +1 -1
  167. package/package.json +18 -12
  168. package/build/did/migrateWebVhLog.d.ts +0 -34
  169. package/build/did/migrateWebVhLog.js +0 -230
  170. package/build/did/migrateWebVhLog.js.map +0 -1
  171. package/build/did/migrateWebVhVersionTime.d.ts +0 -9
  172. package/build/did/migrateWebVhVersionTime.js +0 -191
  173. package/build/did/migrateWebVhVersionTime.js.map +0 -1
package/README.md CHANGED
@@ -22,7 +22,6 @@ const agent = createVsAgent({
22
22
  endpoints: ['https://agent.example.com/didcomm'],
23
23
  }),
24
24
  ],
25
- label: 'My Agent',
26
25
  publicApiBaseUrl: 'https://api.example.com',
27
26
  dependencies: getNodeHttpServer(),
28
27
  })
@@ -138,7 +137,6 @@ const chain = new VeranaChainService({
138
137
  const agent = createVsAgent({
139
138
  plugins: [...],
140
139
  veranaChain: chain,
141
- label: 'My Agent',
142
140
  publicApiBaseUrl: 'https://api.example.com',
143
141
  dependencies: getNodeHttpServer(),
144
142
  })
@@ -0,0 +1,28 @@
1
+ export declare enum AdminApiErrorCode {
2
+ InvalidInput = "INVALID_INPUT",
3
+ InvalidCursor = "INVALID_CURSOR",
4
+ Unauthenticated = "UNAUTHENTICATED",
5
+ Forbidden = "FORBIDDEN",
6
+ UnknownId = "UNKNOWN_ID",
7
+ InvalidState = "INVALID_STATE",
8
+ InvalidClaims = "INVALID_CLAIMS",
9
+ NoCompatibleCredentials = "NO_COMPATIBLE_CREDENTIALS",
10
+ NoCredentialForRole = "NO_CREDENTIAL_FOR_ROLE",
11
+ InvalidPackage = "INVALID_PACKAGE",
12
+ UnsupportedFormat = "UNSUPPORTED_FORMAT",
13
+ NotReady = "NOT_READY",
14
+ NotAuthorized = "NOT_AUTHORIZED",
15
+ PeerNotAuthorized = "PEER_NOT_AUTHORIZED",
16
+ ResolverUnavailable = "RESOLVER_UNAVAILABLE",
17
+ Internal = "INTERNAL"
18
+ }
19
+ export declare class AdminApiError extends Error {
20
+ readonly code: string;
21
+ readonly status: number;
22
+ readonly details?: Record<string, unknown> | undefined;
23
+ constructor(code: string, status: number, message: string, details?: Record<string, unknown> | undefined);
24
+ }
25
+ export declare function moduleNotServed(module: string): AdminApiError;
26
+ export declare function unknownConnection(connectionId: string): AdminApiError;
27
+ export type TrustDecisionSubject = 'agent' | 'peer';
28
+ export declare function trustDecisionError(error: unknown, subject: TrustDecisionSubject, notDerivableCode?: AdminApiErrorCode): unknown;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminApiError = exports.AdminApiErrorCode = void 0;
4
+ exports.moduleNotServed = moduleNotServed;
5
+ exports.unknownConnection = unknownConnection;
6
+ exports.trustDecisionError = trustDecisionError;
7
+ const AnonCredsTrustService_1 = require("../blockchain/AnonCredsTrustService");
8
+ const BAD_REQUEST = 400;
9
+ const NOT_FOUND = 404;
10
+ const CONFLICT = 409;
11
+ const SERVICE_UNAVAILABLE = 503;
12
+ var AdminApiErrorCode;
13
+ (function (AdminApiErrorCode) {
14
+ AdminApiErrorCode["InvalidInput"] = "INVALID_INPUT";
15
+ AdminApiErrorCode["InvalidCursor"] = "INVALID_CURSOR";
16
+ AdminApiErrorCode["Unauthenticated"] = "UNAUTHENTICATED";
17
+ AdminApiErrorCode["Forbidden"] = "FORBIDDEN";
18
+ AdminApiErrorCode["UnknownId"] = "UNKNOWN_ID";
19
+ AdminApiErrorCode["InvalidState"] = "INVALID_STATE";
20
+ AdminApiErrorCode["InvalidClaims"] = "INVALID_CLAIMS";
21
+ AdminApiErrorCode["NoCompatibleCredentials"] = "NO_COMPATIBLE_CREDENTIALS";
22
+ AdminApiErrorCode["NoCredentialForRole"] = "NO_CREDENTIAL_FOR_ROLE";
23
+ AdminApiErrorCode["InvalidPackage"] = "INVALID_PACKAGE";
24
+ AdminApiErrorCode["UnsupportedFormat"] = "UNSUPPORTED_FORMAT";
25
+ AdminApiErrorCode["NotReady"] = "NOT_READY";
26
+ AdminApiErrorCode["NotAuthorized"] = "NOT_AUTHORIZED";
27
+ AdminApiErrorCode["PeerNotAuthorized"] = "PEER_NOT_AUTHORIZED";
28
+ AdminApiErrorCode["ResolverUnavailable"] = "RESOLVER_UNAVAILABLE";
29
+ AdminApiErrorCode["Internal"] = "INTERNAL";
30
+ })(AdminApiErrorCode || (exports.AdminApiErrorCode = AdminApiErrorCode = {}));
31
+ class AdminApiError extends Error {
32
+ constructor(code, status, message, details) {
33
+ super(message);
34
+ this.code = code;
35
+ this.status = status;
36
+ this.details = details;
37
+ this.name = 'AdminApiError';
38
+ }
39
+ }
40
+ exports.AdminApiError = AdminApiError;
41
+ function moduleNotServed(module) {
42
+ return new AdminApiError(AdminApiErrorCode.UnknownId, NOT_FOUND, `this deployment does not serve the ${module} module`);
43
+ }
44
+ function unknownConnection(connectionId) {
45
+ return new AdminApiError(AdminApiErrorCode.UnknownId, NOT_FOUND, `no connection with id "${connectionId}"`);
46
+ }
47
+ function trustDecisionError(error, subject, notDerivableCode) {
48
+ if (!(error instanceof AnonCredsTrustService_1.AnonCredsTrustError))
49
+ return error;
50
+ if (error.reason === AnonCredsTrustService_1.AnonCredsTrustErrorReason.Unavailable) {
51
+ return new AdminApiError(AdminApiErrorCode.ResolverUnavailable, SERVICE_UNAVAILABLE, error.message);
52
+ }
53
+ const unauthorizedCode = subject === 'peer' ? AdminApiErrorCode.PeerNotAuthorized : AdminApiErrorCode.NotAuthorized;
54
+ if (error.reason === AnonCredsTrustService_1.AnonCredsTrustErrorReason.NotAuthorized) {
55
+ return new AdminApiError(unauthorizedCode, CONFLICT, error.message);
56
+ }
57
+ const code = notDerivableCode !== null && notDerivableCode !== void 0 ? notDerivableCode : unauthorizedCode;
58
+ return new AdminApiError(code, code === AdminApiErrorCode.InvalidInput ? BAD_REQUEST : CONFLICT, error.message);
59
+ }
60
+ //# sourceMappingURL=AdminApiError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminApiError.js","sourceRoot":"","sources":["../../src/adminApi/AdminApiError.ts"],"names":[],"mappings":";;;AAsCA,0CAMC;AAED,8CAEC;AAID,gDAyBC;AA7ED,+EAAoG;AAEpG,MAAM,WAAW,GAAG,GAAG,CAAA;AACvB,MAAM,SAAS,GAAG,GAAG,CAAA;AACrB,MAAM,QAAQ,GAAG,GAAG,CAAA;AACpB,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAE/B,IAAY,iBAiBX;AAjBD,WAAY,iBAAiB;IAC3B,mDAA8B,CAAA;IAC9B,qDAAgC,CAAA;IAChC,wDAAmC,CAAA;IACnC,4CAAuB,CAAA;IACvB,6CAAwB,CAAA;IACxB,mDAA8B,CAAA;IAC9B,qDAAgC,CAAA;IAChC,0EAAqD,CAAA;IACrD,mEAA8C,CAAA;IAC9C,uDAAkC,CAAA;IAClC,6DAAwC,CAAA;IACxC,2CAAsB,CAAA;IACtB,qDAAgC,CAAA;IAChC,8DAAyC,CAAA;IACzC,iEAA4C,CAAA;IAC5C,0CAAqB,CAAA;AACvB,CAAC,EAjBW,iBAAiB,iCAAjB,iBAAiB,QAiB5B;AAED,MAAa,aAAc,SAAQ,KAAK;IACtC,YACkB,IAAY,EACZ,MAAc,EAC9B,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAA;QALE,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QAEd,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;IAC7B,CAAC;CACF;AAVD,sCAUC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,IAAI,aAAa,CACtB,iBAAiB,CAAC,SAAS,EAC3B,SAAS,EACT,sCAAsC,MAAM,SAAS,CACtD,CAAA;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,YAAoB;IACpD,OAAO,IAAI,aAAa,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,0BAA0B,YAAY,GAAG,CAAC,CAAA;AAC7G,CAAC;AAID,SAAgB,kBAAkB,CAChC,KAAc,EACd,OAA6B,EAC7B,gBAAoC;IAEpC,IAAI,CAAC,CAAC,KAAK,YAAY,2CAAmB,CAAC;QAAE,OAAO,KAAK,CAAA;IAEzD,IAAI,KAAK,CAAC,MAAM,KAAK,iDAAyB,CAAC,WAAW,EAAE,CAAC;QAC3D,OAAO,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACrG,CAAC;IAED,MAAM,gBAAgB,GACpB,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAA;IAE5F,IAAI,KAAK,CAAC,MAAM,KAAK,iDAAyB,CAAC,aAAa,EAAE,CAAC;QAC7D,OAAO,IAAI,aAAa,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,gBAAgB,CAAA;IAEjD,OAAO,IAAI,aAAa,CACtB,IAAI,EACJ,IAAI,KAAK,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAChE,KAAK,CAAC,OAAO,CACd,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { DidcommModule } from '../types';
2
+ export declare function moduleOf(modules: readonly DidcommModule[], protocol: string): string | undefined;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.moduleOf = moduleOf;
4
+ function moduleOf(modules, protocol) {
5
+ var _a;
6
+ return (_a = modules.find(({ prefixes }) => prefixes.some(prefix => protocol.startsWith(prefix)))) === null || _a === void 0 ? void 0 : _a.module;
7
+ }
8
+ //# sourceMappingURL=didcommModules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"didcommModules.js","sourceRoot":"","sources":["../../src/adminApi/didcommModules.ts"],"names":[],"mappings":";;AAEA,4BAEC;AAFD,SAAgB,QAAQ,CAAC,OAAiC,EAAE,QAAgB;;IAC1E,OAAO,MAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAA;AACrG,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './AdminApiError';
2
+ export * from './didcommModules';
3
+ export * from './moduleEndpoint';
4
+ export * from './pagination';
@@ -0,0 +1,21 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AdminApiError"), exports);
18
+ __exportStar(require("./didcommModules"), exports);
19
+ __exportStar(require("./moduleEndpoint"), exports);
20
+ __exportStar(require("./pagination"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adminApi/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,mDAAgC;AAChC,mDAAgC;AAChC,+CAA4B"}
@@ -0,0 +1,8 @@
1
+ import type { BaseAgentModules, VsAgent } from '../agent/VsAgent';
2
+ import { BaseRecord } from '@credo-ts/core';
3
+ import { DidCommConnectionRecord, DidCommMessage } from '@credo-ts/didcomm';
4
+ type Agent = VsAgent<BaseAgentModules>;
5
+ export declare function moduleService<T>(agent: Agent, service: new (...args: any[]) => T, module: string): T;
6
+ export declare function connectionOf(agent: Agent, connectionId: string): Promise<DidCommConnectionRecord>;
7
+ export declare function sendMessage(agent: Agent, connection: DidCommConnectionRecord, message: DidCommMessage, associatedRecord?: BaseRecord<any, any, any>): Promise<string>;
8
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.moduleService = moduleService;
4
+ exports.connectionOf = connectionOf;
5
+ exports.sendMessage = sendMessage;
6
+ const didcomm_1 = require("@credo-ts/didcomm");
7
+ const AdminApiError_1 = require("./AdminApiError");
8
+ function moduleService(agent, service, module) {
9
+ const { dependencyManager } = agent.context;
10
+ if (!dependencyManager.isRegistered(service))
11
+ throw (0, AdminApiError_1.moduleNotServed)(module);
12
+ return dependencyManager.resolve(service);
13
+ }
14
+ async function connectionOf(agent, connectionId) {
15
+ const connection = await agent.didcomm.connections.findById(connectionId);
16
+ if (!connection)
17
+ throw (0, AdminApiError_1.unknownConnection)(connectionId);
18
+ return connection;
19
+ }
20
+ async function sendMessage(agent, connection, message, associatedRecord) {
21
+ await agent.context.dependencyManager.resolve(didcomm_1.DidCommMessageSender).sendMessage(new didcomm_1.DidCommOutboundMessageContext(message, {
22
+ agentContext: agent.context,
23
+ connection,
24
+ associatedRecord,
25
+ }));
26
+ return message.id;
27
+ }
28
+ //# sourceMappingURL=moduleEndpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleEndpoint.js","sourceRoot":"","sources":["../../src/adminApi/moduleEndpoint.ts"],"names":[],"mappings":";;AAcA,sCAIC;AAED,oCAIC;AAED,kCAcC;AArCD,+CAK0B;AAE1B,mDAAoE;AAIpE,SAAgB,aAAa,CAAI,KAAY,EAAE,OAAkC,EAAE,MAAc;IAC/F,MAAM,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC,OAAO,CAAA;IAC3C,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC;QAAE,MAAM,IAAA,+BAAe,EAAC,MAAM,CAAC,CAAA;IAC3E,OAAO,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAC3C,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,KAAY,EAAE,YAAoB;IACnE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IACzE,IAAI,CAAC,UAAU;QAAE,MAAM,IAAA,iCAAiB,EAAC,YAAY,CAAC,CAAA;IACtD,OAAO,UAAU,CAAA;AACnB,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,KAAY,EACZ,UAAmC,EACnC,OAAuB,EACvB,gBAA4C;IAE5C,MAAM,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,8BAAoB,CAAC,CAAC,WAAW,CAC7E,IAAI,uCAA6B,CAAC,OAAO,EAAE;QACzC,YAAY,EAAE,KAAK,CAAC,OAAO;QAC3B,UAAU;QACV,gBAAgB;KACjB,CAAC,CACH,CAAA;IACD,OAAO,OAAO,CAAC,EAAE,CAAA;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { Page } from './paginate';
3
+ /**
4
+ * Makes the OpenAPI model of a page of `ItemDto`. Swagger reads a schema off a class, so a
5
+ * generic `Page<T>` needs one cached class for each record type.
6
+ */
7
+ export declare function PageDto<T>(ItemDto: Type<T>): Type<Page<T>>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PageDto = PageDto;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const models = new Map();
15
+ const names = new Map();
16
+ /**
17
+ * Makes the OpenAPI model of a page of `ItemDto`. Swagger reads a schema off a class, so a
18
+ * generic `Page<T>` needs one cached class for each record type.
19
+ */
20
+ function PageDto(ItemDto) {
21
+ const known = models.get(ItemDto);
22
+ if (known)
23
+ return known;
24
+ class GeneratedPageDto {
25
+ }
26
+ __decorate([
27
+ (0, swagger_1.ApiProperty)({ type: [ItemDto], description: 'The records of this page.' }),
28
+ __metadata("design:type", Array)
29
+ ], GeneratedPageDto.prototype, "items", void 0);
30
+ __decorate([
31
+ (0, swagger_1.ApiProperty)({
32
+ type: String,
33
+ nullable: true,
34
+ description: 'Cursor of the next page. The agent sets it to null on the last page.',
35
+ }),
36
+ __metadata("design:type", Object)
37
+ ], GeneratedPageDto.prototype, "nextCursor", void 0);
38
+ // Swagger names each schema after its class, and every generated class shares one source name.
39
+ const name = `${ItemDto.name.replace(/Dto$/, '')}PageDto`;
40
+ Object.defineProperty(GeneratedPageDto, 'name', { value: name });
41
+ // Two models of one name would collapse into one schema, and the document would show the
42
+ // wrong records for one of them.
43
+ const taken = names.get(name);
44
+ if (taken)
45
+ throw new Error(`${taken.name} and ${ItemDto.name} both map to the page model "${name}"`);
46
+ names.set(name, ItemDto);
47
+ models.set(ItemDto, GeneratedPageDto);
48
+ return GeneratedPageDto;
49
+ }
50
+ //# sourceMappingURL=PageDto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageDto.js","sourceRoot":"","sources":["../../../src/adminApi/pagination/PageDto.ts"],"names":[],"mappings":";;;;;;;;;;;AAYA,0BA4BC;AAvCD,6CAA6C;AAI7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsC,CAAA;AAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAA;AAE9C;;;GAGG;AACH,SAAgB,OAAO,CAAI,OAAgB;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAwB,CAAC,CAAA;IAClD,IAAI,KAAK;QAAE,OAAO,KAAsB,CAAA;IAExC,MAAM,gBAAgB;KAUrB;IARC;QADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC;;mDAChE;IAOX;QALC,IAAA,qBAAW,EAAC;YACX,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,sEAAsE;SACpF,CAAC;;wDACwB;IAG5B,+FAA+F;IAC/F,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAA;IACzD,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAEhE,yFAAyF;IACzF,iCAAiC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,QAAQ,OAAO,CAAC,IAAI,gCAAgC,IAAI,GAAG,CAAC,CAAA;IACpG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAwB,CAAC,CAAA;IAEzC,MAAM,CAAC,GAAG,CAAC,OAAwB,EAAE,gBAAuC,CAAC,CAAA;IAC7E,OAAO,gBAAiC,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const PAGE_LIMIT_MIN = 1;
2
+ export declare const PAGE_LIMIT_DEFAULT = 100;
3
+ export declare const PAGE_LIMIT_MAX = 500;
4
+ /**
5
+ * Pagination parameters of a collection method. A method with filters extends this class, and
6
+ * must put those filters in the page scope.
7
+ */
8
+ export declare class PaginationQueryDto {
9
+ limit?: number;
10
+ cursor?: string;
11
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PaginationQueryDto = exports.PAGE_LIMIT_MAX = exports.PAGE_LIMIT_DEFAULT = exports.PAGE_LIMIT_MIN = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const class_validator_1 = require("class-validator");
16
+ exports.PAGE_LIMIT_MIN = 1;
17
+ exports.PAGE_LIMIT_DEFAULT = 100;
18
+ exports.PAGE_LIMIT_MAX = 500;
19
+ /**
20
+ * Pagination parameters of a collection method. A method with filters extends this class, and
21
+ * must put those filters in the page scope.
22
+ */
23
+ class PaginationQueryDto {
24
+ }
25
+ exports.PaginationQueryDto = PaginationQueryDto;
26
+ __decorate([
27
+ (0, swagger_1.ApiPropertyOptional)({
28
+ minimum: exports.PAGE_LIMIT_MIN,
29
+ maximum: exports.PAGE_LIMIT_MAX,
30
+ default: exports.PAGE_LIMIT_DEFAULT,
31
+ description: 'Number of records in one page.',
32
+ }),
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_transformer_1.Type)(() => Number),
35
+ (0, class_validator_1.IsInt)(),
36
+ (0, class_validator_1.Min)(exports.PAGE_LIMIT_MIN),
37
+ (0, class_validator_1.Max)(exports.PAGE_LIMIT_MAX),
38
+ __metadata("design:type", Number)
39
+ ], PaginationQueryDto.prototype, "limit", void 0);
40
+ __decorate([
41
+ (0, swagger_1.ApiPropertyOptional)({ description: 'Opaque cursor returned by the previous call.' }),
42
+ (0, class_validator_1.IsOptional)(),
43
+ (0, class_validator_1.IsString)(),
44
+ __metadata("design:type", String)
45
+ ], PaginationQueryDto.prototype, "cursor", void 0);
46
+ //# sourceMappingURL=PaginationQueryDto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationQueryDto.js","sourceRoot":"","sources":["../../../src/adminApi/pagination/PaginationQueryDto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAqD;AACrD,yDAAwC;AACxC,qDAAuE;AAE1D,QAAA,cAAc,GAAG,CAAC,CAAA;AAClB,QAAA,kBAAkB,GAAG,GAAG,CAAA;AACxB,QAAA,cAAc,GAAG,GAAG,CAAA;AAEjC;;;GAGG;AACH,MAAa,kBAAkB;CAkB9B;AAlBD,gDAkBC;AANC;IAXC,IAAA,6BAAmB,EAAC;QACnB,OAAO,EAAE,sBAAc;QACvB,OAAO,EAAE,sBAAc;QACvB,OAAO,EAAE,0BAAkB;QAC3B,WAAW,EAAE,gCAAgC;KAC9C,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,uBAAK,GAAE;IACP,IAAA,qBAAG,EAAC,sBAAc,CAAC;IACnB,IAAA,qBAAG,EAAC,sBAAc,CAAC;;iDACN;AAKd;IAHC,IAAA,6BAAmB,EAAC,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;IACpF,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;kDACI"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Increase it when the encoded fields change. The agent then refuses each cursor of an
3
+ * earlier format.
4
+ */
5
+ export declare const CURSOR_FORMAT_VERSION = 1;
6
+ /**
7
+ * The method and filter set that mint a cursor. Put in `filters` what the caller asked for,
8
+ * not what the data store received: only the first one is stable between calls.
9
+ */
10
+ export interface PageScope {
11
+ method: string;
12
+ filters?: Record<string, unknown>;
13
+ }
14
+ /**
15
+ * Fingerprints a page scope. It ignores an absent filter, and the order of the filters, so
16
+ * two calls that ask for the same records agree.
17
+ */
18
+ export declare function hashScope(scope: PageScope): string;
19
+ /**
20
+ * Encodes the key of the last record of a page. The agent keeps no cursor state: the cursor
21
+ * holds all that the next call needs.
22
+ */
23
+ export declare function encodeCursor(scopeHash: string, key: string): string;
24
+ /**
25
+ * Reads the key out of a cursor. It refuses the cursor in three cases only: the cursor is
26
+ * malformed, an earlier format minted it, or the caller replayed it against another scope.
27
+ */
28
+ export declare function decodeCursor(cursor: string, scopeHash: string): string;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CURSOR_FORMAT_VERSION = void 0;
4
+ exports.hashScope = hashScope;
5
+ exports.encodeCursor = encodeCursor;
6
+ exports.decodeCursor = decodeCursor;
7
+ const crypto_1 = require("crypto");
8
+ const common_1 = require("@nestjs/common");
9
+ const AdminApiError_1 = require("../AdminApiError");
10
+ /**
11
+ * Increase it when the encoded fields change. The agent then refuses each cursor of an
12
+ * earlier format.
13
+ */
14
+ exports.CURSOR_FORMAT_VERSION = 1;
15
+ /**
16
+ * Fingerprints a page scope. It ignores an absent filter, and the order of the filters, so
17
+ * two calls that ask for the same records agree.
18
+ */
19
+ function hashScope(scope) {
20
+ var _a;
21
+ const filters = Object.entries((_a = scope.filters) !== null && _a !== void 0 ? _a : {})
22
+ .filter(([, value]) => value !== undefined)
23
+ .sort(([a], [b]) => a.localeCompare(b));
24
+ return (0, crypto_1.createHash)('sha256')
25
+ .update(JSON.stringify([scope.method, filters]))
26
+ .digest('hex')
27
+ .slice(0, 16);
28
+ }
29
+ /**
30
+ * Encodes the key of the last record of a page. The agent keeps no cursor state: the cursor
31
+ * holds all that the next call needs.
32
+ */
33
+ function encodeCursor(scopeHash, key) {
34
+ const payload = { v: exports.CURSOR_FORMAT_VERSION, s: scopeHash, k: key };
35
+ return Buffer.from(JSON.stringify(payload)).toString('base64url');
36
+ }
37
+ /**
38
+ * Reads the key out of a cursor. It refuses the cursor in three cases only: the cursor is
39
+ * malformed, an earlier format minted it, or the caller replayed it against another scope.
40
+ */
41
+ function decodeCursor(cursor, scopeHash) {
42
+ let parsed;
43
+ try {
44
+ parsed = JSON.parse(Buffer.from(cursor, 'base64url').toString('utf8'));
45
+ }
46
+ catch (_a) {
47
+ throw invalidCursor('the cursor is malformed');
48
+ }
49
+ const { v, s, k } = (parsed !== null && parsed !== void 0 ? parsed : {});
50
+ if (typeof v !== 'number' || typeof s !== 'string' || typeof k !== 'string') {
51
+ throw invalidCursor('the cursor is malformed');
52
+ }
53
+ if (v !== exports.CURSOR_FORMAT_VERSION) {
54
+ throw invalidCursor('the cursor uses a cursor format that this agent no longer accepts');
55
+ }
56
+ if (s !== scopeHash) {
57
+ throw invalidCursor('the cursor was minted by another method or filter set');
58
+ }
59
+ return k;
60
+ }
61
+ function invalidCursor(message) {
62
+ return new AdminApiError_1.AdminApiError(AdminApiError_1.AdminApiErrorCode.InvalidCursor, common_1.HttpStatus.BAD_REQUEST, message);
63
+ }
64
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/adminApi/pagination/cursor.ts"],"names":[],"mappings":";;;AA+BA,8BAQC;AAMD,oCAGC;AAMD,oCAoBC;AA1ED,mCAAmC;AAEnC,2CAA2C;AAE3C,oDAAmE;AAEnE;;;GAGG;AACU,QAAA,qBAAqB,GAAG,CAAC,CAAA;AAiBtC;;;GAGG;AACH,SAAgB,SAAS,CAAC,KAAgB;;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAA,KAAK,CAAC,OAAO,mCAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SAC/C,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,SAAiB,EAAE,GAAW;IACzD,MAAM,OAAO,GAAkB,EAAE,CAAC,EAAE,6BAAqB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAA;IACjF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACnE,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,MAAc,EAAE,SAAiB;IAC5D,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACxE,CAAC;IAAC,WAAM,CAAC;QACP,MAAM,aAAa,CAAC,yBAAyB,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAA2B,CAAA;IAC5D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5E,MAAM,aAAa,CAAC,yBAAyB,CAAC,CAAA;IAChD,CAAC;IACD,IAAI,CAAC,KAAK,6BAAqB,EAAE,CAAC;QAChC,MAAM,aAAa,CAAC,mEAAmE,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,aAAa,CAAC,uDAAuD,CAAC,CAAA;IAC9E,CAAC;IAED,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,IAAI,6BAAa,CAAC,iCAAiB,CAAC,aAAa,EAAE,mBAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAC5F,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './cursor';
2
+ export * from './PageDto';
3
+ export * from './paginate';
4
+ export * from './PaginationQueryDto';
@@ -0,0 +1,21 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cursor"), exports);
18
+ __exportStar(require("./PageDto"), exports);
19
+ __exportStar(require("./paginate"), exports);
20
+ __exportStar(require("./PaginationQueryDto"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adminApi/pagination/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,4CAAyB;AACzB,6CAA0B;AAC1B,uDAAoC"}
@@ -0,0 +1,27 @@
1
+ import { PageScope } from './cursor';
2
+ import { PaginationQueryDto } from './PaginationQueryDto';
3
+ /** One page of a collection. `nextCursor` is null on the last page. */
4
+ export interface Page<T> {
5
+ items: T[];
6
+ nextCursor: string | null;
7
+ }
8
+ /**
9
+ * Cuts a page out of a collection with a keyset cursor. `keyOf` must give a unique key that
10
+ * does not change, for example `createdAtKey`.
11
+ */
12
+ export declare function paginate<T>(items: readonly T[], query: PaginationQueryDto, scope: PageScope, keyOf: (item: T) => string): Page<T>;
13
+ /**
14
+ * Pagination key of a record that carries a creation timestamp and an id. The timestamp orders
15
+ * the records, and the id keeps the key unique when two records share a timestamp.
16
+ */
17
+ export declare function createdAtKey(record: {
18
+ createdAt: Date;
19
+ id: string;
20
+ }): string;
21
+ /**
22
+ * Maps the records of one page. Paginate the records first, then map, when a record costs a
23
+ * store read to become a DTO: the method then reads one page instead of the collection.
24
+ */
25
+ export declare function mapPage<T, U>(page: Page<T>, map: (item: T) => U): Page<U>;
26
+ /** `mapPage` for a mapping that reads the store. */
27
+ export declare function mapPageAsync<T, U>(page: Page<T>, map: (item: T) => Promise<U>): Promise<Page<U>>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.paginate = paginate;
4
+ exports.createdAtKey = createdAtKey;
5
+ exports.mapPage = mapPage;
6
+ exports.mapPageAsync = mapPageAsync;
7
+ const common_1 = require("@nestjs/common");
8
+ const AdminApiError_1 = require("../AdminApiError");
9
+ const cursor_1 = require("./cursor");
10
+ const PaginationQueryDto_1 = require("./PaginationQueryDto");
11
+ /**
12
+ * Cuts a page out of a collection with a keyset cursor. `keyOf` must give a unique key that
13
+ * does not change, for example `createdAtKey`.
14
+ */
15
+ function paginate(items, query, scope, keyOf) {
16
+ const limit = limitOf(query.limit);
17
+ const scopeHash = (0, cursor_1.hashScope)(scope);
18
+ // Key each record once: a comparison sort calls `keyOf` many times for each record.
19
+ const keyed = items.map(item => ({ key: keyOf(item), item }));
20
+ keyed.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
21
+ assertUniqueKeys(keyed, scope.method);
22
+ // Scan for the first key after the anchor, so a deleted anchor still starts the page correctly.
23
+ let start = 0;
24
+ if (query.cursor !== undefined) {
25
+ const anchorKey = (0, cursor_1.decodeCursor)(query.cursor, scopeHash);
26
+ const index = keyed.findIndex(entry => entry.key > anchorKey);
27
+ start = index === -1 ? keyed.length : index;
28
+ }
29
+ const page = keyed.slice(start, start + limit);
30
+ const hasMore = start + limit < keyed.length;
31
+ return {
32
+ items: page.map(entry => entry.item),
33
+ nextCursor: hasMore && page.length > 0 ? (0, cursor_1.encodeCursor)(scopeHash, page[page.length - 1].key) : null,
34
+ };
35
+ }
36
+ /**
37
+ * Pagination key of a record that carries a creation timestamp and an id. The timestamp orders
38
+ * the records, and the id keeps the key unique when two records share a timestamp.
39
+ */
40
+ function createdAtKey(record) {
41
+ return `${record.createdAt.toISOString()}|${record.id}`;
42
+ }
43
+ /**
44
+ * Maps the records of one page. Paginate the records first, then map, when a record costs a
45
+ * store read to become a DTO: the method then reads one page instead of the collection.
46
+ */
47
+ function mapPage(page, map) {
48
+ return { items: page.items.map(map), nextCursor: page.nextCursor };
49
+ }
50
+ /** `mapPage` for a mapping that reads the store. */
51
+ async function mapPageAsync(page, map) {
52
+ return { items: await Promise.all(page.items.map(map)), nextCursor: page.nextCursor };
53
+ }
54
+ /**
55
+ * Refuses a repeated key. The anchor scan would step over each record after the first one that
56
+ * holds the key, and the method would drop those records without an error.
57
+ */
58
+ function assertUniqueKeys(keyed, method) {
59
+ for (let index = 1; index < keyed.length; index++) {
60
+ if (keyed[index].key !== keyed[index - 1].key)
61
+ continue;
62
+ throw new AdminApiError_1.AdminApiError(AdminApiError_1.AdminApiErrorCode.Internal, common_1.HttpStatus.INTERNAL_SERVER_ERROR, `${method} gave two records the pagination key "${keyed[index].key}"`);
63
+ }
64
+ }
65
+ /**
66
+ * Clamps the limit. The value is `unknown` because Nest hands the handler the raw query string,
67
+ * and because an internal caller can pass a raw object that no DTO validated.
68
+ */
69
+ function limitOf(limit) {
70
+ if (limit === undefined)
71
+ return PaginationQueryDto_1.PAGE_LIMIT_DEFAULT;
72
+ const value = Number(limit);
73
+ if (!Number.isFinite(value))
74
+ return PaginationQueryDto_1.PAGE_LIMIT_DEFAULT;
75
+ return Math.min(Math.max(Math.trunc(value), PaginationQueryDto_1.PAGE_LIMIT_MIN), PaginationQueryDto_1.PAGE_LIMIT_MAX);
76
+ }
77
+ //# sourceMappingURL=paginate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginate.js","sourceRoot":"","sources":["../../../src/adminApi/pagination/paginate.ts"],"names":[],"mappings":"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"}