@kya-os/mcp 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/LICENSE +21 -0
  3. package/README.md +135 -0
  4. package/dist/auth/handshake.d.ts +119 -0
  5. package/dist/auth/handshake.d.ts.map +1 -0
  6. package/dist/auth/handshake.js +267 -0
  7. package/dist/auth/handshake.js.map +1 -0
  8. package/dist/auth/index.d.ts +3 -0
  9. package/dist/auth/index.d.ts.map +1 -0
  10. package/dist/auth/index.js +2 -0
  11. package/dist/auth/index.js.map +1 -0
  12. package/dist/auth/types.d.ts +31 -0
  13. package/dist/auth/types.d.ts.map +1 -0
  14. package/dist/auth/types.js +7 -0
  15. package/dist/auth/types.js.map +1 -0
  16. package/dist/delegation/audience-validator.d.ts +9 -0
  17. package/dist/delegation/audience-validator.d.ts.map +1 -0
  18. package/dist/delegation/audience-validator.js +17 -0
  19. package/dist/delegation/audience-validator.js.map +1 -0
  20. package/dist/delegation/bitstring.d.ts +37 -0
  21. package/dist/delegation/bitstring.d.ts.map +1 -0
  22. package/dist/delegation/bitstring.js +117 -0
  23. package/dist/delegation/bitstring.js.map +1 -0
  24. package/dist/delegation/cascading-revocation.d.ts +45 -0
  25. package/dist/delegation/cascading-revocation.d.ts.map +1 -0
  26. package/dist/delegation/cascading-revocation.js +150 -0
  27. package/dist/delegation/cascading-revocation.js.map +1 -0
  28. package/dist/delegation/delegation-graph.d.ts +49 -0
  29. package/dist/delegation/delegation-graph.d.ts.map +1 -0
  30. package/dist/delegation/delegation-graph.js +99 -0
  31. package/dist/delegation/delegation-graph.js.map +1 -0
  32. package/dist/delegation/did-key-resolver.d.ts +64 -0
  33. package/dist/delegation/did-key-resolver.d.ts.map +1 -0
  34. package/dist/delegation/did-key-resolver.js +157 -0
  35. package/dist/delegation/did-key-resolver.js.map +1 -0
  36. package/dist/delegation/did-web-resolver.d.ts +83 -0
  37. package/dist/delegation/did-web-resolver.d.ts.map +1 -0
  38. package/dist/delegation/did-web-resolver.js +218 -0
  39. package/dist/delegation/did-web-resolver.js.map +1 -0
  40. package/dist/delegation/index.d.ts +21 -0
  41. package/dist/delegation/index.d.ts.map +1 -0
  42. package/dist/delegation/index.js +21 -0
  43. package/dist/delegation/index.js.map +1 -0
  44. package/dist/delegation/outbound-headers.d.ts +79 -0
  45. package/dist/delegation/outbound-headers.d.ts.map +1 -0
  46. package/dist/delegation/outbound-headers.js +138 -0
  47. package/dist/delegation/outbound-headers.js.map +1 -0
  48. package/dist/delegation/outbound-proof.d.ts +43 -0
  49. package/dist/delegation/outbound-proof.d.ts.map +1 -0
  50. package/dist/delegation/outbound-proof.js +52 -0
  51. package/dist/delegation/outbound-proof.js.map +1 -0
  52. package/dist/delegation/statuslist-manager.d.ts +47 -0
  53. package/dist/delegation/statuslist-manager.d.ts.map +1 -0
  54. package/dist/delegation/statuslist-manager.js +139 -0
  55. package/dist/delegation/statuslist-manager.js.map +1 -0
  56. package/dist/delegation/storage/memory-graph-storage.d.ts +70 -0
  57. package/dist/delegation/storage/memory-graph-storage.d.ts.map +1 -0
  58. package/dist/delegation/storage/memory-graph-storage.js +145 -0
  59. package/dist/delegation/storage/memory-graph-storage.js.map +1 -0
  60. package/dist/delegation/storage/memory-statuslist-storage.d.ts +19 -0
  61. package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +1 -0
  62. package/dist/delegation/storage/memory-statuslist-storage.js +33 -0
  63. package/dist/delegation/storage/memory-statuslist-storage.js.map +1 -0
  64. package/dist/delegation/utils.d.ts +49 -0
  65. package/dist/delegation/utils.d.ts.map +1 -0
  66. package/dist/delegation/utils.js +131 -0
  67. package/dist/delegation/utils.js.map +1 -0
  68. package/dist/delegation/vc-issuer.d.ts +56 -0
  69. package/dist/delegation/vc-issuer.d.ts.map +1 -0
  70. package/dist/delegation/vc-issuer.js +80 -0
  71. package/dist/delegation/vc-issuer.js.map +1 -0
  72. package/dist/delegation/vc-verifier.d.ts +112 -0
  73. package/dist/delegation/vc-verifier.d.ts.map +1 -0
  74. package/dist/delegation/vc-verifier.js +280 -0
  75. package/dist/delegation/vc-verifier.js.map +1 -0
  76. package/dist/errors.d.ts +42 -0
  77. package/dist/errors.d.ts.map +1 -0
  78. package/dist/errors.js +45 -0
  79. package/dist/errors.js.map +1 -0
  80. package/dist/index.d.ts +47 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +56 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/logging/index.d.ts +2 -0
  85. package/dist/logging/index.d.ts.map +1 -0
  86. package/dist/logging/index.js +2 -0
  87. package/dist/logging/index.js.map +1 -0
  88. package/dist/logging/logger.d.ts +23 -0
  89. package/dist/logging/logger.d.ts.map +1 -0
  90. package/dist/logging/logger.js +82 -0
  91. package/dist/logging/logger.js.map +1 -0
  92. package/dist/middleware/index.d.ts +12 -0
  93. package/dist/middleware/index.d.ts.map +1 -0
  94. package/dist/middleware/index.js +12 -0
  95. package/dist/middleware/index.js.map +1 -0
  96. package/dist/middleware/mcpi-transport.d.ts +39 -0
  97. package/dist/middleware/mcpi-transport.d.ts.map +1 -0
  98. package/dist/middleware/mcpi-transport.js +121 -0
  99. package/dist/middleware/mcpi-transport.js.map +1 -0
  100. package/dist/middleware/with-mcpi-server.d.ts +78 -0
  101. package/dist/middleware/with-mcpi-server.d.ts.map +1 -0
  102. package/dist/middleware/with-mcpi-server.js +109 -0
  103. package/dist/middleware/with-mcpi-server.js.map +1 -0
  104. package/dist/middleware/with-mcpi.d.ts +202 -0
  105. package/dist/middleware/with-mcpi.d.ts.map +1 -0
  106. package/dist/middleware/with-mcpi.js +625 -0
  107. package/dist/middleware/with-mcpi.js.map +1 -0
  108. package/dist/proof/errors.d.ts +49 -0
  109. package/dist/proof/errors.d.ts.map +1 -0
  110. package/dist/proof/errors.js +61 -0
  111. package/dist/proof/errors.js.map +1 -0
  112. package/dist/proof/generator.d.ts +65 -0
  113. package/dist/proof/generator.d.ts.map +1 -0
  114. package/dist/proof/generator.js +163 -0
  115. package/dist/proof/generator.js.map +1 -0
  116. package/dist/proof/index.d.ts +4 -0
  117. package/dist/proof/index.d.ts.map +1 -0
  118. package/dist/proof/index.js +4 -0
  119. package/dist/proof/index.js.map +1 -0
  120. package/dist/proof/verifier.d.ts +108 -0
  121. package/dist/proof/verifier.d.ts.map +1 -0
  122. package/dist/proof/verifier.js +299 -0
  123. package/dist/proof/verifier.js.map +1 -0
  124. package/dist/providers/base.d.ts +64 -0
  125. package/dist/providers/base.d.ts.map +1 -0
  126. package/dist/providers/base.js +19 -0
  127. package/dist/providers/base.js.map +1 -0
  128. package/dist/providers/index.d.ts +4 -0
  129. package/dist/providers/index.d.ts.map +1 -0
  130. package/dist/providers/index.js +4 -0
  131. package/dist/providers/index.js.map +1 -0
  132. package/dist/providers/memory.d.ts +33 -0
  133. package/dist/providers/memory.d.ts.map +1 -0
  134. package/dist/providers/memory.js +102 -0
  135. package/dist/providers/memory.js.map +1 -0
  136. package/dist/providers/node-crypto.d.ts +26 -0
  137. package/dist/providers/node-crypto.d.ts.map +1 -0
  138. package/dist/providers/node-crypto.js +69 -0
  139. package/dist/providers/node-crypto.js.map +1 -0
  140. package/dist/session/index.d.ts +2 -0
  141. package/dist/session/index.d.ts.map +1 -0
  142. package/dist/session/index.js +2 -0
  143. package/dist/session/index.js.map +1 -0
  144. package/dist/session/manager.d.ts +83 -0
  145. package/dist/session/manager.d.ts.map +1 -0
  146. package/dist/session/manager.js +267 -0
  147. package/dist/session/manager.js.map +1 -0
  148. package/dist/types/protocol.d.ts +320 -0
  149. package/dist/types/protocol.d.ts.map +1 -0
  150. package/dist/types/protocol.js +229 -0
  151. package/dist/types/protocol.js.map +1 -0
  152. package/dist/utils/base58.d.ts +31 -0
  153. package/dist/utils/base58.d.ts.map +1 -0
  154. package/dist/utils/base58.js +104 -0
  155. package/dist/utils/base58.js.map +1 -0
  156. package/dist/utils/base64.d.ts +13 -0
  157. package/dist/utils/base64.d.ts.map +1 -0
  158. package/dist/utils/base64.js +99 -0
  159. package/dist/utils/base64.js.map +1 -0
  160. package/dist/utils/crypto-service.d.ts +37 -0
  161. package/dist/utils/crypto-service.d.ts.map +1 -0
  162. package/dist/utils/crypto-service.js +154 -0
  163. package/dist/utils/crypto-service.js.map +1 -0
  164. package/dist/utils/did-helpers.d.ts +168 -0
  165. package/dist/utils/did-helpers.d.ts.map +1 -0
  166. package/dist/utils/did-helpers.js +211 -0
  167. package/dist/utils/did-helpers.js.map +1 -0
  168. package/dist/utils/ed25519-constants.d.ts +18 -0
  169. package/dist/utils/ed25519-constants.d.ts.map +1 -0
  170. package/dist/utils/ed25519-constants.js +21 -0
  171. package/dist/utils/ed25519-constants.js.map +1 -0
  172. package/dist/utils/index.d.ts +5 -0
  173. package/dist/utils/index.d.ts.map +1 -0
  174. package/dist/utils/index.js +5 -0
  175. package/dist/utils/index.js.map +1 -0
  176. package/package.json +115 -0
  177. package/schemas/README.md +117 -0
  178. package/schemas/delegation-credential.json +312 -0
  179. package/schemas/detached-proof.json +97 -0
  180. package/schemas/handshake-request.json +84 -0
  181. package/schemas/handshake-response.json +67 -0
  182. package/schemas/well-known-mcpi.json +176 -0
@@ -0,0 +1,145 @@
1
+ /**
2
+ * In-Memory Delegation Graph Storage Provider
3
+ *
4
+ * Memory-based implementation for testing and development.
5
+ * NOT suitable for production (no persistence).
6
+ *
7
+ * SOLID: Implements DelegationGraphStorageProvider interface
8
+ */
9
+ /**
10
+ * Memory-based Delegation Graph storage
11
+ *
12
+ * Stores delegation nodes in memory with efficient graph queries.
13
+ * Useful for:
14
+ * - Unit tests
15
+ * - Integration tests
16
+ * - Development/debugging
17
+ * - Examples
18
+ */
19
+ export class MemoryDelegationGraphStorage {
20
+ nodes = new Map();
21
+ /**
22
+ * Get a delegation node by ID
23
+ */
24
+ async getNode(delegationId) {
25
+ return this.nodes.get(delegationId) || null;
26
+ }
27
+ /**
28
+ * Save a delegation node
29
+ */
30
+ async setNode(node) {
31
+ this.nodes.set(node.id, node);
32
+ }
33
+ /**
34
+ * Get all children of a delegation
35
+ */
36
+ async getChildren(delegationId) {
37
+ const parent = this.nodes.get(delegationId);
38
+ if (!parent)
39
+ return [];
40
+ return parent.children
41
+ .map((childId) => this.nodes.get(childId))
42
+ .filter((node) => node !== undefined);
43
+ }
44
+ /**
45
+ * Get the full chain from root to this delegation
46
+ */
47
+ async getChain(delegationId) {
48
+ const chain = [];
49
+ let currentId = delegationId;
50
+ // Walk up the tree to root
51
+ while (currentId) {
52
+ const node = this.nodes.get(currentId);
53
+ if (!node)
54
+ break;
55
+ chain.unshift(node); // Add to front (root first)
56
+ currentId = node.parentId;
57
+ }
58
+ return chain;
59
+ }
60
+ /**
61
+ * Get all descendants (children, grandchildren, etc.)
62
+ *
63
+ * Uses BFS for efficiency.
64
+ */
65
+ async getDescendants(delegationId) {
66
+ const descendants = [];
67
+ const queue = [delegationId];
68
+ const visited = new Set();
69
+ while (queue.length > 0) {
70
+ const currentId = queue.shift();
71
+ // Skip if already visited (prevent infinite loops)
72
+ if (visited.has(currentId))
73
+ continue;
74
+ visited.add(currentId);
75
+ const node = this.nodes.get(currentId);
76
+ if (!node)
77
+ continue;
78
+ // Add children to queue
79
+ for (const childId of node.children) {
80
+ if (!visited.has(childId)) {
81
+ queue.push(childId);
82
+ const childNode = this.nodes.get(childId);
83
+ if (childNode) {
84
+ descendants.push(childNode);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ return descendants;
90
+ }
91
+ /**
92
+ * Delete a node
93
+ */
94
+ async deleteNode(delegationId) {
95
+ this.nodes.delete(delegationId);
96
+ }
97
+ /**
98
+ * Clear all data (for testing)
99
+ */
100
+ clear() {
101
+ this.nodes.clear();
102
+ }
103
+ /**
104
+ * Get all node IDs (for testing)
105
+ */
106
+ getAllNodeIds() {
107
+ return Array.from(this.nodes.keys());
108
+ }
109
+ /**
110
+ * Get graph statistics (for testing/debugging)
111
+ */
112
+ getStats() {
113
+ const nodes = Array.from(this.nodes.values());
114
+ const rootNodes = nodes.filter((n) => n.parentId === null).length;
115
+ const leafNodes = nodes.filter((n) => n.children.length === 0).length;
116
+ // Calculate max depth
117
+ let maxDepth = 0;
118
+ for (const node of nodes) {
119
+ const chain = this.getChainSync(node.id);
120
+ maxDepth = Math.max(maxDepth, chain.length - 1);
121
+ }
122
+ return {
123
+ totalNodes: nodes.length,
124
+ rootNodes,
125
+ leafNodes,
126
+ maxDepth,
127
+ };
128
+ }
129
+ /**
130
+ * Synchronous chain retrieval (for stats)
131
+ */
132
+ getChainSync(delegationId) {
133
+ const chain = [];
134
+ let currentId = delegationId;
135
+ while (currentId) {
136
+ const node = this.nodes.get(currentId);
137
+ if (!node)
138
+ break;
139
+ chain.unshift(node);
140
+ currentId = node.parentId;
141
+ }
142
+ return chain;
143
+ }
144
+ }
145
+ //# sourceMappingURL=memory-graph-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-graph-storage.js","sourceRoot":"","sources":["../../../src/delegation/storage/memory-graph-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH;;;;;;;;;GASG;AACH,MAAM,OAAO,4BAA4B;IAG/B,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,YAAoB;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,YAAoB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,OAAO,MAAM,CAAC,QAAQ;aACnB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,IAAI,EAA0B,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,YAAoB;QACjC,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,IAAI,SAAS,GAAkB,YAAY,CAAC;QAE5C,2BAA2B;QAC3B,OAAO,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,MAAM;YAEjB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;YACjD,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,YAAoB;QACvC,MAAM,WAAW,GAAqB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAa,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAEjC,mDAAmD;YACnD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YACrC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,wBAAwB;YACxB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC1C,IAAI,SAAS,EAAE,CAAC;wBACd,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,YAAoB;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QAMN,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;QAClE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAEtE,sBAAsB;QACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,SAAS;YACT,SAAS;YACT,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,YAAoB;QACvC,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,IAAI,SAAS,GAAkB,YAAY,CAAC;QAE5C,OAAO,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,MAAM;YAEjB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * In-Memory StatusList Storage Provider
3
+ *
4
+ * Memory-based implementation for testing and development.
5
+ * NOT suitable for production (no persistence).
6
+ */
7
+ import type { StatusList2021Credential } from '../../types/protocol.js';
8
+ import type { StatusListStorageProvider } from '../statuslist-manager.js';
9
+ export declare class MemoryStatusListStorage implements StatusListStorageProvider {
10
+ private statusLists;
11
+ private indexCounters;
12
+ getStatusList(statusListId: string): Promise<StatusList2021Credential | null>;
13
+ setStatusList(statusListId: string, credential: StatusList2021Credential): Promise<void>;
14
+ allocateIndex(statusListId: string): Promise<number>;
15
+ getIndexCount(statusListId: string): number;
16
+ clear(): void;
17
+ getAllStatusListIds(): string[];
18
+ }
19
+ //# sourceMappingURL=memory-statuslist-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-statuslist-storage.d.ts","sourceRoot":"","sources":["../../../src/delegation/storage/memory-statuslist-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,qBAAa,uBAAwB,YAAW,yBAAyB;IACvE,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,aAAa,CAA6B;IAE5C,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAI7E,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO1D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAI3C,KAAK,IAAI,IAAI;IAKb,mBAAmB,IAAI,MAAM,EAAE;CAGhC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * In-Memory StatusList Storage Provider
3
+ *
4
+ * Memory-based implementation for testing and development.
5
+ * NOT suitable for production (no persistence).
6
+ */
7
+ export class MemoryStatusListStorage {
8
+ statusLists = new Map();
9
+ indexCounters = new Map();
10
+ async getStatusList(statusListId) {
11
+ return this.statusLists.get(statusListId) || null;
12
+ }
13
+ async setStatusList(statusListId, credential) {
14
+ this.statusLists.set(statusListId, credential);
15
+ }
16
+ async allocateIndex(statusListId) {
17
+ const current = this.indexCounters.get(statusListId) || 0;
18
+ const allocated = current;
19
+ this.indexCounters.set(statusListId, current + 1);
20
+ return allocated;
21
+ }
22
+ getIndexCount(statusListId) {
23
+ return this.indexCounters.get(statusListId) || 0;
24
+ }
25
+ clear() {
26
+ this.statusLists.clear();
27
+ this.indexCounters.clear();
28
+ }
29
+ getAllStatusListIds() {
30
+ return Array.from(this.statusLists.keys());
31
+ }
32
+ }
33
+ //# sourceMappingURL=memory-statuslist-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-statuslist-storage.js","sourceRoot":"","sources":["../../../src/delegation/storage/memory-statuslist-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,OAAO,uBAAuB;IAC1B,WAAW,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC1D,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAElD,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,YAAoB,EAAE,UAAoC;QAC5E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,YAAoB;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Delegation Utilities
3
+ *
4
+ * Shared utility functions for delegation credential operations.
5
+ */
6
+ /**
7
+ * Canonicalize a JSON value using RFC 8785 (JSON Canonicalization Scheme).
8
+ *
9
+ * Wraps `json-canonicalize` with input validation to reject values that are
10
+ * not representable in JSON (Infinity, NaN, undefined, functions, symbols,
11
+ * bigints). The underlying library silently coerces these to `"null"` or
12
+ * `"undefined"`, which is dangerous for cryptographic canonicalization where
13
+ * distinct inputs must produce distinct outputs.
14
+ *
15
+ * @throws {TypeError} If `obj` is not a valid JSON value
16
+ */
17
+ export declare function canonicalizeJSON(obj: unknown): string;
18
+ export interface VCJWTHeader {
19
+ alg: 'EdDSA';
20
+ typ: 'JWT' | 'vc+jwt';
21
+ kid?: string;
22
+ }
23
+ export interface VCJWTPayload {
24
+ iss: string;
25
+ sub?: string;
26
+ aud?: string | string[];
27
+ exp?: number;
28
+ iat?: number;
29
+ jti?: string;
30
+ vc: Record<string, unknown>;
31
+ }
32
+ export interface EncodeVCAsJWTOptions {
33
+ keyId?: string;
34
+ }
35
+ export declare function createUnsignedVCJWT(vc: Record<string, unknown>, options?: EncodeVCAsJWTOptions): {
36
+ header: VCJWTHeader;
37
+ payload: VCJWTPayload;
38
+ encodedHeader: string;
39
+ encodedPayload: string;
40
+ signingInput: string;
41
+ };
42
+ export declare function completeVCJWT(signingInput: string, signature: string): string;
43
+ export declare function parseVCJWT(jwt: string): {
44
+ header: VCJWTHeader;
45
+ payload: VCJWTPayload;
46
+ signature: string;
47
+ signingInput: string;
48
+ } | null;
49
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/delegation/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGrD;AAmDD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,KAAK,GAAG,QAAQ,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,OAAO,GAAE,oBAAyB,GACjC;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAmDA;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG;IACvC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,CAsBP"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Delegation Utilities
3
+ *
4
+ * Shared utility functions for delegation credential operations.
5
+ */
6
+ import { base64urlEncodeFromString, base64urlDecodeToString } from '../utils/base64.js';
7
+ import { canonicalize } from 'json-canonicalize';
8
+ /**
9
+ * Canonicalize a JSON value using RFC 8785 (JSON Canonicalization Scheme).
10
+ *
11
+ * Wraps `json-canonicalize` with input validation to reject values that are
12
+ * not representable in JSON (Infinity, NaN, undefined, functions, symbols,
13
+ * bigints). The underlying library silently coerces these to `"null"` or
14
+ * `"undefined"`, which is dangerous for cryptographic canonicalization where
15
+ * distinct inputs must produce distinct outputs.
16
+ *
17
+ * @throws {TypeError} If `obj` is not a valid JSON value
18
+ */
19
+ export function canonicalizeJSON(obj) {
20
+ assertJsonSafe(obj);
21
+ return canonicalize(obj);
22
+ }
23
+ /**
24
+ * Recursively validates that a value is JSON-safe.
25
+ * Throws TypeError for Infinity, NaN, undefined, functions, symbols, bigints.
26
+ */
27
+ function assertJsonSafe(value, path = '$') {
28
+ if (value === null || typeof value === 'boolean' || typeof value === 'string') {
29
+ return;
30
+ }
31
+ if (typeof value === 'number') {
32
+ if (!Number.isFinite(value)) {
33
+ throw new TypeError(`Cannot canonicalize non-finite number at ${path}: ${value}`);
34
+ }
35
+ return;
36
+ }
37
+ if (typeof value === 'undefined') {
38
+ throw new TypeError(`Cannot canonicalize undefined at ${path}`);
39
+ }
40
+ if (typeof value === 'function') {
41
+ throw new TypeError(`Cannot canonicalize function at ${path}`);
42
+ }
43
+ if (typeof value === 'symbol') {
44
+ throw new TypeError(`Cannot canonicalize symbol at ${path}`);
45
+ }
46
+ if (typeof value === 'bigint') {
47
+ throw new TypeError(`Cannot canonicalize bigint at ${path}`);
48
+ }
49
+ if (Array.isArray(value)) {
50
+ for (let i = 0; i < value.length; i++) {
51
+ assertJsonSafe(value[i], `${path}[${i}]`);
52
+ }
53
+ return;
54
+ }
55
+ if (typeof value === 'object') {
56
+ for (const [key, val] of Object.entries(value)) {
57
+ assertJsonSafe(val, `${path}.${key}`);
58
+ }
59
+ return;
60
+ }
61
+ }
62
+ export function createUnsignedVCJWT(vc, options = {}) {
63
+ const header = {
64
+ alg: 'EdDSA',
65
+ typ: 'JWT',
66
+ };
67
+ if (options.keyId) {
68
+ header.kid = options.keyId;
69
+ }
70
+ const issuer = typeof vc['issuer'] === 'string'
71
+ ? vc['issuer']
72
+ : vc['issuer']?.['id'];
73
+ const subject = vc['credentialSubject']?.['id'];
74
+ let exp;
75
+ let iat;
76
+ if (vc['expirationDate'] && typeof vc['expirationDate'] === 'string') {
77
+ exp = Math.floor(new Date(vc['expirationDate']).getTime() / 1000);
78
+ }
79
+ if (vc['issuanceDate'] && typeof vc['issuanceDate'] === 'string') {
80
+ iat = Math.floor(new Date(vc['issuanceDate']).getTime() / 1000);
81
+ }
82
+ const vcWithoutProof = { ...vc };
83
+ delete vcWithoutProof['proof'];
84
+ const payload = {
85
+ iss: issuer,
86
+ vc: vcWithoutProof,
87
+ };
88
+ if (subject)
89
+ payload.sub = subject;
90
+ if (exp)
91
+ payload.exp = exp;
92
+ if (iat)
93
+ payload.iat = iat;
94
+ if (vc['id'] && typeof vc['id'] === 'string')
95
+ payload.jti = vc['id'];
96
+ const encodedHeader = base64urlEncodeFromString(JSON.stringify(header));
97
+ const encodedPayload = base64urlEncodeFromString(JSON.stringify(payload));
98
+ const signingInput = `${encodedHeader}.${encodedPayload}`;
99
+ return {
100
+ header,
101
+ payload,
102
+ encodedHeader,
103
+ encodedPayload,
104
+ signingInput,
105
+ };
106
+ }
107
+ export function completeVCJWT(signingInput, signature) {
108
+ return `${signingInput}.${signature}`;
109
+ }
110
+ export function parseVCJWT(jwt) {
111
+ const parts = jwt.split('.');
112
+ if (parts.length !== 3) {
113
+ return null;
114
+ }
115
+ try {
116
+ const headerJson = base64urlDecodeToString(parts[0]);
117
+ const payloadJson = base64urlDecodeToString(parts[1]);
118
+ const header = JSON.parse(headerJson);
119
+ const payload = JSON.parse(payloadJson);
120
+ return {
121
+ header,
122
+ payload,
123
+ signature: parts[2],
124
+ signingInput: `${parts[0]}.${parts[1]}`,
125
+ };
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/delegation/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Delegation Credential Issuer (Platform-Agnostic)
3
+ *
4
+ * Issues W3C Verifiable Credentials for delegations with Ed25519 signatures.
5
+ * Follows the Python POC design (Delegation-Service.md:136-163) where
6
+ * delegations are issued AS W3C VCs.
7
+ *
8
+ * Related Spec: MCP-I §4.1, §4.2, W3C VC Data Model 1.1
9
+ */
10
+ import type { DelegationCredential, DelegationRecord, CredentialStatus, Proof } from '../types/protocol.js';
11
+ export interface IssueDelegationOptions {
12
+ id?: string;
13
+ issuanceDate?: string;
14
+ expirationDate?: string;
15
+ credentialStatus?: CredentialStatus;
16
+ additionalContexts?: string[];
17
+ }
18
+ export interface VCSigningFunction {
19
+ (canonicalVC: string, issuerDid: string, kid: string): Promise<Proof>;
20
+ }
21
+ export interface IdentityProvider {
22
+ getDid(): string;
23
+ getKeyId(): string;
24
+ getPrivateKey(): string;
25
+ }
26
+ export declare class DelegationCredentialIssuer {
27
+ private identity;
28
+ private signingFunction;
29
+ constructor(identity: IdentityProvider, signingFunction: VCSigningFunction);
30
+ issueDelegationCredential(delegation: DelegationRecord, options?: IssueDelegationOptions): Promise<DelegationCredential>;
31
+ /**
32
+ * Create and issue a delegation credential in one step.
33
+ *
34
+ * Constructs a DelegationRecord from the provided parameters and wraps it
35
+ * in a signed W3C Verifiable Credential.
36
+ *
37
+ * @param params - Delegation parameters including issuer/subject DIDs, constraints, etc.
38
+ * @param options - Optional VC issuance options (id, dates, status, contexts)
39
+ * @returns Signed W3C Delegation Credential
40
+ */
41
+ createAndIssueDelegation(params: {
42
+ id: string;
43
+ issuerDid: string;
44
+ subjectDid: string;
45
+ controller?: string;
46
+ parentId?: string;
47
+ constraints: DelegationRecord['constraints'];
48
+ status?: DelegationRecord['status'];
49
+ metadata?: Record<string, unknown>;
50
+ }, options?: IssueDelegationOptions): Promise<DelegationCredential>;
51
+ private canonicalizeVC;
52
+ getIssuerDid(): string;
53
+ getIssuerKeyId(): string;
54
+ }
55
+ export declare function createDelegationIssuer(identity: IdentityProvider, signingFunction: VCSigningFunction): DelegationCredentialIssuer;
56
+ //# sourceMappingURL=vc-issuer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vc-issuer.d.ts","sourceRoot":"","sources":["../../src/delegation/vc-issuer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACN,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,sBAAsB;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,IAAI,MAAM,CAAC;IACjB,QAAQ,IAAI,MAAM,CAAC;IACnB,aAAa,IAAI,MAAM,CAAC;CACzB;AAED,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,eAAe;gBADf,QAAQ,EAAE,gBAAgB,EAC1B,eAAe,EAAE,iBAAiB;IAGtC,yBAAyB,CAC7B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,oBAAoB,CAAC;IA8BhC;;;;;;;;;OASG;IACG,wBAAwB,CAC5B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,EACD,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,oBAAoB,CAAC;IAoBhC,OAAO,CAAC,cAAc;IAItB,YAAY,IAAI,MAAM;IAItB,cAAc,IAAI,MAAM;CAGzB;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,gBAAgB,EAC1B,eAAe,EAAE,iBAAiB,GACjC,0BAA0B,CAE5B"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Delegation Credential Issuer (Platform-Agnostic)
3
+ *
4
+ * Issues W3C Verifiable Credentials for delegations with Ed25519 signatures.
5
+ * Follows the Python POC design (Delegation-Service.md:136-163) where
6
+ * delegations are issued AS W3C VCs.
7
+ *
8
+ * Related Spec: MCP-I §4.1, §4.2, W3C VC Data Model 1.1
9
+ */
10
+ import { wrapDelegationAsVC } from '../types/protocol.js';
11
+ import { canonicalizeJSON } from './utils.js';
12
+ export class DelegationCredentialIssuer {
13
+ identity;
14
+ signingFunction;
15
+ constructor(identity, signingFunction) {
16
+ this.identity = identity;
17
+ this.signingFunction = signingFunction;
18
+ }
19
+ async issueDelegationCredential(delegation, options = {}) {
20
+ let unsignedVC = wrapDelegationAsVC(delegation, {
21
+ id: options.id,
22
+ issuanceDate: options.issuanceDate,
23
+ expirationDate: options.expirationDate,
24
+ credentialStatus: options.credentialStatus,
25
+ });
26
+ if (options.additionalContexts && options.additionalContexts.length > 0) {
27
+ const existingContexts = unsignedVC['@context'];
28
+ unsignedVC = {
29
+ ...unsignedVC,
30
+ '@context': [...existingContexts, ...options.additionalContexts],
31
+ };
32
+ }
33
+ const canonicalVC = this.canonicalizeVC(unsignedVC);
34
+ const proof = await this.signingFunction(canonicalVC, this.identity.getDid(), this.identity.getKeyId());
35
+ return {
36
+ ...unsignedVC,
37
+ proof,
38
+ };
39
+ }
40
+ /**
41
+ * Create and issue a delegation credential in one step.
42
+ *
43
+ * Constructs a DelegationRecord from the provided parameters and wraps it
44
+ * in a signed W3C Verifiable Credential.
45
+ *
46
+ * @param params - Delegation parameters including issuer/subject DIDs, constraints, etc.
47
+ * @param options - Optional VC issuance options (id, dates, status, contexts)
48
+ * @returns Signed W3C Delegation Credential
49
+ */
50
+ async createAndIssueDelegation(params, options = {}) {
51
+ const now = Date.now();
52
+ const delegation = {
53
+ id: params.id,
54
+ issuerDid: params.issuerDid,
55
+ subjectDid: params.subjectDid,
56
+ controller: params.controller,
57
+ vcId: options.id || `urn:uuid:${params.id}`,
58
+ parentId: params.parentId,
59
+ constraints: params.constraints,
60
+ signature: '',
61
+ status: params.status || 'active',
62
+ createdAt: now,
63
+ metadata: params.metadata,
64
+ };
65
+ return this.issueDelegationCredential(delegation, options);
66
+ }
67
+ canonicalizeVC(vc) {
68
+ return canonicalizeJSON(vc);
69
+ }
70
+ getIssuerDid() {
71
+ return this.identity.getDid();
72
+ }
73
+ getIssuerKeyId() {
74
+ return this.identity.getKeyId();
75
+ }
76
+ }
77
+ export function createDelegationIssuer(identity, signingFunction) {
78
+ return new DelegationCredentialIssuer(identity, signingFunction);
79
+ }
80
+ //# sourceMappingURL=vc-issuer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vc-issuer.js","sourceRoot":"","sources":["../../src/delegation/vc-issuer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAoB9C,MAAM,OAAO,0BAA0B;IAE3B;IACA;IAFV,YACU,QAA0B,EAC1B,eAAkC;QADlC,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,oBAAe,GAAf,eAAe,CAAmB;IACzC,CAAC;IAEJ,KAAK,CAAC,yBAAyB,CAC7B,UAA4B,EAC5B,UAAkC,EAAE;QAEpC,IAAI,UAAU,GAAG,kBAAkB,CAAC,UAAU,EAAE;YAC9C,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,gBAAgB,GAAG,UAAU,CAAC,UAAU,CAA4C,CAAC;YAC3F,UAAU,GAAG;gBACX,GAAG,UAAU;gBACb,UAAU,EAAE,CAAC,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;aACjE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CACtC,WAAW,EACX,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CACzB,CAAC;QAEF,OAAO;YACL,GAAG,UAAU;YACb,KAAK;SACkB,CAAC;IAC5B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,wBAAwB,CAC5B,MASC,EACD,UAAkC,EAAE;QAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,MAAM,UAAU,GAAqB;YACnC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,YAAY,MAAM,CAAC,EAAE,EAAE;YAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ;YACjC,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;QAEF,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAEO,cAAc,CAAC,EAAuC;QAC5D,OAAO,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CACpC,QAA0B,EAC1B,eAAkC;IAElC,OAAO,IAAI,0BAA0B,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Dylan Hobbs
3
+ * Delegation Credential Verifier (Platform-Agnostic)
4
+ *
5
+ * Progressive enhancement verification for W3C Delegation Credentials.
6
+ *
7
+ * Stage 1: Fast basic checks (no network, early rejection)
8
+ * Stage 2: Parallel advanced checks (signature, status)
9
+ * Stage 3: Combined results
10
+ *
11
+ * Related Spec: MCP-I §4.3, W3C VC Data Model 1.1
12
+ */
13
+ import type { DelegationCredential, CredentialStatus } from "../types/protocol.js";
14
+ export interface DelegationVCVerificationResult {
15
+ valid: boolean;
16
+ reason?: string;
17
+ stage: "basic" | "signature" | "status" | "complete";
18
+ cached?: boolean;
19
+ metrics?: {
20
+ basicCheckMs?: number;
21
+ signatureCheckMs?: number;
22
+ statusCheckMs?: number;
23
+ totalMs: number;
24
+ };
25
+ checks?: {
26
+ basicValid?: boolean;
27
+ signatureValid?: boolean;
28
+ statusValid?: boolean;
29
+ };
30
+ }
31
+ export interface VerifyDelegationVCOptions {
32
+ skipCache?: boolean;
33
+ skipSignature?: boolean;
34
+ skipStatus?: boolean;
35
+ didResolver?: DIDResolver;
36
+ statusListResolver?: StatusListResolver;
37
+ }
38
+ export interface DIDResolver {
39
+ resolve(did: string): Promise<DIDDocument | null>;
40
+ }
41
+ export interface DIDDocument {
42
+ id: string;
43
+ verificationMethod?: VerificationMethod[];
44
+ authentication?: (string | VerificationMethod)[];
45
+ assertionMethod?: (string | VerificationMethod)[];
46
+ }
47
+ export interface VerificationMethod {
48
+ id: string;
49
+ type: string;
50
+ controller: string;
51
+ publicKeyJwk?: unknown;
52
+ publicKeyBase58?: string;
53
+ publicKeyMultibase?: string;
54
+ }
55
+ export interface StatusListResolver {
56
+ checkStatus(status: CredentialStatus): Promise<boolean>;
57
+ }
58
+ export interface SignatureVerificationFunction {
59
+ (vc: DelegationCredential, publicKeyJwk: unknown): Promise<{
60
+ valid: boolean;
61
+ reason?: string;
62
+ }>;
63
+ }
64
+ export declare class DelegationCredentialVerifier {
65
+ private didResolver?;
66
+ private statusListResolver?;
67
+ private signatureVerifier?;
68
+ private cache;
69
+ private cacheInsertionOrder;
70
+ private cacheTtl;
71
+ /**
72
+ * Maximum number of entries in the verification cache.
73
+ * In production deployments, configure maxCacheSize based on expected concurrent delegations.
74
+ * Default of 1000 is suitable for most use cases.
75
+ */
76
+ private maxCacheSize;
77
+ constructor(options?: {
78
+ didResolver?: DIDResolver;
79
+ statusListResolver?: StatusListResolver;
80
+ signatureVerifier?: SignatureVerificationFunction;
81
+ cacheTtl?: number;
82
+ /** Maximum cache entries. Default: 1000 */
83
+ maxCacheSize?: number;
84
+ });
85
+ /**
86
+ * Verify a delegation credential through progressive enhancement.
87
+ *
88
+ * Stage 1: Fast basic checks (schema, expiry, status field)
89
+ * Stage 2: Parallel signature and status list checks (if resolvers configured)
90
+ * Stage 3: Combined result with timing metrics
91
+ *
92
+ * @param vc - The W3C Delegation Credential to verify
93
+ * @param options - Verification options (skip cache/signature/status, custom resolvers)
94
+ * @returns Verification result with validity, reason, stage reached, and metrics
95
+ */
96
+ verifyDelegationCredential(vc: DelegationCredential, options?: VerifyDelegationVCOptions): Promise<DelegationVCVerificationResult>;
97
+ private validateBasicProperties;
98
+ private verifySignature;
99
+ private checkCredentialStatus;
100
+ private findVerificationMethod;
101
+ private getFromCache;
102
+ private setInCache;
103
+ clearCache(): void;
104
+ clearCacheEntry(id: string): void;
105
+ }
106
+ export declare function createDelegationVerifier(options?: {
107
+ didResolver?: DIDResolver;
108
+ statusListResolver?: StatusListResolver;
109
+ signatureVerifier?: SignatureVerificationFunction;
110
+ cacheTtl?: number;
111
+ }): DelegationCredentialVerifier;
112
+ //# sourceMappingURL=vc-verifier.d.ts.map