Skip to content

Commit d77cae1

Browse files
Merge pull request #10 from InfraBlockchain/develop
Merge to main
2 parents a1afe72 + 0f306db commit d77cae1

File tree

8 files changed

+157
-26
lines changed

8 files changed

+157
-26
lines changed

examples/websocket/common.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
// common.ts
2-
import { VerifiableCredential } from "infra-did-js";
3-
import { CompressionLevel, DIDConnectRequestMessage } from "../../src/messages";
2+
import { VerifiableCredential, VerifiablePresentation } from "infra-did-js";
3+
import {
4+
CompressionLevel,
5+
DIDConnectRequestMessage,
6+
VPReqRejectMessage,
7+
VPSubmitLaterResMessage,
8+
VPSubmitResMessage,
9+
} from "../../src/messages";
410
import { InfraDIDCommAgent, VCRequirement } from "../../src/websocket";
511

612
export const verifierDID =
@@ -31,6 +37,25 @@ export function didAuthFailedCallback(peerDID: string): void {
3137
console.log("DID Auth Failed Callback", peerDID);
3238
}
3339

40+
export function VPVerifyCallback(vp: VerifiablePresentation): boolean {
41+
console.log("VP Verify Callback", vp);
42+
return true;
43+
}
44+
45+
export function VPSubmitResCallback(message: VPSubmitResMessage): void {
46+
console.log("VPSubmitResMessage", message);
47+
}
48+
49+
export function VPReqRejectCallback(message: VPReqRejectMessage): void {
50+
console.log("VPReqRejectMessage", message);
51+
}
52+
53+
export function VPSubmitLaterResCallback(
54+
message: VPSubmitLaterResMessage,
55+
): void {
56+
console.log("VPSubmitLaterResMessage", message);
57+
}
58+
3459
// Agent Initialization
3560
export async function initializeAgent(
3661
role: string,
@@ -48,6 +73,10 @@ export async function initializeAgent(
4873
agent.setDIDAuthCallback(didAuthCallback);
4974
agent.setDIDConnectedCallback(didConnectedCallback);
5075
agent.setDIDAuthFailedCallback(didAuthFailedCallback);
76+
agent.setVPVerifyCallback(VPVerifyCallback);
77+
agent.setVPSubmitResCallback(VPSubmitResCallback);
78+
agent.setVPReqRejectCallback(VPReqRejectCallback);
79+
agent.setVPSubmitLaterResCallback(VPSubmitLaterResCallback);
5180

5281
await agent.init();
5382

examples/websocket/socket_io_holder.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import {
1010
} from "../../src/websocket";
1111
import {
1212
DID_CHAIN_ENDPOINT,
13+
VPReqRejectCallback,
14+
VPSubmitLaterResCallback,
15+
VPSubmitResCallback,
16+
VPVerifyCallback,
1317
createAndEncodeRequestMessage,
1418
didAuthCallback,
1519
didAuthFailedCallback,
@@ -20,11 +24,11 @@ import {
2024
vcRequirements,
2125
} from "./common";
2226

23-
const verifierSocketId = "TcxmeCPmLlJ9GL_bAC-t";
27+
const verifierSocketId = "XNuk30LyTjZkisKuADKJ";
2428
let isPermitted = true;
2529
let mockVCRepository: VerifiableCredential[];
2630

27-
export function VPSubmitDataCallback(
31+
export function VPReqCallback(
2832
vcRequirements: VCRequirement[],
2933
challenge: string,
3034
): VPReqCallbackResponse {
@@ -123,7 +127,11 @@ async function receiveConnectionInitiatedByVerifier(): Promise<void> {
123127
agent.setDIDAuthCallback(didAuthCallback);
124128
agent.setDIDConnectedCallback(didConnectedCallback);
125129
agent.setDIDAuthFailedCallback(didAuthFailedCallback);
126-
agent.setVPSubmitDataCallback(VPSubmitDataCallback);
130+
agent.setVPReqCallback(VPReqCallback);
131+
agent.setVPVerifyCallback(VPVerifyCallback);
132+
agent.setVPSubmitResCallback(VPSubmitResCallback);
133+
agent.setVPReqRejectCallback(VPReqRejectCallback);
134+
agent.setVPSubmitLaterResCallback(VPSubmitLaterResCallback);
127135

128136
await agent.init();
129137

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "infra-did-comm-js",
3-
"version": "0.7.1",
3+
"version": "0.7.2",
44
"description": "Communication Protocol using Infra DID",
55
"source": "src/index.ts",
66
"main": "dist/src/index.cjs",

src/messages/vp/vp-req-reject.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,22 @@ export class VPReqRejectMessage {
4040
this.ack = ack;
4141
}
4242
}
43+
44+
/**
45+
* Creates an instance from a JSON object.
46+
* @param {any} json - The JSON object to convert from.
47+
* @returns {VPReqRejectMessage} The new instance created from the JSON object.
48+
* @throws {Error} Throws an error if the JSON object is missing required keys.
49+
*/
50+
static fromJSON(json: Record<string, any>): VPReqRejectMessage {
51+
return new VPReqRejectMessage(
52+
json.id,
53+
json.from,
54+
json.to,
55+
json.createdTime,
56+
json.expiresTime,
57+
json.body.reason,
58+
json.ack,
59+
);
60+
}
4361
}

src/messages/vp/vp-submit-later-res.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,21 @@ export class VPSubmitLaterResMessage {
4040
this.ack = ack;
4141
}
4242
}
43+
44+
/**
45+
* Creates an instance from a JSON object.
46+
* @param {any} json - The JSON object to convert from.
47+
* @returns {VPSubmitLaterResMessage} The new instance created from the JSON object.
48+
* @throws {Error} Throws an error if the JSON object is missing required keys.
49+
*/
50+
static fromJSON(json: Record<string, any>): VPSubmitLaterResMessage {
51+
return new VPSubmitLaterResMessage(
52+
json.id,
53+
json.from,
54+
json.createdTime,
55+
json.expiresTime,
56+
json.body.callbackUrl,
57+
json.ack,
58+
);
59+
}
4360
}

src/messages/vp/vp-submit-res.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,22 @@ export class VPSubmitResMessage {
4141
this.ack = ack;
4242
}
4343
}
44+
45+
/**
46+
* Creates an instance from a JSON object.
47+
* @param {any} json - The JSON object to convert from.
48+
* @returns {VPSubmitResMessage} The new instance created from the JSON object.
49+
* @throws {Error} Throws an error if the JSON object is missing required keys.
50+
*/
51+
static fromJSON(json: Record<string, any>): VPSubmitResMessage {
52+
return new VPSubmitResMessage(
53+
json.id,
54+
json.from,
55+
json.to,
56+
json.createdTime,
57+
json.expiresTime,
58+
json.body.status,
59+
json.ack,
60+
);
61+
}
4462
}

src/websocket/agent.ts

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import { cryptoWaitReady } from "@polkadot/util-crypto";
2-
import { CRYPTO_INFO, InfraSS58 } from "infra-did-js";
2+
import { CRYPTO_INFO, InfraSS58, VerifiablePresentation } from "infra-did-js";
33
import { io,Socket } from "socket.io-client";
44
import { v4 as uuidv4 } from "uuid";
55

66
import {
77
DIDAuthInitMessage,
88
DIDConnectRequestMessage,
99
VPReqMessage,
10+
VPReqRejectMessage,
11+
VPSubmitLaterResMessage,
12+
VPSubmitResMessage,
1013
} from "../../src/messages";
1114
import { Context } from "../../src/messages/commons";
1215
import { connectRequestDynamic, connectRequestStatic } from "./connect-request";
@@ -38,10 +41,15 @@ export class InfraDIDCommAgent {
3841
didConnectedCallback: (peerDID: string) => void = peerDID => {};
3942
didAuthFailedCallback: (peerDID: string) => void = peerDID => {};
4043
didVerifyCallback: (peerDID: string) => boolean = peerDID => true;
41-
VPSubmitDataCallback: (
44+
VPReqCallback: (
4245
vcRequirements: VCRequirement[],
4346
challenge: string,
4447
) => VPReqCallbackResponse;
48+
VPVerifyCallback: (VP: VerifiablePresentation) => boolean;
49+
VPSubmitResCallback: (message: VPSubmitResMessage) => void;
50+
VPReqRejectCallback: (message: VPReqRejectMessage) => void;
51+
VPSubmitLaterResCallback: (message: VPSubmitLaterResMessage) => void;
52+
4553
/* eslint-enable @typescript-eslint/no-unused-vars */
4654

4755
private _socketIdPromiseResolver: (value: string) => void;
@@ -106,13 +114,37 @@ export class InfraDIDCommAgent {
106114
this.didVerifyCallback = callback;
107115
}
108116

109-
setVPSubmitDataCallback(
117+
setVPReqCallback(
110118
callback: (
111119
vcRequirements: VCRequirement[],
112120
challenge: string,
113121
) => VPReqCallbackResponse,
114122
): void {
115-
this.VPSubmitDataCallback = callback;
123+
this.VPReqCallback = callback;
124+
}
125+
126+
setVPVerifyCallback(
127+
callback: (VP: VerifiablePresentation) => boolean,
128+
): void {
129+
this.VPVerifyCallback = callback;
130+
}
131+
132+
setVPSubmitResCallback(
133+
callback: (message: VPSubmitResMessage) => void,
134+
): void {
135+
this.VPSubmitResCallback = callback;
136+
}
137+
138+
setVPReqRejectCallback(
139+
callback: (message: VPReqRejectMessage) => void,
140+
): void {
141+
this.VPReqRejectCallback = callback;
142+
}
143+
144+
setVPSubmitLaterResCallback(
145+
callback: (message: VPSubmitLaterResMessage) => void,
146+
): void {
147+
this.VPSubmitLaterResCallback = callback;
116148
}
117149

118150
async init(): Promise<void> {
@@ -197,7 +229,11 @@ export class InfraDIDCommAgent {
197229
this.didConnectedCallback,
198230
this.didAuthFailedCallback,
199231
this.didVerifyCallback,
200-
this.VPSubmitDataCallback,
232+
this.VPReqCallback,
233+
this.VPVerifyCallback,
234+
this.VPSubmitResCallback,
235+
this.VPReqRejectCallback,
236+
this.VPSubmitLaterResCallback,
201237
);
202238
});
203239
}

src/websocket/message-handler.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,18 @@ export async function messageHandler(
5050
mnemonic: string,
5151
did: string,
5252
agent: InfraDIDCommAgent,
53-
didAuthCallback?: (peerDID: string) => boolean,
54-
didConnectedCallback?: (peerDID: string) => void,
55-
didAuthFailedCallback?: (peerDID: string) => void,
56-
didVerifyCallback?: (peerDID: string) => boolean,
57-
VPSubmitDataCallback?: (
53+
didAuthCallback: (peerDID: string) => boolean,
54+
didConnectedCallback: (peerDID: string) => void,
55+
didAuthFailedCallback: (peerDID: string) => void,
56+
didVerifyCallback: (peerDID: string) => boolean,
57+
VPReqCallback: (
5858
vcRequirements: VCRequirement[],
5959
challenge: string,
6060
) => VPReqCallbackResponse,
61-
VPVerifyCallback?: (issuer: string[]) => boolean,
61+
VPVerifyCallback: (vp: VerifiablePresentation) => boolean,
62+
VPSubmitResCallback: (message: VPSubmitResMessage) => void,
63+
VPReqRejectCallback: (message: VPReqRejectMessage) => void,
64+
VPSubmitLaterResCallback: (message: VPSubmitLaterResMessage) => void,
6265
) {
6366
try {
6467
const header = extractJWEHeader(jwe);
@@ -145,7 +148,7 @@ export async function messageHandler(
145148
console.log("DIDAuthFailed Message Received");
146149
agent.disconnect();
147150
} else if (jwsPayload["type"] === "VPReq") {
148-
await handleVPReq(jwsPayload, agent, VPSubmitDataCallback);
151+
await handleVPReq(jwsPayload, agent, VPReqCallback);
149152
} else if (jwsPayload["type"] === "VPSubmit") {
150153
console.log("VPSubmit Message Received", jwsPayload);
151154
await sendVPSubmitRes(
@@ -156,16 +159,21 @@ export async function messageHandler(
156159
);
157160
} else if (jwsPayload["type"] === "VPSubmitRes") {
158161
console.log("VPSubmitRes Message Received", jwsPayload);
162+
VPSubmitResCallback(VPSubmitResMessage.fromJSON(jwsPayload));
159163
} else if (jwsPayload["type"] === "VPReqReject") {
160164
console.log("VPReqReject Message Received", jwsPayload);
161165
await sendVPReqRejectRes(mnemonic, agent);
166+
VPReqRejectCallback(VPReqRejectMessage.fromJSON(jwsPayload));
162167
} else if (jwsPayload["type"] === "VPReqRejectRes") {
163168
console.log("VPReqRejectRes Message Received", jwsPayload);
164169
} else if (jwsPayload["type"] === "VPSubmitLater") {
165170
console.log("VPSubmitLater Message Received", jwsPayload);
166171
await sendVPSubmitLaterRes(agent);
167172
} else if (jwsPayload["type"] === "VPSubmitLaterRes") {
168-
console.log("VPSubmitLaterRes Message Received", jwsPayload);
173+
console.log("≈ Message Received", jwsPayload);
174+
VPSubmitLaterResCallback(
175+
VPSubmitLaterResMessage.fromJSON(jwsPayload),
176+
);
169177
agent.disconnect();
170178
}
171179
}
@@ -399,18 +407,15 @@ export async function sendVPSubmit(
399407
async function handleVPReq(
400408
jwsPayload: Record<string, any>,
401409
agent: InfraDIDCommAgent,
402-
VPSubmitDataCallback: (
410+
VPReqCallback: (
403411
vcRequirements: VCRequirement[],
404412
challenge: string,
405413
) => VPReqCallbackResponse,
406414
) {
407415
console.log("VPReq Message Received");
408416
const vcRequirements: VCRequirement[] = jwsPayload.body.vcRequirements;
409417
const challenge = jwsPayload.body.challenge;
410-
const vpReqCallbackResponse = VPSubmitDataCallback(
411-
vcRequirements,
412-
challenge,
413-
);
418+
const vpReqCallbackResponse = VPReqCallback(vcRequirements, challenge);
414419

415420
const vcHoldingResult = vpReqCallbackResponse.status;
416421

@@ -503,7 +508,7 @@ export async function sendVPSubmitRes(
503508
mnemonic: string,
504509
jwsPayload: Record<string, any>,
505510
agent: InfraDIDCommAgent,
506-
VPVerifyCallback: (issuer: string[]) => boolean,
511+
VPVerifyCallback: (vp: VerifiablePresentation) => boolean,
507512
): Promise<void> {
508513
try {
509514
const VP = VerifiablePresentation.fromJSON(
@@ -543,7 +548,7 @@ export async function sendVPSubmitRes(
543548
"Completed to verify the VP",
544549
);
545550

546-
VPVerifyCallback([agent.did]);
551+
VPVerifyCallback(VP);
547552

548553
const jwe = await createJWE(vpSubmitResMessage, mnemonic, receiverDID);
549554

0 commit comments

Comments
 (0)