@ajna-inc/openbadges 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/LICENSE +202 -0
  2. package/build/OpenBadgesModule.d.ts +10 -0
  3. package/build/OpenBadgesModule.js +75 -0
  4. package/build/OpenBadgesModule.js.map +1 -0
  5. package/build/OpenBadgesModuleConfig.d.ts +96 -0
  6. package/build/OpenBadgesModuleConfig.js +50 -0
  7. package/build/OpenBadgesModuleConfig.js.map +1 -0
  8. package/build/api/OpenBadgesApi.d.ts +48 -0
  9. package/build/api/OpenBadgesApi.js +81 -0
  10. package/build/api/OpenBadgesApi.js.map +1 -0
  11. package/build/api/index.d.ts +1 -0
  12. package/build/api/index.js +18 -0
  13. package/build/api/index.js.map +1 -0
  14. package/build/constants.d.ts +12 -0
  15. package/build/constants.js +27 -0
  16. package/build/constants.js.map +1 -0
  17. package/build/cryptosuites/EcdsaSd2023.d.ts +143 -0
  18. package/build/cryptosuites/EcdsaSd2023.js +518 -0
  19. package/build/cryptosuites/EcdsaSd2023.js.map +1 -0
  20. package/build/cryptosuites/EddsaRdfc2022.d.ts +112 -0
  21. package/build/cryptosuites/EddsaRdfc2022.js +356 -0
  22. package/build/cryptosuites/EddsaRdfc2022.js.map +1 -0
  23. package/build/cryptosuites/constants.d.ts +14 -0
  24. package/build/cryptosuites/constants.js +22 -0
  25. package/build/cryptosuites/constants.js.map +1 -0
  26. package/build/cryptosuites/contextPreprocessor.d.ts +24 -0
  27. package/build/cryptosuites/contextPreprocessor.js +127 -0
  28. package/build/cryptosuites/contextPreprocessor.js.map +1 -0
  29. package/build/cryptosuites/dataIntegrityV2Context.d.ts +144 -0
  30. package/build/cryptosuites/dataIntegrityV2Context.js +86 -0
  31. package/build/cryptosuites/dataIntegrityV2Context.js.map +1 -0
  32. package/build/cryptosuites/index.d.ts +11 -0
  33. package/build/cryptosuites/index.js +33 -0
  34. package/build/cryptosuites/index.js.map +1 -0
  35. package/build/http/OpenBadgesHttpModule.d.ts +9 -0
  36. package/build/http/OpenBadgesHttpModule.js +120 -0
  37. package/build/http/OpenBadgesHttpModule.js.map +1 -0
  38. package/build/http/OpenBadgesHttpModuleConfig.d.ts +55 -0
  39. package/build/http/OpenBadgesHttpModuleConfig.js +78 -0
  40. package/build/http/OpenBadgesHttpModuleConfig.js.map +1 -0
  41. package/build/http/endpoints/authorize.d.ts +3 -0
  42. package/build/http/endpoints/authorize.js +79 -0
  43. package/build/http/endpoints/authorize.js.map +1 -0
  44. package/build/http/endpoints/consent.d.ts +3 -0
  45. package/build/http/endpoints/consent.js +25 -0
  46. package/build/http/endpoints/consent.js.map +1 -0
  47. package/build/http/endpoints/credentials.d.ts +4 -0
  48. package/build/http/endpoints/credentials.js +85 -0
  49. package/build/http/endpoints/credentials.js.map +1 -0
  50. package/build/http/endpoints/did.d.ts +3 -0
  51. package/build/http/endpoints/did.js +48 -0
  52. package/build/http/endpoints/did.js.map +1 -0
  53. package/build/http/endpoints/introspect.d.ts +3 -0
  54. package/build/http/endpoints/introspect.js +37 -0
  55. package/build/http/endpoints/introspect.js.map +1 -0
  56. package/build/http/endpoints/jwks.d.ts +3 -0
  57. package/build/http/endpoints/jwks.js +46 -0
  58. package/build/http/endpoints/jwks.js.map +1 -0
  59. package/build/http/endpoints/profile.d.ts +4 -0
  60. package/build/http/endpoints/profile.js +58 -0
  61. package/build/http/endpoints/profile.js.map +1 -0
  62. package/build/http/endpoints/refresh.d.ts +15 -0
  63. package/build/http/endpoints/refresh.js +134 -0
  64. package/build/http/endpoints/refresh.js.map +1 -0
  65. package/build/http/endpoints/registration.d.ts +3 -0
  66. package/build/http/endpoints/registration.js +42 -0
  67. package/build/http/endpoints/registration.js.map +1 -0
  68. package/build/http/endpoints/revoke.d.ts +3 -0
  69. package/build/http/endpoints/revoke.js +38 -0
  70. package/build/http/endpoints/revoke.js.map +1 -0
  71. package/build/http/endpoints/serviceDescription.d.ts +3 -0
  72. package/build/http/endpoints/serviceDescription.js +52 -0
  73. package/build/http/endpoints/serviceDescription.js.map +1 -0
  74. package/build/http/endpoints/statusList.d.ts +10 -0
  75. package/build/http/endpoints/statusList.js +95 -0
  76. package/build/http/endpoints/statusList.js.map +1 -0
  77. package/build/http/endpoints/token.d.ts +3 -0
  78. package/build/http/endpoints/token.js +147 -0
  79. package/build/http/endpoints/token.js.map +1 -0
  80. package/build/http/middleware/auth.d.ts +5 -0
  81. package/build/http/middleware/auth.js +48 -0
  82. package/build/http/middleware/auth.js.map +1 -0
  83. package/build/http/router.d.ts +13 -0
  84. package/build/http/router.js +36 -0
  85. package/build/http/router.js.map +1 -0
  86. package/build/http/tenants.d.ts +2 -0
  87. package/build/http/tenants.js +20 -0
  88. package/build/http/tenants.js.map +1 -0
  89. package/build/http/util/auth.d.ts +8 -0
  90. package/build/http/util/auth.js +43 -0
  91. package/build/http/util/auth.js.map +1 -0
  92. package/build/index.d.ts +46 -0
  93. package/build/index.js +71 -0
  94. package/build/index.js.map +1 -0
  95. package/build/models/ClrCredential.d.ts +112 -0
  96. package/build/models/ClrCredential.js +52 -0
  97. package/build/models/ClrCredential.js.map +1 -0
  98. package/build/models/EndorsementCredential.d.ts +89 -0
  99. package/build/models/EndorsementCredential.js +11 -0
  100. package/build/models/EndorsementCredential.js.map +1 -0
  101. package/build/models/StatusListCredential.d.ts +81 -0
  102. package/build/models/StatusListCredential.js +28 -0
  103. package/build/models/StatusListCredential.js.map +1 -0
  104. package/build/models/index.d.ts +8 -0
  105. package/build/models/index.js +25 -0
  106. package/build/models/index.js.map +1 -0
  107. package/build/repository/OpenBadgeCredentialRecord.d.ts +44 -0
  108. package/build/repository/OpenBadgeCredentialRecord.js +46 -0
  109. package/build/repository/OpenBadgeCredentialRecord.js.map +1 -0
  110. package/build/repository/OpenBadgeCredentialRepository.d.ts +8 -0
  111. package/build/repository/OpenBadgeCredentialRepository.js +38 -0
  112. package/build/repository/OpenBadgeCredentialRepository.js.map +1 -0
  113. package/build/repository/OpenBadgesAuthCodeRecord.d.ts +35 -0
  114. package/build/repository/OpenBadgesAuthCodeRecord.js +28 -0
  115. package/build/repository/OpenBadgesAuthCodeRecord.js.map +1 -0
  116. package/build/repository/OpenBadgesAuthCodeRepository.d.ts +6 -0
  117. package/build/repository/OpenBadgesAuthCodeRepository.js +32 -0
  118. package/build/repository/OpenBadgesAuthCodeRepository.js.map +1 -0
  119. package/build/repository/OpenBadgesConsentRecord.d.ts +24 -0
  120. package/build/repository/OpenBadgesConsentRecord.js +23 -0
  121. package/build/repository/OpenBadgesConsentRecord.js.map +1 -0
  122. package/build/repository/OpenBadgesConsentRepository.d.ts +6 -0
  123. package/build/repository/OpenBadgesConsentRepository.js +32 -0
  124. package/build/repository/OpenBadgesConsentRepository.js.map +1 -0
  125. package/build/repository/OpenBadgesKeyBindingRecord.d.ts +24 -0
  126. package/build/repository/OpenBadgesKeyBindingRecord.js +32 -0
  127. package/build/repository/OpenBadgesKeyBindingRecord.js.map +1 -0
  128. package/build/repository/OpenBadgesKeyBindingRepository.d.ts +7 -0
  129. package/build/repository/OpenBadgesKeyBindingRepository.js +35 -0
  130. package/build/repository/OpenBadgesKeyBindingRepository.js.map +1 -0
  131. package/build/repository/OpenBadgesOAuthRecord.d.ts +35 -0
  132. package/build/repository/OpenBadgesOAuthRecord.js +25 -0
  133. package/build/repository/OpenBadgesOAuthRecord.js.map +1 -0
  134. package/build/repository/OpenBadgesOAuthRepository.d.ts +8 -0
  135. package/build/repository/OpenBadgesOAuthRepository.js +38 -0
  136. package/build/repository/OpenBadgesOAuthRepository.js.map +1 -0
  137. package/build/repository/OpenBadgesProfileRecord.d.ts +21 -0
  138. package/build/repository/OpenBadgesProfileRecord.js +22 -0
  139. package/build/repository/OpenBadgesProfileRecord.js.map +1 -0
  140. package/build/repository/OpenBadgesProfileRepository.d.ts +6 -0
  141. package/build/repository/OpenBadgesProfileRepository.js +32 -0
  142. package/build/repository/OpenBadgesProfileRepository.js.map +1 -0
  143. package/build/repository/OpenBadgesRevocationCacheRecord.d.ts +23 -0
  144. package/build/repository/OpenBadgesRevocationCacheRecord.js +23 -0
  145. package/build/repository/OpenBadgesRevocationCacheRecord.js.map +1 -0
  146. package/build/repository/OpenBadgesRevocationCacheRepository.d.ts +6 -0
  147. package/build/repository/OpenBadgesRevocationCacheRepository.js +32 -0
  148. package/build/repository/OpenBadgesRevocationCacheRepository.js.map +1 -0
  149. package/build/repository/OpenBadgesServiceDescriptionRecord.d.ts +21 -0
  150. package/build/repository/OpenBadgesServiceDescriptionRecord.js +22 -0
  151. package/build/repository/OpenBadgesServiceDescriptionRecord.js.map +1 -0
  152. package/build/repository/OpenBadgesServiceDescriptionRepository.d.ts +6 -0
  153. package/build/repository/OpenBadgesServiceDescriptionRepository.js +32 -0
  154. package/build/repository/OpenBadgesServiceDescriptionRepository.js.map +1 -0
  155. package/build/repository/OpenBadgesTokenRecord.d.ts +39 -0
  156. package/build/repository/OpenBadgesTokenRecord.js +36 -0
  157. package/build/repository/OpenBadgesTokenRecord.js.map +1 -0
  158. package/build/repository/OpenBadgesTokenRepository.d.ts +9 -0
  159. package/build/repository/OpenBadgesTokenRepository.js +45 -0
  160. package/build/repository/OpenBadgesTokenRepository.js.map +1 -0
  161. package/build/repository/StatusListRecord.d.ts +49 -0
  162. package/build/repository/StatusListRecord.js +47 -0
  163. package/build/repository/StatusListRecord.js.map +1 -0
  164. package/build/repository/StatusListRepository.d.ts +24 -0
  165. package/build/repository/StatusListRepository.js +52 -0
  166. package/build/repository/StatusListRepository.js.map +1 -0
  167. package/build/repository/index.d.ts +18 -0
  168. package/build/repository/index.js +35 -0
  169. package/build/repository/index.js.map +1 -0
  170. package/build/services/AchievementValidator.d.ts +158 -0
  171. package/build/services/AchievementValidator.js +238 -0
  172. package/build/services/AchievementValidator.js.map +1 -0
  173. package/build/services/ConsumerService.d.ts +24 -0
  174. package/build/services/ConsumerService.js +143 -0
  175. package/build/services/ConsumerService.js.map +1 -0
  176. package/build/services/ContextService.d.ts +14 -0
  177. package/build/services/ContextService.js +54 -0
  178. package/build/services/ContextService.js.map +1 -0
  179. package/build/services/DataIntegrityService.d.ts +51 -0
  180. package/build/services/DataIntegrityService.js +134 -0
  181. package/build/services/DataIntegrityService.js.map +1 -0
  182. package/build/services/DidCommLinkService.d.ts +7 -0
  183. package/build/services/DidCommLinkService.js +20 -0
  184. package/build/services/DidCommLinkService.js.map +1 -0
  185. package/build/services/DisplayMapper.d.ts +9 -0
  186. package/build/services/DisplayMapper.js +26 -0
  187. package/build/services/DisplayMapper.js.map +1 -0
  188. package/build/services/IssuerService.d.ts +38 -0
  189. package/build/services/IssuerService.js +225 -0
  190. package/build/services/IssuerService.js.map +1 -0
  191. package/build/services/JwtService.d.ts +19 -0
  192. package/build/services/JwtService.js +229 -0
  193. package/build/services/JwtService.js.map +1 -0
  194. package/build/services/KeyService.d.ts +102 -0
  195. package/build/services/KeyService.js +439 -0
  196. package/build/services/KeyService.js.map +1 -0
  197. package/build/services/OAuthClient.d.ts +26 -0
  198. package/build/services/OAuthClient.js +127 -0
  199. package/build/services/OAuthClient.js.map +1 -0
  200. package/build/services/ProofService.d.ts +15 -0
  201. package/build/services/ProofService.js +43 -0
  202. package/build/services/ProofService.js.map +1 -0
  203. package/build/services/RevocationService.d.ts +59 -0
  204. package/build/services/RevocationService.js +319 -0
  205. package/build/services/RevocationService.js.map +1 -0
  206. package/build/services/VerifyService.d.ts +17 -0
  207. package/build/services/VerifyService.js +54 -0
  208. package/build/services/VerifyService.js.map +1 -0
  209. package/build/services/crypto/CryptoDriver.d.ts +9 -0
  210. package/build/services/crypto/CryptoDriver.js +7 -0
  211. package/build/services/crypto/CryptoDriver.js.map +1 -0
  212. package/build/services/crypto/JsonLdCryptoDriver.d.ts +17 -0
  213. package/build/services/crypto/JsonLdCryptoDriver.js +45 -0
  214. package/build/services/crypto/JsonLdCryptoDriver.js.map +1 -0
  215. package/build/services/crypto/JwtCryptoDriver.d.ts +13 -0
  216. package/build/services/crypto/JwtCryptoDriver.js +42 -0
  217. package/build/services/crypto/JwtCryptoDriver.js.map +1 -0
  218. package/build/services/index.d.ts +12 -0
  219. package/build/services/index.js +29 -0
  220. package/build/services/index.js.map +1 -0
  221. package/build/utils/validate.d.ts +17 -0
  222. package/build/utils/validate.js +107 -0
  223. package/build/utils/validate.js.map +1 -0
  224. package/package.json +57 -0
@@ -0,0 +1,439 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.KeyService = void 0;
19
+ const core_1 = require("@credo-ts/core");
20
+ const core_2 = require("@credo-ts/core");
21
+ const crypto_1 = __importDefault(require("crypto"));
22
+ const OpenBadgesKeyBindingRepository_1 = require("../repository/OpenBadgesKeyBindingRepository");
23
+ const OpenBadgesKeyBindingRecord_1 = require("../repository/OpenBadgesKeyBindingRecord");
24
+ const ContextService_1 = require("./ContextService");
25
+ const bs58_1 = __importDefault(require("bs58"));
26
+ /**
27
+ * Multicodec prefixes for different key types
28
+ * @see https://github.com/multiformats/multicodec/blob/master/table.csv
29
+ */
30
+ const MULTICODEC_ED25519_PUB = Buffer.from([0xed, 0x01]);
31
+ const MULTICODEC_P256_PUB = Buffer.from([0x80, 0x24]);
32
+ const MULTICODEC_P384_PUB = Buffer.from([0x81, 0x24]);
33
+ let KeyService = class KeyService {
34
+ constructor(bindings, contexts) {
35
+ this.bindings = bindings;
36
+ this.contexts = contexts;
37
+ }
38
+ bindingId(vmId) {
39
+ const hash = crypto_1.default.createHash('sha256').update(vmId).digest('hex');
40
+ return `vm_${hash}`;
41
+ }
42
+ /**
43
+ * Get the multicodec prefix for a key type
44
+ */
45
+ getMulticodecPrefix(keyType) {
46
+ switch (keyType) {
47
+ case core_2.KeyType.Ed25519:
48
+ return MULTICODEC_ED25519_PUB;
49
+ case core_2.KeyType.P256:
50
+ return MULTICODEC_P256_PUB;
51
+ case core_2.KeyType.P384:
52
+ return MULTICODEC_P384_PUB;
53
+ default:
54
+ return MULTICODEC_ED25519_PUB;
55
+ }
56
+ }
57
+ /**
58
+ * Get the verification method type for a key type
59
+ */
60
+ getVerificationMethodType(keyType) {
61
+ switch (keyType) {
62
+ case core_2.KeyType.Ed25519:
63
+ return 'Ed25519VerificationKey2020';
64
+ case core_2.KeyType.P256:
65
+ case core_2.KeyType.P384:
66
+ return 'JsonWebKey2020';
67
+ default:
68
+ return 'Multikey';
69
+ }
70
+ }
71
+ /**
72
+ * Generate a did:key DID from public key material
73
+ */
74
+ generateDidKey(publicKey, keyType) {
75
+ const prefix = this.getMulticodecPrefix(keyType);
76
+ const withHeader = Buffer.concat([prefix, publicKey]);
77
+ const fingerprint = 'z' + bs58_1.default.encode(withHeader);
78
+ const did = `did:key:${fingerprint}`;
79
+ const vmId = `${did}#${fingerprint}`;
80
+ return { did, vmId };
81
+ }
82
+ /**
83
+ * Generate a did:jwk DID from public key material
84
+ */
85
+ generateDidJwk(publicKey, keyType) {
86
+ let jwk;
87
+ if (keyType === core_2.KeyType.Ed25519) {
88
+ jwk = {
89
+ kty: 'OKP',
90
+ crv: 'Ed25519',
91
+ x: publicKey.toString('base64url'),
92
+ };
93
+ }
94
+ else if (keyType === core_2.KeyType.P256) {
95
+ // P-256 public keys are 65 bytes (uncompressed) or 33 bytes (compressed)
96
+ // Uncompressed format: 0x04 || x || y
97
+ if (publicKey.length === 65 && publicKey[0] === 0x04) {
98
+ const x = publicKey.slice(1, 33);
99
+ const y = publicKey.slice(33, 65);
100
+ jwk = {
101
+ kty: 'EC',
102
+ crv: 'P-256',
103
+ x: x.toString('base64url'),
104
+ y: y.toString('base64url'),
105
+ };
106
+ }
107
+ else {
108
+ throw new Error('P-256 key must be in uncompressed format (65 bytes starting with 0x04)');
109
+ }
110
+ }
111
+ else if (keyType === core_2.KeyType.P384) {
112
+ if (publicKey.length === 97 && publicKey[0] === 0x04) {
113
+ const x = publicKey.slice(1, 49);
114
+ const y = publicKey.slice(49, 97);
115
+ jwk = {
116
+ kty: 'EC',
117
+ crv: 'P-384',
118
+ x: x.toString('base64url'),
119
+ y: y.toString('base64url'),
120
+ };
121
+ }
122
+ else {
123
+ throw new Error('P-384 key must be in uncompressed format (97 bytes starting with 0x04)');
124
+ }
125
+ }
126
+ else {
127
+ throw new Error(`Unsupported key type for did:jwk: ${keyType}`);
128
+ }
129
+ const jwkJson = JSON.stringify(jwk);
130
+ const jwkBase64url = Buffer.from(jwkJson).toString('base64url');
131
+ const did = `did:jwk:${jwkBase64url}`;
132
+ const vmId = `${did}#0`;
133
+ return { did, vmId };
134
+ }
135
+ /**
136
+ * Parse a did:key to extract public key bytes and determine key type
137
+ */
138
+ parseDidKey(did) {
139
+ if (!did.startsWith('did:key:z'))
140
+ return null;
141
+ const fingerprint = did.replace('did:key:', '').split('#')[0];
142
+ if (!fingerprint.startsWith('z'))
143
+ return null;
144
+ const decoded = Buffer.from(bs58_1.default.decode(fingerprint.slice(1)));
145
+ // Check multicodec prefix
146
+ if (decoded.length > 2 && decoded[0] === 0xed && decoded[1] === 0x01) {
147
+ return { publicKey: decoded.slice(2), keyType: core_2.KeyType.Ed25519 };
148
+ }
149
+ else if (decoded.length > 2 && decoded[0] === 0x80 && decoded[1] === 0x24) {
150
+ return { publicKey: decoded.slice(2), keyType: core_2.KeyType.P256 };
151
+ }
152
+ else if (decoded.length > 2 && decoded[0] === 0x81 && decoded[1] === 0x24) {
153
+ return { publicKey: decoded.slice(2), keyType: core_2.KeyType.P384 };
154
+ }
155
+ return null;
156
+ }
157
+ /**
158
+ * Parse a did:jwk to extract the JWK and determine key type
159
+ */
160
+ parseDidJwk(did) {
161
+ if (!did.startsWith('did:jwk:'))
162
+ return null;
163
+ const encoded = did.replace('did:jwk:', '').split('#')[0];
164
+ try {
165
+ const jwkJson = Buffer.from(encoded, 'base64url').toString();
166
+ const jwk = JSON.parse(jwkJson);
167
+ if (jwk.kty === 'OKP' && jwk.crv === 'Ed25519') {
168
+ return { jwk, keyType: core_2.KeyType.Ed25519 };
169
+ }
170
+ else if (jwk.kty === 'EC' && jwk.crv === 'P-256') {
171
+ return { jwk, keyType: core_2.KeyType.P256 };
172
+ }
173
+ else if (jwk.kty === 'EC' && jwk.crv === 'P-384') {
174
+ return { jwk, keyType: core_2.KeyType.P384 };
175
+ }
176
+ }
177
+ catch {
178
+ return null;
179
+ }
180
+ return null;
181
+ }
182
+ /**
183
+ * Ensure a KMS-backed key exists and is bound to a verificationMethod id
184
+ * Supports Ed25519, P-256, and P-384 key types
185
+ * Supports did:web, did:key, and did:jwk DID methods
186
+ */
187
+ async ensureBinding(agentContext, opts) {
188
+ const keyType = opts.keyType ?? core_2.KeyType.Ed25519;
189
+ const didMethod = opts.didMethod ?? 'did:web';
190
+ console.log('[OB][KeyService] ensureBinding vmId:', opts.vmId, 'controller:', opts.controller, 'keyType:', keyType, 'didMethod:', didMethod);
191
+ const id = this.bindingId(opts.vmId);
192
+ const existing = await this.bindings.getById(agentContext, id).catch((e) => {
193
+ console.warn('[OB][KeyService] getById error (will treat as no binding):', e?.message || e);
194
+ return null;
195
+ });
196
+ if (existing) {
197
+ console.log('[OB][KeyService] binding exists for vmId:', opts.vmId);
198
+ return existing;
199
+ }
200
+ // Create key in wallet (Askar) with specified key type
201
+ const key = await agentContext.wallet.createKey({ keyType });
202
+ console.log('[OB][KeyService] created wallet key; type:', keyType, 'pub len:', key.publicKey.length);
203
+ // Derive multibase public key
204
+ const raw = key.publicKey;
205
+ const prefix = this.getMulticodecPrefix(keyType);
206
+ const withHeader = Buffer.concat([prefix, raw]);
207
+ const publicKeyMultibase = 'z' + bs58_1.default.encode(withHeader);
208
+ // Clean up any legacy record saved under raw vmId
209
+ try {
210
+ await this.bindings.deleteById(agentContext, opts.vmId);
211
+ console.log('[OB][KeyService] deleted legacy binding with raw id:', opts.vmId);
212
+ }
213
+ catch { }
214
+ const rec = new OpenBadgesKeyBindingRecord_1.OpenBadgesKeyBindingRecord({
215
+ id,
216
+ controller: opts.controller,
217
+ vmId: opts.vmId,
218
+ publicKeyMultibase,
219
+ });
220
+ console.log('[OB][KeyService] saving binding for vmId:', opts.vmId);
221
+ try {
222
+ await this.bindings.save(agentContext, rec);
223
+ }
224
+ catch (e) {
225
+ console.warn('[OB][KeyService] save binding failed (duplicate?):', e?.message || e);
226
+ // Try to load existing (raw id) binding for backward compatibility
227
+ const existingRaw = await this.bindings.getById(agentContext, opts.vmId).catch(() => null);
228
+ if (existingRaw)
229
+ return existingRaw;
230
+ }
231
+ this.seedVerificationMethodDocument({ controller: opts.controller, keyId: opts.vmId, publicKeyMultibase });
232
+ return rec;
233
+ }
234
+ async getBindingByVm(agentContext, vmId) {
235
+ console.log('[OB][KeyService] getBindingByVm getById vmId:', vmId);
236
+ const id = this.bindingId(vmId);
237
+ try {
238
+ return await this.bindings.getById(agentContext, id);
239
+ }
240
+ catch (e) {
241
+ console.warn('[OB][KeyService] getBindingByVm hashed id miss; trying raw id:', e?.message || e);
242
+ try {
243
+ return await this.bindings.getById(agentContext, vmId);
244
+ }
245
+ catch (e2) {
246
+ console.warn('[OB][KeyService] getBindingByVm raw id miss; trying getAll:', e2?.message || e2);
247
+ try {
248
+ const all = await this.bindings.getAll(agentContext);
249
+ const match = all.find((b) => b.vmId === vmId);
250
+ return match ?? null;
251
+ }
252
+ catch (e3) {
253
+ console.warn('[OB][KeyService] getBindingByVm getAll failed:', e3?.message || e3);
254
+ return null;
255
+ }
256
+ }
257
+ }
258
+ }
259
+ async getPublicJwkByVm(agentContext, vmId) {
260
+ const binding = await this.getBindingByVm(agentContext, vmId).catch((e) => {
261
+ console.warn('[OB][KeyService] getPublicJwkByVm binding lookup failed:', e?.message || e);
262
+ return null;
263
+ });
264
+ if (!binding)
265
+ return null;
266
+ // derive jwk from multibase with key type detection
267
+ const b58 = binding.publicKeyMultibase.startsWith('z') ? binding.publicKeyMultibase.slice(1) : binding.publicKeyMultibase;
268
+ const decoded = Buffer.from(bs58_1.default.decode(b58));
269
+ // Detect key type from multicodec prefix
270
+ if (decoded.length > 2 && decoded[0] === 0xed && decoded[1] === 0x01) {
271
+ // Ed25519
272
+ const raw = decoded.slice(2);
273
+ return { kty: 'OKP', crv: 'Ed25519', x: raw.toString('base64url') };
274
+ }
275
+ else if (decoded.length > 2 && decoded[0] === 0x80 && decoded[1] === 0x24) {
276
+ // P-256 (uncompressed)
277
+ const raw = decoded.slice(2);
278
+ if (raw.length === 65 && raw[0] === 0x04) {
279
+ return {
280
+ kty: 'EC',
281
+ crv: 'P-256',
282
+ x: raw.slice(1, 33).toString('base64url'),
283
+ y: raw.slice(33, 65).toString('base64url'),
284
+ };
285
+ }
286
+ }
287
+ else if (decoded.length > 2 && decoded[0] === 0x81 && decoded[1] === 0x24) {
288
+ // P-384 (uncompressed)
289
+ const raw = decoded.slice(2);
290
+ if (raw.length === 97 && raw[0] === 0x04) {
291
+ return {
292
+ kty: 'EC',
293
+ crv: 'P-384',
294
+ x: raw.slice(1, 49).toString('base64url'),
295
+ y: raw.slice(49, 97).toString('base64url'),
296
+ };
297
+ }
298
+ }
299
+ // Fallback for unknown format - try as Ed25519
300
+ const raw = decoded.length > 2 ? decoded.slice(2) : decoded;
301
+ return { kty: 'OKP', crv: 'Ed25519', x: raw.toString('base64url') };
302
+ }
303
+ async getKeyForVm(agentContext, vmId) {
304
+ const binding = await this.getBindingByVm(agentContext, vmId).catch((e) => {
305
+ console.warn('[OB][KeyService] getKeyForVm binding lookup failed:', e?.message || e);
306
+ return null;
307
+ });
308
+ if (!binding)
309
+ return null;
310
+ // Reconstruct a Key from the stored public key bytes with key type detection
311
+ const b58 = binding.publicKeyMultibase.startsWith('z') ? binding.publicKeyMultibase.slice(1) : binding.publicKeyMultibase;
312
+ const decoded = Buffer.from(bs58_1.default.decode(b58));
313
+ // Detect key type from multicodec prefix
314
+ if (decoded.length > 2 && decoded[0] === 0xed && decoded[1] === 0x01) {
315
+ // Ed25519
316
+ return core_2.Key.fromPublicKey(decoded.slice(2), core_2.KeyType.Ed25519);
317
+ }
318
+ else if (decoded.length > 2 && decoded[0] === 0x80 && decoded[1] === 0x24) {
319
+ // P-256
320
+ return core_2.Key.fromPublicKey(decoded.slice(2), core_2.KeyType.P256);
321
+ }
322
+ else if (decoded.length > 2 && decoded[0] === 0x81 && decoded[1] === 0x24) {
323
+ // P-384
324
+ return core_2.Key.fromPublicKey(decoded.slice(2), core_2.KeyType.P384);
325
+ }
326
+ // Fallback to Ed25519 for unknown format
327
+ return core_2.Key.fromPublicKey(decoded, core_2.KeyType.Ed25519);
328
+ }
329
+ seedVerificationMethodDocument(key) {
330
+ const vmType = this.getVerificationMethodType(key.keyType ?? core_2.KeyType.Ed25519);
331
+ const vmDoc = {
332
+ id: key.keyId,
333
+ type: vmType,
334
+ controller: key.controller,
335
+ publicKeyMultibase: key.publicKeyMultibase,
336
+ };
337
+ this.contexts.addCached(key.keyId, vmDoc);
338
+ // Also seed a minimal DID Document for the controller with the VM
339
+ const didDoc = {
340
+ '@context': 'https://www.w3.org/ns/did/v1',
341
+ id: key.controller,
342
+ verificationMethod: [vmDoc],
343
+ assertionMethod: [key.keyId],
344
+ };
345
+ this.contexts.addCached(key.controller, didDoc);
346
+ }
347
+ /**
348
+ * Create a new key binding with a did:key DID
349
+ * Returns the generated DID and verification method ID
350
+ */
351
+ async createDidKeyBinding(agentContext, keyType = core_2.KeyType.Ed25519) {
352
+ const key = await agentContext.wallet.createKey({ keyType });
353
+ const { did, vmId } = this.generateDidKey(Buffer.from(key.publicKey), keyType);
354
+ const prefix = this.getMulticodecPrefix(keyType);
355
+ const withHeader = Buffer.concat([prefix, key.publicKey]);
356
+ const publicKeyMultibase = 'z' + bs58_1.default.encode(withHeader);
357
+ const id = this.bindingId(vmId);
358
+ const rec = new OpenBadgesKeyBindingRecord_1.OpenBadgesKeyBindingRecord({
359
+ id,
360
+ controller: did,
361
+ vmId,
362
+ publicKeyMultibase,
363
+ });
364
+ await this.bindings.save(agentContext, rec);
365
+ this.seedVerificationMethodDocument({ controller: did, keyId: vmId, publicKeyMultibase, keyType });
366
+ console.log('[OB][KeyService] created did:key binding:', did);
367
+ return { did, vmId, publicKeyMultibase };
368
+ }
369
+ /**
370
+ * Create a new key binding with a did:jwk DID
371
+ * Returns the generated DID and verification method ID
372
+ */
373
+ async createDidJwkBinding(agentContext, keyType = core_2.KeyType.Ed25519) {
374
+ const key = await agentContext.wallet.createKey({ keyType });
375
+ const { did, vmId } = this.generateDidJwk(Buffer.from(key.publicKey), keyType);
376
+ const prefix = this.getMulticodecPrefix(keyType);
377
+ const withHeader = Buffer.concat([prefix, key.publicKey]);
378
+ const publicKeyMultibase = 'z' + bs58_1.default.encode(withHeader);
379
+ const id = this.bindingId(vmId);
380
+ const rec = new OpenBadgesKeyBindingRecord_1.OpenBadgesKeyBindingRecord({
381
+ id,
382
+ controller: did,
383
+ vmId,
384
+ publicKeyMultibase,
385
+ });
386
+ await this.bindings.save(agentContext, rec);
387
+ this.seedVerificationMethodDocument({ controller: did, keyId: vmId, publicKeyMultibase, keyType });
388
+ console.log('[OB][KeyService] created did:jwk binding:', did);
389
+ return { did, vmId, publicKeyMultibase };
390
+ }
391
+ /**
392
+ * Get a JWK for a did:key or did:jwk DID
393
+ */
394
+ getJwkForDid(did) {
395
+ // Try did:key
396
+ const didKeyParsed = this.parseDidKey(did);
397
+ if (didKeyParsed) {
398
+ const { publicKey, keyType } = didKeyParsed;
399
+ if (keyType === core_2.KeyType.Ed25519) {
400
+ return {
401
+ kty: 'OKP',
402
+ crv: 'Ed25519',
403
+ x: publicKey.toString('base64url'),
404
+ };
405
+ }
406
+ else if (keyType === core_2.KeyType.P256 && publicKey.length === 65 && publicKey[0] === 0x04) {
407
+ return {
408
+ kty: 'EC',
409
+ crv: 'P-256',
410
+ x: publicKey.slice(1, 33).toString('base64url'),
411
+ y: publicKey.slice(33, 65).toString('base64url'),
412
+ };
413
+ }
414
+ else if (keyType === core_2.KeyType.P384 && publicKey.length === 97 && publicKey[0] === 0x04) {
415
+ return {
416
+ kty: 'EC',
417
+ crv: 'P-384',
418
+ x: publicKey.slice(1, 49).toString('base64url'),
419
+ y: publicKey.slice(49, 97).toString('base64url'),
420
+ };
421
+ }
422
+ }
423
+ // Try did:jwk
424
+ const didJwkParsed = this.parseDidJwk(did);
425
+ if (didJwkParsed) {
426
+ return didJwkParsed.jwk;
427
+ }
428
+ return null;
429
+ }
430
+ };
431
+ exports.KeyService = KeyService;
432
+ exports.KeyService = KeyService = __decorate([
433
+ (0, core_1.injectable)(),
434
+ __param(0, (0, core_1.inject)(OpenBadgesKeyBindingRepository_1.OpenBadgesKeyBindingRepository)),
435
+ __param(1, (0, core_1.inject)(ContextService_1.ContextService)),
436
+ __metadata("design:paramtypes", [OpenBadgesKeyBindingRepository_1.OpenBadgesKeyBindingRepository,
437
+ ContextService_1.ContextService])
438
+ ], KeyService);
439
+ //# sourceMappingURL=KeyService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyService.js","sourceRoot":"","sources":["../../src/services/KeyService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { OpenBadgesOAuthRepository } from '../repository/OpenBadgesOAuthRepository';
3
+ import { OpenBadgesTokenRepository } from '../repository/OpenBadgesTokenRepository';
4
+ export declare class OAuthClient {
5
+ private readonly repo;
6
+ private readonly tokens;
7
+ constructor(repo: OpenBadgesOAuthRepository, tokens: OpenBadgesTokenRepository);
8
+ registerClient(agentContext: AgentContext, registrationUrl: string, body: Record<string, unknown>): Promise<unknown>;
9
+ buildAuthorizationUrl(_authorizationUrl: string, _params: Record<string, string>): string;
10
+ completeAuthorizationCode(agentContext: AgentContext, tokenUrl: string, params: Record<string, string> & {
11
+ host?: string;
12
+ }): Promise<{
13
+ access_token: string;
14
+ refresh_token?: string;
15
+ scope?: string;
16
+ expires_in?: number;
17
+ }>;
18
+ getAccessToken(agentContext: AgentContext, tokenUrl: string, params: Record<string, string> & {
19
+ host?: string;
20
+ }): Promise<{
21
+ access_token: string;
22
+ refresh_token?: string;
23
+ scope?: string;
24
+ expires_in?: number;
25
+ }>;
26
+ }
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.OAuthClient = void 0;
16
+ const core_1 = require("@credo-ts/core");
17
+ const OpenBadgesOAuthRepository_1 = require("../repository/OpenBadgesOAuthRepository");
18
+ const OpenBadgesTokenRepository_1 = require("../repository/OpenBadgesTokenRepository");
19
+ const OpenBadgesTokenRecord_1 = require("../repository/OpenBadgesTokenRecord");
20
+ let OAuthClient = class OAuthClient {
21
+ constructor(repo, tokens) {
22
+ this.repo = repo;
23
+ this.tokens = tokens;
24
+ }
25
+ async registerClient(agentContext, registrationUrl, body) {
26
+ const res = await fetch(registrationUrl, {
27
+ method: 'POST',
28
+ headers: { 'content-type': 'application/json' },
29
+ body: JSON.stringify(body),
30
+ });
31
+ if (!res.ok)
32
+ throw new Error(`registration_failed: ${res.status}`);
33
+ const reg = await res.json();
34
+ const host = new URL(registrationUrl).origin;
35
+ const rec = new (require('../repository/OpenBadgesOAuthRecord').OpenBadgesOAuthRecord)({ host, clientRegistration: reg });
36
+ await this.repo.save(agentContext, rec);
37
+ return reg;
38
+ }
39
+ buildAuthorizationUrl(_authorizationUrl, _params) {
40
+ const url = new URL(_authorizationUrl);
41
+ for (const [k, v] of Object.entries(_params))
42
+ url.searchParams.set(k, v);
43
+ return url.toString();
44
+ }
45
+ async completeAuthorizationCode(agentContext, tokenUrl, params) {
46
+ const { client_id, client_secret, host, ...rest } = params;
47
+ const basic = Buffer.from(`${client_id}:${client_secret}`).toString('base64');
48
+ const res = await fetch(tokenUrl, {
49
+ method: 'POST',
50
+ headers: { 'content-type': 'application/x-www-form-urlencoded', authorization: `Basic ${basic}` },
51
+ body: new URLSearchParams({ grant_type: 'authorization_code', ...rest }).toString(),
52
+ });
53
+ if (!res.ok)
54
+ throw new Error(`token_failed: ${res.status}`);
55
+ const json = (await res.json());
56
+ const pairId = Math.random().toString(36).slice(2);
57
+ await this.tokens.save(agentContext, new OpenBadgesTokenRecord_1.OpenBadgesTokenRecord({
58
+ token: json.access_token,
59
+ tokenType: 'access',
60
+ clientId: client_id,
61
+ subject: 'unknown',
62
+ scope: json.scope,
63
+ expiresAt: new Date(Date.now() + (json.expires_in ?? 180) * 1000),
64
+ pairId,
65
+ host,
66
+ }));
67
+ if (json.refresh_token) {
68
+ await this.tokens.save(agentContext, new OpenBadgesTokenRecord_1.OpenBadgesTokenRecord({
69
+ token: json.refresh_token,
70
+ tokenType: 'refresh',
71
+ clientId: client_id,
72
+ subject: 'unknown',
73
+ scope: json.scope,
74
+ expiresAt: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),
75
+ pairId,
76
+ host,
77
+ }));
78
+ }
79
+ return json;
80
+ }
81
+ async getAccessToken(agentContext, tokenUrl, params) {
82
+ const { client_id, client_secret, refresh_token, scope, host } = params;
83
+ const basic = Buffer.from(`${client_id}:${client_secret}`).toString('base64');
84
+ const res = await fetch(tokenUrl, {
85
+ method: 'POST',
86
+ headers: { 'content-type': 'application/x-www-form-urlencoded', authorization: `Basic ${basic}` },
87
+ body: new URLSearchParams({ grant_type: 'refresh_token', refresh_token, scope: scope ?? '' }).toString(),
88
+ });
89
+ if (!res.ok)
90
+ throw new Error(`token_failed: ${res.status}`);
91
+ const json = (await res.json());
92
+ // Rotate stored refresh token: delete old, store new; store new access token
93
+ const pairId = Math.random().toString(36).slice(2);
94
+ await this.tokens.save(agentContext, new OpenBadgesTokenRecord_1.OpenBadgesTokenRecord({
95
+ token: json.access_token,
96
+ tokenType: 'access',
97
+ clientId: client_id,
98
+ subject: 'unknown',
99
+ scope: json.scope,
100
+ expiresAt: new Date(Date.now() + (json.expires_in ?? 180) * 1000),
101
+ pairId,
102
+ host,
103
+ }));
104
+ if (json.refresh_token) {
105
+ await this.tokens.save(agentContext, new OpenBadgesTokenRecord_1.OpenBadgesTokenRecord({
106
+ token: json.refresh_token,
107
+ tokenType: 'refresh',
108
+ clientId: client_id,
109
+ subject: 'unknown',
110
+ scope: json.scope,
111
+ expiresAt: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),
112
+ pairId,
113
+ host,
114
+ }));
115
+ }
116
+ return json;
117
+ }
118
+ };
119
+ exports.OAuthClient = OAuthClient;
120
+ exports.OAuthClient = OAuthClient = __decorate([
121
+ (0, core_1.injectable)(),
122
+ __param(0, (0, core_1.inject)(OpenBadgesOAuthRepository_1.OpenBadgesOAuthRepository)),
123
+ __param(1, (0, core_1.inject)(OpenBadgesTokenRepository_1.OpenBadgesTokenRepository)),
124
+ __metadata("design:paramtypes", [OpenBadgesOAuthRepository_1.OpenBadgesOAuthRepository,
125
+ OpenBadgesTokenRepository_1.OpenBadgesTokenRepository])
126
+ ], OAuthClient);
127
+ //# sourceMappingURL=OAuthClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthClient.js","sourceRoot":"","sources":["../../src/services/OAuthClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { OpenBadgesModuleConfig } from '../OpenBadgesModuleConfig';
3
+ import { CryptoDriver } from './crypto/CryptoDriver';
4
+ import { JsonLdCryptoDriver } from './crypto/JsonLdCryptoDriver';
5
+ import { JwtCryptoDriver } from './crypto/JwtCryptoDriver';
6
+ export declare class ProofService implements CryptoDriver {
7
+ private driver;
8
+ constructor(config: OpenBadgesModuleConfig, jsonld: JsonLdCryptoDriver, jwt: JwtCryptoDriver);
9
+ sign(agentContext: AgentContext, document: any, keyHint?: any): Promise<any>;
10
+ verify(agentContext: AgentContext, input: any): Promise<{
11
+ verified: boolean;
12
+ credential?: any;
13
+ error?: string;
14
+ }>;
15
+ }