@ajna-inc/openbadges 0.1.6 → 0.1.7

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 (67) hide show
  1. package/build/OpenBadgesModule.d.ts +2 -2
  2. package/build/OpenBadgesModule.js +10 -2
  3. package/build/OpenBadgesModule.js.map +1 -1
  4. package/build/api/OpenBadgesApi.d.ts +95 -6
  5. package/build/api/OpenBadgesApi.js +186 -1
  6. package/build/api/OpenBadgesApi.js.map +1 -1
  7. package/build/index.d.ts +1 -0
  8. package/build/index.js +2 -0
  9. package/build/index.js.map +1 -1
  10. package/build/protocol/OpenBadgeProtocolEvents.d.ts +95 -0
  11. package/build/protocol/OpenBadgeProtocolEvents.js +16 -0
  12. package/build/protocol/OpenBadgeProtocolEvents.js.map +1 -0
  13. package/build/protocol/OpenBadgeProtocolService.d.ts +73 -0
  14. package/build/protocol/OpenBadgeProtocolService.js +274 -0
  15. package/build/protocol/OpenBadgeProtocolService.js.map +1 -0
  16. package/build/protocol/handlers/AckHandler.d.ts +9 -0
  17. package/build/protocol/handlers/AckHandler.js +30 -0
  18. package/build/protocol/handlers/AckHandler.js.map +1 -0
  19. package/build/protocol/handlers/CredentialHandler.d.ts +9 -0
  20. package/build/protocol/handlers/CredentialHandler.js +30 -0
  21. package/build/protocol/handlers/CredentialHandler.js.map +1 -0
  22. package/build/protocol/handlers/OfferHandler.d.ts +9 -0
  23. package/build/protocol/handlers/OfferHandler.js +30 -0
  24. package/build/protocol/handlers/OfferHandler.js.map +1 -0
  25. package/build/protocol/handlers/PresentationHandler.d.ts +9 -0
  26. package/build/protocol/handlers/PresentationHandler.js +30 -0
  27. package/build/protocol/handlers/PresentationHandler.js.map +1 -0
  28. package/build/protocol/handlers/RequestHandler.d.ts +9 -0
  29. package/build/protocol/handlers/RequestHandler.js +30 -0
  30. package/build/protocol/handlers/RequestHandler.js.map +1 -0
  31. package/build/protocol/handlers/RequestPresentationHandler.d.ts +9 -0
  32. package/build/protocol/handlers/RequestPresentationHandler.js +30 -0
  33. package/build/protocol/handlers/RequestPresentationHandler.js.map +1 -0
  34. package/build/protocol/handlers/VerificationResultHandler.d.ts +9 -0
  35. package/build/protocol/handlers/VerificationResultHandler.js +30 -0
  36. package/build/protocol/handlers/VerificationResultHandler.js.map +1 -0
  37. package/build/protocol/handlers/index.d.ts +7 -0
  38. package/build/protocol/handlers/index.js +24 -0
  39. package/build/protocol/handlers/index.js.map +1 -0
  40. package/build/protocol/index.d.ts +4 -0
  41. package/build/protocol/index.js +21 -0
  42. package/build/protocol/index.js.map +1 -0
  43. package/build/protocol/messages/AckMessage.d.ts +18 -0
  44. package/build/protocol/messages/AckMessage.js +46 -0
  45. package/build/protocol/messages/AckMessage.js.map +1 -0
  46. package/build/protocol/messages/CredentialMessage.d.ts +26 -0
  47. package/build/protocol/messages/CredentialMessage.js +72 -0
  48. package/build/protocol/messages/CredentialMessage.js.map +1 -0
  49. package/build/protocol/messages/OfferMessage.d.ts +21 -0
  50. package/build/protocol/messages/OfferMessage.js +59 -0
  51. package/build/protocol/messages/OfferMessage.js.map +1 -0
  52. package/build/protocol/messages/PresentationMessage.d.ts +26 -0
  53. package/build/protocol/messages/PresentationMessage.js +72 -0
  54. package/build/protocol/messages/PresentationMessage.js.map +1 -0
  55. package/build/protocol/messages/RequestMessage.d.ts +18 -0
  56. package/build/protocol/messages/RequestMessage.js +50 -0
  57. package/build/protocol/messages/RequestMessage.js.map +1 -0
  58. package/build/protocol/messages/RequestPresentationMessage.d.ts +16 -0
  59. package/build/protocol/messages/RequestPresentationMessage.js +45 -0
  60. package/build/protocol/messages/RequestPresentationMessage.js.map +1 -0
  61. package/build/protocol/messages/VerificationResultMessage.d.ts +19 -0
  62. package/build/protocol/messages/VerificationResultMessage.js +51 -0
  63. package/build/protocol/messages/VerificationResultMessage.js.map +1 -0
  64. package/build/protocol/messages/index.d.ts +7 -0
  65. package/build/protocol/messages/index.js +24 -0
  66. package/build/protocol/messages/index.js.map +1 -0
  67. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
- import type { AgentContext, DependencyManager, Module } from '@credo-ts/core';
1
+ import type { AgentContext, DependencyManager, FeatureRegistry, Module } from '@credo-ts/core';
2
2
  import { OpenBadgesModuleConfig, OpenBadgesModuleConfigOptions } from './OpenBadgesModuleConfig';
3
3
  import { OpenBadgesApi } from './api/OpenBadgesApi';
4
4
  export declare class OpenBadgesModule implements Module {
5
5
  readonly api: typeof OpenBadgesApi;
6
6
  readonly config: OpenBadgesModuleConfig;
7
7
  constructor(options: OpenBadgesModuleConfigOptions);
8
- register(dependencyManager: DependencyManager): void;
8
+ register(dependencyManager: DependencyManager, featureRegistry: FeatureRegistry): void;
9
9
  initialize(_agentContext: AgentContext): Promise<void>;
10
10
  }
@@ -4,6 +4,7 @@ exports.OpenBadgesModule = void 0;
4
4
  const core_1 = require("@credo-ts/core");
5
5
  const OpenBadgesModuleConfig_1 = require("./OpenBadgesModuleConfig");
6
6
  const OpenBadgesApi_1 = require("./api/OpenBadgesApi");
7
+ const OpenBadgeProtocolService_1 = require("./protocol/OpenBadgeProtocolService");
7
8
  const OpenBadgeCredentialRepository_1 = require("./repository/OpenBadgeCredentialRepository");
8
9
  const OpenBadgesProfileRepository_1 = require("./repository/OpenBadgesProfileRepository");
9
10
  const OpenBadgesServiceDescriptionRepository_1 = require("./repository/OpenBadgesServiceDescriptionRepository");
@@ -35,7 +36,7 @@ class OpenBadgesModule {
35
36
  this.api = OpenBadgesApi_1.OpenBadgesApi;
36
37
  this.config = new OpenBadgesModuleConfig_1.OpenBadgesModuleConfig(options);
37
38
  }
38
- register(dependencyManager) {
39
+ register(dependencyManager, featureRegistry) {
39
40
  dependencyManager.resolve(core_1.AgentConfig).logger.info('Registering OpenBadgesModule');
40
41
  dependencyManager.registerInstance(OpenBadgesModuleConfig_1.OpenBadgesModuleConfig, this.config);
41
42
  // Records/Repositories
@@ -66,9 +67,16 @@ class OpenBadgesModule {
66
67
  dependencyManager.registerSingleton(ProofService_1.ProofService);
67
68
  dependencyManager.registerSingleton(RevocationService_1.RevocationService);
68
69
  dependencyManager.registerSingleton(AchievementValidator_1.AchievementValidator);
70
+ // Protocol Service
71
+ dependencyManager.registerSingleton(OpenBadgeProtocolService_1.OpenBadgeProtocolService);
72
+ // Register DIDComm protocol in feature registry
73
+ featureRegistry.register(new core_1.Protocol({
74
+ id: 'https://didcomm.org/openbadge/1.0',
75
+ roles: ['issuer', 'holder', 'verifier'],
76
+ }));
69
77
  }
70
78
  async initialize(_agentContext) {
71
- // No protocols to register yet. Reserved for future discover-features claims if needed.
79
+ // Handlers are registered by the API constructor (after agent init)
72
80
  }
73
81
  }
74
82
  exports.OpenBadgesModule = OpenBadgesModule;
@@ -1 +1 @@
1
- {"version":3,"file":"OpenBadgesModule.js","sourceRoot":"","sources":["../src/OpenBadgesModule.ts"],"names":[],"mappings":";;;AACA,yCAA4C;AAE5C,qEAAgG;AAChG,uDAAmD;AAEnD,8FAA0F;AAC1F,0FAAsF;AACtF,gHAA4G;AAC5G,sFAAkF;AAClF,0GAAsG;AACtG,4FAAwF;AACxF,sFAAkF;AAClF,0FAAsF;AACtF,4EAAwE;AAExE,4DAAwD;AACxD,4DAAwD;AACxD,gEAA4D;AAC5D,wDAAoD;AACpD,sEAAkE;AAClE,4DAAwD;AACxD,8DAA0D;AAC1D,0EAAsE;AACtE,sDAAkD;AAClD,sDAAkD;AAClD,mEAAmE;AACnE,gGAA4F;AAC5F,0DAAsD;AACtD,oEAAgE;AAChE,0EAAsE;AACtE,6EAAyE;AACzE,uEAAmE;AAEnE,MAAa,gBAAgB;IAI3B,YAAmB,OAAsC;QAHzC,QAAG,GAAG,6BAAa,CAAA;QAIjC,IAAI,CAAC,MAAM,GAAG,IAAI,+CAAsB,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAEM,QAAQ,CAAC,iBAAoC;QAClD,iBAAiB,CAAC,OAAO,CAAC,kBAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAClF,iBAAiB,CAAC,gBAAgB,CAAC,+CAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEvE,uBAAuB;QACvB,iBAAiB,CAAC,iBAAiB,CAAC,6DAA6B,CAAC,CAAA;QAClE,iBAAiB,CAAC,iBAAiB,CAAC,yDAA2B,CAAC,CAAA;QAChE,iBAAiB,CAAC,iBAAiB,CAAC,+EAAsC,CAAC,CAAA;QAC3E,iBAAiB,CAAC,iBAAiB,CAAC,qDAAyB,CAAC,CAAA;QAC9D,iBAAiB,CAAC,iBAAiB,CAAC,yEAAmC,CAAC,CAAA;QACxE,iBAAiB,CAAC,iBAAiB,CAAC,+DAA8B,CAAC,CAAA;QACnE,iBAAiB,CAAC,iBAAiB,CAAC,2DAA4B,CAAC,CAAA;QACjE,iBAAiB,CAAC,iBAAiB,CAAC,qDAAyB,CAAC,CAAA;QAC9D,iBAAiB,CAAC,iBAAiB,CAAC,yDAA2B,CAAC,CAAA;QAChE,iBAAiB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,CAAA;QAEzD,WAAW;QACX,iBAAiB,CAAC,iBAAiB,CAAC,6BAAa,CAAC,CAAA;QAClD,iBAAiB,CAAC,iBAAiB,CAAC,6BAAa,CAAC,CAAA;QAClD,iBAAiB,CAAC,iBAAiB,CAAC,6BAAa,CAAC,CAAA;QAClD,iBAAiB,CAAC,iBAAiB,CAAC,iCAAe,CAAC,CAAA;QACpD,iBAAiB,CAAC,iBAAiB,CAAC,yBAAW,CAAC,CAAA;QAChD,iBAAiB,CAAC,iBAAiB,CAAC,uCAAkB,CAAC,CAAA;QACvD,iBAAiB,CAAC,iBAAiB,CAAC,6BAAa,CAAC,CAAA;QAClD,iBAAiB,CAAC,iBAAiB,CAAC,+BAAc,CAAC,CAAA;QACnD,iBAAiB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,CAAA;QACzD,iBAAiB,CAAC,iBAAiB,CAAC,uBAAU,CAAC,CAAA;QAC/C,iBAAiB,CAAC,iBAAiB,CAAC,uBAAU,CAAC,CAAA;QAC/C,iBAAiB,CAAC,iBAAiB,CAAC,uCAAkB,CAAC,CAAA;QACvD,iBAAiB,CAAC,iBAAiB,CAAC,iCAAe,CAAC,CAAA;QACpD,iBAAiB,CAAC,iBAAiB,CAAC,2BAAY,CAAC,CAAA;QACjD,iBAAiB,CAAC,iBAAiB,CAAC,qCAAiB,CAAC,CAAA;QACtD,iBAAiB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,CAAA;IAC3D,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,aAA2B;QACjD,wFAAwF;IAC1F,CAAC;CACF;AA9CD,4CA8CC"}
1
+ {"version":3,"file":"OpenBadgesModule.js","sourceRoot":"","sources":["../src/OpenBadgesModule.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,32 @@
1
- import { AgentContext } from '@credo-ts/core';
1
+ import { AgentContext, ConnectionService, MessageSender } from '@credo-ts/core';
2
2
  import { IssuerService } from '../services/IssuerService';
3
3
  import { VerifyService, ConsumerService } from '../services';
4
4
  import { KeyService } from '../services/KeyService';
5
5
  import { OpenBadgeCredentialRepository } from '../repository/OpenBadgeCredentialRepository';
6
+ import { OpenBadgeCredentialRecord } from '../repository/OpenBadgeCredentialRecord';
6
7
  import type { EndorsementCredentialInput } from '../models/EndorsementCredential';
7
8
  import type { ClrCredentialInput } from '../models/ClrCredential';
9
+ import { OpenBadgeProtocolService } from '../protocol/OpenBadgeProtocolService';
8
10
  export declare class OpenBadgesApi {
9
11
  private readonly issuerService;
10
12
  private readonly verifyService;
11
13
  private readonly consumerService;
12
14
  private readonly keys;
13
15
  private readonly credentialRepository;
16
+ private readonly protocolService;
17
+ private readonly connectionService;
18
+ private readonly messageSender;
14
19
  private readonly agentContext;
15
- constructor(issuerService: IssuerService, verifyService: VerifyService, consumerService: ConsumerService, keys: KeyService, credentialRepository: OpenBadgeCredentialRepository, agentContext: AgentContext);
16
- issue(input: any): Promise<import("..").OpenBadgeCredentialRecord>;
20
+ constructor(issuerService: IssuerService, verifyService: VerifyService, consumerService: ConsumerService, keys: KeyService, credentialRepository: OpenBadgeCredentialRepository, protocolService: OpenBadgeProtocolService, connectionService: ConnectionService, messageSender: MessageSender, agentContext: AgentContext);
21
+ onAgentReady: boolean;
22
+ issue(input: any): Promise<OpenBadgeCredentialRecord>;
17
23
  /**
18
24
  * Issues an EndorsementCredential - a third-party validation credential
19
25
  *
20
26
  * @param input - The endorsement credential input
21
27
  * @returns The saved credential record
22
28
  */
23
- issueEndorsement(input: EndorsementCredentialInput): Promise<import("..").OpenBadgeCredentialRecord>;
29
+ issueEndorsement(input: EndorsementCredentialInput): Promise<OpenBadgeCredentialRecord>;
24
30
  verify(credentialOrJwt: unknown): Promise<{
25
31
  isValidStructure: boolean;
26
32
  issues: import("..").ValidationIssue[];
@@ -46,8 +52,8 @@ export declare class OpenBadgesApi {
46
52
  * @param input - The CLR credential input
47
53
  * @returns The saved credential record
48
54
  */
49
- issueClr(input: ClrCredentialInput): Promise<import("..").OpenBadgeCredentialRecord>;
50
- issueCredential(input: any): Promise<import("..").OpenBadgeCredentialRecord>;
55
+ issueClr(input: ClrCredentialInput): Promise<OpenBadgeCredentialRecord>;
56
+ issueCredential(input: any): Promise<OpenBadgeCredentialRecord>;
51
57
  verifyCredential(credentialOrJwt: unknown): Promise<{
52
58
  isValidStructure: boolean;
53
59
  issues: import("..").ValidationIssue[];
@@ -56,4 +62,87 @@ export declare class OpenBadgesApi {
56
62
  }>;
57
63
  getAllCredentials(): Promise<unknown[]>;
58
64
  getCredentialById(credentialId: string): Promise<{} | null>;
65
+ /**
66
+ * Holder requests a badge from an issuer
67
+ * @param connectionId - The connection ID to the issuer
68
+ * @param achievementName - The name of the badge to request
69
+ * @param options - Optional achievement type and comment
70
+ * @returns The thread ID of the request
71
+ */
72
+ requestBadge(connectionId: string, achievementName: string, options?: {
73
+ achievementType?: string;
74
+ comment?: string;
75
+ }): Promise<string>;
76
+ /**
77
+ * Issuer offers a badge to a holder
78
+ * @param connectionId - The connection ID to the holder
79
+ * @param offer - The offer details
80
+ * @returns The thread ID of the offer
81
+ */
82
+ offerBadge(connectionId: string, offer: {
83
+ achievementName: string;
84
+ description?: string;
85
+ imageUrl?: string;
86
+ comment?: string;
87
+ threadId?: string;
88
+ }): Promise<string>;
89
+ /**
90
+ * Issuer sends a signed credential to a holder
91
+ * Can be a response to a request/offer or a direct issue
92
+ * @param connectionId - The connection ID to the holder
93
+ * @param credentialInput - The credential input to sign and send
94
+ * @param options - Optional thread ID and comment
95
+ */
96
+ sendCredential(connectionId: string, credentialInput: any, options?: {
97
+ threadId?: string;
98
+ comment?: string;
99
+ }): Promise<void>;
100
+ /**
101
+ * Holder acknowledges receipt of a credential
102
+ * @param connectionId - The connection ID to the issuer
103
+ * @param threadId - The thread ID of the credential exchange
104
+ * @param status - 'OK' or 'FAIL'
105
+ */
106
+ acknowledgeCredential(connectionId: string, threadId: string, status?: 'OK' | 'FAIL'): Promise<void>;
107
+ /**
108
+ * Verifier requests a holder to present a credential
109
+ * @param connectionId - The connection ID to the holder
110
+ * @param options - Optional achievement name and comment
111
+ * @returns The thread ID of the request
112
+ */
113
+ requestPresentation(connectionId: string, options?: {
114
+ achievementName?: string;
115
+ comment?: string;
116
+ }): Promise<string>;
117
+ /**
118
+ * Holder presents a credential to a verifier
119
+ * Can be a response to a request or holder-initiated
120
+ * @param connectionId - The connection ID to the verifier
121
+ * @param credentialRecordId - The ID of the OpenBadgeCredentialRecord in the wallet
122
+ * @param options - Optional thread ID and comment
123
+ */
124
+ presentCredential(connectionId: string, credentialRecordId: string, options?: {
125
+ threadId?: string;
126
+ comment?: string;
127
+ }): Promise<void>;
128
+ /**
129
+ * Verifier sends verification result back to holder
130
+ * @param connectionId - The connection ID to the holder
131
+ * @param threadId - The thread ID of the presentation exchange
132
+ * @param verified - Whether the credential was verified
133
+ * @param error - Optional error message if verification failed
134
+ */
135
+ sendVerificationResult(connectionId: string, threadId: string, verified: boolean, error?: string): Promise<void>;
136
+ /**
137
+ * Get all credential records from wallet
138
+ */
139
+ getAllCredentialRecords(): Promise<OpenBadgeCredentialRecord[]>;
140
+ /**
141
+ * Get a credential record by its record ID
142
+ */
143
+ getCredentialRecordById(id: string): Promise<OpenBadgeCredentialRecord>;
144
+ /**
145
+ * Find credential records by issuer DID
146
+ */
147
+ findCredentialsByIssuer(issuerId: string): Promise<OpenBadgeCredentialRecord[]>;
59
148
  }
@@ -18,14 +18,33 @@ const IssuerService_1 = require("../services/IssuerService");
18
18
  const services_1 = require("../services");
19
19
  const KeyService_1 = require("../services/KeyService");
20
20
  const OpenBadgeCredentialRepository_1 = require("../repository/OpenBadgeCredentialRepository");
21
+ // Protocol imports
22
+ const OpenBadgeProtocolService_1 = require("../protocol/OpenBadgeProtocolService");
23
+ const handlers_1 = require("../protocol/handlers");
21
24
  let OpenBadgesApi = class OpenBadgesApi {
22
- constructor(issuerService, verifyService, consumerService, keys, credentialRepository, agentContext) {
25
+ constructor(issuerService, verifyService, consumerService, keys, credentialRepository, protocolService, connectionService, messageSender, agentContext) {
23
26
  this.issuerService = issuerService;
24
27
  this.verifyService = verifyService;
25
28
  this.consumerService = consumerService;
26
29
  this.keys = keys;
27
30
  this.credentialRepository = credentialRepository;
31
+ this.protocolService = protocolService;
32
+ this.connectionService = connectionService;
33
+ this.messageSender = messageSender;
28
34
  this.agentContext = agentContext;
35
+ // Register handlers at API construction time to ensure DI is ready
36
+ this.onAgentReady = (() => {
37
+ this.agentContext.dependencyManager.registerMessageHandlers([
38
+ new handlers_1.RequestHandler(this.protocolService),
39
+ new handlers_1.OfferHandler(this.protocolService),
40
+ new handlers_1.CredentialHandler(this.protocolService),
41
+ new handlers_1.AckHandler(this.protocolService),
42
+ new handlers_1.RequestPresentationHandler(this.protocolService),
43
+ new handlers_1.PresentationHandler(this.protocolService),
44
+ new handlers_1.VerificationResultHandler(this.protocolService),
45
+ ]);
46
+ return true;
47
+ })();
29
48
  }
30
49
  async issue(input) {
31
50
  console.log('[OB] OpenBadgesApi.issue() called');
@@ -86,17 +105,183 @@ let OpenBadgesApi = class OpenBadgesApi {
86
105
  const record = await this.credentialRepository.findByCredentialId(this.agentContext, credentialId);
87
106
  return record?.credential ?? null;
88
107
  }
108
+ // ============================================================
109
+ // DIDCOMM ISSUANCE FLOW API METHODS
110
+ // ============================================================
111
+ /**
112
+ * Holder requests a badge from an issuer
113
+ * @param connectionId - The connection ID to the issuer
114
+ * @param achievementName - The name of the badge to request
115
+ * @param options - Optional achievement type and comment
116
+ * @returns The thread ID of the request
117
+ */
118
+ async requestBadge(connectionId, achievementName, options) {
119
+ const connection = await this.connectionService.getById(this.agentContext, connectionId);
120
+ const message = this.protocolService.createRequest({
121
+ achievementName,
122
+ achievementType: options?.achievementType,
123
+ comment: options?.comment,
124
+ });
125
+ const outbound = await (0, core_1.getOutboundMessageContext)(this.agentContext, {
126
+ message,
127
+ connectionRecord: connection,
128
+ });
129
+ await this.messageSender.sendMessage(outbound);
130
+ return message.threadId;
131
+ }
132
+ /**
133
+ * Issuer offers a badge to a holder
134
+ * @param connectionId - The connection ID to the holder
135
+ * @param offer - The offer details
136
+ * @returns The thread ID of the offer
137
+ */
138
+ async offerBadge(connectionId, offer) {
139
+ const connection = await this.connectionService.getById(this.agentContext, connectionId);
140
+ const message = this.protocolService.createOffer(offer);
141
+ const outbound = await (0, core_1.getOutboundMessageContext)(this.agentContext, {
142
+ message,
143
+ connectionRecord: connection,
144
+ });
145
+ await this.messageSender.sendMessage(outbound);
146
+ return message.threadId;
147
+ }
148
+ /**
149
+ * Issuer sends a signed credential to a holder
150
+ * Can be a response to a request/offer or a direct issue
151
+ * @param connectionId - The connection ID to the holder
152
+ * @param credentialInput - The credential input to sign and send
153
+ * @param options - Optional thread ID and comment
154
+ */
155
+ async sendCredential(connectionId, credentialInput, options) {
156
+ const connection = await this.connectionService.getById(this.agentContext, connectionId);
157
+ // Issue the credential (uses existing IssuerService - signs with cryptosuite)
158
+ const record = await this.issuerService.issueCredential(this.agentContext, credentialInput);
159
+ // Send via DIDComm with credential JSON in attachment (unchanged!)
160
+ const message = this.protocolService.createCredential(record.credential, {
161
+ threadId: options?.threadId,
162
+ comment: options?.comment,
163
+ });
164
+ const outbound = await (0, core_1.getOutboundMessageContext)(this.agentContext, {
165
+ message,
166
+ connectionRecord: connection,
167
+ });
168
+ await this.messageSender.sendMessage(outbound);
169
+ console.log('[OB] Credential sent via DIDComm');
170
+ }
171
+ /**
172
+ * Holder acknowledges receipt of a credential
173
+ * @param connectionId - The connection ID to the issuer
174
+ * @param threadId - The thread ID of the credential exchange
175
+ * @param status - 'OK' or 'FAIL'
176
+ */
177
+ async acknowledgeCredential(connectionId, threadId, status = 'OK') {
178
+ const connection = await this.connectionService.getById(this.agentContext, connectionId);
179
+ const message = this.protocolService.createAck(threadId, status);
180
+ const outbound = await (0, core_1.getOutboundMessageContext)(this.agentContext, {
181
+ message,
182
+ connectionRecord: connection,
183
+ });
184
+ await this.messageSender.sendMessage(outbound);
185
+ }
186
+ // ============================================================
187
+ // DIDCOMM VERIFICATION FLOW API METHODS
188
+ // ============================================================
189
+ /**
190
+ * Verifier requests a holder to present a credential
191
+ * @param connectionId - The connection ID to the holder
192
+ * @param options - Optional achievement name and comment
193
+ * @returns The thread ID of the request
194
+ */
195
+ async requestPresentation(connectionId, options) {
196
+ const connection = await this.connectionService.getById(this.agentContext, connectionId);
197
+ const message = this.protocolService.createRequestPresentation(options);
198
+ const outbound = await (0, core_1.getOutboundMessageContext)(this.agentContext, {
199
+ message,
200
+ connectionRecord: connection,
201
+ });
202
+ await this.messageSender.sendMessage(outbound);
203
+ return message.threadId;
204
+ }
205
+ /**
206
+ * Holder presents a credential to a verifier
207
+ * Can be a response to a request or holder-initiated
208
+ * @param connectionId - The connection ID to the verifier
209
+ * @param credentialRecordId - The ID of the OpenBadgeCredentialRecord in the wallet
210
+ * @param options - Optional thread ID and comment
211
+ */
212
+ async presentCredential(connectionId, credentialRecordId, options) {
213
+ const connection = await this.connectionService.getById(this.agentContext, connectionId);
214
+ // Get credential from wallet
215
+ const record = await this.credentialRepository.getById(this.agentContext, credentialRecordId);
216
+ if (!record.credential) {
217
+ throw new Error('Credential not found in record');
218
+ }
219
+ // Send the EXACT credential JSON (unchanged!) in attachment
220
+ const message = this.protocolService.createPresentation(record.credential, {
221
+ threadId: options?.threadId,
222
+ comment: options?.comment,
223
+ });
224
+ const outbound = await (0, core_1.getOutboundMessageContext)(this.agentContext, {
225
+ message,
226
+ connectionRecord: connection,
227
+ });
228
+ await this.messageSender.sendMessage(outbound);
229
+ console.log('[OB] Credential presented via DIDComm');
230
+ }
231
+ /**
232
+ * Verifier sends verification result back to holder
233
+ * @param connectionId - The connection ID to the holder
234
+ * @param threadId - The thread ID of the presentation exchange
235
+ * @param verified - Whether the credential was verified
236
+ * @param error - Optional error message if verification failed
237
+ */
238
+ async sendVerificationResult(connectionId, threadId, verified, error) {
239
+ const connection = await this.connectionService.getById(this.agentContext, connectionId);
240
+ const message = this.protocolService.createVerificationResult(threadId, verified, error);
241
+ const outbound = await (0, core_1.getOutboundMessageContext)(this.agentContext, {
242
+ message,
243
+ connectionRecord: connection,
244
+ });
245
+ await this.messageSender.sendMessage(outbound);
246
+ }
247
+ // ============================================================
248
+ // WALLET ACCESS METHODS
249
+ // ============================================================
250
+ /**
251
+ * Get all credential records from wallet
252
+ */
253
+ async getAllCredentialRecords() {
254
+ return this.credentialRepository.getAll(this.agentContext);
255
+ }
256
+ /**
257
+ * Get a credential record by its record ID
258
+ */
259
+ async getCredentialRecordById(id) {
260
+ return this.credentialRepository.getById(this.agentContext, id);
261
+ }
262
+ /**
263
+ * Find credential records by issuer DID
264
+ */
265
+ async findCredentialsByIssuer(issuerId) {
266
+ return this.credentialRepository.findByQuery(this.agentContext, { issuerId });
267
+ }
89
268
  };
90
269
  exports.OpenBadgesApi = OpenBadgesApi;
91
270
  exports.OpenBadgesApi = OpenBadgesApi = __decorate([
92
271
  (0, core_1.injectable)(),
93
272
  __param(3, (0, core_1.inject)(KeyService_1.KeyService)),
94
273
  __param(4, (0, core_1.inject)(OpenBadgeCredentialRepository_1.OpenBadgeCredentialRepository)),
274
+ __param(5, (0, core_1.inject)(OpenBadgeProtocolService_1.OpenBadgeProtocolService)),
275
+ __param(6, (0, core_1.inject)(core_1.ConnectionService)),
276
+ __param(7, (0, core_1.inject)(core_1.MessageSender)),
95
277
  __metadata("design:paramtypes", [IssuerService_1.IssuerService,
96
278
  services_1.VerifyService,
97
279
  services_1.ConsumerService,
98
280
  KeyService_1.KeyService,
99
281
  OpenBadgeCredentialRepository_1.OpenBadgeCredentialRepository,
282
+ OpenBadgeProtocolService_1.OpenBadgeProtocolService,
283
+ core_1.ConnectionService,
284
+ core_1.MessageSender,
100
285
  core_1.AgentContext])
101
286
  ], OpenBadgesApi);
102
287
  //# sourceMappingURL=OpenBadgesApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenBadgesApi.js","sourceRoot":"","sources":["../../src/api/OpenBadgesApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenBadgesApi.js","sourceRoot":"","sources":["../../src/api/OpenBadgesApi.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -43,4 +43,5 @@ export * from './services/crypto/JwtCryptoDriver';
43
43
  export * from './http/OpenBadgesHttpModule';
44
44
  export * from './http/OpenBadgesHttpModuleConfig';
45
45
  export * from './http/router';
46
+ export * from './protocol';
46
47
  export * from './utils/validate';
package/build/index.js CHANGED
@@ -66,6 +66,8 @@ __exportStar(require("./services/crypto/JwtCryptoDriver"), exports);
66
66
  __exportStar(require("./http/OpenBadgesHttpModule"), exports);
67
67
  __exportStar(require("./http/OpenBadgesHttpModuleConfig"), exports);
68
68
  __exportStar(require("./http/router"), exports);
69
+ // DIDComm Protocol
70
+ __exportStar(require("./protocol"), exports);
69
71
  // Utils
70
72
  __exportStar(require("./utils/validate"), exports);
71
73
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,qDAAkC;AAClC,2DAAwC;AACxC,8CAA2B;AAE3B,4BAA4B;AAC5B,2CAAwB;AAExB,6CAA6C;AAC7C,iDAA8B;AAE9B,MAAM;AACN,sDAAmC;AAEnC,uBAAuB;AACvB,yEAAsD;AACtD,6EAA0D;AAC1D,uEAAoD;AACpD,2EAAwD;AACxD,kFAA+D;AAC/D,sFAAmE;AACnE,qEAAkD;AAClD,yEAAsD;AACtD,+EAA4D;AAC5D,mFAAgE;AAChE,wEAAqD;AACrD,4EAAyD;AACzD,qEAAkD;AAClD,yEAAsD;AACtD,uEAAoD;AACpD,2EAAwD;AACxD,0EAAuD;AACvD,8EAA2D;AAC3D,gEAA6C;AAC7C,oEAAiD;AAEjD,WAAW;AACX,2DAAwC;AACxC,2DAAwC;AACxC,6DAA0C;AAC1C,yDAAsC;AACtC,gEAA6C;AAC7C,2DAAwC;AACxC,+DAA4C;AAC5C,wDAAqC;AACrC,0DAAuC;AACvC,wDAAqC;AACrC,4DAAyC;AACzC,kEAA+C;AAC/C,kEAA+C;AAC/C,iEAA8C;AAC9C,uEAAoD;AACpD,oEAAiD;AAEjD,cAAc;AACd,8DAA2C;AAC3C,oEAAiD;AACjD,gDAA6B;AAE7B,QAAQ;AACR,mDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,qDAAkC;AAClC,2DAAwC;AACxC,8CAA2B;AAE3B,4BAA4B;AAC5B,2CAAwB;AAExB,6CAA6C;AAC7C,iDAA8B;AAE9B,MAAM;AACN,sDAAmC;AAEnC,uBAAuB;AACvB,yEAAsD;AACtD,6EAA0D;AAC1D,uEAAoD;AACpD,2EAAwD;AACxD,kFAA+D;AAC/D,sFAAmE;AACnE,qEAAkD;AAClD,yEAAsD;AACtD,+EAA4D;AAC5D,mFAAgE;AAChE,wEAAqD;AACrD,4EAAyD;AACzD,qEAAkD;AAClD,yEAAsD;AACtD,uEAAoD;AACpD,2EAAwD;AACxD,0EAAuD;AACvD,8EAA2D;AAC3D,gEAA6C;AAC7C,oEAAiD;AAEjD,WAAW;AACX,2DAAwC;AACxC,2DAAwC;AACxC,6DAA0C;AAC1C,yDAAsC;AACtC,gEAA6C;AAC7C,2DAAwC;AACxC,+DAA4C;AAC5C,wDAAqC;AACrC,0DAAuC;AACvC,wDAAqC;AACrC,4DAAyC;AACzC,kEAA+C;AAC/C,kEAA+C;AAC/C,iEAA8C;AAC9C,uEAAoD;AACpD,oEAAiD;AAEjD,cAAc;AACd,8DAA2C;AAC3C,oEAAiD;AACjD,gDAA6B;AAE7B,mBAAmB;AACnB,6CAA0B;AAE1B,QAAQ;AACR,mDAAgC"}
@@ -0,0 +1,95 @@
1
+ export declare enum OpenBadgeProtocolEventTypes {
2
+ RequestReceived = "OpenBadgeProtocol.RequestReceived",
3
+ OfferReceived = "OpenBadgeProtocol.OfferReceived",
4
+ CredentialReceived = "OpenBadgeProtocol.CredentialReceived",
5
+ AckReceived = "OpenBadgeProtocol.AckReceived",
6
+ RequestPresentationReceived = "OpenBadgeProtocol.RequestPresentationReceived",
7
+ PresentationReceived = "OpenBadgeProtocol.PresentationReceived",
8
+ VerificationResultReceived = "OpenBadgeProtocol.VerificationResultReceived"
9
+ }
10
+ export interface RequestReceivedEventPayload {
11
+ connectionId?: string;
12
+ threadId: string;
13
+ achievementName: string;
14
+ achievementType?: string;
15
+ comment?: string;
16
+ [key: string]: unknown;
17
+ }
18
+ export interface OfferReceivedEventPayload {
19
+ connectionId?: string;
20
+ threadId: string;
21
+ achievementName: string;
22
+ description?: string;
23
+ imageUrl?: string;
24
+ comment?: string;
25
+ [key: string]: unknown;
26
+ }
27
+ export interface CredentialReceivedEventPayload {
28
+ connectionId?: string;
29
+ threadId: string;
30
+ credentialRecordId: string;
31
+ verified: boolean;
32
+ status: 'valid' | 'revoked' | 'expired' | 'unknown';
33
+ credential?: Record<string, unknown>;
34
+ [key: string]: unknown;
35
+ }
36
+ export interface AckReceivedEventPayload {
37
+ connectionId?: string;
38
+ threadId: string;
39
+ status: 'OK' | 'FAIL';
40
+ comment?: string;
41
+ [key: string]: unknown;
42
+ }
43
+ export interface RequestPresentationReceivedEventPayload {
44
+ connectionId?: string;
45
+ threadId: string;
46
+ achievementName?: string;
47
+ comment?: string;
48
+ [key: string]: unknown;
49
+ }
50
+ export interface PresentationReceivedEventPayload {
51
+ connectionId?: string;
52
+ threadId: string;
53
+ credential: Record<string, unknown> | null;
54
+ verified: boolean;
55
+ status: string;
56
+ error?: string;
57
+ [key: string]: unknown;
58
+ }
59
+ export interface VerificationResultReceivedEventPayload {
60
+ connectionId?: string;
61
+ threadId: string;
62
+ verified: boolean;
63
+ error?: string;
64
+ comment?: string;
65
+ [key: string]: unknown;
66
+ }
67
+ export interface RequestReceivedEvent {
68
+ type: typeof OpenBadgeProtocolEventTypes.RequestReceived;
69
+ payload: RequestReceivedEventPayload;
70
+ }
71
+ export interface OfferReceivedEvent {
72
+ type: typeof OpenBadgeProtocolEventTypes.OfferReceived;
73
+ payload: OfferReceivedEventPayload;
74
+ }
75
+ export interface CredentialReceivedEvent {
76
+ type: typeof OpenBadgeProtocolEventTypes.CredentialReceived;
77
+ payload: CredentialReceivedEventPayload;
78
+ }
79
+ export interface AckReceivedEvent {
80
+ type: typeof OpenBadgeProtocolEventTypes.AckReceived;
81
+ payload: AckReceivedEventPayload;
82
+ }
83
+ export interface RequestPresentationReceivedEvent {
84
+ type: typeof OpenBadgeProtocolEventTypes.RequestPresentationReceived;
85
+ payload: RequestPresentationReceivedEventPayload;
86
+ }
87
+ export interface PresentationReceivedEvent {
88
+ type: typeof OpenBadgeProtocolEventTypes.PresentationReceived;
89
+ payload: PresentationReceivedEventPayload;
90
+ }
91
+ export interface VerificationResultReceivedEvent {
92
+ type: typeof OpenBadgeProtocolEventTypes.VerificationResultReceived;
93
+ payload: VerificationResultReceivedEventPayload;
94
+ }
95
+ export type OpenBadgeProtocolEvent = RequestReceivedEvent | OfferReceivedEvent | CredentialReceivedEvent | AckReceivedEvent | RequestPresentationReceivedEvent | PresentationReceivedEvent | VerificationResultReceivedEvent;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenBadgeProtocolEventTypes = void 0;
4
+ var OpenBadgeProtocolEventTypes;
5
+ (function (OpenBadgeProtocolEventTypes) {
6
+ // Issuance Flow Events
7
+ OpenBadgeProtocolEventTypes["RequestReceived"] = "OpenBadgeProtocol.RequestReceived";
8
+ OpenBadgeProtocolEventTypes["OfferReceived"] = "OpenBadgeProtocol.OfferReceived";
9
+ OpenBadgeProtocolEventTypes["CredentialReceived"] = "OpenBadgeProtocol.CredentialReceived";
10
+ OpenBadgeProtocolEventTypes["AckReceived"] = "OpenBadgeProtocol.AckReceived";
11
+ // Verification Flow Events
12
+ OpenBadgeProtocolEventTypes["RequestPresentationReceived"] = "OpenBadgeProtocol.RequestPresentationReceived";
13
+ OpenBadgeProtocolEventTypes["PresentationReceived"] = "OpenBadgeProtocol.PresentationReceived";
14
+ OpenBadgeProtocolEventTypes["VerificationResultReceived"] = "OpenBadgeProtocol.VerificationResultReceived";
15
+ })(OpenBadgeProtocolEventTypes || (exports.OpenBadgeProtocolEventTypes = OpenBadgeProtocolEventTypes = {}));
16
+ //# sourceMappingURL=OpenBadgeProtocolEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenBadgeProtocolEvents.js","sourceRoot":"","sources":["../../src/protocol/OpenBadgeProtocolEvents.ts"],"names":[],"mappings":";;;AAAA,IAAY,2BAWX;AAXD,WAAY,2BAA2B;IACrC,uBAAuB;IACvB,oFAAqD,CAAA;IACrD,gFAAiD,CAAA;IACjD,0FAA2D,CAAA;IAC3D,4EAA6C,CAAA;IAE7C,2BAA2B;IAC3B,4GAA6E,CAAA;IAC7E,8FAA+D,CAAA;IAC/D,0GAA2E,CAAA;AAC7E,CAAC,EAXW,2BAA2B,2CAA3B,2BAA2B,QAWtC"}
@@ -0,0 +1,73 @@
1
+ import type { InboundMessageContext } from '@credo-ts/core';
2
+ import { EventEmitter } from '@credo-ts/core';
3
+ import { OpenBadgeCredentialRecord } from '../repository/OpenBadgeCredentialRecord';
4
+ import { OpenBadgeCredentialRepository } from '../repository/OpenBadgeCredentialRepository';
5
+ import { VerifyService } from '../services/VerifyService';
6
+ import { RequestMessage, OfferMessage, CredentialMessage, AckMessage, RequestPresentationMessage, PresentationMessage, VerificationResultMessage } from './messages';
7
+ export declare class OpenBadgeProtocolService {
8
+ private readonly verifyService;
9
+ private readonly credentialRepository;
10
+ private readonly eventEmitter;
11
+ constructor(verifyService: VerifyService, credentialRepository: OpenBadgeCredentialRepository, eventEmitter: EventEmitter);
12
+ createRequest(options: {
13
+ achievementName: string;
14
+ achievementType?: string;
15
+ comment?: string;
16
+ }): RequestMessage;
17
+ createOffer(options: {
18
+ achievementName: string;
19
+ description?: string;
20
+ imageUrl?: string;
21
+ comment?: string;
22
+ threadId?: string;
23
+ }): OfferMessage;
24
+ createCredential(credential: Record<string, unknown>, options?: {
25
+ comment?: string;
26
+ threadId?: string;
27
+ }): CredentialMessage;
28
+ createAck(threadId: string, status: 'OK' | 'FAIL', comment?: string): AckMessage;
29
+ createRequestPresentation(options?: {
30
+ achievementName?: string;
31
+ comment?: string;
32
+ }): RequestPresentationMessage;
33
+ createPresentation(credential: Record<string, unknown>, options?: {
34
+ comment?: string;
35
+ threadId?: string;
36
+ }): PresentationMessage;
37
+ createVerificationResult(threadId: string, verified: boolean, error?: string, comment?: string): VerificationResultMessage;
38
+ processRequest(messageContext: InboundMessageContext<RequestMessage>): Promise<void>;
39
+ processOffer(messageContext: InboundMessageContext<OfferMessage>): Promise<void>;
40
+ /**
41
+ * Process received credential - STORES IN WALLET
42
+ * 1. Extract credential JSON from attachment (unchanged)
43
+ * 2. Verify the credential proof using VerifyService
44
+ * 3. Extract derived metadata for display
45
+ * 4. Save to OpenBadgeCredentialRepository with status
46
+ */
47
+ processCredential(messageContext: InboundMessageContext<CredentialMessage>): Promise<OpenBadgeCredentialRecord | null>;
48
+ processAck(messageContext: InboundMessageContext<AckMessage>): Promise<void>;
49
+ /**
50
+ * Process presentation request - emit event for holder to respond
51
+ */
52
+ processRequestPresentation(messageContext: InboundMessageContext<RequestPresentationMessage>): Promise<void>;
53
+ /**
54
+ * Process presentation - VERIFIES CREDENTIAL
55
+ * 1. Extract credential from attachment
56
+ * 2. Verify using VerifyService (proof + status check)
57
+ * 3. Emit event with verification result
58
+ */
59
+ processPresentation(messageContext: InboundMessageContext<PresentationMessage>): Promise<{
60
+ verified: boolean;
61
+ status: string;
62
+ error?: string;
63
+ }>;
64
+ /**
65
+ * Process verification result - notify holder of outcome
66
+ */
67
+ processVerificationResult(messageContext: InboundMessageContext<VerificationResultMessage>): Promise<void>;
68
+ /**
69
+ * Extract display metadata from OpenBadges credential
70
+ * This matches the existing OpenBadgeCredentialRecord.derived structure
71
+ */
72
+ private extractDerivedMetadata;
73
+ }