@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,42 @@
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.JwtCryptoDriver = void 0;
16
+ const core_1 = require("@credo-ts/core");
17
+ const CryptoDriver_1 = require("./CryptoDriver");
18
+ const JwtService_1 = require("../JwtService");
19
+ let JwtCryptoDriver = class JwtCryptoDriver extends CryptoDriver_1.CryptoDriver {
20
+ constructor(jwt) {
21
+ super();
22
+ this.jwt = jwt;
23
+ }
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ async sign(agentContext, document, keyHint) {
26
+ const jwt = await this.jwt.signVcJwt(agentContext, document, keyHint);
27
+ return { ...document, proof: { type: 'JwtProof2020', jwt } };
28
+ }
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ async verify(agentContext, input) {
31
+ const jwtStr = typeof input === 'string' ? input : String(input?.proof?.jwt || '');
32
+ const res = await this.jwt.verifyVcJwt(agentContext, jwtStr);
33
+ return { verified: !!res.verified, credential: res.payload?.vc, error: res.error };
34
+ }
35
+ };
36
+ exports.JwtCryptoDriver = JwtCryptoDriver;
37
+ exports.JwtCryptoDriver = JwtCryptoDriver = __decorate([
38
+ (0, core_1.injectable)(),
39
+ __param(0, (0, core_1.inject)(JwtService_1.JwtService)),
40
+ __metadata("design:paramtypes", [JwtService_1.JwtService])
41
+ ], JwtCryptoDriver);
42
+ //# sourceMappingURL=JwtCryptoDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JwtCryptoDriver.js","sourceRoot":"","sources":["../../../src/services/crypto/JwtCryptoDriver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAmD;AAEnD,iDAA6C;AAC7C,8CAA0C;AAGnC,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,2BAAY;IAC/C,YAAwD,GAAe;QACrE,KAAK,EAAE,CAAA;QAD+C,QAAG,GAAH,GAAG,CAAY;IAEvE,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,IAAI,CAAC,YAA0B,EAAE,QAAa,EAAE,OAAa;QACxE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QACrE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAAA;IAC9D,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,MAAM,CAAC,YAA0B,EAAE,KAAU;QACxD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;QAClF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QAC5D,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAA;IACpF,CAAC;CACF,CAAA;AAjBY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,iBAAU,GAAE;IAES,WAAA,IAAA,aAAM,EAAC,uBAAU,CAAC,CAAA;qCAAuB,uBAAU;GAD5D,eAAe,CAiB3B"}
@@ -0,0 +1,12 @@
1
+ export * from './IssuerService';
2
+ export * from './VerifyService';
3
+ export * from './ConsumerService';
4
+ export * from './OAuthClient';
5
+ export * from './DidCommLinkService';
6
+ export * from './DisplayMapper';
7
+ export * from './RevocationService';
8
+ export * from './JwtService';
9
+ export * from './ProofService';
10
+ export * from './crypto/CryptoDriver';
11
+ export * from './crypto/JsonLdCryptoDriver';
12
+ export * from './crypto/JwtCryptoDriver';
@@ -0,0 +1,29 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./IssuerService"), exports);
18
+ __exportStar(require("./VerifyService"), exports);
19
+ __exportStar(require("./ConsumerService"), exports);
20
+ __exportStar(require("./OAuthClient"), exports);
21
+ __exportStar(require("./DidCommLinkService"), exports);
22
+ __exportStar(require("./DisplayMapper"), exports);
23
+ __exportStar(require("./RevocationService"), exports);
24
+ __exportStar(require("./JwtService"), exports);
25
+ __exportStar(require("./ProofService"), exports);
26
+ __exportStar(require("./crypto/CryptoDriver"), exports);
27
+ __exportStar(require("./crypto/JsonLdCryptoDriver"), exports);
28
+ __exportStar(require("./crypto/JwtCryptoDriver"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,kDAA+B;AAC/B,oDAAiC;AACjC,gDAA6B;AAC7B,uDAAoC;AACpC,kDAA+B;AAC/B,sDAAmC;AACnC,+CAA4B;AAC5B,iDAA8B;AAC9B,wDAAqC;AACrC,8DAA2C;AAC3C,2DAAwC"}
@@ -0,0 +1,17 @@
1
+ export type ValidationIssue = {
2
+ code: string;
3
+ message: string;
4
+ };
5
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
6
+ export declare function ensureContexts(credential: any): ValidationIssue[];
7
+ export declare function ensureTypes(credential: any): ValidationIssue[];
8
+ export declare function validateObEnvelope(credential: unknown): ValidationIssue[];
9
+ export declare function ensureEndorsementTypes(credential: any): ValidationIssue[];
10
+ /**
11
+ * Validates an EndorsementCredential envelope
12
+ * EndorsementCredentials have a different structure than OpenBadgeCredentials:
13
+ * - type must include 'VerifiableCredential' and 'EndorsementCredential'
14
+ * - credentialSubject.type must be 'EndorsementSubject'
15
+ * - credentialSubject.id is required (the entity being endorsed)
16
+ */
17
+ export declare function validateEndorsementEnvelope(credential: unknown): ValidationIssue[];
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isObject = isObject;
4
+ exports.ensureContexts = ensureContexts;
5
+ exports.ensureTypes = ensureTypes;
6
+ exports.validateObEnvelope = validateObEnvelope;
7
+ exports.ensureEndorsementTypes = ensureEndorsementTypes;
8
+ exports.validateEndorsementEnvelope = validateEndorsementEnvelope;
9
+ const constants_1 = require("../constants");
10
+ function isObject(value) {
11
+ return value != null && typeof value === 'object' && !Array.isArray(value);
12
+ }
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ function ensureContexts(credential) {
15
+ const issues = [];
16
+ const ctx = credential?.['@context'];
17
+ const contexts = Array.isArray(ctx) ? ctx : ctx ? [ctx] : [];
18
+ if (!contexts.includes(constants_1.VC_V2_CONTEXT)) {
19
+ issues.push({ code: 'missing_vc_v2_context', message: 'Missing VC v2 context' });
20
+ }
21
+ if (!contexts.includes(constants_1.OBV3_CONTEXT)) {
22
+ issues.push({ code: 'missing_obv3_context', message: 'Missing OBv3 context' });
23
+ }
24
+ return issues;
25
+ }
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ function ensureTypes(credential) {
28
+ const issues = [];
29
+ const types = Array.isArray(credential?.type) ? credential.type : [];
30
+ for (const t of constants_1.REQUIRED_TYPES) {
31
+ if (!types.includes(t))
32
+ issues.push({ code: 'missing_type', message: `Missing required type ${t}` });
33
+ }
34
+ return issues;
35
+ }
36
+ function validateObEnvelope(credential) {
37
+ const issues = [];
38
+ if (!isObject(credential))
39
+ return [{ code: 'invalid_json', message: 'Credential must be a JSON object' }];
40
+ issues.push(...ensureContexts(credential));
41
+ issues.push(...ensureTypes(credential));
42
+ // Minimal OBv3 required fields
43
+ const issuer = credential?.issuer;
44
+ const issuerId = typeof issuer === 'string' ? issuer : issuer?.id;
45
+ if (!issuerId)
46
+ issues.push({ code: 'missing_issuer', message: 'Missing issuer or issuer.id' });
47
+ const cs = credential?.credentialSubject;
48
+ if (!cs || (typeof cs !== 'object' && !Array.isArray(cs))) {
49
+ issues.push({ code: 'missing_credentialSubject', message: 'Missing credentialSubject' });
50
+ }
51
+ // If achievement present, ensure basic fields
52
+ const achievement = credential?.credentialSubject?.achievement;
53
+ if (achievement) {
54
+ if (!achievement?.type)
55
+ issues.push({ code: 'missing_achievement_type', message: 'Achievement.type is recommended' });
56
+ if (!achievement?.name)
57
+ issues.push({ code: 'missing_achievement_name', message: 'Achievement.name is recommended' });
58
+ }
59
+ return issues;
60
+ }
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ function ensureEndorsementTypes(credential) {
63
+ const issues = [];
64
+ const types = Array.isArray(credential?.type) ? credential.type : [];
65
+ for (const t of constants_1.ENDORSEMENT_TYPES) {
66
+ if (!types.includes(t))
67
+ issues.push({ code: 'missing_type', message: `Missing required type ${t}` });
68
+ }
69
+ return issues;
70
+ }
71
+ /**
72
+ * Validates an EndorsementCredential envelope
73
+ * EndorsementCredentials have a different structure than OpenBadgeCredentials:
74
+ * - type must include 'VerifiableCredential' and 'EndorsementCredential'
75
+ * - credentialSubject.type must be 'EndorsementSubject'
76
+ * - credentialSubject.id is required (the entity being endorsed)
77
+ */
78
+ function validateEndorsementEnvelope(credential) {
79
+ const issues = [];
80
+ if (!isObject(credential))
81
+ return [{ code: 'invalid_json', message: 'Credential must be a JSON object' }];
82
+ // Check contexts
83
+ issues.push(...ensureContexts(credential));
84
+ // Check endorsement-specific types
85
+ issues.push(...ensureEndorsementTypes(credential));
86
+ // Check issuer
87
+ const issuer = credential?.issuer;
88
+ const issuerId = typeof issuer === 'string' ? issuer : issuer?.id;
89
+ if (!issuerId)
90
+ issues.push({ code: 'missing_issuer', message: 'Missing issuer or issuer.id' });
91
+ // Check credentialSubject
92
+ const cs = credential?.credentialSubject;
93
+ if (!cs || typeof cs !== 'object') {
94
+ issues.push({ code: 'missing_credentialSubject', message: 'Missing credentialSubject' });
95
+ return issues;
96
+ }
97
+ // EndorsementSubject requires id (the entity being endorsed)
98
+ if (!cs.id) {
99
+ issues.push({ code: 'missing_endorsement_subject_id', message: 'EndorsementSubject requires id of the entity being endorsed' });
100
+ }
101
+ // Check type is EndorsementSubject
102
+ if (cs.type !== 'EndorsementSubject') {
103
+ issues.push({ code: 'invalid_endorsement_subject_type', message: 'credentialSubject.type must be EndorsementSubject' });
104
+ }
105
+ return issues;
106
+ }
107
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@ajna-inc/openbadges",
3
+ "version": "0.1.0",
4
+ "description": "OpenBadges v3.0 module for Credo-TS with OAuth 2.0 provider support",
5
+ "license": "Apache-2.0",
6
+ "main": "build/index",
7
+ "types": "build/index",
8
+ "files": [
9
+ "build"
10
+ ],
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/ajna-inc/credo-ts",
17
+ "directory": "packages/openbadges"
18
+ },
19
+ "dependencies": {
20
+ "@digitalcredentials/jsonld": "^6.0.0",
21
+ "@digitalcredentials/jsonld-signatures": "^9.4.0",
22
+ "@digitalcredentials/vc": "^6.0.1",
23
+ "@stablelib/ed25519": "^1.0.3",
24
+ "bs58": "^5.0.0",
25
+ "class-transformer": "^0.5.1",
26
+ "class-validator": "0.14.1",
27
+ "jose": "^5.0.0",
28
+ "tsyringe": "^4.8.0"
29
+ },
30
+ "peerDependencies": {
31
+ "@credo-ts/core": "^0.5.0",
32
+ "express": "^4.18.0"
33
+ },
34
+ "peerDependenciesMeta": {
35
+ "express": {
36
+ "optional": true
37
+ }
38
+ },
39
+ "devDependencies": {
40
+ "@types/express": "^4.17.21",
41
+ "@types/jest": "^29.5.12",
42
+ "@types/node": "^20.14.2",
43
+ "express": "^4.21.0",
44
+ "jest": "^29.7.0",
45
+ "rimraf": "^5.0.5",
46
+ "supertest": "^7.0.0",
47
+ "ts-jest": "^29.1.2",
48
+ "typescript": "~5.5.2"
49
+ },
50
+ "scripts": {
51
+ "build": "pnpm run clean && pnpm run compile",
52
+ "clean": "rimraf ./build",
53
+ "compile": "tsc -p tsconfig.build.json",
54
+ "test": "jest",
55
+ "test:jsonld": "jest --testPathPattern=jsonld"
56
+ }
57
+ }