@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,47 @@
1
+ "use strict";
2
+ /**
3
+ * StatusListRecord
4
+ *
5
+ * Stores issuer-side status list data including the bitstring and allocation state.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.StatusListRecord = void 0;
9
+ const core_1 = require("@credo-ts/core");
10
+ class StatusListRecord extends core_1.BaseRecord {
11
+ constructor(props) {
12
+ super();
13
+ this.type = StatusListRecord.type;
14
+ if (props) {
15
+ this.id = props.id ?? props.listId ?? core_1.utils.uuid();
16
+ this.createdAt = props.createdAt ?? new Date();
17
+ this.updatedAt = props.updatedAt ?? new Date();
18
+ this.listId = props.listId;
19
+ this.issuerDid = props.issuerDid;
20
+ this.purpose = props.purpose;
21
+ this.bitstringBase64 = props.bitstringBase64;
22
+ this.capacity = props.capacity;
23
+ this.nextIndex = props.nextIndex;
24
+ this.credentialIndexMap = props.credentialIndexMap;
25
+ this.baseUrl = props.baseUrl;
26
+ this._tags = props.tags ?? {};
27
+ }
28
+ else {
29
+ this.id = core_1.utils.uuid();
30
+ this.createdAt = new Date();
31
+ this.updatedAt = new Date();
32
+ this.credentialIndexMap = {};
33
+ this._tags = {};
34
+ }
35
+ }
36
+ getTags() {
37
+ return {
38
+ ...this._tags,
39
+ listId: this.listId,
40
+ issuerDid: this.issuerDid,
41
+ purpose: this.purpose,
42
+ };
43
+ }
44
+ }
45
+ exports.StatusListRecord = StatusListRecord;
46
+ StatusListRecord.type = 'StatusListRecord';
47
+ //# sourceMappingURL=StatusListRecord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusListRecord.js","sourceRoot":"","sources":["../../src/repository/StatusListRecord.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,yCAAkD;AAgClD,MAAa,gBAAiB,SAAQ,iBAA2C;IAa/E,YAAmB,KAA6B;QAC9C,KAAK,EAAE,CAAA;QAHO,SAAI,GAAG,gBAAgB,CAAC,IAAI,CAAA;QAI1C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,YAAK,CAAC,IAAI,EAAE,CAAA;YAClD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAA;YAC9C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAA;YAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;YAChC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;YAC5B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAA;YAC5C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;YAC9B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;YAChC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAA;YAClD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;YAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,GAAG,YAAK,CAAC,IAAI,EAAE,CAAA;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;YAC3B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;YAC5B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjB,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,OAAO;YACL,GAAG,IAAI,CAAC,KAAK;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAA;IACH,CAAC;;AA5CH,4CA6CC;AAnCwB,qBAAI,GAAG,kBAAkB,AAArB,CAAqB"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * StatusListRepository
3
+ *
4
+ * Repository for managing StatusListRecord storage and retrieval.
5
+ */
6
+ import { StorageService, EventEmitter, Repository } from '@credo-ts/core';
7
+ import type { AgentContext } from '@credo-ts/core';
8
+ import { StatusListRecord } from './StatusListRecord';
9
+ import type { StatusPurpose } from '../models/StatusListCredential';
10
+ export declare class StatusListRepository extends Repository<StatusListRecord> {
11
+ constructor(storageService: StorageService<StatusListRecord>, eventEmitter: EventEmitter);
12
+ /**
13
+ * Find a status list by its unique list ID
14
+ */
15
+ findByListId(agentContext: AgentContext, listId: string): Promise<StatusListRecord | null>;
16
+ /**
17
+ * Find all status lists for an issuer
18
+ */
19
+ findByIssuer(agentContext: AgentContext, issuerDid: string): Promise<StatusListRecord[]>;
20
+ /**
21
+ * Find status lists by issuer and purpose
22
+ */
23
+ findByIssuerAndPurpose(agentContext: AgentContext, issuerDid: string, purpose: StatusPurpose): Promise<StatusListRecord[]>;
24
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * StatusListRepository
4
+ *
5
+ * Repository for managing StatusListRecord storage and retrieval.
6
+ */
7
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10
+ 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;
11
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
12
+ };
13
+ var __metadata = (this && this.__metadata) || function (k, v) {
14
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15
+ };
16
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
17
+ return function (target, key) { decorator(target, key, paramIndex); }
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.StatusListRepository = void 0;
21
+ const core_1 = require("@credo-ts/core");
22
+ const StatusListRecord_1 = require("./StatusListRecord");
23
+ let StatusListRepository = class StatusListRepository extends core_1.Repository {
24
+ constructor(storageService, eventEmitter) {
25
+ super(StatusListRecord_1.StatusListRecord, storageService, eventEmitter);
26
+ }
27
+ /**
28
+ * Find a status list by its unique list ID
29
+ */
30
+ async findByListId(agentContext, listId) {
31
+ return this.findSingleByQuery(agentContext, { listId });
32
+ }
33
+ /**
34
+ * Find all status lists for an issuer
35
+ */
36
+ async findByIssuer(agentContext, issuerDid) {
37
+ return this.findByQuery(agentContext, { issuerDid });
38
+ }
39
+ /**
40
+ * Find status lists by issuer and purpose
41
+ */
42
+ async findByIssuerAndPurpose(agentContext, issuerDid, purpose) {
43
+ return this.findByQuery(agentContext, { issuerDid, purpose });
44
+ }
45
+ };
46
+ exports.StatusListRepository = StatusListRepository;
47
+ exports.StatusListRepository = StatusListRepository = __decorate([
48
+ (0, core_1.injectable)(),
49
+ __param(0, (0, core_1.inject)(core_1.InjectionSymbols.StorageService)),
50
+ __metadata("design:paramtypes", [Object, core_1.EventEmitter])
51
+ ], StatusListRepository);
52
+ //# sourceMappingURL=StatusListRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusListRepository.js","sourceRoot":"","sources":["../../src/repository/StatusListRepository.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;AAEH,yCAA+G;AAE/G,yDAAqD;AAI9C,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,iBAA4B;IACpE,YAC2C,cAAgD,EACzF,YAA0B;QAE1B,KAAK,CAAC,mCAAgB,EAAE,cAAc,EAAE,YAAY,CAAC,CAAA;IACvD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY,CAAC,YAA0B,EAAE,MAAc;QAClE,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACzD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY,CAAC,YAA0B,EAAE,SAAiB;QACrE,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;IACtD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,sBAAsB,CACjC,YAA0B,EAC1B,SAAiB,EACjB,OAAsB;QAEtB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;IAC/D,CAAC;CACF,CAAA;AAhCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,iBAAU,GAAE;IAGR,WAAA,IAAA,aAAM,EAAC,uBAAgB,CAAC,cAAc,CAAC,CAAA;6CAC1B,mBAAY;GAHjB,oBAAoB,CAgChC"}
@@ -0,0 +1,18 @@
1
+ export * from './OpenBadgeCredentialRecord';
2
+ export * from './OpenBadgeCredentialRepository';
3
+ export * from './OpenBadgesProfileRecord';
4
+ export * from './OpenBadgesProfileRepository';
5
+ export * from './OpenBadgesServiceDescriptionRecord';
6
+ export * from './OpenBadgesServiceDescriptionRepository';
7
+ export * from './OpenBadgesOAuthRecord';
8
+ export * from './OpenBadgesOAuthRepository';
9
+ export * from './OpenBadgesRevocationCacheRecord';
10
+ export * from './OpenBadgesRevocationCacheRepository';
11
+ export * from './OpenBadgesAuthCodeRecord';
12
+ export * from './OpenBadgesAuthCodeRepository';
13
+ export * from './OpenBadgesTokenRecord';
14
+ export * from './OpenBadgesTokenRepository';
15
+ export * from './OpenBadgesConsentRecord';
16
+ export * from './OpenBadgesConsentRepository';
17
+ export * from './OpenBadgesKeyBindingRecord';
18
+ export * from './OpenBadgesKeyBindingRepository';
@@ -0,0 +1,35 @@
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("./OpenBadgeCredentialRecord"), exports);
18
+ __exportStar(require("./OpenBadgeCredentialRepository"), exports);
19
+ __exportStar(require("./OpenBadgesProfileRecord"), exports);
20
+ __exportStar(require("./OpenBadgesProfileRepository"), exports);
21
+ __exportStar(require("./OpenBadgesServiceDescriptionRecord"), exports);
22
+ __exportStar(require("./OpenBadgesServiceDescriptionRepository"), exports);
23
+ __exportStar(require("./OpenBadgesOAuthRecord"), exports);
24
+ __exportStar(require("./OpenBadgesOAuthRepository"), exports);
25
+ __exportStar(require("./OpenBadgesRevocationCacheRecord"), exports);
26
+ __exportStar(require("./OpenBadgesRevocationCacheRepository"), exports);
27
+ __exportStar(require("./OpenBadgesAuthCodeRecord"), exports);
28
+ __exportStar(require("./OpenBadgesAuthCodeRepository"), exports);
29
+ __exportStar(require("./OpenBadgesTokenRecord"), exports);
30
+ __exportStar(require("./OpenBadgesTokenRepository"), exports);
31
+ __exportStar(require("./OpenBadgesConsentRecord"), exports);
32
+ __exportStar(require("./OpenBadgesConsentRepository"), exports);
33
+ __exportStar(require("./OpenBadgesKeyBindingRecord"), exports);
34
+ __exportStar(require("./OpenBadgesKeyBindingRepository"), exports);
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA2C;AAC3C,kEAA+C;AAC/C,4DAAyC;AACzC,gEAA6C;AAC7C,uEAAoD;AACpD,2EAAwD;AACxD,0DAAuC;AACvC,8DAA2C;AAC3C,oEAAiD;AACjD,wEAAqD;AACrD,6DAA0C;AAC1C,iEAA8C;AAC9C,0DAAuC;AACvC,8DAA2C;AAC3C,4DAAyC;AACzC,gEAA6C;AAC7C,+DAA4C;AAC5C,mEAAgD"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Achievement Validator Service
3
+ *
4
+ * Validates Achievement structures before credential issuance according to
5
+ * OpenBadges 3.0 specification requirements.
6
+ *
7
+ * @see https://www.imsglobal.org/spec/ob/v3p0/#achievement
8
+ */
9
+ /**
10
+ * Result of an achievement validation
11
+ */
12
+ export interface ValidationResult {
13
+ /** Whether the achievement is valid */
14
+ valid: boolean;
15
+ /** Critical errors that must be fixed */
16
+ errors: string[];
17
+ /** Recommendations that don't prevent issuance */
18
+ warnings: string[];
19
+ }
20
+ /**
21
+ * Image object structure
22
+ */
23
+ export interface AchievementImage {
24
+ /** URI of the image */
25
+ id: string;
26
+ /** Must be 'Image' */
27
+ type?: 'Image';
28
+ /** Caption for the image */
29
+ caption?: string;
30
+ }
31
+ /**
32
+ * Criteria for achieving the achievement
33
+ */
34
+ export interface AchievementCriteria {
35
+ /** URI to criteria document */
36
+ id?: string;
37
+ /** Human-readable narrative describing how to achieve */
38
+ narrative?: string;
39
+ }
40
+ /**
41
+ * Alignment to external standards or frameworks
42
+ */
43
+ export interface Alignment {
44
+ /** Must be 'Alignment' */
45
+ type: 'Alignment';
46
+ /** Name of the target standard/framework */
47
+ targetName: string;
48
+ /** URL of the target standard/framework */
49
+ targetUrl: string;
50
+ /** Description of the target */
51
+ targetDescription?: string;
52
+ /** Name of the framework */
53
+ targetFramework?: string;
54
+ /** Code within the framework */
55
+ targetCode?: string;
56
+ }
57
+ /**
58
+ * Related achievement reference
59
+ */
60
+ export interface Related {
61
+ /** URI of the related achievement */
62
+ id: string;
63
+ /** Type (should include 'Related') */
64
+ type?: string | string[];
65
+ /** Optional version */
66
+ version?: string;
67
+ }
68
+ /**
69
+ * Result description for rubric-based achievements
70
+ */
71
+ export interface ResultDescription {
72
+ /** URI for this result description */
73
+ id: string;
74
+ /** Must be 'ResultDescription' */
75
+ type: 'ResultDescription';
76
+ /** Name of the result */
77
+ name: string;
78
+ /** Rubric criteria text */
79
+ resultType?: string;
80
+ }
81
+ /**
82
+ * Achievement structure as per OpenBadges 3.0 spec
83
+ */
84
+ export interface Achievement {
85
+ /** Must include 'Achievement' */
86
+ type: 'Achievement' | ['Achievement', ...string[]];
87
+ /** URI identifying this achievement */
88
+ id?: string;
89
+ /** Name of the achievement (REQUIRED) */
90
+ name: string;
91
+ /** Description of the achievement */
92
+ description?: string;
93
+ /** Criteria for earning this achievement */
94
+ criteria?: AchievementCriteria;
95
+ /** Image representing the achievement */
96
+ image?: AchievementImage | string;
97
+ /** Type of achievement (e.g., 'Certificate', 'Badge') */
98
+ achievementType?: string;
99
+ /** Alignment to external frameworks */
100
+ alignment?: Alignment[];
101
+ /** Creator/issuer of the achievement definition */
102
+ creator?: {
103
+ id: string;
104
+ type?: string;
105
+ name?: string;
106
+ };
107
+ /** Evidence requirements */
108
+ creditsAvailable?: number;
109
+ /** Human-readable code */
110
+ humanCode?: string;
111
+ /** Related achievements */
112
+ related?: Related[];
113
+ /** Result descriptions for rubrics */
114
+ resultDescription?: ResultDescription[];
115
+ /** Specialization of another achievement */
116
+ specialization?: string;
117
+ /** Tags for categorization */
118
+ tag?: string[];
119
+ /** Version of the achievement */
120
+ version?: string;
121
+ }
122
+ /**
123
+ * Validates Achievement structures before credential issuance
124
+ */
125
+ export declare class AchievementValidator {
126
+ /**
127
+ * Validates the basic structure of an Achievement
128
+ * Checks for required fields and correct types
129
+ */
130
+ validateStructure(achievement: Partial<Achievement>): ValidationResult;
131
+ /**
132
+ * Validates achievement criteria
133
+ * Criteria must have either an id (URL) or a narrative, preferably both
134
+ */
135
+ validateCriteria(achievement: Partial<Achievement>): ValidationResult;
136
+ /**
137
+ * Validates achievement image
138
+ */
139
+ validateImage(achievement: Partial<Achievement>): ValidationResult;
140
+ /**
141
+ * Validates alignment array
142
+ */
143
+ validateAlignment(alignments: Alignment[] | undefined): ValidationResult;
144
+ /**
145
+ * Validates result descriptions (for rubric-based achievements)
146
+ */
147
+ validateResultDescriptions(resultDescriptions: ResultDescription[] | undefined): ValidationResult;
148
+ /**
149
+ * Validates all aspects of an Achievement
150
+ * Combines structure, criteria, image, and alignment validation
151
+ */
152
+ validateAll(achievement: Partial<Achievement>): ValidationResult;
153
+ /**
154
+ * Quick check if an achievement is minimally valid
155
+ * Only checks required fields, not recommendations
156
+ */
157
+ isValid(achievement: Partial<Achievement>): boolean;
158
+ }
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ /**
3
+ * Achievement Validator Service
4
+ *
5
+ * Validates Achievement structures before credential issuance according to
6
+ * OpenBadges 3.0 specification requirements.
7
+ *
8
+ * @see https://www.imsglobal.org/spec/ob/v3p0/#achievement
9
+ */
10
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ 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;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.AchievementValidator = void 0;
18
+ const core_1 = require("@credo-ts/core");
19
+ /**
20
+ * URL validation regex
21
+ */
22
+ const URL_REGEX = /^(https?|urn):\/?\/?[^\s]+$/i;
23
+ /**
24
+ * Validates Achievement structures before credential issuance
25
+ */
26
+ let AchievementValidator = class AchievementValidator {
27
+ /**
28
+ * Validates the basic structure of an Achievement
29
+ * Checks for required fields and correct types
30
+ */
31
+ validateStructure(achievement) {
32
+ const errors = [];
33
+ const warnings = [];
34
+ // Required field: name
35
+ if (!achievement.name || typeof achievement.name !== 'string') {
36
+ errors.push('Achievement.name is required and must be a string');
37
+ }
38
+ else if (achievement.name.trim().length === 0) {
39
+ errors.push('Achievement.name must not be empty');
40
+ }
41
+ // Required field: type must include 'Achievement'
42
+ if (!achievement.type) {
43
+ errors.push('Achievement.type is required');
44
+ }
45
+ else {
46
+ const types = Array.isArray(achievement.type) ? achievement.type : [achievement.type];
47
+ if (!types.includes('Achievement')) {
48
+ errors.push("Achievement.type must include 'Achievement'");
49
+ }
50
+ }
51
+ // Recommended: id
52
+ if (!achievement.id) {
53
+ warnings.push('Achievement.id is recommended for persistent identification');
54
+ }
55
+ else if (typeof achievement.id === 'string' && !URL_REGEX.test(achievement.id)) {
56
+ warnings.push('Achievement.id should be a valid URI (URL or URN)');
57
+ }
58
+ // Recommended: description
59
+ if (!achievement.description) {
60
+ warnings.push('Achievement.description is recommended for accessibility');
61
+ }
62
+ return {
63
+ valid: errors.length === 0,
64
+ errors,
65
+ warnings,
66
+ };
67
+ }
68
+ /**
69
+ * Validates achievement criteria
70
+ * Criteria must have either an id (URL) or a narrative, preferably both
71
+ */
72
+ validateCriteria(achievement) {
73
+ const errors = [];
74
+ const warnings = [];
75
+ if (!achievement.criteria) {
76
+ warnings.push('Achievement.criteria is recommended');
77
+ return { valid: true, errors, warnings };
78
+ }
79
+ const criteria = achievement.criteria;
80
+ // At least one of id or narrative should be present
81
+ if (!criteria.id && !criteria.narrative) {
82
+ errors.push('Achievement.criteria must have either id (URL) or narrative');
83
+ }
84
+ // If id is present, validate URL format
85
+ if (criteria.id && !URL_REGEX.test(criteria.id)) {
86
+ errors.push('Achievement.criteria.id must be a valid URL');
87
+ }
88
+ // Narrative should not be empty if present
89
+ if (criteria.narrative !== undefined && criteria.narrative.trim().length === 0) {
90
+ errors.push('Achievement.criteria.narrative must not be empty if provided');
91
+ }
92
+ // Recommend having both
93
+ if (criteria.id && !criteria.narrative) {
94
+ warnings.push('Consider adding criteria.narrative for human readability');
95
+ }
96
+ if (criteria.narrative && !criteria.id) {
97
+ warnings.push('Consider adding criteria.id for machine-readable reference');
98
+ }
99
+ return {
100
+ valid: errors.length === 0,
101
+ errors,
102
+ warnings,
103
+ };
104
+ }
105
+ /**
106
+ * Validates achievement image
107
+ */
108
+ validateImage(achievement) {
109
+ const errors = [];
110
+ const warnings = [];
111
+ if (!achievement.image) {
112
+ warnings.push('Achievement.image is recommended for visual representation');
113
+ return { valid: true, errors, warnings };
114
+ }
115
+ const image = achievement.image;
116
+ // Image can be a string URL or an object
117
+ if (typeof image === 'string') {
118
+ if (!URL_REGEX.test(image)) {
119
+ errors.push('Achievement.image must be a valid URL');
120
+ }
121
+ }
122
+ else if (typeof image === 'object') {
123
+ if (!image.id) {
124
+ errors.push('Achievement.image.id is required');
125
+ }
126
+ else if (!URL_REGEX.test(image.id)) {
127
+ errors.push('Achievement.image.id must be a valid URL');
128
+ }
129
+ }
130
+ else {
131
+ errors.push('Achievement.image must be a URL string or an Image object');
132
+ }
133
+ return {
134
+ valid: errors.length === 0,
135
+ errors,
136
+ warnings,
137
+ };
138
+ }
139
+ /**
140
+ * Validates alignment array
141
+ */
142
+ validateAlignment(alignments) {
143
+ const errors = [];
144
+ const warnings = [];
145
+ if (!alignments || alignments.length === 0) {
146
+ return { valid: true, errors, warnings };
147
+ }
148
+ alignments.forEach((alignment, index) => {
149
+ const prefix = `Alignment[${index}]`;
150
+ // Required: type
151
+ if (alignment.type !== 'Alignment') {
152
+ errors.push(`${prefix}.type must be 'Alignment'`);
153
+ }
154
+ // Required: targetName
155
+ if (!alignment.targetName || typeof alignment.targetName !== 'string') {
156
+ errors.push(`${prefix}.targetName is required`);
157
+ }
158
+ // Required: targetUrl
159
+ if (!alignment.targetUrl) {
160
+ errors.push(`${prefix}.targetUrl is required`);
161
+ }
162
+ else if (!URL_REGEX.test(alignment.targetUrl)) {
163
+ errors.push(`${prefix}.targetUrl must be a valid URL`);
164
+ }
165
+ // Recommended fields
166
+ if (!alignment.targetDescription) {
167
+ warnings.push(`${prefix}.targetDescription is recommended`);
168
+ }
169
+ });
170
+ return {
171
+ valid: errors.length === 0,
172
+ errors,
173
+ warnings,
174
+ };
175
+ }
176
+ /**
177
+ * Validates result descriptions (for rubric-based achievements)
178
+ */
179
+ validateResultDescriptions(resultDescriptions) {
180
+ const errors = [];
181
+ const warnings = [];
182
+ if (!resultDescriptions || resultDescriptions.length === 0) {
183
+ return { valid: true, errors, warnings };
184
+ }
185
+ resultDescriptions.forEach((rd, index) => {
186
+ const prefix = `ResultDescription[${index}]`;
187
+ // Required: id
188
+ if (!rd.id) {
189
+ errors.push(`${prefix}.id is required`);
190
+ }
191
+ // Required: type
192
+ if (rd.type !== 'ResultDescription') {
193
+ errors.push(`${prefix}.type must be 'ResultDescription'`);
194
+ }
195
+ // Required: name
196
+ if (!rd.name || typeof rd.name !== 'string') {
197
+ errors.push(`${prefix}.name is required`);
198
+ }
199
+ });
200
+ return {
201
+ valid: errors.length === 0,
202
+ errors,
203
+ warnings,
204
+ };
205
+ }
206
+ /**
207
+ * Validates all aspects of an Achievement
208
+ * Combines structure, criteria, image, and alignment validation
209
+ */
210
+ validateAll(achievement) {
211
+ const results = [
212
+ this.validateStructure(achievement),
213
+ this.validateCriteria(achievement),
214
+ this.validateImage(achievement),
215
+ this.validateAlignment(achievement.alignment),
216
+ this.validateResultDescriptions(achievement.resultDescription),
217
+ ];
218
+ const errors = results.flatMap((r) => r.errors);
219
+ const warnings = results.flatMap((r) => r.warnings);
220
+ return {
221
+ valid: errors.length === 0,
222
+ errors,
223
+ warnings,
224
+ };
225
+ }
226
+ /**
227
+ * Quick check if an achievement is minimally valid
228
+ * Only checks required fields, not recommendations
229
+ */
230
+ isValid(achievement) {
231
+ return this.validateAll(achievement).valid;
232
+ }
233
+ };
234
+ exports.AchievementValidator = AchievementValidator;
235
+ exports.AchievementValidator = AchievementValidator = __decorate([
236
+ (0, core_1.injectable)()
237
+ ], AchievementValidator);
238
+ //# sourceMappingURL=AchievementValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AchievementValidator.js","sourceRoot":"","sources":["../../src/services/AchievementValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AgentContext } from '@credo-ts/core';
2
+ import { OpenBadgesServiceDescriptionRepository } from '../repository/OpenBadgesServiceDescriptionRepository';
3
+ import { OpenBadgesOAuthRepository } from '../repository/OpenBadgesOAuthRepository';
4
+ import { OAuthClient } from './OAuthClient';
5
+ export declare class ConsumerService {
6
+ private readonly sddRepo;
7
+ private readonly oauthRepo;
8
+ private readonly oauth;
9
+ constructor(sddRepo: OpenBadgesServiceDescriptionRepository, oauthRepo: OpenBadgesOAuthRepository, oauth: OAuthClient);
10
+ importFromUrl(agentContext: AgentContext, url: string, options?: {
11
+ discoveryUrl?: string;
12
+ }): Promise<{
13
+ discovery: any;
14
+ registration: {
15
+ client_id: string;
16
+ redirect_uris?: string[];
17
+ scope?: string;
18
+ };
19
+ authorizationUrl: string;
20
+ host: string;
21
+ }>;
22
+ ensureServiceDescription(agentContext: AgentContext, discoveryUrl: string): Promise<any>;
23
+ upsertToRemote(agentContext: AgentContext, baseUrl: string, credential: unknown): Promise<unknown>;
24
+ }