@kya-os/mcp-i-core 1.3.12 → 1.3.14

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 (254) hide show
  1. package/dist/config/remote-config.js +9 -12
  2. package/dist/runtime/base.js +11 -0
  3. package/dist/services/access-control.service.js +5 -0
  4. package/dist/services/tool-protection.service.js +17 -8
  5. package/package.json +2 -2
  6. package/.turbo/turbo-build.log +0 -4
  7. package/.turbo/turbo-test$colon$coverage.log +0 -4586
  8. package/.turbo/turbo-test.log +0 -3169
  9. package/COMPLIANCE_IMPROVEMENT_REPORT.md +0 -483
  10. package/Composer 3.md +0 -615
  11. package/GPT-5.md +0 -1169
  12. package/OPUS-plan.md +0 -352
  13. package/PHASE_3_AND_4.1_SUMMARY.md +0 -585
  14. package/PHASE_3_SUMMARY.md +0 -317
  15. package/PHASE_4.1.3_SUMMARY.md +0 -428
  16. package/PHASE_4.1_COMPLETE.md +0 -525
  17. package/PHASE_4_USER_DID_IDENTITY_LINKING_PLAN.md +0 -1240
  18. package/SCHEMA_COMPLIANCE_REPORT.md +0 -275
  19. package/TEST_PLAN.md +0 -571
  20. package/coverage/coverage-final.json +0 -60
  21. package/dist/cache/oauth-config-cache.d.ts.map +0 -1
  22. package/dist/cache/oauth-config-cache.js.map +0 -1
  23. package/dist/cache/tool-protection-cache.d.ts.map +0 -1
  24. package/dist/cache/tool-protection-cache.js.map +0 -1
  25. package/dist/compliance/index.d.ts.map +0 -1
  26. package/dist/compliance/index.js.map +0 -1
  27. package/dist/compliance/schema-registry.d.ts.map +0 -1
  28. package/dist/compliance/schema-registry.js.map +0 -1
  29. package/dist/compliance/schema-verifier.d.ts.map +0 -1
  30. package/dist/compliance/schema-verifier.js.map +0 -1
  31. package/dist/config/remote-config.d.ts.map +0 -1
  32. package/dist/config/remote-config.js.map +0 -1
  33. package/dist/config.d.ts.map +0 -1
  34. package/dist/config.js.map +0 -1
  35. package/dist/delegation/audience-validator.d.ts.map +0 -1
  36. package/dist/delegation/audience-validator.js.map +0 -1
  37. package/dist/delegation/bitstring.d.ts.map +0 -1
  38. package/dist/delegation/bitstring.js.map +0 -1
  39. package/dist/delegation/cascading-revocation.d.ts.map +0 -1
  40. package/dist/delegation/cascading-revocation.js.map +0 -1
  41. package/dist/delegation/delegation-graph.d.ts.map +0 -1
  42. package/dist/delegation/delegation-graph.js.map +0 -1
  43. package/dist/delegation/did-key-resolver.d.ts.map +0 -1
  44. package/dist/delegation/did-key-resolver.js.map +0 -1
  45. package/dist/delegation/index.d.ts.map +0 -1
  46. package/dist/delegation/index.js.map +0 -1
  47. package/dist/delegation/statuslist-manager.d.ts.map +0 -1
  48. package/dist/delegation/statuslist-manager.js.map +0 -1
  49. package/dist/delegation/storage/index.d.ts.map +0 -1
  50. package/dist/delegation/storage/index.js.map +0 -1
  51. package/dist/delegation/storage/memory-graph-storage.d.ts.map +0 -1
  52. package/dist/delegation/storage/memory-graph-storage.js.map +0 -1
  53. package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +0 -1
  54. package/dist/delegation/storage/memory-statuslist-storage.js.map +0 -1
  55. package/dist/delegation/utils.d.ts.map +0 -1
  56. package/dist/delegation/utils.js.map +0 -1
  57. package/dist/delegation/vc-issuer.d.ts.map +0 -1
  58. package/dist/delegation/vc-issuer.js.map +0 -1
  59. package/dist/delegation/vc-verifier.d.ts.map +0 -1
  60. package/dist/delegation/vc-verifier.js.map +0 -1
  61. package/dist/identity/idp-token-resolver.d.ts.map +0 -1
  62. package/dist/identity/idp-token-resolver.js.map +0 -1
  63. package/dist/identity/idp-token-storage.interface.d.ts.map +0 -1
  64. package/dist/identity/idp-token-storage.interface.js.map +0 -1
  65. package/dist/identity/user-did-manager.d.ts.map +0 -1
  66. package/dist/identity/user-did-manager.js.map +0 -1
  67. package/dist/index.d.ts.map +0 -1
  68. package/dist/index.js.map +0 -1
  69. package/dist/providers/base.d.ts.map +0 -1
  70. package/dist/providers/base.js.map +0 -1
  71. package/dist/providers/memory.d.ts.map +0 -1
  72. package/dist/providers/memory.js.map +0 -1
  73. package/dist/runtime/audit-logger.d.ts.map +0 -1
  74. package/dist/runtime/audit-logger.js.map +0 -1
  75. package/dist/runtime/base.d.ts.map +0 -1
  76. package/dist/runtime/base.js.map +0 -1
  77. package/dist/services/access-control.service.d.ts.map +0 -1
  78. package/dist/services/access-control.service.js.map +0 -1
  79. package/dist/services/authorization/authorization-registry.d.ts.map +0 -1
  80. package/dist/services/authorization/authorization-registry.js.map +0 -1
  81. package/dist/services/authorization/types.d.ts.map +0 -1
  82. package/dist/services/authorization/types.js.map +0 -1
  83. package/dist/services/batch-delegation.service.d.ts.map +0 -1
  84. package/dist/services/batch-delegation.service.js.map +0 -1
  85. package/dist/services/crypto.service.d.ts.map +0 -1
  86. package/dist/services/crypto.service.js.map +0 -1
  87. package/dist/services/errors.d.ts.map +0 -1
  88. package/dist/services/errors.js.map +0 -1
  89. package/dist/services/index.d.ts.map +0 -1
  90. package/dist/services/index.js.map +0 -1
  91. package/dist/services/oauth-config.service.d.ts.map +0 -1
  92. package/dist/services/oauth-config.service.js.map +0 -1
  93. package/dist/services/oauth-provider-registry.d.ts.map +0 -1
  94. package/dist/services/oauth-provider-registry.js.map +0 -1
  95. package/dist/services/oauth-service.d.ts.map +0 -1
  96. package/dist/services/oauth-service.js.map +0 -1
  97. package/dist/services/oauth-token-retrieval.service.d.ts.map +0 -1
  98. package/dist/services/oauth-token-retrieval.service.js.map +0 -1
  99. package/dist/services/proof-verifier.d.ts.map +0 -1
  100. package/dist/services/proof-verifier.js.map +0 -1
  101. package/dist/services/provider-resolver.d.ts.map +0 -1
  102. package/dist/services/provider-resolver.js.map +0 -1
  103. package/dist/services/provider-validator.d.ts.map +0 -1
  104. package/dist/services/provider-validator.js.map +0 -1
  105. package/dist/services/session-registration.service.d.ts.map +0 -1
  106. package/dist/services/session-registration.service.js.map +0 -1
  107. package/dist/services/storage.service.d.ts.map +0 -1
  108. package/dist/services/storage.service.js.map +0 -1
  109. package/dist/services/tool-context-builder.d.ts.map +0 -1
  110. package/dist/services/tool-context-builder.js.map +0 -1
  111. package/dist/services/tool-protection.service.d.ts.map +0 -1
  112. package/dist/services/tool-protection.service.js.map +0 -1
  113. package/dist/types/oauth-required-error.d.ts.map +0 -1
  114. package/dist/types/oauth-required-error.js.map +0 -1
  115. package/dist/types/tool-protection.d.ts.map +0 -1
  116. package/dist/types/tool-protection.js.map +0 -1
  117. package/dist/utils/base58.d.ts.map +0 -1
  118. package/dist/utils/base58.js.map +0 -1
  119. package/dist/utils/base64.d.ts.map +0 -1
  120. package/dist/utils/base64.js.map +0 -1
  121. package/dist/utils/cors.d.ts.map +0 -1
  122. package/dist/utils/cors.js.map +0 -1
  123. package/dist/utils/did-helpers.d.ts.map +0 -1
  124. package/dist/utils/did-helpers.js.map +0 -1
  125. package/dist/utils/index.d.ts.map +0 -1
  126. package/dist/utils/index.js.map +0 -1
  127. package/dist/utils/storage-keys.d.ts.map +0 -1
  128. package/dist/utils/storage-keys.js.map +0 -1
  129. package/docs/API_REFERENCE.md +0 -1362
  130. package/docs/COMPLIANCE_MATRIX.md +0 -691
  131. package/docs/STATUSLIST2021_GUIDE.md +0 -696
  132. package/docs/W3C_VC_DELEGATION_GUIDE.md +0 -710
  133. package/src/__tests__/cache/tool-protection-cache.test.ts +0 -640
  134. package/src/__tests__/config/provider-runtime-config.test.ts +0 -309
  135. package/src/__tests__/delegation-e2e.test.ts +0 -690
  136. package/src/__tests__/identity/user-did-manager.test.ts +0 -232
  137. package/src/__tests__/index.test.ts +0 -56
  138. package/src/__tests__/integration/full-flow.test.ts +0 -789
  139. package/src/__tests__/integration.test.ts +0 -281
  140. package/src/__tests__/providers/base.test.ts +0 -173
  141. package/src/__tests__/providers/memory.test.ts +0 -319
  142. package/src/__tests__/regression/phase2-regression.test.ts +0 -429
  143. package/src/__tests__/runtime/audit-logger.test.ts +0 -154
  144. package/src/__tests__/runtime/base-extensions.test.ts +0 -595
  145. package/src/__tests__/runtime/base.test.ts +0 -869
  146. package/src/__tests__/runtime/delegation-flow.test.ts +0 -164
  147. package/src/__tests__/runtime/proof-client-did.test.ts +0 -376
  148. package/src/__tests__/runtime/route-interception.test.ts +0 -686
  149. package/src/__tests__/runtime/tool-protection-enforcement.test.ts +0 -908
  150. package/src/__tests__/services/agentshield-integration.test.ts +0 -791
  151. package/src/__tests__/services/cache-busting.test.ts +0 -125
  152. package/src/__tests__/services/oauth-service-pkce.test.ts +0 -556
  153. package/src/__tests__/services/provider-resolver-edge-cases.test.ts +0 -591
  154. package/src/__tests__/services/tool-protection-merged-config.test.ts +0 -485
  155. package/src/__tests__/services/tool-protection-oauth-provider.test.ts +0 -480
  156. package/src/__tests__/services/tool-protection.service.test.ts +0 -1373
  157. package/src/__tests__/utils/mock-providers.ts +0 -340
  158. package/src/cache/oauth-config-cache.d.ts +0 -69
  159. package/src/cache/oauth-config-cache.d.ts.map +0 -1
  160. package/src/cache/oauth-config-cache.js.map +0 -1
  161. package/src/cache/oauth-config-cache.ts +0 -123
  162. package/src/cache/tool-protection-cache.ts +0 -171
  163. package/src/compliance/EXAMPLE.md +0 -412
  164. package/src/compliance/__tests__/schema-verifier.test.ts +0 -797
  165. package/src/compliance/index.ts +0 -8
  166. package/src/compliance/schema-registry.ts +0 -460
  167. package/src/compliance/schema-verifier.ts +0 -708
  168. package/src/config/__tests__/merged-config.spec.ts +0 -445
  169. package/src/config/__tests__/remote-config.spec.ts +0 -268
  170. package/src/config/remote-config.ts +0 -264
  171. package/src/config.ts +0 -312
  172. package/src/delegation/__tests__/audience-validator.test.ts +0 -112
  173. package/src/delegation/__tests__/bitstring.test.ts +0 -346
  174. package/src/delegation/__tests__/cascading-revocation.test.ts +0 -628
  175. package/src/delegation/__tests__/delegation-graph.test.ts +0 -584
  176. package/src/delegation/__tests__/did-key-resolver.test.ts +0 -265
  177. package/src/delegation/__tests__/utils.test.ts +0 -152
  178. package/src/delegation/__tests__/vc-issuer.test.ts +0 -442
  179. package/src/delegation/__tests__/vc-verifier.test.ts +0 -922
  180. package/src/delegation/audience-validator.ts +0 -52
  181. package/src/delegation/bitstring.ts +0 -278
  182. package/src/delegation/cascading-revocation.ts +0 -370
  183. package/src/delegation/delegation-graph.ts +0 -299
  184. package/src/delegation/did-key-resolver.ts +0 -179
  185. package/src/delegation/index.ts +0 -14
  186. package/src/delegation/statuslist-manager.ts +0 -353
  187. package/src/delegation/storage/__tests__/memory-graph-storage.test.ts +0 -366
  188. package/src/delegation/storage/__tests__/memory-statuslist-storage.test.ts +0 -228
  189. package/src/delegation/storage/index.ts +0 -9
  190. package/src/delegation/storage/memory-graph-storage.ts +0 -178
  191. package/src/delegation/storage/memory-statuslist-storage.ts +0 -77
  192. package/src/delegation/utils.ts +0 -221
  193. package/src/delegation/vc-issuer.ts +0 -232
  194. package/src/delegation/vc-verifier.ts +0 -568
  195. package/src/identity/idp-token-resolver.ts +0 -181
  196. package/src/identity/idp-token-storage.interface.ts +0 -94
  197. package/src/identity/user-did-manager.ts +0 -526
  198. package/src/index.ts +0 -310
  199. package/src/providers/base.d.ts +0 -91
  200. package/src/providers/base.d.ts.map +0 -1
  201. package/src/providers/base.js.map +0 -1
  202. package/src/providers/base.ts +0 -96
  203. package/src/providers/memory.ts +0 -142
  204. package/src/runtime/audit-logger.ts +0 -39
  205. package/src/runtime/base.ts +0 -1392
  206. package/src/services/__tests__/access-control.integration.test.ts +0 -443
  207. package/src/services/__tests__/access-control.proof-response-validation.test.ts +0 -578
  208. package/src/services/__tests__/access-control.service.test.ts +0 -970
  209. package/src/services/__tests__/batch-delegation.service.test.ts +0 -351
  210. package/src/services/__tests__/crypto.service.test.ts +0 -531
  211. package/src/services/__tests__/oauth-provider-registry.test.ts +0 -142
  212. package/src/services/__tests__/proof-verifier.integration.test.ts +0 -485
  213. package/src/services/__tests__/proof-verifier.test.ts +0 -489
  214. package/src/services/__tests__/provider-resolution.integration.test.ts +0 -202
  215. package/src/services/__tests__/provider-resolver.test.ts +0 -213
  216. package/src/services/__tests__/storage.service.test.ts +0 -358
  217. package/src/services/access-control.service.ts +0 -990
  218. package/src/services/authorization/authorization-registry.ts +0 -66
  219. package/src/services/authorization/types.ts +0 -71
  220. package/src/services/batch-delegation.service.ts +0 -137
  221. package/src/services/crypto.service.ts +0 -302
  222. package/src/services/errors.ts +0 -76
  223. package/src/services/index.ts +0 -18
  224. package/src/services/oauth-config.service.d.ts +0 -53
  225. package/src/services/oauth-config.service.d.ts.map +0 -1
  226. package/src/services/oauth-config.service.js.map +0 -1
  227. package/src/services/oauth-config.service.ts +0 -192
  228. package/src/services/oauth-provider-registry.d.ts +0 -57
  229. package/src/services/oauth-provider-registry.d.ts.map +0 -1
  230. package/src/services/oauth-provider-registry.js.map +0 -1
  231. package/src/services/oauth-provider-registry.ts +0 -141
  232. package/src/services/oauth-service.ts +0 -544
  233. package/src/services/oauth-token-retrieval.service.ts +0 -245
  234. package/src/services/proof-verifier.ts +0 -478
  235. package/src/services/provider-resolver.d.ts +0 -48
  236. package/src/services/provider-resolver.d.ts.map +0 -1
  237. package/src/services/provider-resolver.js.map +0 -1
  238. package/src/services/provider-resolver.ts +0 -146
  239. package/src/services/provider-validator.ts +0 -170
  240. package/src/services/session-registration.service.ts +0 -251
  241. package/src/services/storage.service.ts +0 -566
  242. package/src/services/tool-context-builder.ts +0 -237
  243. package/src/services/tool-protection.service.ts +0 -1070
  244. package/src/types/oauth-required-error.ts +0 -63
  245. package/src/types/tool-protection.ts +0 -155
  246. package/src/utils/__tests__/did-helpers.test.ts +0 -156
  247. package/src/utils/base58.ts +0 -109
  248. package/src/utils/base64.ts +0 -148
  249. package/src/utils/cors.ts +0 -83
  250. package/src/utils/did-helpers.ts +0 -210
  251. package/src/utils/index.ts +0 -8
  252. package/src/utils/storage-keys.ts +0 -278
  253. package/tsconfig.json +0 -21
  254. package/vitest.config.ts +0 -56
@@ -1,353 +0,0 @@
1
- /**
2
- * StatusList2021 Manager
3
- *
4
- * Manages StatusList2021 credentials for efficient delegation revocation.
5
- * Follows the Python POC design from Delegation-Revocation.md.
6
- *
7
- * SOLID Principles:
8
- * - Single Responsibility: Manages status list allocation and updates
9
- * - Open/Closed: Extensible via storage provider interface
10
- * - Liskov Substitution: Any storage provider can be used
11
- * - Interface Segregation: Minimal storage interface
12
- * - Dependency Inversion: Depends on abstractions (storage, signing)
13
- *
14
- * Related Spec: W3C StatusList2021
15
- * Python Reference: Delegation-Revocation.md
16
- */
17
-
18
- import type {
19
- StatusList2021Credential,
20
- CredentialStatus,
21
- } from '@kya-os/contracts';
22
- import { BitstringManager, CompressionFunction, DecompressionFunction } from './bitstring';
23
- import { VCSigningFunction } from './vc-issuer';
24
- import { canonicalizeJSON } from './utils';
25
-
26
- /**
27
- * Storage provider interface for status lists
28
- *
29
- * Platform-specific implementations (CloudflareKV, DynamoDB, Redis, etc.)
30
- * implement this interface.
31
- */
32
- export interface StatusListStorageProvider {
33
- /**
34
- * Get a status list credential by ID
35
- *
36
- * @param statusListId - The status list URL
37
- * @returns The status list credential, or null if not found
38
- */
39
- getStatusList(statusListId: string): Promise<StatusList2021Credential | null>;
40
-
41
- /**
42
- * Save a status list credential
43
- *
44
- * @param statusListId - The status list URL
45
- * @param credential - The status list credential
46
- */
47
- setStatusList(
48
- statusListId: string,
49
- credential: StatusList2021Credential
50
- ): Promise<void>;
51
-
52
- /**
53
- * Allocate a new index in a status list
54
- *
55
- * Thread-safe allocation of the next available index.
56
- *
57
- * @param statusListId - The status list URL
58
- * @returns The allocated index
59
- */
60
- allocateIndex(statusListId: string): Promise<number>;
61
- }
62
-
63
- /**
64
- * Identity provider for signing status list credentials
65
- */
66
- export interface StatusListIdentityProvider {
67
- /** Get the DID of this identity */
68
- getDid(): string;
69
-
70
- /** Get the key ID of this identity */
71
- getKeyId(): string;
72
- }
73
-
74
- /**
75
- * StatusList2021 Manager
76
- *
77
- * Manages status lists for efficient delegation revocation.
78
- * Per Delegation-Revocation.md:
79
- * - StatusList2021 for efficient revocation distribution
80
- * - Compressed bitstrings for scalability
81
- * - Separate lists for revocation vs suspension
82
- */
83
- export class StatusList2021Manager {
84
- private statusListBaseUrl: string;
85
- private defaultListSize: number;
86
-
87
- constructor(
88
- private storage: StatusListStorageProvider,
89
- private identity: StatusListIdentityProvider,
90
- private signingFunction: VCSigningFunction,
91
- private compressor: CompressionFunction,
92
- private decompressor: DecompressionFunction,
93
- options?: {
94
- /** Base URL for status lists (e.g., "https://example.com/status") */
95
- statusListBaseUrl?: string;
96
- /** Default size for new status lists (number of entries) */
97
- defaultListSize?: number;
98
- }
99
- ) {
100
- this.statusListBaseUrl = options?.statusListBaseUrl || 'https://status.example.com';
101
- this.defaultListSize = options?.defaultListSize || 131072; // 128K entries (16KB compressed)
102
- }
103
-
104
- /**
105
- * Allocate a status entry for a new delegation credential
106
- *
107
- * Per Delegation-Revocation.md: Each delegation gets a unique status list entry.
108
- *
109
- * @param purpose - "revocation" or "suspension"
110
- * @returns CredentialStatus entry for the delegation VC
111
- */
112
- async allocateStatusEntry(
113
- purpose: 'revocation' | 'suspension'
114
- ): Promise<CredentialStatus> {
115
- // Determine which status list to use
116
- const statusListId = `${this.statusListBaseUrl}/${purpose}/v1`;
117
-
118
- // Allocate index in the status list (thread-safe)
119
- const index = await this.storage.allocateIndex(statusListId);
120
-
121
- // Ensure the status list exists
122
- await this.ensureStatusListExists(statusListId, purpose);
123
-
124
- // Create the credential status entry
125
- const credentialStatus: CredentialStatus = {
126
- id: `${statusListId}#${index}`,
127
- type: 'StatusList2021Entry',
128
- statusPurpose: purpose,
129
- statusListIndex: index.toString(),
130
- statusListCredential: statusListId,
131
- };
132
-
133
- return credentialStatus;
134
- }
135
-
136
- /**
137
- * Revoke or suspend a delegation by updating its status
138
- *
139
- * @param credentialStatus - The credential status entry from the VC
140
- * @param revoked - true to revoke/suspend, false to restore
141
- */
142
- async updateStatus(
143
- credentialStatus: CredentialStatus,
144
- revoked: boolean
145
- ): Promise<void> {
146
- const { statusListCredential, statusListIndex } = credentialStatus;
147
-
148
- // Get the current status list
149
- const statusList = await this.storage.getStatusList(statusListCredential);
150
- if (!statusList) {
151
- throw new Error(`Status list not found: ${statusListCredential}`);
152
- }
153
-
154
- // Decode the bitstring
155
- const manager = await BitstringManager.decode(
156
- statusList.credentialSubject.encodedList,
157
- this.compressor,
158
- this.decompressor
159
- );
160
-
161
- // Update the bit
162
- const index = parseInt(statusListIndex, 10);
163
- manager.setBit(index, revoked);
164
-
165
- // Re-encode
166
- const encodedList = await manager.encode();
167
-
168
- // Update the credential
169
- const updatedCredential: StatusList2021Credential = {
170
- ...statusList,
171
- credentialSubject: {
172
- ...statusList.credentialSubject,
173
- encodedList,
174
- },
175
- };
176
-
177
- // Re-sign the credential (proof changes when content changes)
178
- const unsignedCredential = { ...updatedCredential };
179
- delete (unsignedCredential as any).proof;
180
-
181
- const canonicalVC = canonicalizeJSON(unsignedCredential);
182
- const proof = await this.signingFunction(
183
- canonicalVC,
184
- this.identity.getDid(),
185
- this.identity.getKeyId()
186
- );
187
-
188
- const signedCredential: StatusList2021Credential = {
189
- ...updatedCredential,
190
- proof,
191
- };
192
-
193
- // Save the updated status list
194
- await this.storage.setStatusList(statusListCredential, signedCredential);
195
- }
196
-
197
- /**
198
- * Check if a credential is revoked
199
- *
200
- * @param credentialStatus - The credential status entry
201
- * @returns true if revoked/suspended, false otherwise
202
- */
203
- async checkStatus(credentialStatus: CredentialStatus): Promise<boolean> {
204
- const { statusListCredential, statusListIndex } = credentialStatus;
205
-
206
- // Get the status list
207
- const statusList = await this.storage.getStatusList(statusListCredential);
208
- if (!statusList) {
209
- // Status list doesn't exist = not revoked
210
- return false;
211
- }
212
-
213
- // Decode and check the bit
214
- const manager = await BitstringManager.decode(
215
- statusList.credentialSubject.encodedList,
216
- this.compressor,
217
- this.decompressor
218
- );
219
-
220
- const index = parseInt(statusListIndex, 10);
221
- return manager.getBit(index);
222
- }
223
-
224
- /**
225
- * Get all revoked indices in a status list
226
- *
227
- * Useful for debugging or auditing.
228
- *
229
- * @param statusListId - The status list URL
230
- * @returns Array of revoked indices
231
- */
232
- async getRevokedIndices(statusListId: string): Promise<number[]> {
233
- const statusList = await this.storage.getStatusList(statusListId);
234
- if (!statusList) {
235
- return [];
236
- }
237
-
238
- const manager = await BitstringManager.decode(
239
- statusList.credentialSubject.encodedList,
240
- this.compressor,
241
- this.decompressor
242
- );
243
-
244
- return manager.getSetBits();
245
- }
246
-
247
- /**
248
- * Ensure a status list exists, creating it if needed
249
- *
250
- * @param statusListId - The status list URL
251
- * @param purpose - "revocation" or "suspension"
252
- */
253
- private async ensureStatusListExists(
254
- statusListId: string,
255
- purpose: 'revocation' | 'suspension'
256
- ): Promise<void> {
257
- // Check if it already exists
258
- const existing = await this.storage.getStatusList(statusListId);
259
- if (existing) {
260
- return;
261
- }
262
-
263
- // Create a new status list
264
- const manager = new BitstringManager(
265
- this.defaultListSize,
266
- this.compressor,
267
- this.decompressor
268
- );
269
- const encodedList = await manager.encode();
270
-
271
- // Create the unsigned credential
272
- const unsignedCredential = {
273
- '@context': [
274
- 'https://www.w3.org/2018/credentials/v1',
275
- 'https://w3id.org/vc/status-list/2021/v1',
276
- ] as [string, string],
277
- id: statusListId,
278
- type: ['VerifiableCredential', 'StatusList2021Credential'] as ['VerifiableCredential', 'StatusList2021Credential'],
279
- issuer: this.identity.getDid(),
280
- issuanceDate: new Date().toISOString(),
281
- credentialSubject: {
282
- id: `${statusListId}#list`,
283
- type: 'StatusList2021' as const,
284
- statusPurpose: purpose,
285
- encodedList,
286
- },
287
- };
288
-
289
- // Sign it
290
- const canonicalVC = canonicalizeJSON(unsignedCredential);
291
- const proof = await this.signingFunction(
292
- canonicalVC,
293
- this.identity.getDid(),
294
- this.identity.getKeyId()
295
- );
296
-
297
- const signedCredential: StatusList2021Credential = {
298
- ...unsignedCredential,
299
- proof,
300
- };
301
-
302
- // Store it
303
- await this.storage.setStatusList(statusListId, signedCredential);
304
- }
305
-
306
- /**
307
- * Get the status list base URL
308
- */
309
- getStatusListBaseUrl(): string {
310
- return this.statusListBaseUrl;
311
- }
312
-
313
- /**
314
- * Get the default list size
315
- */
316
- getDefaultListSize(): number {
317
- return this.defaultListSize;
318
- }
319
- }
320
-
321
- /**
322
- * Create a StatusList2021 manager
323
- *
324
- * Convenience factory function.
325
- *
326
- * @param storage - Storage provider
327
- * @param identity - Identity provider
328
- * @param signingFunction - VC signing function
329
- * @param compressor - Compression function
330
- * @param decompressor - Decompression function
331
- * @param options - Manager options
332
- * @returns StatusList2021Manager instance
333
- */
334
- export function createStatusListManager(
335
- storage: StatusListStorageProvider,
336
- identity: StatusListIdentityProvider,
337
- signingFunction: VCSigningFunction,
338
- compressor: CompressionFunction,
339
- decompressor: DecompressionFunction,
340
- options?: {
341
- statusListBaseUrl?: string;
342
- defaultListSize?: number;
343
- }
344
- ): StatusList2021Manager {
345
- return new StatusList2021Manager(
346
- storage,
347
- identity,
348
- signingFunction,
349
- compressor,
350
- decompressor,
351
- options
352
- );
353
- }