@docknetwork/wallet-sdk-core 0.4.19
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.
- package/LICENSE +39 -0
- package/babel.config.js +16 -0
- package/jest.config.ts +39 -0
- package/lib/account-provider.d.ts +8 -0
- package/lib/account-provider.d.ts.map +1 -0
- package/lib/account-provider.js +15 -0
- package/lib/account-provider.js.map +1 -0
- package/lib/biometric-provider.d.ts +29 -0
- package/lib/biometric-provider.d.ts.map +1 -0
- package/lib/biometric-provider.js +54 -0
- package/lib/biometric-provider.js.map +1 -0
- package/lib/credential-provider.d.ts +58 -0
- package/lib/credential-provider.d.ts.map +1 -0
- package/lib/credential-provider.js +198 -0
- package/lib/credential-provider.js.map +1 -0
- package/lib/did-provider.d.ts +79 -0
- package/lib/did-provider.d.ts.map +1 -0
- package/lib/did-provider.js +215 -0
- package/lib/did-provider.js.map +1 -0
- package/lib/ecosystem-tools.d.ts +11 -0
- package/lib/ecosystem-tools.d.ts.map +1 -0
- package/lib/ecosystem-tools.js +33 -0
- package/lib/ecosystem-tools.js.map +1 -0
- package/lib/helpers.d.ts +8 -0
- package/lib/helpers.d.ts.map +1 -0
- package/lib/helpers.js +63 -0
- package/lib/helpers.js.map +1 -0
- package/lib/message-provider.d.ts +36 -0
- package/lib/message-provider.d.ts.map +1 -0
- package/lib/message-provider.js +172 -0
- package/lib/message-provider.js.map +1 -0
- package/lib/messages/message-helpers.d.ts +110 -0
- package/lib/messages/message-helpers.d.ts.map +1 -0
- package/lib/messages/message-helpers.js +106 -0
- package/lib/messages/message-helpers.js.map +1 -0
- package/lib/network-resolver.d.ts +19 -0
- package/lib/network-resolver.d.ts.map +1 -0
- package/lib/network-resolver.js +80 -0
- package/lib/network-resolver.js.map +1 -0
- package/lib/types.d.ts +63 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/v1-helpers.d.ts +20 -0
- package/lib/v1-helpers.d.ts.map +1 -0
- package/lib/v1-helpers.js +147 -0
- package/lib/v1-helpers.js.map +1 -0
- package/lib/verification-controller.d.ts +48 -0
- package/lib/verification-controller.d.ts.map +1 -0
- package/lib/verification-controller.js +219 -0
- package/lib/verification-controller.js.map +1 -0
- package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.d.ts +20 -0
- package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.d.ts.map +1 -0
- package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.js +140 -0
- package/lib/wallet-to-wallet-verification/walletToWalletVerificationProvider.js.map +1 -0
- package/lib/wallet-wasm.d.ts +10 -0
- package/lib/wallet-wasm.d.ts.map +1 -0
- package/lib/wallet-wasm.js +62 -0
- package/lib/wallet-wasm.js.map +1 -0
- package/lib/wallet.d.ts +11 -0
- package/lib/wallet.d.ts.map +1 -0
- package/lib/wallet.js +173 -0
- package/lib/wallet.js.map +1 -0
- package/package.json +34 -0
- package/setup-tests.ts +1 -0
- package/src/account-provider.ts +18 -0
- package/src/biometric-provider.ts +82 -0
- package/src/credential-provider.test.ts +164 -0
- package/src/credential-provider.ts +272 -0
- package/src/did-provider.test.ts +203 -0
- package/src/did-provider.ts +263 -0
- package/src/ecosystem-tools.ts +37 -0
- package/src/fixtures/any-credential-proof-request.json +30 -0
- package/src/fixtures/biometrics-credential-bbs-revocation.json +62 -0
- package/src/fixtures/customer-credential.json +39 -0
- package/src/fixtures/iiw-credential.json +59 -0
- package/src/fixtures/iiw-template.json +33 -0
- package/src/fixtures/university-degree-bbs.json +57 -0
- package/src/fixtures/university-degree-proof-request.json +32 -0
- package/src/helpers.ts +61 -0
- package/src/message-provider.test.ts +115 -0
- package/src/message-provider.ts +221 -0
- package/src/messages/message-helpers.ts +125 -0
- package/src/messages/relay-service-mocks/demo-app-messages.json +450 -0
- package/src/network-resolver.test.ts +142 -0
- package/src/network-resolver.ts +122 -0
- package/src/types.ts +75 -0
- package/src/v1-helpers.ts +160 -0
- package/src/verification-controller.test.ts +149 -0
- package/src/verification-controller.ts +276 -0
- package/src/wallet-to-wallet-verification/walletToWalletVerificationProvider.ts +216 -0
- package/src/wallet-wasm.ts +74 -0
- package/src/wallet.test.ts +72 -0
- package/src/wallet.ts +211 -0
- package/tsconfig.build.json +26 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createVerificationController = exports.VerificationStatus = void 0;
|
|
7
|
+
const helpers_1 = require("./helpers");
|
|
8
|
+
const pex_1 = require("@docknetwork/wallet-sdk-wasm/src/services/pex");
|
|
9
|
+
const credential_1 = require("@docknetwork/wallet-sdk-wasm/src/services/credential");
|
|
10
|
+
const credential_provider_1 = require("./credential-provider");
|
|
11
|
+
const events_1 = require("events");
|
|
12
|
+
const axios_1 = __importDefault(require("axios"));
|
|
13
|
+
const assert_1 = __importDefault(require("assert"));
|
|
14
|
+
const did_provider_1 = require("./did-provider");
|
|
15
|
+
var VerificationStatus;
|
|
16
|
+
(function (VerificationStatus) {
|
|
17
|
+
VerificationStatus["Started"] = "Started";
|
|
18
|
+
VerificationStatus["LoadingTemplate"] = "LoadingTemplate";
|
|
19
|
+
VerificationStatus["Filtering"] = "Filtering";
|
|
20
|
+
VerificationStatus["FetchingProvingKey"] = "FetchingProvingKey";
|
|
21
|
+
VerificationStatus["Error"] = "Error";
|
|
22
|
+
VerificationStatus["NoCredentialsInTheWallet"] = "NoCredentialsInTheWallet";
|
|
23
|
+
VerificationStatus["SelectingCredentials"] = "SelectingCredentials";
|
|
24
|
+
})(VerificationStatus || (exports.VerificationStatus = VerificationStatus = {}));
|
|
25
|
+
function isRangeProofTemplate(templateJSON) {
|
|
26
|
+
return templateJSON.proving_key;
|
|
27
|
+
}
|
|
28
|
+
function createVerificationController({ wallet, credentialProvider, didProvider, }) {
|
|
29
|
+
const emitter = new events_1.EventEmitter();
|
|
30
|
+
let templateJSON = null;
|
|
31
|
+
let status = VerificationStatus.Started;
|
|
32
|
+
/**
|
|
33
|
+
* Extra data to give better context to the current state
|
|
34
|
+
* Can be used to show error messages, or more specific information about the state
|
|
35
|
+
*/
|
|
36
|
+
let statusData = null;
|
|
37
|
+
let filteredCredentials = [];
|
|
38
|
+
let selectedCredentials = new Map();
|
|
39
|
+
let selectedDID = null;
|
|
40
|
+
let provingKey = null;
|
|
41
|
+
if (!credentialProvider) {
|
|
42
|
+
credentialProvider = (0, credential_provider_1.createCredentialProvider)({ wallet });
|
|
43
|
+
}
|
|
44
|
+
if (!didProvider) {
|
|
45
|
+
didProvider = (0, did_provider_1.createDIDProvider)({ wallet });
|
|
46
|
+
}
|
|
47
|
+
async function fetchProvingKey(templateJSON) {
|
|
48
|
+
if (templateJSON.proving_key) {
|
|
49
|
+
setState(VerificationStatus.FetchingProvingKey);
|
|
50
|
+
try {
|
|
51
|
+
provingKey = await axios_1.default
|
|
52
|
+
.get(templateJSON.proving_key)
|
|
53
|
+
.then(res => res.data);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
setState(VerificationStatus.Error, {
|
|
57
|
+
message: 'failed_to_fetch_proving_key',
|
|
58
|
+
});
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function start({ template }) {
|
|
64
|
+
setState(VerificationStatus.LoadingTemplate);
|
|
65
|
+
// check for dids
|
|
66
|
+
const dids = await didProvider.getAll();
|
|
67
|
+
if (!dids.length) {
|
|
68
|
+
setState(VerificationStatus.Error, {
|
|
69
|
+
message: 'no_dids_in_the_wallet',
|
|
70
|
+
});
|
|
71
|
+
throw new Error('No DIDs in the wallet');
|
|
72
|
+
}
|
|
73
|
+
// the application needs to verify if there are more DIDs available, and allow the user to change this selection before creating a presentation
|
|
74
|
+
selectedDID = dids[0].didDocument.id;
|
|
75
|
+
templateJSON = await (0, helpers_1.getJSON)(template);
|
|
76
|
+
await fetchProvingKey(templateJSON);
|
|
77
|
+
await loadCredentials();
|
|
78
|
+
setState(VerificationStatus.SelectingCredentials);
|
|
79
|
+
}
|
|
80
|
+
function setState(_status, data) {
|
|
81
|
+
status = _status;
|
|
82
|
+
statusData = data;
|
|
83
|
+
emitter.emit(_status, data);
|
|
84
|
+
}
|
|
85
|
+
async function loadCredentials() {
|
|
86
|
+
setState(VerificationStatus.Filtering);
|
|
87
|
+
// get wallet credentials and apply pex filter
|
|
88
|
+
const allCredentials = await credentialProvider.getCredentials();
|
|
89
|
+
if (!allCredentials.length) {
|
|
90
|
+
setState(VerificationStatus.NoCredentialsInTheWallet);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const result = await pex_1.pexService.filterCredentials({
|
|
95
|
+
credentials: allCredentials,
|
|
96
|
+
presentationDefinition: getPresentationDefinition(),
|
|
97
|
+
holderDIDs: [],
|
|
98
|
+
});
|
|
99
|
+
filteredCredentials = result.verifiableCredential;
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
console.error(`Unable to filter credentials using the template: \n ${JSON.stringify(templateJSON, null, 2)}`);
|
|
103
|
+
console.error(err);
|
|
104
|
+
setState(VerificationStatus.Error);
|
|
105
|
+
throw err;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function getPresentationDefinition() {
|
|
109
|
+
return templateJSON.request;
|
|
110
|
+
}
|
|
111
|
+
async function isBBSPlusCredential(credential) {
|
|
112
|
+
return credential_1.credentialServiceRPC.isBBSPlusCredential({ credential });
|
|
113
|
+
}
|
|
114
|
+
async function createPresentation() {
|
|
115
|
+
(0, assert_1.default)(!!selectedDID, 'No DID selected');
|
|
116
|
+
(0, assert_1.default)(!!selectedCredentials.size, 'No credentials selected');
|
|
117
|
+
if (isRangeProofTemplate(templateJSON)) {
|
|
118
|
+
// TODO: Implement proving key usage for range-proofs
|
|
119
|
+
(0, assert_1.default)(!!provingKey, 'No proving key found');
|
|
120
|
+
}
|
|
121
|
+
const credentials = [];
|
|
122
|
+
for (const credentialSelection of selectedCredentials.values()) {
|
|
123
|
+
const isBBS = await isBBSPlusCredential(credentialSelection.credential);
|
|
124
|
+
if (!isBBS) {
|
|
125
|
+
credentials.push(credentialSelection.credential);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// derive BBS credential
|
|
129
|
+
const derivedCredentials = await credential_1.credentialServiceRPC.deriveVCFromBBSPresentation({
|
|
130
|
+
proofRequest: templateJSON,
|
|
131
|
+
credentials: [
|
|
132
|
+
{
|
|
133
|
+
credential: credentialSelection.credential,
|
|
134
|
+
witness: await credentialProvider.getMembershipWitness(credentialSelection.credential.id),
|
|
135
|
+
attributesToReveal: [
|
|
136
|
+
...(credentialSelection.attributesToReveal || []),
|
|
137
|
+
'id',
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
console.log('Credential derived');
|
|
143
|
+
credentials.push(derivedCredentials[0]);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const didKeyPairList = await didProvider.getDIDKeyPairs();
|
|
147
|
+
const keyDoc = didKeyPairList.find(doc => doc.controller === selectedDID);
|
|
148
|
+
(0, assert_1.default)(keyDoc, `No key pair found for the selected DID ${selectedDID}`);
|
|
149
|
+
const presentation = await credential_1.credentialServiceRPC.createPresentation({
|
|
150
|
+
credentials,
|
|
151
|
+
challenge: templateJSON.nonce,
|
|
152
|
+
keyDoc,
|
|
153
|
+
id: keyDoc.controller.startsWith('did:key:')
|
|
154
|
+
? keyDoc.id
|
|
155
|
+
: `${keyDoc.controller}#keys-1`,
|
|
156
|
+
domain: 'dock.io',
|
|
157
|
+
});
|
|
158
|
+
return presentation;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Filtered credentials
|
|
162
|
+
*/
|
|
163
|
+
function getFilteredCredentials() {
|
|
164
|
+
return filteredCredentials;
|
|
165
|
+
}
|
|
166
|
+
function getStatus() {
|
|
167
|
+
return status;
|
|
168
|
+
}
|
|
169
|
+
function getStatusData() {
|
|
170
|
+
return statusData;
|
|
171
|
+
}
|
|
172
|
+
function setSelectedDID(did) {
|
|
173
|
+
selectedDID = did;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Use pex to evaluate presentation
|
|
177
|
+
*
|
|
178
|
+
* @param presentation
|
|
179
|
+
*/
|
|
180
|
+
function evaluatePresentation(presentation) {
|
|
181
|
+
const definition = getPresentationDefinition();
|
|
182
|
+
const result = credential_1.credentialServiceRPC.evaluatePresentation({
|
|
183
|
+
presentation,
|
|
184
|
+
presentationDefinition: definition,
|
|
185
|
+
});
|
|
186
|
+
return {
|
|
187
|
+
isValid: result.errors.length === 0,
|
|
188
|
+
errors: result.errors,
|
|
189
|
+
warnings: result.warnings,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function submitPresentation(presentation) {
|
|
193
|
+
return axios_1.default
|
|
194
|
+
.post(templateJSON.response_url, presentation)
|
|
195
|
+
.then(res => res.data);
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
emitter,
|
|
199
|
+
selectedCredentials,
|
|
200
|
+
getStatus,
|
|
201
|
+
getStatusData,
|
|
202
|
+
submitPresentation,
|
|
203
|
+
getSelectedDID() {
|
|
204
|
+
return selectedDID;
|
|
205
|
+
},
|
|
206
|
+
setSelectedDID,
|
|
207
|
+
start,
|
|
208
|
+
isBBSPlusCredential,
|
|
209
|
+
loadCredentials,
|
|
210
|
+
getFilteredCredentials,
|
|
211
|
+
createPresentation,
|
|
212
|
+
evaluatePresentation,
|
|
213
|
+
getTemplateJSON() {
|
|
214
|
+
return templateJSON;
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
exports.createVerificationController = createVerificationController;
|
|
219
|
+
//# sourceMappingURL=verification-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-controller.js","sourceRoot":"","sources":["../src/verification-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IDIDProvider } from '../did-provider';
|
|
2
|
+
import { IWallet } from '../types';
|
|
3
|
+
import { IMessageProvider } from '../message-provider';
|
|
4
|
+
export interface IWalletToWalletVerificationProvider {
|
|
5
|
+
getInvitationOOBMessage: ({ templateId }: {
|
|
6
|
+
templateId: string;
|
|
7
|
+
}) => Promise<any>;
|
|
8
|
+
setProofRequestHandler: (handler: (proofRequest: any) => any) => Promise<void>;
|
|
9
|
+
setPresentationHandler: (handler: (presentation: any, proofRequest: any) => any) => Promise<void>;
|
|
10
|
+
setPresentationAckHandler: (handler: (proofRequest: any) => any) => Promise<void>;
|
|
11
|
+
addProofRequestTemplate: (proofRequestTemplate: any) => Promise<any>;
|
|
12
|
+
getProofRequestTemplates: () => Promise<any[]>;
|
|
13
|
+
handleMessage: (message: any) => Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createWalletToWalletVerificationProvider({ wallet, didProvider, messageProvider, }: {
|
|
16
|
+
wallet: IWallet;
|
|
17
|
+
didProvider: IDIDProvider;
|
|
18
|
+
messageProvider: IMessageProvider;
|
|
19
|
+
}): IWalletToWalletVerificationProvider;
|
|
20
|
+
//# sourceMappingURL=walletToWalletVerificationProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletToWalletVerificationProvider.d.ts","sourceRoot":"","sources":["../../src/wallet-to-wallet-verification/walletToWalletVerificationProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAU7C,OAAO,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AACjC,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAKrD,MAAM,WAAW,mCAAmC;IAClD,uBAAuB,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9E,sBAAsB,EAAE,CACtB,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,GAAG,KAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sBAAsB,EAAE,CACtB,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,KAAK,GAAG,KACnD,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yBAAyB,EAAE,CACzB,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,GAAG,KAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,uBAAuB,EAAE,CAAC,oBAAoB,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACrE,wBAAwB,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,aAAa,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,wBAAgB,wCAAwC,CAAC,EACvD,MAAM,EACN,WAAW,EACX,eAAe,GAChB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,YAAY,CAAC;IAC1B,eAAe,EAAE,gBAAgB,CAAC;CACnC,GAAG,mCAAmC,CA8KtC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createWalletToWalletVerificationProvider = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const message_helpers_1 = require("../messages/message-helpers");
|
|
9
|
+
const logger_1 = require("@docknetwork/wallet-sdk-data-store/src/logger");
|
|
10
|
+
const ProofRequestTemplateType = 'ProofRequestTemplate';
|
|
11
|
+
function createWalletToWalletVerificationProvider({ wallet, didProvider, messageProvider, }) {
|
|
12
|
+
// Should be used by the HOLDER to create a presentation for the verifier
|
|
13
|
+
let proofRequestHandler;
|
|
14
|
+
// Should be used by the VERIFIER verify a presentation received by the holder
|
|
15
|
+
let presentationHandler;
|
|
16
|
+
// Can be used by the HOLDER to render the verification results sent by the verifier
|
|
17
|
+
let presentationAckHandler;
|
|
18
|
+
return {
|
|
19
|
+
getInvitationOOBMessage: async ({ templateId }) => {
|
|
20
|
+
const defaultDID = await didProvider.getDefaultDID();
|
|
21
|
+
const template = await wallet.getDocumentById(templateId);
|
|
22
|
+
(0, assert_1.default)(!!template, `Template with id ${templateId} not found`);
|
|
23
|
+
return (0, message_helpers_1.buildVerificationFlowInviteMessage)({
|
|
24
|
+
proofRequestId: templateId,
|
|
25
|
+
verifierDID: defaultDID,
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
setProofRequestHandler: async (handler) => {
|
|
29
|
+
proofRequestHandler = handler;
|
|
30
|
+
},
|
|
31
|
+
setPresentationHandler: async (handler) => {
|
|
32
|
+
presentationHandler = handler;
|
|
33
|
+
},
|
|
34
|
+
setPresentationAckHandler: async (handler) => {
|
|
35
|
+
presentationAckHandler = handler;
|
|
36
|
+
},
|
|
37
|
+
addProofRequestTemplate: async (proofRequestTemplate) => {
|
|
38
|
+
(0, assert_1.default)(!!proofRequestTemplate.input_descriptors, 'Input descriptions are required');
|
|
39
|
+
return wallet.addDocument({
|
|
40
|
+
type: ProofRequestTemplateType,
|
|
41
|
+
template: proofRequestTemplate,
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
getProofRequestTemplates: async () => {
|
|
45
|
+
return wallet.getDocumentsByType(ProofRequestTemplateType);
|
|
46
|
+
},
|
|
47
|
+
handleMessage: async (message) => {
|
|
48
|
+
logger_1.logger.debug('Received message');
|
|
49
|
+
logger_1.logger.debug(message);
|
|
50
|
+
if (message.type === message_helpers_1.MessageTypes.Invitation &&
|
|
51
|
+
message?.body?.goal_code === message_helpers_1.Goals.WalletToWalletVerification) {
|
|
52
|
+
// Received a verification invitation from the verifier
|
|
53
|
+
// Sends back an ack message to the verifier
|
|
54
|
+
const defaultDID = await didProvider.getDefaultDID();
|
|
55
|
+
logger_1.logger.debug('Received invitation');
|
|
56
|
+
logger_1.logger.debug('Sending ack message to the verifier');
|
|
57
|
+
messageProvider.sendMessage((0, message_helpers_1.buildAckWalletToWalletVerificationMessage)({
|
|
58
|
+
holderDID: defaultDID,
|
|
59
|
+
proofRequestId: message.body.proofRequestId,
|
|
60
|
+
verifierDID: message.from,
|
|
61
|
+
}));
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// The holder sent an ack message to the verifier invite
|
|
65
|
+
// Now the verifier knows the holder did and can offer a proof request
|
|
66
|
+
if (message.type === message_helpers_1.MessageTypes.Ack &&
|
|
67
|
+
message?.body?.goal_code === message_helpers_1.Goals.WalletToWalletVerification) {
|
|
68
|
+
async function process() {
|
|
69
|
+
logger_1.logger.debug(message);
|
|
70
|
+
const templateId = message.body.proofRequestId;
|
|
71
|
+
(0, assert_1.default)(!!templateId, 'Template ID not found in ack message');
|
|
72
|
+
const defaultDID = await didProvider.getDefaultDID();
|
|
73
|
+
const proofRequestTemplate = await wallet.getDocumentById(templateId);
|
|
74
|
+
(0, assert_1.default)(!!proofRequestTemplate, 'Proof request template not found');
|
|
75
|
+
logger_1.logger.debug('Sending proof request to the holder');
|
|
76
|
+
const proofRequest = proofRequestTemplate.template;
|
|
77
|
+
(0, assert_1.default)(!!proofRequest, 'Proof request not found');
|
|
78
|
+
messageProvider.sendMessage((0, message_helpers_1.buildRequestVerifiablePresentationMessage)({
|
|
79
|
+
proofRequestId: templateId,
|
|
80
|
+
proofRequest: proofRequestTemplate.template,
|
|
81
|
+
holderDID: message.from,
|
|
82
|
+
verifierDID: defaultDID,
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
process();
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
// The holder received a proof request from the verifier
|
|
89
|
+
if (message.type === message_helpers_1.MessageTypes.RequestPresentation) {
|
|
90
|
+
logger_1.logger.debug('Received proof request from the verifier');
|
|
91
|
+
(0, assert_1.default)(!!proofRequestHandler, 'No proof request handler set');
|
|
92
|
+
logger_1.logger.debug('Waiting for proofRequest handler to return a presentation');
|
|
93
|
+
Promise.resolve(proofRequestHandler(message.body.proofRequest)).then(async (presentation) => {
|
|
94
|
+
logger_1.logger.debug('Presentation received from handler');
|
|
95
|
+
const defaultDID = await didProvider.getDefaultDID();
|
|
96
|
+
logger_1.logger.debug('Sending presentation to the verifier');
|
|
97
|
+
messageProvider.sendMessage((0, message_helpers_1.buildVerifiablePresentationMessage)({
|
|
98
|
+
holderDID: defaultDID,
|
|
99
|
+
presentation,
|
|
100
|
+
proofRequestId: message.body.proofRequestId,
|
|
101
|
+
verifierDID: message.from,
|
|
102
|
+
}));
|
|
103
|
+
});
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
// The verifier received a presentation from the holder
|
|
107
|
+
if (message.type === message_helpers_1.MessageTypes.Presentation) {
|
|
108
|
+
logger_1.logger.debug('Received presentation from the holder');
|
|
109
|
+
const proofRequestTemplate = await wallet.getDocumentById(message.body.proofRequestId);
|
|
110
|
+
const proofRequest = proofRequestTemplate?.template;
|
|
111
|
+
(0, assert_1.default)(!!proofRequest, 'Proof request template not found');
|
|
112
|
+
logger_1.logger.debug('Waiting for presentation handler to return a presentation');
|
|
113
|
+
(0, assert_1.default)(!!presentationHandler, 'No presentation handler set');
|
|
114
|
+
Promise.resolve(presentationHandler(message.body.presentation, proofRequest)).then(async (presentationResult) => {
|
|
115
|
+
const defaultDID = await didProvider.getDefaultDID();
|
|
116
|
+
logger_1.logger.debug('Sending presentation ack to the holder');
|
|
117
|
+
messageProvider.sendMessage((0, message_helpers_1.buildVerifiablePresentationAckMessage)({
|
|
118
|
+
holderDID: message.from,
|
|
119
|
+
presentationResult,
|
|
120
|
+
proofRequestId: message.body.proofRequestId,
|
|
121
|
+
verifierDID: defaultDID,
|
|
122
|
+
}));
|
|
123
|
+
});
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
// The holder received a presentation ack from the verifier
|
|
127
|
+
if (message.type === message_helpers_1.MessageTypes.Ack &&
|
|
128
|
+
message.body.goal_code === message_helpers_1.Goals.PresentationAckFromVerifier) {
|
|
129
|
+
logger_1.logger.debug('Received presentation ack from the verifier');
|
|
130
|
+
logger_1.logger.debug('Presentation ack received');
|
|
131
|
+
if (presentationAckHandler) {
|
|
132
|
+
presentationAckHandler(message.body.presentationResult);
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
exports.createWalletToWalletVerificationProvider = createWalletToWalletVerificationProvider;
|
|
140
|
+
//# sourceMappingURL=walletToWalletVerificationProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletToWalletVerificationProvider.js","sourceRoot":"","sources":["../../src/wallet-to-wallet-verification/walletToWalletVerificationProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IWallet } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Update existing substrate network connection
|
|
4
|
+
* Compare connected substrate connection with the current walle network
|
|
5
|
+
* Disconnect and Establish a new connection if the network is different
|
|
6
|
+
*/
|
|
7
|
+
export declare function handleSubstrateNetworkChange(wallet: IWallet): Promise<void>;
|
|
8
|
+
export declare function setSubstrateNetwork(wallet: IWallet): Promise<void>;
|
|
9
|
+
export declare function initWalletWasm(wallet: IWallet): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=wallet-wasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-wasm.d.ts","sourceRoot":"","sources":["../src/wallet-wasm.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAShC;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,OAAO,iBAqBxD;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,OAAO,iBAenD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initWalletWasm = exports.setSubstrateNetwork = exports.handleSubstrateNetworkChange = void 0;
|
|
4
|
+
const keyring_1 = require("@docknetwork/wallet-sdk-wasm/src/services/keyring");
|
|
5
|
+
const util_crypto_1 = require("@docknetwork/wallet-sdk-wasm/src/services/util-crypto");
|
|
6
|
+
const dock_1 = require("@docknetwork/wallet-sdk-wasm/src/services/dock");
|
|
7
|
+
const wallet_1 = require("@docknetwork/wallet-sdk-wasm/src/modules/wallet");
|
|
8
|
+
const helpers_1 = require("./helpers");
|
|
9
|
+
function isSubstrateNetwork(network) {
|
|
10
|
+
return !!network.configs.substrateUrl;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Update existing substrate network connection
|
|
14
|
+
* Compare connected substrate connection with the current walle network
|
|
15
|
+
* Disconnect and Establish a new connection if the network is different
|
|
16
|
+
*/
|
|
17
|
+
async function handleSubstrateNetworkChange(wallet) {
|
|
18
|
+
const currentSubstrateAddress = await dock_1.dockService.getAddress();
|
|
19
|
+
const substrateNetworkId = wallet.dataStore.networks.find(network => network.configs.substrateUrl === currentSubstrateAddress)?.id;
|
|
20
|
+
const currentNetworkId = wallet.dataStore.network?.id;
|
|
21
|
+
if (substrateNetworkId === currentNetworkId) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
await dock_1.dockService.disconnect();
|
|
25
|
+
await setSubstrateNetwork(wallet);
|
|
26
|
+
}
|
|
27
|
+
exports.handleSubstrateNetworkChange = handleSubstrateNetworkChange;
|
|
28
|
+
async function setSubstrateNetwork(wallet) {
|
|
29
|
+
const network = wallet.dataStore.network;
|
|
30
|
+
const networkConfigs = network.configs;
|
|
31
|
+
await keyring_1.keyringService.initialize({
|
|
32
|
+
ss58Format: networkConfigs.addressPrefix,
|
|
33
|
+
});
|
|
34
|
+
dock_1.dockService
|
|
35
|
+
.init({
|
|
36
|
+
address: networkConfigs.substrateUrl,
|
|
37
|
+
})
|
|
38
|
+
.then(() => {
|
|
39
|
+
wallet.eventManager.emit(wallet_1.WalletEvents.networkConnected);
|
|
40
|
+
})
|
|
41
|
+
.catch(err => {
|
|
42
|
+
(0, helpers_1.captureException)(new Error('Unable to connect to substrate node'));
|
|
43
|
+
(0, helpers_1.captureException)(err);
|
|
44
|
+
console.error(err);
|
|
45
|
+
wallet.eventManager.emit(wallet_1.WalletEvents.networkError, err);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
exports.setSubstrateNetwork = setSubstrateNetwork;
|
|
49
|
+
async function initWalletWasm(wallet) {
|
|
50
|
+
await util_crypto_1.utilCryptoService.cryptoWaitReady();
|
|
51
|
+
const network = wallet.dataStore.network;
|
|
52
|
+
if (isSubstrateNetwork(network)) {
|
|
53
|
+
await setSubstrateNetwork(wallet);
|
|
54
|
+
wallet.eventManager.on(wallet_1.WalletEvents.networkUpdated, async () => {
|
|
55
|
+
handleSubstrateNetworkChange(wallet);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
wallet.setStatus('ready');
|
|
59
|
+
wallet.eventManager.emit(wallet_1.WalletEvents.ready);
|
|
60
|
+
}
|
|
61
|
+
exports.initWalletWasm = initWalletWasm;
|
|
62
|
+
//# sourceMappingURL=wallet-wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-wasm.js","sourceRoot":"","sources":["../src/wallet-wasm.ts"],"names":[],"mappings":";;;AAAA,+EAAiF;AACjF,uFAAwF;AACxF,yEAA2E;AAI3E,4EAA6E;AAC7E,uCAA6C;AAE7C,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,4BAA4B,CAChD,MAAe;IAEf,MAAM,uBAAuB,GAAG,MAAM,kBAAW,CAAC,UAAU,EAAE,CAAC;IAC/D,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACvD,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,KAAK,uBAAuB,CACpE,EAAE,EAAE,CAAC;IACN,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;IAEtD,IAAI,kBAAkB,KAAK,gBAAgB,EAAE;QAC3C,OAAO;KACR;IAED,MAAM,kBAAW,CAAC,UAAU,EAAE,CAAC;IAC/B,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAfD,oEAeC;AAEM,KAAK,UAAU,mBAAmB,CAAC,MAAe;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;IACzC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAEvC,MAAM,wBAAc,CAAC,UAAU,CAAC;QAC9B,UAAU,EAAE,cAAc,CAAC,aAAa;KACzC,CAAC,CAAC;IAEH,kBAAW;SACR,IAAI,CAAC;QACJ,OAAO,EAAE,cAAc,CAAC,YAAY;KACrC,CAAC;SACD,IAAI,CAAC,GAAG,EAAE;QACT,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAY,CAAC,gBAAgB,CAAC,CAAC;IAC1D,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,IAAA,0BAAgB,EAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QACnE,IAAA,0BAAgB,EAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC;AArBD,kDAqBC;AAEM,KAAK,UAAU,cAAc,CAAC,MAAe;IAClD,MAAM,+BAAiB,CAAC,eAAe,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;IAEzC,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE;QAC/B,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,qBAAY,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC7D,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;KACJ;IAED,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE1B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAY,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAfD,wCAeC"}
|
package/lib/wallet.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CreateWalletProps, IWallet } from './types';
|
|
2
|
+
export type { IWallet };
|
|
3
|
+
export declare function ensureDocumentContext(document: any): any;
|
|
4
|
+
/**
|
|
5
|
+
* Create wallet
|
|
6
|
+
*
|
|
7
|
+
* @param createWalletProps
|
|
8
|
+
* @returns {Promise<IWallet>}
|
|
9
|
+
*/
|
|
10
|
+
export declare function createWallet(createWalletProps: CreateWalletProps): Promise<IWallet>;
|
|
11
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAC,iBAAiB,EAAE,OAAO,EAAC,MAAM,SAAS,CAAC;AAQnD,YAAY,EAAC,OAAO,EAAC,CAAC;AAMtB,wBAAgB,qBAAqB,CAAC,QAAQ,KAAA,OAS7C;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,OAAO,CAAC,CAgKlB"}
|