@verana-labs/vs-agent-sdk 2.0.0-dev.7 → 2.0.0-dev.70

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 (166) hide show
  1. package/README.md +0 -2
  2. package/build/adminApi/AdminApiError.d.ts +27 -0
  3. package/build/adminApi/AdminApiError.js +59 -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 +25 -14
  45. package/build/blockchain/VeranaChainService.js +123 -113
  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 +2 -0
  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 +71 -0
  59. package/build/blockchain/handlers/selfIssuanceHandlers.js.map +1 -0
  60. package/build/blockchain/handlers/stateMutations.d.ts +21 -2
  61. package/build/blockchain/handlers/stateMutations.js +285 -37
  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 -58
  70. package/build/blockchain/types.js.map +1 -1
  71. package/build/bootstrap/EcsBootstrapService.d.ts +14 -3
  72. package/build/bootstrap/EcsBootstrapService.js +166 -76
  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 +129 -82
  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 +27 -18
  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 +7 -0
  114. package/build/types.js.map +1 -1
  115. package/build/utils/agent.d.ts +29 -4
  116. package/build/utils/agent.js +91 -22
  117. package/build/utils/agent.js.map +1 -1
  118. package/build/utils/didReadiness.d.ts +9 -0
  119. package/build/utils/didReadiness.js +42 -0
  120. package/build/utils/didReadiness.js.map +1 -0
  121. package/build/utils/ecsClaims.d.ts +47 -0
  122. package/build/utils/ecsClaims.js +120 -0
  123. package/build/utils/ecsClaims.js.map +1 -0
  124. package/build/utils/ecsService.d.ts +8 -0
  125. package/build/utils/ecsService.js +23 -0
  126. package/build/utils/ecsService.js.map +1 -0
  127. package/build/utils/index.d.ts +4 -0
  128. package/build/utils/index.js +4 -0
  129. package/build/utils/index.js.map +1 -1
  130. package/build/utils/selfIssuedEcsCredential.d.ts +8 -0
  131. package/build/utils/selfIssuedEcsCredential.js +151 -0
  132. package/build/utils/selfIssuedEcsCredential.js.map +1 -0
  133. package/build/utils/setupSelfTr.d.ts +34 -66
  134. package/build/utils/setupSelfTr.js +89 -295
  135. package/build/utils/setupSelfTr.js.map +1 -1
  136. package/build/utils/trustCredentialStore.d.ts +67 -9
  137. package/build/utils/trustCredentialStore.js +296 -111
  138. package/build/utils/trustCredentialStore.js.map +1 -1
  139. package/build/utils/util.d.ts +10 -0
  140. package/build/utils/util.js +16 -0
  141. package/build/utils/util.js.map +1 -1
  142. package/build/utils/vcdm2.d.ts +34 -0
  143. package/build/utils/vcdm2.js +62 -0
  144. package/build/utils/vcdm2.js.map +1 -0
  145. package/build/utils/vtjscResolver.d.ts +18 -0
  146. package/build/utils/vtjscResolver.js +54 -0
  147. package/build/utils/vtjscResolver.js.map +1 -0
  148. package/build/vtFlow/VtFlowOrchestrator.d.ts +84 -13
  149. package/build/vtFlow/VtFlowOrchestrator.js +505 -107
  150. package/build/vtFlow/VtFlowOrchestrator.js.map +1 -1
  151. package/build/vtFlow/assertVerifiableService.d.ts +1 -0
  152. package/build/vtFlow/assertVerifiableService.js +45 -5
  153. package/build/vtFlow/assertVerifiableService.js.map +1 -1
  154. package/build/vtFlow/ecsIssuanceExemption.d.ts +12 -0
  155. package/build/vtFlow/ecsIssuanceExemption.js +84 -0
  156. package/build/vtFlow/ecsIssuanceExemption.js.map +1 -0
  157. package/build/vtFlow/index.d.ts +1 -0
  158. package/build/vtFlow/index.js +1 -0
  159. package/build/vtFlow/index.js.map +1 -1
  160. package/package.json +17 -12
  161. package/build/did/migrateWebVhLog.d.ts +0 -34
  162. package/build/did/migrateWebVhLog.js +0 -230
  163. package/build/did/migrateWebVhLog.js.map +0 -1
  164. package/build/did/migrateWebVhVersionTime.d.ts +0 -9
  165. package/build/did/migrateWebVhVersionTime.js +0 -191
  166. package/build/did/migrateWebVhVersionTime.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ import type { BaseAgentModules, VsAgent } from '../agent/VsAgent';
2
+ import { ParticipantRole } from './types';
3
+ export declare const REQUESTED_CREDENTIAL_SCHEMAS_METADATA = "_2060/requestedCredentialSchemas";
4
+ export declare const AUTO_ACCEPT_PRESENTATION_METADATA = "_2060/autoAcceptPresentation";
5
+ export declare enum AnonCredsTrustProblemCode {
6
+ IssuerNotAuthorized = "e.p.issuer-not-authorized",
7
+ TrustResolutionUnavailable = "e.p.trust-resolution-unavailable"
8
+ }
9
+ export declare enum AnonCredsTrustErrorReason {
10
+ NotDerivable = "not-derivable",
11
+ NotAuthorized = "not-authorized",
12
+ Unavailable = "unavailable"
13
+ }
14
+ export declare class AnonCredsTrustError extends Error {
15
+ readonly reason: AnonCredsTrustErrorReason;
16
+ constructor(reason: AnonCredsTrustErrorReason, message: string);
17
+ }
18
+ export type AnonCredsObjectReference = {
19
+ credentialDefinitionId: string;
20
+ } | {
21
+ schemaId: string;
22
+ };
23
+ export interface DerivedCredentialSchema {
24
+ credentialSchemaId: number;
25
+ ecosystemDid: string;
26
+ jsonSchemaCredentialId: string;
27
+ anonCredsSchemaId: string;
28
+ issuerId?: string;
29
+ }
30
+ export type RequestedCredentialSchema = Pick<DerivedCredentialSchema, 'credentialSchemaId' | 'ecosystemDid' | 'jsonSchemaCredentialId'>;
31
+ export type RequestedCredentialSchemas = Record<string, RequestedCredentialSchema>;
32
+ export declare function toRequestedCredentialSchema({ credentialSchemaId, ecosystemDid, jsonSchemaCredentialId, }: DerivedCredentialSchema): RequestedCredentialSchema;
33
+ export interface UnaccreditedDidsResult {
34
+ unaccredited: string[];
35
+ unchecked: string[];
36
+ }
37
+ export declare class AnonCredsTrustService {
38
+ private readonly agent;
39
+ private readonly derivations;
40
+ private readonly credentialSchemaLinks;
41
+ constructor(agent: VsAgent<BaseAgentModules>);
42
+ deriveCredentialSchema(reference: AnonCredsObjectReference): Promise<DerivedCredentialSchema>;
43
+ assertAuthorized(options: {
44
+ did: string;
45
+ role: ParticipantRole;
46
+ credentialSchemaId: number;
47
+ }): Promise<void>;
48
+ assertOwnAuthorization(options: {
49
+ role: ParticipantRole;
50
+ credentialSchemaId: number;
51
+ }): Promise<void>;
52
+ findUnaccreditedDids(dids: string[], role: ParticipantRole, credentialSchemaId: number): Promise<UnaccreditedDidsResult>;
53
+ private resolveAnonCredsObject;
54
+ private resolveCredentialSchemaLink;
55
+ private requireFromIndexer;
56
+ /**
57
+ * A VTJSC is a data model 2.0 credential secured with a DataIntegrityProof, as
58
+ * [VT-JSON-SCHEMA-CRED-W3C] requires; one an ecosystem still publishes as data model 1.1 with a
59
+ * linked data proof is verified through the 1.1 API, as verre accepts both.
60
+ */
61
+ private verifyVtjscProof;
62
+ }
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AnonCredsTrustService = exports.AnonCredsTrustError = exports.AnonCredsTrustErrorReason = exports.AnonCredsTrustProblemCode = exports.AUTO_ACCEPT_PRESENTATION_METADATA = exports.REQUESTED_CREDENTIAL_SCHEMAS_METADATA = void 0;
4
+ exports.toRequestedCredentialSchema = toRequestedCredentialSchema;
5
+ const core_1 = require("@credo-ts/core");
6
+ const util_1 = require("../utils/util");
7
+ const vcdm2_1 = require("../utils/vcdm2");
8
+ const types_1 = require("./types");
9
+ const VTJSC_FETCH_TIMEOUT_MS = 30000;
10
+ const CREDENTIAL_SCHEMA_REFERENCE = /^vpr:verana:([^:/]+):cs:(\d+)$/;
11
+ const RELATED_JSON_SCHEMA_CREDENTIAL_ID_TAG = 'relatedJsonSchemaCredentialId';
12
+ exports.REQUESTED_CREDENTIAL_SCHEMAS_METADATA = '_2060/requestedCredentialSchemas';
13
+ exports.AUTO_ACCEPT_PRESENTATION_METADATA = '_2060/autoAcceptPresentation';
14
+ var AnonCredsTrustProblemCode;
15
+ (function (AnonCredsTrustProblemCode) {
16
+ AnonCredsTrustProblemCode["IssuerNotAuthorized"] = "e.p.issuer-not-authorized";
17
+ AnonCredsTrustProblemCode["TrustResolutionUnavailable"] = "e.p.trust-resolution-unavailable";
18
+ })(AnonCredsTrustProblemCode || (exports.AnonCredsTrustProblemCode = AnonCredsTrustProblemCode = {}));
19
+ var AnonCredsTrustErrorReason;
20
+ (function (AnonCredsTrustErrorReason) {
21
+ AnonCredsTrustErrorReason["NotDerivable"] = "not-derivable";
22
+ AnonCredsTrustErrorReason["NotAuthorized"] = "not-authorized";
23
+ AnonCredsTrustErrorReason["Unavailable"] = "unavailable";
24
+ })(AnonCredsTrustErrorReason || (exports.AnonCredsTrustErrorReason = AnonCredsTrustErrorReason = {}));
25
+ class AnonCredsTrustError extends Error {
26
+ constructor(reason, message) {
27
+ super(message);
28
+ this.reason = reason;
29
+ this.name = 'AnonCredsTrustError';
30
+ }
31
+ }
32
+ exports.AnonCredsTrustError = AnonCredsTrustError;
33
+ function toRequestedCredentialSchema({ credentialSchemaId, ecosystemDid, jsonSchemaCredentialId, }) {
34
+ return { credentialSchemaId, ecosystemDid, jsonSchemaCredentialId };
35
+ }
36
+ function notDerivable(message) {
37
+ return new AnonCredsTrustError(AnonCredsTrustErrorReason.NotDerivable, message);
38
+ }
39
+ function notAuthorized(message) {
40
+ return new AnonCredsTrustError(AnonCredsTrustErrorReason.NotAuthorized, message);
41
+ }
42
+ function unavailable(message) {
43
+ return new AnonCredsTrustError(AnonCredsTrustErrorReason.Unavailable, message);
44
+ }
45
+ function relatedJsonSchemaCredentialIdOf(metadata) {
46
+ const value = metadata[RELATED_JSON_SCHEMA_CREDENTIAL_ID_TAG];
47
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
48
+ }
49
+ class AnonCredsTrustService {
50
+ constructor(agent) {
51
+ this.agent = agent;
52
+ this.derivations = new Map();
53
+ this.credentialSchemaLinks = new Map();
54
+ }
55
+ async deriveCredentialSchema(reference) {
56
+ const key = 'credentialDefinitionId' in reference
57
+ ? `credentialDefinition:${reference.credentialDefinitionId}`
58
+ : `schema:${reference.schemaId}`;
59
+ const cached = this.derivations.get(key);
60
+ if (cached)
61
+ return cached;
62
+ const object = await this.resolveAnonCredsObject(reference);
63
+ const link = await this.resolveCredentialSchemaLink(object.jsonSchemaCredentialId);
64
+ const derived = {
65
+ credentialSchemaId: link.credentialSchemaId,
66
+ ecosystemDid: link.ecosystemDid,
67
+ jsonSchemaCredentialId: object.jsonSchemaCredentialId,
68
+ anonCredsSchemaId: object.anonCredsSchemaId,
69
+ issuerId: object.issuerId,
70
+ };
71
+ this.derivations.set(key, derived);
72
+ return derived;
73
+ }
74
+ async assertAuthorized(options) {
75
+ const { did, role, credentialSchemaId } = options;
76
+ let participants;
77
+ try {
78
+ participants = await this.agent.indexer.listParticipants({
79
+ did,
80
+ role,
81
+ schemaId: credentialSchemaId,
82
+ participantState: types_1.ParticipantState.Active,
83
+ });
84
+ }
85
+ catch (error) {
86
+ throw unavailable(`the agent cannot read the Participant entries of "${did}" for the CredentialSchema ${credentialSchemaId}: ${error}`);
87
+ }
88
+ const authorized = (participants !== null && participants !== void 0 ? participants : []).some(participant => participant.did === did &&
89
+ participant.role === role &&
90
+ Number(participant.schema_id) === credentialSchemaId &&
91
+ participant.participant_state === types_1.ParticipantState.Active);
92
+ if (!authorized) {
93
+ throw notAuthorized(`"${did}" holds no active ${role} Participant for the CredentialSchema ${credentialSchemaId}`);
94
+ }
95
+ }
96
+ async assertOwnAuthorization(options) {
97
+ if (!this.agent.did) {
98
+ throw unavailable('the agent has no public DID, so it cannot check its own Participant entry');
99
+ }
100
+ await this.assertAuthorized(Object.assign({ did: this.agent.did }, options));
101
+ }
102
+ async findUnaccreditedDids(dids, role, credentialSchemaId) {
103
+ const unaccredited = [];
104
+ const unchecked = [];
105
+ for (const did of new Set(dids)) {
106
+ try {
107
+ await this.assertAuthorized({ did, role, credentialSchemaId });
108
+ }
109
+ catch (error) {
110
+ if (!(error instanceof AnonCredsTrustError))
111
+ throw error;
112
+ if (error.reason === AnonCredsTrustErrorReason.Unavailable)
113
+ unchecked.push(did);
114
+ else
115
+ unaccredited.push(did);
116
+ }
117
+ }
118
+ return { unaccredited, unchecked };
119
+ }
120
+ async resolveAnonCredsObject(reference) {
121
+ var _a, _b;
122
+ const anoncreds = this.agent.modules.anoncreds;
123
+ if ('credentialDefinitionId' in reference) {
124
+ const { credentialDefinitionId } = reference;
125
+ const [record] = await anoncreds.getCreatedCredentialDefinitions({ credentialDefinitionId });
126
+ const localId = record === null || record === void 0 ? void 0 : record.getTag(RELATED_JSON_SCHEMA_CREDENTIAL_ID_TAG);
127
+ if (record && typeof localId === 'string' && localId.length > 0) {
128
+ return {
129
+ jsonSchemaCredentialId: localId,
130
+ anonCredsSchemaId: record.credentialDefinition.schemaId,
131
+ issuerId: record.credentialDefinition.issuerId,
132
+ };
133
+ }
134
+ const result = await anoncreds.getCredentialDefinition(credentialDefinitionId, {
135
+ useLocalRecord: false,
136
+ });
137
+ if (!result.credentialDefinition) {
138
+ throw unavailable(`the agent cannot resolve the credential definition "${credentialDefinitionId}": ${(_a = result.resolutionMetadata.message) !== null && _a !== void 0 ? _a : result.resolutionMetadata.error}`);
139
+ }
140
+ const jsonSchemaCredentialId = relatedJsonSchemaCredentialIdOf(result.credentialDefinitionMetadata);
141
+ if (!jsonSchemaCredentialId) {
142
+ throw notDerivable(`the credential definition "${credentialDefinitionId}" carries no relatedJsonSchemaCredentialId, so it binds to no CredentialSchema`);
143
+ }
144
+ return {
145
+ jsonSchemaCredentialId,
146
+ anonCredsSchemaId: result.credentialDefinition.schemaId,
147
+ issuerId: result.credentialDefinition.issuerId,
148
+ };
149
+ }
150
+ const { schemaId } = reference;
151
+ const [record] = await anoncreds.getCreatedSchemas({ schemaId });
152
+ const localId = record === null || record === void 0 ? void 0 : record.getTag(RELATED_JSON_SCHEMA_CREDENTIAL_ID_TAG);
153
+ if (record && typeof localId === 'string' && localId.length > 0) {
154
+ return { jsonSchemaCredentialId: localId, anonCredsSchemaId: schemaId };
155
+ }
156
+ const result = await anoncreds.getSchema(schemaId, { useLocalRecord: false });
157
+ if (!result.schema) {
158
+ throw unavailable(`the agent cannot resolve the AnonCreds schema "${schemaId}": ${(_b = result.resolutionMetadata.message) !== null && _b !== void 0 ? _b : result.resolutionMetadata.error}`);
159
+ }
160
+ const jsonSchemaCredentialId = relatedJsonSchemaCredentialIdOf(result.schemaMetadata);
161
+ if (!jsonSchemaCredentialId) {
162
+ throw notDerivable(`the AnonCreds schema "${schemaId}" carries no relatedJsonSchemaCredentialId, so it binds to no CredentialSchema`);
163
+ }
164
+ return { jsonSchemaCredentialId, anonCredsSchemaId: schemaId };
165
+ }
166
+ async resolveCredentialSchemaLink(jsonSchemaCredentialId) {
167
+ var _a, _b, _c;
168
+ const cached = this.credentialSchemaLinks.get(jsonSchemaCredentialId);
169
+ if (cached)
170
+ return cached;
171
+ let document;
172
+ try {
173
+ document = await (0, util_1.fetchJson)(jsonSchemaCredentialId, VTJSC_FETCH_TIMEOUT_MS);
174
+ }
175
+ catch (error) {
176
+ throw unavailable(`the agent cannot read the VTJSC "${jsonSchemaCredentialId}": ${error}`);
177
+ }
178
+ await this.verifyVtjscProof(jsonSchemaCredentialId, document);
179
+ const subject = Array.isArray(document.credentialSubject)
180
+ ? document.credentialSubject[0]
181
+ : document.credentialSubject;
182
+ const schemaReference = (_a = subject === null || subject === void 0 ? void 0 : subject.jsonSchema) === null || _a === void 0 ? void 0 : _a.$ref;
183
+ const parsed = schemaReference === null || schemaReference === void 0 ? void 0 : schemaReference.match(CREDENTIAL_SCHEMA_REFERENCE);
184
+ if (!parsed) {
185
+ throw notDerivable(`the VTJSC "${jsonSchemaCredentialId}" names "${schemaReference !== null && schemaReference !== void 0 ? schemaReference : 'no'}" in credentialSubject.jsonSchema.$ref, which is no "vpr:verana:<chain>:cs:<id>" reference`);
186
+ }
187
+ const chainId = (_b = this.agent.veranaChain) === null || _b === void 0 ? void 0 : _b.getChainId;
188
+ if (!chainId) {
189
+ throw unavailable(`the agent runs on no chain, so it cannot read the CredentialSchema of the VTJSC "${jsonSchemaCredentialId}"`);
190
+ }
191
+ if (parsed[1] !== chainId) {
192
+ throw notDerivable(`the VTJSC "${jsonSchemaCredentialId}" names the chain "${parsed[1]}", and the agent runs on "${chainId}"`);
193
+ }
194
+ const credentialSchemaId = Number(parsed[2]);
195
+ const credentialSchema = await this.requireFromIndexer(() => this.agent.indexer.getCredentialSchema(credentialSchemaId, { allowNotFound: true }), `CredentialSchema ${credentialSchemaId}, which the VTJSC "${jsonSchemaCredentialId}" names`);
196
+ const ecosystem = await this.requireFromIndexer(() => this.agent.indexer.getEcosystem(credentialSchema.ecosystem_id, { allowNotFound: true }), `Ecosystem ${credentialSchema.ecosystem_id}, which the CredentialSchema ${credentialSchemaId} names`);
197
+ const ecosystemDid = ecosystem.did;
198
+ if (!ecosystemDid) {
199
+ throw notDerivable(`the Ecosystem of the CredentialSchema ${credentialSchemaId} carries no DID`);
200
+ }
201
+ const issuer = typeof document.issuer === 'string' ? document.issuer : (_c = document.issuer) === null || _c === void 0 ? void 0 : _c.id;
202
+ if (issuer !== ecosystemDid) {
203
+ throw notDerivable(`the VTJSC "${jsonSchemaCredentialId}" carries the issuer "${issuer}", and the Ecosystem of the CredentialSchema ${credentialSchemaId} is "${ecosystemDid}"`);
204
+ }
205
+ const link = { credentialSchemaId, ecosystemDid };
206
+ this.credentialSchemaLinks.set(jsonSchemaCredentialId, link);
207
+ return link;
208
+ }
209
+ async requireFromIndexer(read, describe) {
210
+ let value;
211
+ try {
212
+ value = await read();
213
+ }
214
+ catch (error) {
215
+ throw unavailable(`the agent cannot read the ${describe}: ${error}`);
216
+ }
217
+ if (!value)
218
+ throw notDerivable(`the VPR holds no ${describe}`);
219
+ return value;
220
+ }
221
+ /**
222
+ * A VTJSC is a data model 2.0 credential secured with a DataIntegrityProof, as
223
+ * [VT-JSON-SCHEMA-CRED-W3C] requires; one an ecosystem still publishes as data model 1.1 with a
224
+ * linked data proof is verified through the 1.1 API, as verre accepts both.
225
+ */
226
+ async verifyVtjscProof(jsonSchemaCredentialId, document) {
227
+ var _a;
228
+ let verify;
229
+ try {
230
+ if ((0, vcdm2_1.isVcdm2Credential)(document)) {
231
+ const credential = core_1.W3cV2DataIntegrityVerifiableCredential.fromObject(document);
232
+ verify = () => this.agent.w3cV2Credentials.verifyCredential({ credential });
233
+ }
234
+ else {
235
+ const credential = core_1.JsonTransformer.fromJSON(document, core_1.W3cJsonLdVerifiableCredential);
236
+ verify = () => this.agent.w3cCredentials.verifyCredential({ credential });
237
+ }
238
+ }
239
+ catch (error) {
240
+ throw notDerivable(`the document at "${jsonSchemaCredentialId}" is no verifiable credential: ${error}`);
241
+ }
242
+ try {
243
+ const result = await verify();
244
+ if (result.isValid)
245
+ return;
246
+ throw notDerivable(`the proof of the VTJSC "${jsonSchemaCredentialId}" is invalid: ${(_a = result.error) !== null && _a !== void 0 ? _a : 'the verification failed'}`);
247
+ }
248
+ catch (error) {
249
+ if (error instanceof AnonCredsTrustError)
250
+ throw error;
251
+ throw unavailable(`the agent cannot verify the proof of the VTJSC "${jsonSchemaCredentialId}": ${error}`);
252
+ }
253
+ }
254
+ }
255
+ exports.AnonCredsTrustService = AnonCredsTrustService;
256
+ //# sourceMappingURL=AnonCredsTrustService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnonCredsTrustService.js","sourceRoot":"","sources":["../../src/blockchain/AnonCredsTrustService.ts"],"names":[],"mappings":";;;AA8DA,kEAMC;AAlED,yCAKuB;AAEvB,wCAAyC;AACzC,0CAAkD;AAElD,mCAA2E;AAE3E,MAAM,sBAAsB,GAAG,KAAM,CAAA;AAErC,MAAM,2BAA2B,GAAG,gCAAgC,CAAA;AAEpE,MAAM,qCAAqC,GAAG,+BAA+B,CAAA;AAEhE,QAAA,qCAAqC,GAAG,kCAAkC,CAAA;AAE1E,QAAA,iCAAiC,GAAG,8BAA8B,CAAA;AAE/E,IAAY,yBAGX;AAHD,WAAY,yBAAyB;IACnC,8EAAiD,CAAA;IACjD,4FAA+D,CAAA;AACjE,CAAC,EAHW,yBAAyB,yCAAzB,yBAAyB,QAGpC;AAED,IAAY,yBAIX;AAJD,WAAY,yBAAyB;IACnC,2DAA8B,CAAA;IAC9B,6DAAgC,CAAA;IAChC,wDAA2B,CAAA;AAC7B,CAAC,EAJW,yBAAyB,yCAAzB,yBAAyB,QAIpC;AAED,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YACkB,MAAiC,EACjD,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,WAAM,GAAN,MAAM,CAA2B;QAIjD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AARD,kDAQC;AAmBD,SAAgB,2BAA2B,CAAC,EAC1C,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,GACE;IACxB,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAA;AACrE,CAAC;AA4BD,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,IAAI,mBAAmB,CAAC,yBAAyB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,IAAI,mBAAmB,CAAC,yBAAyB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AAClF,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,IAAI,mBAAmB,CAAC,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAChF,CAAC;AAED,SAAS,+BAA+B,CAAC,QAAiC;IACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,qCAAqC,CAAC,CAAA;IAC7D,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1E,CAAC;AAED,MAAa,qBAAqB;IAIhC,YAAoC,KAAgC;QAAhC,UAAK,GAAL,KAAK,CAA2B;QAHnD,gBAAW,GAAG,IAAI,GAAG,EAAmC,CAAA;QACxD,0BAAqB,GAAG,IAAI,GAAG,EAAgC,CAAA;IAET,CAAC;IAEjE,KAAK,CAAC,sBAAsB,CAAC,SAAmC;QACrE,MAAM,GAAG,GACP,wBAAwB,IAAI,SAAS;YACnC,CAAC,CAAC,wBAAwB,SAAS,CAAC,sBAAsB,EAAE;YAC5D,CAAC,CAAC,UAAU,SAAS,CAAC,QAAQ,EAAE,CAAA;QAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAA;QAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;QAElF,MAAM,OAAO,GAA4B;YACvC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;YACrD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAA;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAClC,OAAO,OAAO,CAAA;IAChB,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,OAI7B;QACC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAA;QAEjD,IAAI,YAA8B,CAAA;QAClC,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBACvD,GAAG;gBACH,IAAI;gBACJ,QAAQ,EAAE,kBAAkB;gBAC5B,gBAAgB,EAAE,wBAAgB,CAAC,MAAM;aAC1C,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CACf,qDAAqD,GAAG,8BAA8B,kBAAkB,KAAK,KAAK,EAAE,CACrH,CAAA;QACH,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,EAAE,CAAC,CAAC,IAAI,CAC1C,WAAW,CAAC,EAAE,CACZ,WAAW,CAAC,GAAG,KAAK,GAAG;YACvB,WAAW,CAAC,IAAI,KAAK,IAAI;YACzB,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,kBAAkB;YACpD,WAAW,CAAC,iBAAiB,KAAK,wBAAgB,CAAC,MAAM,CAC5D,CAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,aAAa,CACjB,IAAI,GAAG,qBAAqB,IAAI,yCAAyC,kBAAkB,EAAE,CAC9F,CAAA;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,OAGnC;QACC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACpB,MAAM,WAAW,CAAC,2EAA2E,CAAC,CAAA;QAChG,CAAC;QAED,MAAM,IAAI,CAAC,gBAAgB,iBAAG,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAK,OAAO,EAAG,CAAA;IAClE,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAC/B,IAAc,EACd,IAAqB,EACrB,kBAA0B;QAE1B,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,MAAM,SAAS,GAAa,EAAE,CAAA;QAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAA;YAChE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,mBAAmB,CAAC;oBAAE,MAAM,KAAK,CAAA;gBACxD,IAAI,KAAK,CAAC,MAAM,KAAK,yBAAyB,CAAC,WAAW;oBAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;oBAC1E,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAA;IACpC,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,SAAmC;;QAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAA;QAE9C,IAAI,wBAAwB,IAAI,SAAS,EAAE,CAAC;YAC1C,MAAM,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAA;YAE5C,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,+BAA+B,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAA;YAC5F,MAAM,OAAO,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,qCAAqC,CAAC,CAAA;YACrE,IAAI,MAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChE,OAAO;oBACL,sBAAsB,EAAE,OAAO;oBAC/B,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,CAAC,QAAQ;oBACvD,QAAQ,EAAE,MAAM,CAAC,oBAAoB,CAAC,QAAQ;iBAC/C,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,uBAAuB,CAAC,sBAAsB,EAAE;gBAC7E,cAAc,EAAE,KAAK;aACtB,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;gBACjC,MAAM,WAAW,CACf,uDAAuD,sBAAsB,MAAM,MAAA,MAAM,CAAC,kBAAkB,CAAC,OAAO,mCAAI,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAC1J,CAAA;YACH,CAAC;YAED,MAAM,sBAAsB,GAAG,+BAA+B,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACnG,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,MAAM,YAAY,CAChB,8BAA8B,sBAAsB,gFAAgF,CACrI,CAAA;YACH,CAAC;YAED,OAAO;gBACL,sBAAsB;gBACtB,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,CAAC,QAAQ;gBACvD,QAAQ,EAAE,MAAM,CAAC,oBAAoB,CAAC,QAAQ;aAC/C,CAAA;QACH,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAA;QAE9B,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAChE,MAAM,OAAO,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,qCAAqC,CAAC,CAAA;QACrE,IAAI,MAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAA;QACzE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7E,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,WAAW,CACf,kDAAkD,QAAQ,MAAM,MAAA,MAAM,CAAC,kBAAkB,CAAC,OAAO,mCAAI,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,CACvI,CAAA;QACH,CAAC;QAED,MAAM,sBAAsB,GAAG,+BAA+B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACrF,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,YAAY,CAChB,yBAAyB,QAAQ,gFAAgF,CAClH,CAAA;QACH,CAAC;QAED,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAA;IAChE,CAAC;IAEO,KAAK,CAAC,2BAA2B,CAAC,sBAA8B;;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACrE,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,IAAI,QAAuB,CAAA;QAC3B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAA,gBAAS,EAAgB,sBAAsB,EAAE,sBAAsB,CAAC,CAAA;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,oCAAoC,sBAAsB,MAAM,KAAK,EAAE,CAAC,CAAA;QAC5F,CAAC;QAED,MAAM,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAA;QAE7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACvD,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAA;QAC9B,MAAM,eAAe,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,0CAAE,IAAI,CAAA;QACjD,MAAM,MAAM,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAClE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,YAAY,CAChB,cAAc,sBAAsB,YAAY,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,IAAI,4FAA4F,CACpK,CAAA;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,WAAW,0CAAE,UAAU,CAAA;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,WAAW,CACf,oFAAoF,sBAAsB,GAAG,CAC9G,CAAA;QACH,CAAC;QACD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,YAAY,CAChB,cAAc,sBAAsB,sBAAsB,MAAM,CAAC,CAAC,CAAC,6BAA6B,OAAO,GAAG,CAC3G,CAAA;QACH,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAE5C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CACpD,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EACzF,oBAAoB,kBAAkB,sBAAsB,sBAAsB,SAAS,CAC5F,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC7C,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAC7F,aAAa,gBAAgB,CAAC,YAAY,gCAAgC,kBAAkB,QAAQ,CACrG,CAAA;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAA;QAClC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,YAAY,CAAC,yCAAyC,kBAAkB,iBAAiB,CAAC,CAAA;QAClG,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAA,QAAQ,CAAC,MAAM,0CAAE,EAAE,CAAA;QAC1F,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5B,MAAM,YAAY,CAChB,cAAc,sBAAsB,yBAAyB,MAAM,gDAAgD,kBAAkB,QAAQ,YAAY,GAAG,CAC7J,CAAA;QACH,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAA;QACjD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAI,IAAkC,EAAE,QAAgB;QACtF,IAAI,KAAoB,CAAA;QACxB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,IAAI,EAAE,CAAA;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,6BAA6B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,KAAK;YAAE,MAAM,YAAY,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;QAC9D,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gBAAgB,CAAC,sBAA8B,EAAE,QAAuB;;QACpF,IAAI,MAA0D,CAAA;QAC9D,IAAI,CAAC;YACH,IAAI,IAAA,yBAAiB,EAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,6CAAsC,CAAC,UAAU,CAClE,QAA0D,CAC3D,CAAA;gBACD,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAC7E,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,sBAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,oCAA6B,CAAC,CAAA;gBACpF,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAC3E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,CAAC,oBAAoB,sBAAsB,kCAAkC,KAAK,EAAE,CAAC,CAAA;QACzG,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAA;YAC7B,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAM;YAE1B,MAAM,YAAY,CAChB,2BAA2B,sBAAsB,iBAAiB,MAAA,MAAM,CAAC,KAAK,mCAAI,yBAAyB,EAAE,CAC9G,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,mBAAmB;gBAAE,MAAM,KAAK,CAAA;YAErD,MAAM,WAAW,CACf,mDAAmD,sBAAsB,MAAM,KAAK,EAAE,CACvF,CAAA;QACH,CAAC;IACH,CAAC;CACF;AArRD,sDAqRC"}
@@ -1,8 +1,10 @@
1
1
  import { BaseLogger } from '@credo-ts/core';
2
2
  import { VeranaChainService } from './VeranaChainService';
3
+ import { VeranaIndexerService } from './VeranaIndexerService';
3
4
  import { CachedVsOperatorAuthorizationRecord } from './types';
4
5
  export interface AuthorizationServiceConfig {
5
6
  chain: VeranaChainService;
7
+ indexer: VeranaIndexerService;
6
8
  logger: BaseLogger;
7
9
  corporationId?: number;
8
10
  minRefreshIntervalMs?: number;
@@ -11,13 +13,15 @@ export interface AuthorizationServiceConfig {
11
13
  export declare class AuthorizationService {
12
14
  private vsoaByParticipant;
13
15
  private lastRefreshAt;
16
+ private lastRefreshAtBlock;
14
17
  private readonly chain;
18
+ private readonly indexer;
15
19
  private readonly logger;
16
20
  private readonly corporationId?;
17
21
  private readonly minRefreshIntervalMs;
18
22
  constructor(config: AuthorizationServiceConfig);
19
23
  private inScope;
20
- refreshForOperator(): Promise<void>;
24
+ refreshForOperator(minBlock?: number): Promise<void>;
21
25
  invalidateParticipant(participantId: number): void;
22
26
  canSign(participantId: number, msgType: string): boolean;
23
27
  getVsOperatorAuthorizationRecord(participantId: number): CachedVsOperatorAuthorizationRecord | undefined;
@@ -25,6 +29,4 @@ export declare class AuthorizationService {
25
29
  hasFeegrant(participantId: number): boolean;
26
30
  agentHoldsOperatorGrant(msgType: string): Promise<boolean>;
27
31
  callerHoldsOperatorGrant(account: string, msgType: string): Promise<boolean>;
28
- callerHoldsAnyVsOperatorGrant(account: string, msgType: string): Promise<boolean>;
29
- callerHoldsVsOperatorGrant(account: string, participantId: number, msgType: string): Promise<boolean>;
30
32
  }
@@ -7,19 +7,19 @@ function renews(period) {
7
7
  var _a;
8
8
  return period != null && (period.seconds > 0 || ((_a = period.nanos) !== null && _a !== void 0 ? _a : 0) > 0);
9
9
  }
10
- function isOperatorAuthorizationActive(expiration, period) {
10
+ // An unset expiration means the grant never expires (AUTHZ-CHECK-3 step 4, AUTHZ-CHECK-1 step 2).
11
+ function isAuthorizationActive(expiration, period) {
11
12
  return expiration === undefined || expiration.getTime() > Date.now() || renews(period);
12
13
  }
13
- function isVsoaRecordActive(expiration, period) {
14
- return expiration != null && (expiration.getTime() > Date.now() || renews(period));
15
- }
16
14
  /** VS operator authorization records cached for the admin API (https://github.com/verana-labs/vs-agent/issues/472); operator authorizations are queried on demand. */
17
15
  class AuthorizationService {
18
16
  constructor(config) {
19
17
  var _a;
20
18
  this.vsoaByParticipant = new Map();
21
19
  this.lastRefreshAt = 0;
20
+ this.lastRefreshAtBlock = 0;
22
21
  this.chain = config.chain;
22
+ this.indexer = config.indexer;
23
23
  this.logger = config.logger;
24
24
  this.corporationId = config.corporationId;
25
25
  this.minRefreshIntervalMs = (_a = config.minRefreshIntervalMs) !== null && _a !== void 0 ? _a : 2000;
@@ -27,12 +27,18 @@ class AuthorizationService {
27
27
  inScope(corporationId) {
28
28
  return this.corporationId === undefined || corporationId === this.corporationId;
29
29
  }
30
- async refreshForOperator() {
31
- // Catch-up replays hit the same current chain state, so back-to-back refreshes are skipped.
32
- if (Date.now() - this.lastRefreshAt < this.minRefreshIntervalMs)
30
+ // `minBlock` is the block of the indexer event that triggered the refresh. The delegation
31
+ // projection has its own checkpoint, so without it a read can still answer with pre-event state.
32
+ async refreshForOperator(minBlock) {
33
+ // Catch-up replays hit the same current chain state, so back-to-back refreshes are skipped,
34
+ // unless the caller needs a block this cache has not covered yet.
35
+ const staleForBlock = minBlock !== undefined && minBlock > this.lastRefreshAtBlock;
36
+ if (!staleForBlock && Date.now() - this.lastRefreshAt < this.minRefreshIntervalMs)
33
37
  return;
34
- const vsoas = await this.chain.listVsOperatorAuthorizations();
38
+ const vsoas = await this.indexer.listVsOperatorAuthorizations(this.chain.address, minBlock);
35
39
  this.lastRefreshAt = Date.now();
40
+ if (minBlock !== undefined)
41
+ this.lastRefreshAtBlock = minBlock;
36
42
  const rebuilt = new Map();
37
43
  for (const vsoa of vsoas) {
38
44
  if (!this.inScope(vsoa.corporationId))
@@ -51,7 +57,7 @@ class AuthorizationService {
51
57
  }
52
58
  canSign(participantId, msgType) {
53
59
  const record = this.vsoaByParticipant.get(participantId);
54
- return (!!record && record.msgTypes.includes(msgType) && isVsoaRecordActive(record.expiration, record.period));
60
+ return (!!record && record.msgTypes.includes(msgType) && isAuthorizationActive(record.expiration, record.period));
55
61
  }
56
62
  getVsOperatorAuthorizationRecord(participantId) {
57
63
  return this.vsoaByParticipant.get(participantId);
@@ -72,28 +78,10 @@ class AuthorizationService {
72
78
  async callerHoldsOperatorGrant(account, msgType) {
73
79
  if (!account.trim())
74
80
  return false;
75
- const auths = await this.chain.listOperatorAuthorizations(account);
81
+ const auths = await this.indexer.listOperatorAuthorizations(account);
76
82
  return auths.some(a => this.inScope(a.corporationId) &&
77
83
  a.msgTypes.includes(msgType) &&
78
- isOperatorAuthorizationActive(a.expiration, a.period));
79
- }
80
- async callerHoldsAnyVsOperatorGrant(account, msgType) {
81
- if (!account.trim())
82
- return false;
83
- const vsoas = await this.chain.listVsOperatorAuthorizations(account);
84
- return vsoas.some(vsoa => this.inScope(vsoa.corporationId) &&
85
- vsoa.records.some(r => this.vsoaByParticipant.has(r.participantId) &&
86
- r.msgTypes.includes(msgType) &&
87
- isVsoaRecordActive(r.expiration, r.period)));
88
- }
89
- async callerHoldsVsOperatorGrant(account, participantId, msgType) {
90
- if (!account.trim())
91
- return false;
92
- const vsoas = await this.chain.listVsOperatorAuthorizations(account);
93
- return vsoas.some(vsoa => this.inScope(vsoa.corporationId) &&
94
- vsoa.records.some(r => r.participantId === participantId &&
95
- r.msgTypes.includes(msgType) &&
96
- isVsoaRecordActive(r.expiration, r.period)));
84
+ isAuthorizationActive(a.expiration, a.period));
97
85
  }
98
86
  }
99
87
  exports.AuthorizationService = AuthorizationService;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorizationService.js","sourceRoot":"","sources":["../../src/blockchain/AuthorizationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthorizationService.js","sourceRoot":"","sources":["../../src/blockchain/AuthorizationService.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export interface IndexerWebSocketServiceOptions {
7
7
  corporationId?: number;
8
8
  agentCorporationId?: number;
9
9
  }
10
+ export type IndexerSyncStatus = 'never-synced' | 'catching-up' | 'disconnected' | 'synced';
10
11
  export declare class IndexerWebSocketService {
11
12
  private readonly options;
12
13
  private ws;
@@ -15,18 +16,22 @@ export declare class IndexerWebSocketService {
15
16
  private watchdog;
16
17
  private stopped;
17
18
  private syncing;
19
+ private phase;
20
+ private everSynced;
18
21
  private generation;
19
22
  private chain;
20
23
  private syncBuffer;
21
- private subscribeSent;
24
+ private settleSubscribed;
22
25
  private readonly indexer;
23
26
  private readonly handlerRegistry;
24
27
  constructor(options: IndexerWebSocketServiceOptions);
25
28
  start(): Promise<void>;
29
+ get syncStatus(): IndexerSyncStatus;
26
30
  stop(): void;
27
31
  private get logger();
28
32
  private connect;
29
33
  private openWebSocket;
34
+ private resolveSubscribed;
30
35
  private handleMessage;
31
36
  private syncRest;
32
37
  private drainSyncBuffer;
@@ -34,6 +39,7 @@ export declare class IndexerWebSocketService {
34
39
  private runExclusive;
35
40
  private applyEvent;
36
41
  private applyChanges;
42
+ private emitNotification;
37
43
  private fetchActivity;
38
44
  private fetchEntity;
39
45
  private armWatchdog;