@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,143 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
35
+ return function (target, key) { decorator(target, key, paramIndex); }
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.ConsumerService = void 0;
39
+ const core_1 = require("@credo-ts/core");
40
+ const OpenBadgesServiceDescriptionRepository_1 = require("../repository/OpenBadgesServiceDescriptionRepository");
41
+ const OpenBadgesOAuthRepository_1 = require("../repository/OpenBadgesOAuthRepository");
42
+ const OAuthClient_1 = require("./OAuthClient");
43
+ let ConsumerService = class ConsumerService {
44
+ constructor(sddRepo, oauthRepo, oauth) {
45
+ this.sddRepo = sddRepo;
46
+ this.oauthRepo = oauthRepo;
47
+ this.oauth = oauth;
48
+ }
49
+ async importFromUrl(agentContext, url, options) {
50
+ const discoveryUrl = options?.discoveryUrl ?? new URL('/ims/ob/v3p0/discovery', url).toString();
51
+ const sdd = await this.ensureServiceDescription(agentContext, discoveryUrl);
52
+ const regUrl = sdd?.components?.securitySchemes?.OAuth2ACG?.['x-imssf-registrationUrl'];
53
+ const authUrl = sdd?.components?.securitySchemes?.OAuth2ACG?.flows?.authorizationCode?.authorizationUrl;
54
+ if (!regUrl || !authUrl)
55
+ throw new Error('discovery_incomplete');
56
+ const registration = await this.oauth.registerClient(agentContext, regUrl, {
57
+ client_name: agentContext.config.label ?? 'Credo OB Client',
58
+ redirect_uris: ['http://localhost/callback'],
59
+ scope: Object.keys(sdd.components?.securitySchemes?.OAuth2ACG?.flows?.authorizationCode?.scopes ?? {}).join(' '),
60
+ grant_types: ['authorization_code', 'refresh_token'],
61
+ response_types: ['code'],
62
+ application_type: 'web',
63
+ });
64
+ const authorizationUrl = this.oauth.buildAuthorizationUrl(authUrl, {
65
+ response_type: 'code',
66
+ client_id: registration.client_id,
67
+ redirect_uri: registration.redirect_uris?.[0] ?? '',
68
+ scope: registration.scope ?? '',
69
+ state: Math.random().toString(36).slice(2),
70
+ code_challenge_method: 'S256',
71
+ code_challenge: Math.random().toString(36).slice(2),
72
+ });
73
+ return { discovery: sdd, registration, authorizationUrl, host: new URL(url).origin };
74
+ }
75
+ async ensureServiceDescription(agentContext, discoveryUrl) {
76
+ try {
77
+ const existing = await this.sddRepo.findByDiscoveryUrl(agentContext, discoveryUrl);
78
+ if (existing)
79
+ return existing.serviceDescription;
80
+ }
81
+ catch { }
82
+ const res = await fetch(discoveryUrl);
83
+ if (!res.ok)
84
+ throw new Error(`discovery_failed: ${res.status}`);
85
+ const json = await res.json();
86
+ await this.sddRepo.save(agentContext, {
87
+ discoveryUrl,
88
+ serviceDescription: json,
89
+ });
90
+ return json;
91
+ }
92
+ async upsertToRemote(agentContext, baseUrl, credential) {
93
+ const host = new URL(baseUrl).origin;
94
+ const oauth = await this.oauthRepo.findByHost(agentContext, host);
95
+ if (!oauth?.[0]?.clientRegistration)
96
+ throw new Error('no_client_registration');
97
+ const reg = oauth[0].clientRegistration;
98
+ const tokenUrl = reg?.token_endpoint || reg?.tokenUrl || new URL('/token', baseUrl).toString();
99
+ const clientId = reg.client_id;
100
+ const clientSecret = reg.client_secret;
101
+ if (!clientId || !clientSecret)
102
+ throw new Error('missing_client_credentials');
103
+ // Try to get a valid access token from token repository
104
+ const { OpenBadgesTokenRepository } = await Promise.resolve().then(() => __importStar(require('../repository/OpenBadgesTokenRepository')));
105
+ const tokens = agentContext.dependencyManager.resolve(OpenBadgesTokenRepository);
106
+ let access = await tokens.findValidAccessByClientHost(agentContext, clientId, host);
107
+ if (!access) {
108
+ // refresh
109
+ const refresh = await tokens.findRefreshByClientHost(agentContext, clientId, host);
110
+ if (!refresh)
111
+ throw new Error('no_refresh_token');
112
+ const refreshed = await this.oauth.getAccessToken(agentContext, tokenUrl, {
113
+ client_id: clientId,
114
+ client_secret: clientSecret,
115
+ refresh_token: refresh.token,
116
+ host,
117
+ });
118
+ access = await tokens.findValidAccessByClientHost(agentContext, clientId, host);
119
+ if (!access)
120
+ throw new Error('refresh_failed');
121
+ }
122
+ const url = new URL('/ims/ob/v3p0/credentials', baseUrl).toString();
123
+ const res = await fetch(url, {
124
+ method: 'POST',
125
+ headers: { authorization: `Bearer ${access.token}`, 'content-type': 'application/json' },
126
+ body: JSON.stringify(credential),
127
+ });
128
+ if (!res.ok)
129
+ throw new Error(`upsert_failed: ${res.status}`);
130
+ return res.json();
131
+ }
132
+ };
133
+ exports.ConsumerService = ConsumerService;
134
+ exports.ConsumerService = ConsumerService = __decorate([
135
+ (0, core_1.injectable)(),
136
+ __param(0, (0, core_1.inject)(OpenBadgesServiceDescriptionRepository_1.OpenBadgesServiceDescriptionRepository)),
137
+ __param(1, (0, core_1.inject)(OpenBadgesOAuthRepository_1.OpenBadgesOAuthRepository)),
138
+ __param(2, (0, core_1.inject)(OAuthClient_1.OAuthClient)),
139
+ __metadata("design:paramtypes", [OpenBadgesServiceDescriptionRepository_1.OpenBadgesServiceDescriptionRepository,
140
+ OpenBadgesOAuthRepository_1.OpenBadgesOAuthRepository,
141
+ OAuthClient_1.OAuthClient])
142
+ ], ConsumerService);
143
+ //# sourceMappingURL=ConsumerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsumerService.js","sourceRoot":"","sources":["../../src/services/ConsumerService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ type LoaderResult = {
2
+ contextUrl: null;
3
+ documentUrl: string;
4
+ document: any;
5
+ };
6
+ export declare class ContextService {
7
+ private cache;
8
+ private allowNetwork;
9
+ addCached(url: string, document: any): void;
10
+ setAllowNetwork(allow: boolean): void;
11
+ getDocumentLoader(): (url: string) => Promise<LoaderResult>;
12
+ exportCache(): Record<string, any>;
13
+ }
14
+ export {};
@@ -0,0 +1,54 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ContextService = void 0;
10
+ const core_1 = require("@credo-ts/core");
11
+ let ContextService = class ContextService {
12
+ constructor() {
13
+ this.cache = new Map();
14
+ this.allowNetwork = true;
15
+ }
16
+ addCached(url, document) {
17
+ this.cache.set(url, document);
18
+ }
19
+ setAllowNetwork(allow) {
20
+ this.allowNetwork = allow;
21
+ }
22
+ getDocumentLoader() {
23
+ const self = this;
24
+ return async function documentLoader(url) {
25
+ if (self.cache.has(url)) {
26
+ return { contextUrl: null, documentUrl: url, document: self.cache.get(url) };
27
+ }
28
+ if (!self.allowNetwork)
29
+ throw new Error(`Context not cached: ${url}`);
30
+ // pin to https and specific hosts by default; allow did:web document resolution via https
31
+ const allowed = url.startsWith('https://www.w3.org/') || url.startsWith('https://purl.imsglobal.org/') || url.startsWith('https://w3id.org/') || url.startsWith('https://');
32
+ if (!allowed)
33
+ throw new Error(`Blocked remote context: ${url}`);
34
+ const res = await fetch(url);
35
+ if (!res.ok)
36
+ throw new Error(`Failed to fetch context ${url}: ${res.status}`);
37
+ const json = await res.json();
38
+ self.cache.set(url, json);
39
+ return { contextUrl: null, documentUrl: url, document: json };
40
+ };
41
+ }
42
+ // Export cached contexts for external runners (testing)
43
+ exportCache() {
44
+ const out = {};
45
+ for (const [k, v] of this.cache.entries())
46
+ out[k] = v;
47
+ return out;
48
+ }
49
+ };
50
+ exports.ContextService = ContextService;
51
+ exports.ContextService = ContextService = __decorate([
52
+ (0, core_1.injectable)()
53
+ ], ContextService);
54
+ //# sourceMappingURL=ContextService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextService.js","sourceRoot":"","sources":["../../src/services/ContextService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAA2C;AAKpC,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACG,UAAK,GAAG,IAAI,GAAG,EAAe,CAAA;QAC9B,iBAAY,GAAG,IAAI,CAAA;IAkC7B,CAAC;IAhCQ,SAAS,CAAC,GAAW,EAAE,QAAa;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAEM,eAAe,CAAC,KAAc;QACnC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;IAC3B,CAAC;IAEM,iBAAiB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,KAAK,UAAU,cAAc,CAAC,GAAW;YAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAA;YAC9E,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAA;YACrE,0FAA0F;YAC1F,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,6BAA6B,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAC3K,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;YAC/D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YAC7E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC/D,CAAC,CAAA;IACH,CAAC;IAED,wDAAwD;IACjD,WAAW;QAChB,MAAM,GAAG,GAAwB,EAAE,CAAA;QACnC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACrD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF,CAAA;AApCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,iBAAU,GAAE;GACA,cAAc,CAoC1B"}
@@ -0,0 +1,51 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { ContextService } from './ContextService';
3
+ /**
4
+ * DataIntegrityService
5
+ *
6
+ * Handles signing and verification of credentials using the eddsa-rdfc-2022 cryptosuite.
7
+ * This produces DataIntegrityProof proofs compatible with Credly and other OBv3 issuers.
8
+ */
9
+ export declare class DataIntegrityService {
10
+ private readonly contextService;
11
+ private readonly eddsaRdfc2022;
12
+ constructor(contextService: ContextService);
13
+ /**
14
+ * Sign a document using eddsa-rdfc-2022 cryptosuite
15
+ *
16
+ * Produces a DataIntegrityProof with:
17
+ * - type: "DataIntegrityProof"
18
+ * - cryptosuite: "eddsa-rdfc-2022"
19
+ * - RDFC-1.0 canonicalization
20
+ * - Ed25519 signature
21
+ */
22
+ sign(_agentContext: AgentContext, document: Record<string, unknown>, keyPair: {
23
+ id: string;
24
+ controller: string;
25
+ publicKeyMultibase?: string;
26
+ privateKeyMultibase: string;
27
+ }): Promise<Record<string, unknown>>;
28
+ /**
29
+ * Verify a signed document with DataIntegrityProof
30
+ *
31
+ * Supports verification of eddsa-rdfc-2022 proofs by:
32
+ * 1. Resolving the public key from the verificationMethod DID
33
+ * 2. Using RDFC-1.0 canonicalization to recreate the signed hash
34
+ * 3. Verifying the Ed25519 signature
35
+ */
36
+ verify(document: Record<string, unknown>): Promise<{
37
+ verified: boolean;
38
+ error?: string;
39
+ }>;
40
+ /**
41
+ * Get the default cryptosuite identifier
42
+ */
43
+ getDefaultCryptosuite(): string;
44
+ /**
45
+ * Resolve public key from a verification method ID
46
+ *
47
+ * This fetches the DID document and extracts the publicKeyMultibase
48
+ * from the matching verification method.
49
+ */
50
+ private resolvePublicKey;
51
+ }
@@ -0,0 +1,134 @@
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.DataIntegrityService = void 0;
16
+ const core_1 = require("@credo-ts/core");
17
+ const ContextService_1 = require("./ContextService");
18
+ const constants_1 = require("../constants");
19
+ const EddsaRdfc2022_1 = require("../cryptosuites/EddsaRdfc2022");
20
+ /**
21
+ * DataIntegrityService
22
+ *
23
+ * Handles signing and verification of credentials using the eddsa-rdfc-2022 cryptosuite.
24
+ * This produces DataIntegrityProof proofs compatible with Credly and other OBv3 issuers.
25
+ */
26
+ let DataIntegrityService = class DataIntegrityService {
27
+ constructor(contextService) {
28
+ this.contextService = contextService;
29
+ this.eddsaRdfc2022 = new EddsaRdfc2022_1.EddsaRdfc2022Cryptosuite();
30
+ }
31
+ /**
32
+ * Sign a document using eddsa-rdfc-2022 cryptosuite
33
+ *
34
+ * Produces a DataIntegrityProof with:
35
+ * - type: "DataIntegrityProof"
36
+ * - cryptosuite: "eddsa-rdfc-2022"
37
+ * - RDFC-1.0 canonicalization
38
+ * - Ed25519 signature
39
+ */
40
+ async sign(_agentContext, document, keyPair) {
41
+ return this.eddsaRdfc2022.sign({
42
+ document,
43
+ keyPair: {
44
+ id: keyPair.id,
45
+ controller: keyPair.controller,
46
+ publicKeyMultibase: keyPair.publicKeyMultibase || '',
47
+ privateKeyMultibase: keyPair.privateKeyMultibase,
48
+ },
49
+ purpose: 'assertionMethod',
50
+ });
51
+ }
52
+ /**
53
+ * Verify a signed document with DataIntegrityProof
54
+ *
55
+ * Supports verification of eddsa-rdfc-2022 proofs by:
56
+ * 1. Resolving the public key from the verificationMethod DID
57
+ * 2. Using RDFC-1.0 canonicalization to recreate the signed hash
58
+ * 3. Verifying the Ed25519 signature
59
+ */
60
+ async verify(document) {
61
+ try {
62
+ const proof = document.proof;
63
+ if (!proof) {
64
+ return { verified: false, error: 'No proof found in document' };
65
+ }
66
+ const proofs = Array.isArray(proof) ? proof : [proof];
67
+ for (const p of proofs) {
68
+ // Check if this is an eddsa-rdfc-2022 proof
69
+ if (this.eddsaRdfc2022.matchProof(p)) {
70
+ // Resolve public key from verification method
71
+ const publicKeyMultibase = await this.resolvePublicKey(p.verificationMethod);
72
+ if (!publicKeyMultibase) {
73
+ return { verified: false, error: `Could not resolve public key from ${p.verificationMethod}` };
74
+ }
75
+ return this.eddsaRdfc2022.verify({
76
+ document,
77
+ proof: p,
78
+ publicKeyMultibase,
79
+ // Use internal cached contexts for verification
80
+ // Network contexts are fetched during real-world usage by the cryptosuite
81
+ useNetworkContexts: false,
82
+ });
83
+ }
84
+ }
85
+ return { verified: false, error: 'No matching eddsa-rdfc-2022 proof found' };
86
+ }
87
+ catch (e) {
88
+ const error = e;
89
+ return { verified: false, error: error?.message || String(e) };
90
+ }
91
+ }
92
+ /**
93
+ * Get the default cryptosuite identifier
94
+ */
95
+ getDefaultCryptosuite() {
96
+ return constants_1.DI_EDDSA_RDFC_2022;
97
+ }
98
+ /**
99
+ * Resolve public key from a verification method ID
100
+ *
101
+ * This fetches the DID document and extracts the publicKeyMultibase
102
+ * from the matching verification method.
103
+ */
104
+ async resolvePublicKey(verificationMethodId) {
105
+ try {
106
+ const documentLoader = this.contextService.getDocumentLoader();
107
+ const result = await documentLoader(verificationMethodId);
108
+ // The document loader should return the verification method object
109
+ const vm = result.document;
110
+ if (vm.publicKeyMultibase) {
111
+ return vm.publicKeyMultibase;
112
+ }
113
+ // If we got a full DID document, find the verification method
114
+ const didDoc = result.document;
115
+ if (didDoc.verificationMethod) {
116
+ const method = didDoc.verificationMethod.find((m) => m.id === verificationMethodId);
117
+ if (method?.publicKeyMultibase) {
118
+ return method.publicKeyMultibase;
119
+ }
120
+ }
121
+ return null;
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ }
127
+ };
128
+ exports.DataIntegrityService = DataIntegrityService;
129
+ exports.DataIntegrityService = DataIntegrityService = __decorate([
130
+ (0, core_1.injectable)(),
131
+ __param(0, (0, core_1.inject)(ContextService_1.ContextService)),
132
+ __metadata("design:paramtypes", [ContextService_1.ContextService])
133
+ ], DataIntegrityService);
134
+ //# sourceMappingURL=DataIntegrityService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataIntegrityService.js","sourceRoot":"","sources":["../../src/services/DataIntegrityService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ export declare class DidCommLinkService {
3
+ sendCredentialUrl(_agentContext: AgentContext, _connectionId: string, _payload: {
4
+ url: string;
5
+ discoveryUrl?: string;
6
+ }): Promise<void>;
7
+ }
@@ -0,0 +1,20 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DidCommLinkService = void 0;
10
+ const core_1 = require("@credo-ts/core");
11
+ let DidCommLinkService = class DidCommLinkService {
12
+ async sendCredentialUrl(_agentContext, _connectionId, _payload) {
13
+ throw new Error('DidCommLinkService.sendCredentialUrl not implemented yet');
14
+ }
15
+ };
16
+ exports.DidCommLinkService = DidCommLinkService;
17
+ exports.DidCommLinkService = DidCommLinkService = __decorate([
18
+ (0, core_1.injectable)()
19
+ ], DidCommLinkService);
20
+ //# sourceMappingURL=DidCommLinkService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DidCommLinkService.js","sourceRoot":"","sources":["../../src/services/DidCommLinkService.ts"],"names":[],"mappings":";;;;;;;;;AACA,yCAA2C;AAGpC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACtB,KAAK,CAAC,iBAAiB,CAAC,aAA2B,EAAE,aAAqB,EAAE,QAAgD;QACjI,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;CACF,CAAA;AAJY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,iBAAU,GAAE;GACA,kBAAkB,CAI9B"}
@@ -0,0 +1,9 @@
1
+ export declare class DisplayMapper {
2
+ toDisplay(credential: any): {
3
+ title: any;
4
+ description: any;
5
+ issuerName: any;
6
+ issuedOn: any;
7
+ image: any;
8
+ };
9
+ }
@@ -0,0 +1,26 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DisplayMapper = void 0;
10
+ const core_1 = require("@credo-ts/core");
11
+ let DisplayMapper = class DisplayMapper {
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ toDisplay(credential) {
14
+ const issuerName = credential?.issuer?.name;
15
+ const issuedOn = credential?.validFrom ?? credential?.issuanceDate;
16
+ const title = credential?.name ?? credential?.credentialSubject?.achievement?.name;
17
+ const description = credential?.credentialSubject?.achievement?.description;
18
+ const image = credential?.credentialSubject?.achievement?.image?.id;
19
+ return { title, description, issuerName, issuedOn, image };
20
+ }
21
+ };
22
+ exports.DisplayMapper = DisplayMapper;
23
+ exports.DisplayMapper = DisplayMapper = __decorate([
24
+ (0, core_1.injectable)()
25
+ ], DisplayMapper);
26
+ //# sourceMappingURL=DisplayMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisplayMapper.js","sourceRoot":"","sources":["../../src/services/DisplayMapper.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAA2C;AAGpC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,8DAA8D;IACvD,SAAS,CAAC,UAAe;QAC9B,MAAM,UAAU,GAAG,UAAU,EAAE,MAAM,EAAE,IAAI,CAAA;QAC3C,MAAM,QAAQ,GAAG,UAAU,EAAE,SAAS,IAAI,UAAU,EAAE,YAAY,CAAA;QAClE,MAAM,KAAK,GAAG,UAAU,EAAE,IAAI,IAAI,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAA;QAClF,MAAM,WAAW,GAAG,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAA;QAC3E,MAAM,KAAK,GAAG,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAA;QACnE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC5D,CAAC;CACF,CAAA;AAVY,sCAAa;wBAAb,aAAa;IADzB,IAAA,iBAAU,GAAE;GACA,aAAa,CAUzB"}
@@ -0,0 +1,38 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { OpenBadgeCredentialRepository } from '../repository/OpenBadgeCredentialRepository';
3
+ import { OpenBadgeCredentialRecord } from '../repository/OpenBadgeCredentialRecord';
4
+ import type { EndorsementCredentialInput } from '../models/EndorsementCredential';
5
+ import type { ClrCredentialInput } from '../models/ClrCredential';
6
+ import { ProofService } from './ProofService';
7
+ import { OpenBadgesModuleConfig } from '../OpenBadgesModuleConfig';
8
+ import { KeyService } from './KeyService';
9
+ export declare class IssuerService {
10
+ private readonly repository;
11
+ private readonly proofs;
12
+ private readonly keys;
13
+ private readonly config;
14
+ constructor(repository: OpenBadgeCredentialRepository, proofs: ProofService, keys: KeyService, config: OpenBadgesModuleConfig);
15
+ issueCredential(agentContext: AgentContext, input: any): Promise<OpenBadgeCredentialRecord>;
16
+ /**
17
+ * Issues an EndorsementCredential - a third-party validation credential
18
+ *
19
+ * EndorsementCredentials allow external organizations or individuals to
20
+ * endorse achievements, profiles, or other credentials.
21
+ *
22
+ * @param agentContext - The agent context
23
+ * @param input - The endorsement credential input
24
+ * @returns The saved credential record
25
+ */
26
+ issueEndorsement(agentContext: AgentContext, input: EndorsementCredentialInput): Promise<OpenBadgeCredentialRecord>;
27
+ /**
28
+ * Issues a ClrCredential - a Comprehensive Learner Record bundling multiple credentials
29
+ *
30
+ * CLR credentials allow bundling multiple OpenBadgeCredentials into a single
31
+ * verifiable credential representing a learner's complete achievement record.
32
+ *
33
+ * @param agentContext - The agent context
34
+ * @param input - The CLR credential input
35
+ * @returns The saved credential record
36
+ */
37
+ issueClr(agentContext: AgentContext, input: ClrCredentialInput): Promise<OpenBadgeCredentialRecord>;
38
+ }