@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,43 @@
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.ProofService = void 0;
16
+ const core_1 = require("@credo-ts/core");
17
+ const OpenBadgesModuleConfig_1 = require("../OpenBadgesModuleConfig");
18
+ const JsonLdCryptoDriver_1 = require("./crypto/JsonLdCryptoDriver");
19
+ const JwtCryptoDriver_1 = require("./crypto/JwtCryptoDriver");
20
+ let ProofService = class ProofService {
21
+ constructor(config, jsonld, jwt) {
22
+ this.driver = config.proofType === 'jwt' ? jwt : jsonld;
23
+ }
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ sign(agentContext, document, keyHint) {
26
+ return this.driver.sign(agentContext, document, keyHint);
27
+ }
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ verify(agentContext, input) {
30
+ return this.driver.verify(agentContext, input);
31
+ }
32
+ };
33
+ exports.ProofService = ProofService;
34
+ exports.ProofService = ProofService = __decorate([
35
+ (0, core_1.injectable)(),
36
+ __param(0, (0, core_1.inject)(OpenBadgesModuleConfig_1.OpenBadgesModuleConfig)),
37
+ __param(1, (0, core_1.inject)(JsonLdCryptoDriver_1.JsonLdCryptoDriver)),
38
+ __param(2, (0, core_1.inject)(JwtCryptoDriver_1.JwtCryptoDriver)),
39
+ __metadata("design:paramtypes", [OpenBadgesModuleConfig_1.OpenBadgesModuleConfig,
40
+ JsonLdCryptoDriver_1.JsonLdCryptoDriver,
41
+ JwtCryptoDriver_1.JwtCryptoDriver])
42
+ ], ProofService);
43
+ //# sourceMappingURL=ProofService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProofService.js","sourceRoot":"","sources":["../../src/services/ProofService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAmD;AAEnD,sEAAkE;AAElE,oEAAgE;AAChE,8DAA0D;AAGnD,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGvB,YACkC,MAA8B,EAClC,MAA0B,EAC7B,GAAoB;QAE7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACzD,CAAC;IAED,8DAA8D;IACvD,IAAI,CAAC,YAA0B,EAAE,QAAa,EAAE,OAAa;QAClE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC1D,CAAC;IAED,8DAA8D;IACvD,MAAM,CAAC,YAA0B,EAAE,KAAU;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;IAChD,CAAC;CACF,CAAA;AApBY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,iBAAU,GAAE;IAKR,WAAA,IAAA,aAAM,EAAC,+CAAsB,CAAC,CAAA;IAC9B,WAAA,IAAA,aAAM,EAAC,uCAAkB,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAM,EAAC,iCAAe,CAAC,CAAA;qCAFgB,+CAAsB;QAC1B,uCAAkB;QACxB,iCAAe;GANpC,YAAY,CAoBxB"}
@@ -0,0 +1,59 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { OpenBadgesRevocationCacheRepository } from '../repository/OpenBadgesRevocationCacheRepository';
3
+ import { StatusListRepository } from '../repository/StatusListRepository';
4
+ import { StatusListRecord } from '../repository/StatusListRecord';
5
+ import type { StatusListEntry, CreateStatusListInput, StatusListCredential } from '../models/StatusListCredential';
6
+ export declare class RevocationService {
7
+ private readonly cacheRepo;
8
+ private readonly statusListRepo;
9
+ constructor(cacheRepo: OpenBadgesRevocationCacheRepository, statusListRepo: StatusListRepository);
10
+ isRevoked(agentContext: AgentContext, credential: any): Promise<boolean>;
11
+ private getStatusListBits;
12
+ /**
13
+ * Create a new status list for credential revocation or suspension
14
+ */
15
+ createStatusList(agentContext: AgentContext, input: CreateStatusListInput): Promise<StatusListRecord>;
16
+ /**
17
+ * Allocate the next available index in a status list for a credential
18
+ * Returns the allocated index
19
+ */
20
+ allocateIndex(agentContext: AgentContext, listId: string, credentialId?: string): Promise<number>;
21
+ /**
22
+ * Set the status (revoked/suspended or active) for a specific index
23
+ */
24
+ setStatus(agentContext: AgentContext, options: {
25
+ listId: string;
26
+ index: number;
27
+ status: boolean;
28
+ }): Promise<void>;
29
+ /**
30
+ * Revoke a credential by its credential ID (if tracked)
31
+ */
32
+ revokeByCredentialId(agentContext: AgentContext, listId: string, credentialId: string): Promise<void>;
33
+ /**
34
+ * Get the status of a specific index
35
+ */
36
+ getStatus(agentContext: AgentContext, listId: string, index: number): Promise<boolean>;
37
+ /**
38
+ * Build an unsigned StatusList2021Credential for a status list
39
+ * This can then be signed using the ProofService
40
+ */
41
+ buildStatusListCredential(record: StatusListRecord): StatusListCredential;
42
+ /**
43
+ * Create a StatusListEntry to add to a credential
44
+ */
45
+ createStatusEntry(record: StatusListRecord, index: number, entryId?: string): StatusListEntry;
46
+ /**
47
+ * Add a credentialStatus field to a credential
48
+ * This should be called before signing the credential
49
+ */
50
+ addCredentialStatus(credential: any, statusEntry: StatusListEntry): any;
51
+ /**
52
+ * Get a status list record by its ID
53
+ */
54
+ getStatusList(agentContext: AgentContext, listId: string): Promise<StatusListRecord | null>;
55
+ /**
56
+ * Get all status lists for an issuer
57
+ */
58
+ getStatusListsByIssuer(agentContext: AgentContext, issuerDid: string): Promise<StatusListRecord[]>;
59
+ }
@@ -0,0 +1,319 @@
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.RevocationService = void 0;
39
+ const core_1 = require("@credo-ts/core");
40
+ const OpenBadgesRevocationCacheRepository_1 = require("../repository/OpenBadgesRevocationCacheRepository");
41
+ const StatusListRepository_1 = require("../repository/StatusListRepository");
42
+ const StatusListRecord_1 = require("../repository/StatusListRecord");
43
+ const constants_1 = require("../constants");
44
+ const StatusListCredential_1 = require("../models/StatusListCredential");
45
+ const zlib = __importStar(require("zlib"));
46
+ /**
47
+ * Convert base64url to bytes
48
+ */
49
+ function b64ToBytes(b64) {
50
+ const pad = b64.length % 4 === 0 ? '' : '='.repeat(4 - (b64.length % 4));
51
+ const base64 = (b64 + pad).replace(/-/g, '+').replace(/_/g, '/');
52
+ return Buffer.from(base64, 'base64');
53
+ }
54
+ /**
55
+ * Convert bytes to base64url
56
+ */
57
+ function bytesToB64url(bytes) {
58
+ return Buffer.from(bytes).toString('base64url');
59
+ }
60
+ /**
61
+ * Check if a bit is set at the given index
62
+ */
63
+ function isBitSet(bytes, index) {
64
+ const byteIndex = Math.floor(index / 8);
65
+ const bitIndex = index % 8;
66
+ if (byteIndex >= bytes.length)
67
+ return false;
68
+ const mask = 1 << (7 - bitIndex);
69
+ return (bytes[byteIndex] & mask) !== 0;
70
+ }
71
+ /**
72
+ * Set or clear a bit at the given index
73
+ */
74
+ function setBit(bytes, index, value) {
75
+ const byteIndex = Math.floor(index / 8);
76
+ const bitIndex = index % 8;
77
+ if (byteIndex >= bytes.length)
78
+ return;
79
+ const mask = 1 << (7 - bitIndex);
80
+ if (value) {
81
+ bytes[byteIndex] |= mask;
82
+ }
83
+ else {
84
+ bytes[byteIndex] &= ~mask;
85
+ }
86
+ }
87
+ /**
88
+ * Create an empty bitstring of the given capacity
89
+ */
90
+ function createBitstring(capacity) {
91
+ return new Uint8Array(Math.ceil(capacity / 8));
92
+ }
93
+ /**
94
+ * GZIP compress and base64url encode a bitstring
95
+ */
96
+ function encodeStatusList(bitstring) {
97
+ const compressed = zlib.gzipSync(Buffer.from(bitstring));
98
+ return bytesToB64url(compressed);
99
+ }
100
+ /**
101
+ * Base64url decode and GZIP decompress a status list
102
+ */
103
+ function decodeStatusList(encoded) {
104
+ const compressed = b64ToBytes(encoded);
105
+ const decompressed = zlib.gunzipSync(Buffer.from(compressed));
106
+ return new Uint8Array(decompressed);
107
+ }
108
+ let RevocationService = class RevocationService {
109
+ constructor(cacheRepo, statusListRepo) {
110
+ this.cacheRepo = cacheRepo;
111
+ this.statusListRepo = statusListRepo;
112
+ }
113
+ async isRevoked(agentContext, credential) {
114
+ const cs = credential?.credentialStatus;
115
+ const entries = Array.isArray(cs) ? cs : cs ? [cs] : [];
116
+ for (const entry of entries) {
117
+ const type = entry?.type;
118
+ if (type !== constants_1.ONE_EDTECH_REVOCATION_LIST && type !== 'StatusList2021Entry')
119
+ continue;
120
+ const index = typeof entry?.statusListIndex === 'number' ? entry.statusListIndex : parseInt(entry?.statusListIndex ?? '', 10);
121
+ const url = entry?.statusListCredential || entry?.statusListUrl || entry?.id;
122
+ if (!url || Number.isNaN(index))
123
+ continue;
124
+ const { bytes } = await this.getStatusListBits(agentContext, url);
125
+ if (isBitSet(bytes, index))
126
+ return true;
127
+ }
128
+ return false;
129
+ }
130
+ async getStatusListBits(agentContext, url) {
131
+ try {
132
+ const cached = await this.cacheRepo.findByStatusListUrl(agentContext, url);
133
+ if (cached?.bitstringBase64) {
134
+ return { bytes: b64ToBytes(cached.bitstringBase64) };
135
+ }
136
+ }
137
+ catch { }
138
+ const res = await fetch(url);
139
+ if (!res.ok)
140
+ throw new Error(`Failed to fetch status list: ${res.status}`);
141
+ const json = (await res.json());
142
+ // Try multiple shapes
143
+ const encodedList = json?.encodedList ?? json?.credentialSubject?.encodedList;
144
+ if (!encodedList)
145
+ throw new Error('encodedList not found in status list');
146
+ try {
147
+ const rec = await this.cacheRepo.findByStatusListUrl(agentContext, url);
148
+ if (rec) {
149
+ rec.bitstringBase64 = encodedList;
150
+ rec.lastUpdatedAt = new Date();
151
+ await this.cacheRepo.update(agentContext, rec);
152
+ }
153
+ else {
154
+ await this.cacheRepo.save(agentContext, {
155
+ statusListUrl: url,
156
+ bitstringBase64: encodedList,
157
+ lastUpdatedAt: new Date(),
158
+ });
159
+ }
160
+ }
161
+ catch { }
162
+ return { bytes: b64ToBytes(encodedList) };
163
+ }
164
+ // ========================================
165
+ // Issuer-side Status List Management
166
+ // ========================================
167
+ /**
168
+ * Create a new status list for credential revocation or suspension
169
+ */
170
+ async createStatusList(agentContext, input) {
171
+ const capacity = input.capacity ?? StatusListCredential_1.DEFAULT_STATUS_LIST_CAPACITY;
172
+ const bitstring = createBitstring(capacity);
173
+ const record = new StatusListRecord_1.StatusListRecord({
174
+ listId: input.listId,
175
+ issuerDid: input.issuerDid,
176
+ purpose: input.purpose,
177
+ bitstringBase64: bytesToB64url(bitstring),
178
+ capacity,
179
+ nextIndex: 0,
180
+ credentialIndexMap: {},
181
+ baseUrl: input.baseUrl,
182
+ });
183
+ await this.statusListRepo.save(agentContext, record);
184
+ console.log('[OB][RevocationService] Created status list:', input.listId, 'capacity:', capacity);
185
+ return record;
186
+ }
187
+ /**
188
+ * Allocate the next available index in a status list for a credential
189
+ * Returns the allocated index
190
+ */
191
+ async allocateIndex(agentContext, listId, credentialId) {
192
+ const record = await this.statusListRepo.findByListId(agentContext, listId);
193
+ if (!record) {
194
+ throw new Error(`Status list not found: ${listId}`);
195
+ }
196
+ if (record.nextIndex >= record.capacity) {
197
+ throw new Error(`Status list ${listId} is full (capacity: ${record.capacity})`);
198
+ }
199
+ const index = record.nextIndex;
200
+ record.nextIndex++;
201
+ if (credentialId) {
202
+ record.credentialIndexMap[credentialId] = index;
203
+ }
204
+ await this.statusListRepo.update(agentContext, record);
205
+ console.log('[OB][RevocationService] Allocated index:', index, 'for list:', listId);
206
+ return index;
207
+ }
208
+ /**
209
+ * Set the status (revoked/suspended or active) for a specific index
210
+ */
211
+ async setStatus(agentContext, options) {
212
+ const record = await this.statusListRepo.findByListId(agentContext, options.listId);
213
+ if (!record) {
214
+ throw new Error(`Status list not found: ${options.listId}`);
215
+ }
216
+ if (options.index < 0 || options.index >= record.capacity) {
217
+ throw new Error(`Index ${options.index} out of range (0-${record.capacity - 1})`);
218
+ }
219
+ // Decode the bitstring
220
+ const bitstring = b64ToBytes(record.bitstringBase64);
221
+ // Set the bit
222
+ setBit(bitstring, options.index, options.status);
223
+ // Update the record
224
+ record.bitstringBase64 = bytesToB64url(bitstring);
225
+ await this.statusListRepo.update(agentContext, record);
226
+ console.log('[OB][RevocationService] Set status for index:', options.index, 'to:', options.status ? 'revoked' : 'active');
227
+ }
228
+ /**
229
+ * Revoke a credential by its credential ID (if tracked)
230
+ */
231
+ async revokeByCredentialId(agentContext, listId, credentialId) {
232
+ const record = await this.statusListRepo.findByListId(agentContext, listId);
233
+ if (!record) {
234
+ throw new Error(`Status list not found: ${listId}`);
235
+ }
236
+ const index = record.credentialIndexMap[credentialId];
237
+ if (index === undefined) {
238
+ throw new Error(`Credential ${credentialId} not found in status list ${listId}`);
239
+ }
240
+ await this.setStatus(agentContext, { listId, index, status: true });
241
+ }
242
+ /**
243
+ * Get the status of a specific index
244
+ */
245
+ async getStatus(agentContext, listId, index) {
246
+ const record = await this.statusListRepo.findByListId(agentContext, listId);
247
+ if (!record) {
248
+ throw new Error(`Status list not found: ${listId}`);
249
+ }
250
+ const bitstring = b64ToBytes(record.bitstringBase64);
251
+ return isBitSet(bitstring, index);
252
+ }
253
+ /**
254
+ * Build an unsigned StatusList2021Credential for a status list
255
+ * This can then be signed using the ProofService
256
+ */
257
+ buildStatusListCredential(record) {
258
+ const bitstring = b64ToBytes(record.bitstringBase64);
259
+ const encodedList = encodeStatusList(bitstring);
260
+ const credentialId = `${record.baseUrl}/status-list/${record.listId}`;
261
+ return {
262
+ '@context': [constants_1.VC_V2_CONTEXT, StatusListCredential_1.STATUS_LIST_2021_CONTEXT],
263
+ type: ['VerifiableCredential', 'StatusList2021Credential'],
264
+ id: credentialId,
265
+ issuer: record.issuerDid,
266
+ validFrom: new Date().toISOString(),
267
+ credentialSubject: {
268
+ id: `${credentialId}#list`,
269
+ type: 'StatusList2021',
270
+ statusPurpose: record.purpose,
271
+ encodedList,
272
+ },
273
+ };
274
+ }
275
+ /**
276
+ * Create a StatusListEntry to add to a credential
277
+ */
278
+ createStatusEntry(record, index, entryId) {
279
+ const statusListCredentialUrl = `${record.baseUrl}/status-list/${record.listId}`;
280
+ return {
281
+ id: entryId ?? `${statusListCredentialUrl}#${index}`,
282
+ type: 'StatusList2021Entry',
283
+ statusPurpose: record.purpose,
284
+ statusListIndex: String(index),
285
+ statusListCredential: statusListCredentialUrl,
286
+ };
287
+ }
288
+ /**
289
+ * Add a credentialStatus field to a credential
290
+ * This should be called before signing the credential
291
+ */
292
+ addCredentialStatus(credential, statusEntry) {
293
+ return {
294
+ ...credential,
295
+ credentialStatus: statusEntry,
296
+ };
297
+ }
298
+ /**
299
+ * Get a status list record by its ID
300
+ */
301
+ async getStatusList(agentContext, listId) {
302
+ return this.statusListRepo.findByListId(agentContext, listId);
303
+ }
304
+ /**
305
+ * Get all status lists for an issuer
306
+ */
307
+ async getStatusListsByIssuer(agentContext, issuerDid) {
308
+ return this.statusListRepo.findByIssuer(agentContext, issuerDid);
309
+ }
310
+ };
311
+ exports.RevocationService = RevocationService;
312
+ exports.RevocationService = RevocationService = __decorate([
313
+ (0, core_1.injectable)(),
314
+ __param(0, (0, core_1.inject)(OpenBadgesRevocationCacheRepository_1.OpenBadgesRevocationCacheRepository)),
315
+ __param(1, (0, core_1.inject)(StatusListRepository_1.StatusListRepository)),
316
+ __metadata("design:paramtypes", [OpenBadgesRevocationCacheRepository_1.OpenBadgesRevocationCacheRepository,
317
+ StatusListRepository_1.StatusListRepository])
318
+ ], RevocationService);
319
+ //# sourceMappingURL=RevocationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevocationService.js","sourceRoot":"","sources":["../../src/services/RevocationService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { ContextService } from './ContextService';
3
+ import { ProofService } from './ProofService';
4
+ import { RevocationService } from './RevocationService';
5
+ export declare class VerifyService {
6
+ private readonly contextService;
7
+ private readonly revocations;
8
+ private readonly proofs;
9
+ constructor(contextService: ContextService, revocations: RevocationService, proofs: ProofService);
10
+ verify(agentContext: AgentContext, credentialOrJwt: any): Promise<{
11
+ isValidStructure: boolean;
12
+ issues: import("../utils/validate").ValidationIssue[];
13
+ status: string;
14
+ proofVerified: boolean;
15
+ }>;
16
+ private evaluateStatus;
17
+ }
@@ -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
+ 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.VerifyService = void 0;
16
+ const core_1 = require("@credo-ts/core");
17
+ const validate_1 = require("../utils/validate");
18
+ const ContextService_1 = require("./ContextService");
19
+ const ProofService_1 = require("./ProofService");
20
+ const RevocationService_1 = require("./RevocationService");
21
+ let VerifyService = class VerifyService {
22
+ constructor(contextService, revocations, proofs) {
23
+ this.contextService = contextService;
24
+ this.revocations = revocations;
25
+ this.proofs = proofs;
26
+ }
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ async verify(agentContext, credentialOrJwt) {
29
+ const result = await this.proofs.verify(agentContext, credentialOrJwt);
30
+ const credential = result.credential ?? (typeof credentialOrJwt === 'string' ? undefined : credentialOrJwt);
31
+ const issues = credential ? (0, validate_1.validateObEnvelope)(credential) : [{ code: 'missing_vc_claim', message: 'VC missing' }];
32
+ const status = credential ? await this.evaluateStatus(agentContext, credential) : 'unknown';
33
+ return { isValidStructure: issues.length === 0, issues, status, proofVerified: !!result.verified };
34
+ }
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ async evaluateStatus(agentContext, credential) {
37
+ const now = Date.now();
38
+ const validUntil = credential?.validUntil ? Date.parse(credential.validUntil) : undefined;
39
+ const expired = validUntil != null && now > validUntil;
40
+ const revoked = await this.revocations.isRevoked(agentContext, credential);
41
+ return expired ? 'expired' : revoked ? 'revoked' : 'valid';
42
+ }
43
+ };
44
+ exports.VerifyService = VerifyService;
45
+ exports.VerifyService = VerifyService = __decorate([
46
+ (0, core_1.injectable)(),
47
+ __param(0, (0, core_1.inject)(ContextService_1.ContextService)),
48
+ __param(1, (0, core_1.inject)(RevocationService_1.RevocationService)),
49
+ __param(2, (0, core_1.inject)(ProofService_1.ProofService)),
50
+ __metadata("design:paramtypes", [ContextService_1.ContextService,
51
+ RevocationService_1.RevocationService,
52
+ ProofService_1.ProofService])
53
+ ], VerifyService);
54
+ //# sourceMappingURL=VerifyService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerifyService.js","sourceRoot":"","sources":["../../src/services/VerifyService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,yCAAmD;AAEnD,gDAAsD;AACtD,qDAAiD;AACjD,iDAA6C;AAC7C,2DAAuD;AAGhD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAC2C,cAA8B,EAC3B,WAA8B,EACnC,MAAoB;QAFlB,mBAAc,GAAd,cAAc,CAAgB;QAC3B,gBAAW,GAAX,WAAW,CAAmB;QACnC,WAAM,GAAN,MAAM,CAAc;IAC1D,CAAC;IAEJ,8DAA8D;IACvD,KAAK,CAAC,MAAM,CAAC,YAA0B,EAAE,eAAoB;QAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;QACtE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;QAC3G,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,6BAAkB,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;QAClH,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACpG,CAAC;IAED,8DAA8D;IACtD,KAAK,CAAC,cAAc,CAAC,YAA0B,EAAE,UAAe;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,UAAU,GAAG,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACzF,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,IAAI,GAAG,GAAG,UAAU,CAAA;QACtD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QAC1E,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;CACF,CAAA;AAxBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,iBAAU,GAAE;IAGR,WAAA,IAAA,aAAM,EAAC,+BAAc,CAAC,CAAA;IACtB,WAAA,IAAA,aAAM,EAAC,qCAAiB,CAAC,CAAA;IACzB,WAAA,IAAA,aAAM,EAAC,2BAAY,CAAC,CAAA;qCAFoC,+BAAc;QACd,qCAAiB;QAC3B,2BAAY;GAJlD,aAAa,CAwBzB"}
@@ -0,0 +1,9 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ export declare abstract class CryptoDriver {
3
+ abstract sign(agentContext: AgentContext, document: any, keyHint?: any): Promise<any>;
4
+ abstract verify(agentContext: AgentContext, input: any): Promise<{
5
+ verified: boolean;
6
+ credential?: any;
7
+ error?: string;
8
+ }>;
9
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CryptoDriver = void 0;
4
+ class CryptoDriver {
5
+ }
6
+ exports.CryptoDriver = CryptoDriver;
7
+ //# sourceMappingURL=CryptoDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CryptoDriver.js","sourceRoot":"","sources":["../../../src/services/crypto/CryptoDriver.ts"],"names":[],"mappings":";;;AAEA,MAAsB,YAAY;CAKjC;AALD,oCAKC"}
@@ -0,0 +1,17 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { CryptoDriver } from './CryptoDriver';
3
+ import { DataIntegrityService } from '../DataIntegrityService';
4
+ export declare class JsonLdCryptoDriver extends CryptoDriver {
5
+ private readonly di;
6
+ constructor(di: DataIntegrityService);
7
+ sign(agentContext: AgentContext, document: any, keyHint?: any): Promise<any>;
8
+ verify(_agentContext: AgentContext, input: any): Promise<{
9
+ verified: boolean;
10
+ credential: any;
11
+ error?: undefined;
12
+ } | {
13
+ verified: boolean;
14
+ error: any;
15
+ credential?: undefined;
16
+ }>;
17
+ }
@@ -0,0 +1,45 @@
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.JsonLdCryptoDriver = void 0;
16
+ const core_1 = require("@credo-ts/core");
17
+ const CryptoDriver_1 = require("./CryptoDriver");
18
+ const DataIntegrityService_1 = require("../DataIntegrityService");
19
+ let JsonLdCryptoDriver = class JsonLdCryptoDriver extends CryptoDriver_1.CryptoDriver {
20
+ constructor(di) {
21
+ super();
22
+ this.di = di;
23
+ }
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ async sign(agentContext, document, keyHint) {
26
+ return this.di.sign(agentContext, document, keyHint);
27
+ }
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ async verify(_agentContext, input) {
30
+ try {
31
+ const res = await this.di.verify(input);
32
+ return { verified: !!res.verified, credential: input };
33
+ }
34
+ catch (e) {
35
+ return { verified: false, error: e?.message || String(e) };
36
+ }
37
+ }
38
+ };
39
+ exports.JsonLdCryptoDriver = JsonLdCryptoDriver;
40
+ exports.JsonLdCryptoDriver = JsonLdCryptoDriver = __decorate([
41
+ (0, core_1.injectable)(),
42
+ __param(0, (0, core_1.inject)(DataIntegrityService_1.DataIntegrityService)),
43
+ __metadata("design:paramtypes", [DataIntegrityService_1.DataIntegrityService])
44
+ ], JsonLdCryptoDriver);
45
+ //# sourceMappingURL=JsonLdCryptoDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonLdCryptoDriver.js","sourceRoot":"","sources":["../../../src/services/crypto/JsonLdCryptoDriver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAmD;AAEnD,iDAA6C;AAC7C,kEAA8D;AAGvD,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,2BAAY;IAClD,YAAkE,EAAwB;QACxF,KAAK,EAAE,CAAA;QADyD,OAAE,GAAF,EAAE,CAAsB;IAE1F,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,IAAI,CAAC,YAA0B,EAAE,QAAa,EAAE,OAAa;QACxE,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACtD,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,MAAM,CAAC,aAA2B,EAAE,KAAU;QACzD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACvC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;QACxD,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5D,CAAC;IACH,CAAC;CACF,CAAA;AAnBY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,iBAAU,GAAE;IAES,WAAA,IAAA,aAAM,EAAC,2CAAoB,CAAC,CAAA;qCAAsB,2CAAoB;GAD/E,kBAAkB,CAmB9B"}
@@ -0,0 +1,13 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { CryptoDriver } from './CryptoDriver';
3
+ import { JwtService } from '../JwtService';
4
+ export declare class JwtCryptoDriver extends CryptoDriver {
5
+ private readonly jwt;
6
+ constructor(jwt: JwtService);
7
+ sign(agentContext: AgentContext, document: any, keyHint?: any): Promise<any>;
8
+ verify(agentContext: AgentContext, input: any): Promise<{
9
+ verified: boolean;
10
+ credential: any;
11
+ error: string | undefined;
12
+ }>;
13
+ }