@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,263 @@
|
|
|
1
|
+
import {IWallet} from './types';
|
|
2
|
+
import {didServiceRPC} from '@docknetwork/wallet-sdk-wasm/src/services/dids/index';
|
|
3
|
+
import assert from 'assert';
|
|
4
|
+
|
|
5
|
+
export async function importDID({
|
|
6
|
+
wallet,
|
|
7
|
+
encryptedJSONWallet,
|
|
8
|
+
password,
|
|
9
|
+
}: {
|
|
10
|
+
wallet: IWallet;
|
|
11
|
+
encryptedJSONWallet: any;
|
|
12
|
+
password: string;
|
|
13
|
+
}) {
|
|
14
|
+
try {
|
|
15
|
+
const rawDocs = await wallet.getDocumentsFromEncryptedWallet(
|
|
16
|
+
encryptedJSONWallet,
|
|
17
|
+
password,
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
// TODO: Will implement a network check for did:dock here, there is a jira for it already
|
|
21
|
+
|
|
22
|
+
const docs = rawDocs.map(rawDoc => {
|
|
23
|
+
if (Array.isArray(rawDoc.type) && rawDoc.type.length > 0) {
|
|
24
|
+
return {
|
|
25
|
+
...rawDoc,
|
|
26
|
+
type: rawDoc.type[0],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return rawDoc;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
for (const doc of docs) {
|
|
33
|
+
const existingDocs = await wallet.query({
|
|
34
|
+
id: doc.id,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
if (existingDocs.length === 0) {
|
|
38
|
+
await wallet.addDocument(doc);
|
|
39
|
+
} else if (
|
|
40
|
+
existingDocs.length > 0 &&
|
|
41
|
+
existingDocs[0].type === 'DIDResolutionResponse'
|
|
42
|
+
) {
|
|
43
|
+
throw new Error('DID already exists in wallet');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return docs;
|
|
47
|
+
} catch (e) {
|
|
48
|
+
switch (e.message) {
|
|
49
|
+
case 'No matching recipient found for key agreement key.':
|
|
50
|
+
throw new Error('Incorrect password');
|
|
51
|
+
default:
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function createDIDock({wallet, address, name}) {
|
|
58
|
+
assert(!!wallet, 'wallet is required');
|
|
59
|
+
assert(!!address, 'address is required');
|
|
60
|
+
assert(!!name, 'name is required');
|
|
61
|
+
|
|
62
|
+
const keyPair = await wallet.getAccountKeyPair(address);
|
|
63
|
+
const {dockDID, keyPairWalletId} = await didServiceRPC.registerDidDock(
|
|
64
|
+
keyPair,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const keydoc = await didServiceRPC.generateKeyDoc({
|
|
68
|
+
keyPairJSON: keyPair,
|
|
69
|
+
controller: dockDID,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const didDocument = await didServiceRPC.getDidDockDocument(dockDID);
|
|
73
|
+
|
|
74
|
+
const dockDIDResolution = {
|
|
75
|
+
id: dockDID,
|
|
76
|
+
type: 'DIDResolutionResponse',
|
|
77
|
+
name,
|
|
78
|
+
didDocument,
|
|
79
|
+
correlation: [keydoc.id, keyPairWalletId],
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
await wallet.add(keydoc);
|
|
83
|
+
await wallet.add(dockDIDResolution);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function editDID({wallet, id, name}){
|
|
87
|
+
if (typeof id === 'string' && id.length > 0) {
|
|
88
|
+
const docs = await wallet.query({
|
|
89
|
+
id,
|
|
90
|
+
});
|
|
91
|
+
if (docs.length === 1) {
|
|
92
|
+
const doc = docs[0];
|
|
93
|
+
await wallet.update({
|
|
94
|
+
...doc,
|
|
95
|
+
name,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
throw new Error('Document ID is not set');
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
async function deleteDID({wallet, id}){
|
|
104
|
+
if (typeof id === 'string' && id.length > 0) {
|
|
105
|
+
return await wallet.remove(id);
|
|
106
|
+
} else {
|
|
107
|
+
throw Error('Document ID is not set');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async function exportDID({wallet, id, password }){
|
|
112
|
+
const existingDoc = await wallet.getDocumentById(id);
|
|
113
|
+
if (existingDoc) {
|
|
114
|
+
const allCorrelationDocuments = (
|
|
115
|
+
await wallet.resolveCorrelations(id)
|
|
116
|
+
).filter(doc => doc && doc?.id !== existingDoc.id);
|
|
117
|
+
const documentsToExport = [existingDoc, ...allCorrelationDocuments];
|
|
118
|
+
|
|
119
|
+
if (allCorrelationDocuments.length >= 1) {
|
|
120
|
+
return wallet.exportDocuments({
|
|
121
|
+
documents: documentsToExport,
|
|
122
|
+
password,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
throw new Error('DID KeyPair not found');
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
throw new Error('DID Document not found');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export const createDIDKeyDocument = async (
|
|
132
|
+
keypairDoc: any,
|
|
133
|
+
didDocParams: any = {},
|
|
134
|
+
) => {
|
|
135
|
+
const keypairDocCorrelations = Array.isArray(keypairDoc.correlation)
|
|
136
|
+
? keypairDoc.correlation
|
|
137
|
+
: [];
|
|
138
|
+
|
|
139
|
+
const {didDocument} = await didServiceRPC.keypairToDIDKeyDocument({
|
|
140
|
+
keypairDoc: keypairDoc,
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
const didDocumentResolution = await didServiceRPC.getDIDResolution({
|
|
144
|
+
didDocumentCustomProp: didDocParams,
|
|
145
|
+
didDocument,
|
|
146
|
+
} as any);
|
|
147
|
+
|
|
148
|
+
didDocumentResolution.correlation.push(keypairDoc.id);
|
|
149
|
+
|
|
150
|
+
keypairDocCorrelations.push(didDocumentResolution.id);
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
didDocumentResolution,
|
|
154
|
+
keypairDoc,
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export async function createDIDKey({wallet, name, derivePath=undefined, type=undefined}) {
|
|
159
|
+
assert(!!wallet, 'wallet is required');
|
|
160
|
+
assert(!!name, 'name is required');
|
|
161
|
+
|
|
162
|
+
const keyDoc = await didServiceRPC.generateKeyDoc({derivePath, type});
|
|
163
|
+
|
|
164
|
+
const {didDocumentResolution} = await createDIDKeyDocument(keyDoc, {
|
|
165
|
+
name,
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
await wallet.add(keyDoc);
|
|
169
|
+
await wallet.add(didDocumentResolution);
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
keyDoc,
|
|
173
|
+
didDocumentResolution,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Get DIDs list
|
|
179
|
+
*
|
|
180
|
+
* @param param0
|
|
181
|
+
* @returns
|
|
182
|
+
*/
|
|
183
|
+
export async function getAll({wallet}) {
|
|
184
|
+
assert(!!wallet, 'wallet is required');
|
|
185
|
+
const dids = await wallet.getDocumentsByType('DIDResolutionResponse');
|
|
186
|
+
return dids;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export async function getDefaultDID({wallet}) {
|
|
190
|
+
assert(!!wallet, 'wallet is required');
|
|
191
|
+
const allDids = await getAll({ wallet });
|
|
192
|
+
return allDids[0]?.didDocument.id;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export async function getDIDKeyPairs({wallet}) {
|
|
196
|
+
assert(!!wallet, 'wallet is required');
|
|
197
|
+
const didDocs = await getAll({wallet});
|
|
198
|
+
const keyPairs = [];
|
|
199
|
+
for (const didDoc of didDocs) {
|
|
200
|
+
const keyPair = await wallet.getDocumentById(didDoc.correlation[0]);
|
|
201
|
+
keyPairs.push(keyPair);
|
|
202
|
+
}
|
|
203
|
+
return keyPairs;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export async function ensureDID({wallet}) {
|
|
207
|
+
assert(!!wallet, 'wallet is required');
|
|
208
|
+
const dids = await getAll({wallet});
|
|
209
|
+
if (dids.length === 0) {
|
|
210
|
+
return createDIDKey({wallet, name: 'Default DID'});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export interface IDIDProvider {
|
|
215
|
+
importDID(params: {
|
|
216
|
+
encryptedJSONWallet: any;
|
|
217
|
+
password: string;
|
|
218
|
+
}): Promise<void>;
|
|
219
|
+
createDIDock(params: {address: string; name: string}): Promise<void>;
|
|
220
|
+
createDIDKey(params: {name: string, derivePath?:string, type?: string}): Promise<any>;
|
|
221
|
+
editDID(params: {id: string; name: string}): Promise<void>;
|
|
222
|
+
deleteDID(params: {id: string;}): Promise<void>;
|
|
223
|
+
exportDID(params: {id: string; password: string}): Promise<void>;
|
|
224
|
+
getAll(): Promise<any>;
|
|
225
|
+
getDIDKeyPairs(): Promise<any>;
|
|
226
|
+
ensureDID(): Promise<any>;
|
|
227
|
+
getDefaultDID(): Promise<string>;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export function createDIDProvider({wallet}): IDIDProvider {
|
|
231
|
+
return {
|
|
232
|
+
async importDID({encryptedJSONWallet, password}) {
|
|
233
|
+
return importDID({wallet, encryptedJSONWallet, password});
|
|
234
|
+
},
|
|
235
|
+
async createDIDock({address, name}) {
|
|
236
|
+
return createDIDock({wallet, address, name});
|
|
237
|
+
},
|
|
238
|
+
async createDIDKey({name, derivePath, type}) {
|
|
239
|
+
return createDIDKey({wallet, name, derivePath, type});
|
|
240
|
+
},
|
|
241
|
+
async editDID(params) {
|
|
242
|
+
return editDID({wallet, ...params});
|
|
243
|
+
},
|
|
244
|
+
async deleteDID(params) {
|
|
245
|
+
return deleteDID({wallet, ...params});
|
|
246
|
+
},
|
|
247
|
+
async exportDID(params) {
|
|
248
|
+
return exportDID({wallet, ...params});
|
|
249
|
+
},
|
|
250
|
+
async getAll() {
|
|
251
|
+
return getAll({wallet});
|
|
252
|
+
},
|
|
253
|
+
async getDIDKeyPairs() {
|
|
254
|
+
return getDIDKeyPairs({wallet});
|
|
255
|
+
},
|
|
256
|
+
async ensureDID() {
|
|
257
|
+
return ensureDID({wallet});
|
|
258
|
+
},
|
|
259
|
+
async getDefaultDID() {
|
|
260
|
+
return getDefaultDID({wallet});
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {dockService} from '@docknetwork/wallet-sdk-wasm/src/services/dock';
|
|
2
|
+
import {trustRegistryService} from '@docknetwork/wallet-sdk-wasm/src/services/trust-registry';
|
|
3
|
+
|
|
4
|
+
export async function getEcosystems({
|
|
5
|
+
issuerDID,
|
|
6
|
+
verifierDID,
|
|
7
|
+
schemaId,
|
|
8
|
+
}: {
|
|
9
|
+
issuerDID?: string;
|
|
10
|
+
verifierDID?: string;
|
|
11
|
+
schemaId?: string;
|
|
12
|
+
}) {
|
|
13
|
+
await dockService.ensureDockReady();
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
return await trustRegistryService.getTrustRegistries({issuerDID, verifierDID, schemaId});
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.log('error', error);
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function getVerifiers({trustRegistryId, issuerDID, schemaId}) {
|
|
24
|
+
await dockService.ensureDockReady();
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
const verifiers = await trustRegistryService.getTrustRegistryVerifiers({
|
|
28
|
+
schemaId,
|
|
29
|
+
issuerDID: issuerDID,
|
|
30
|
+
trustRegistryId,
|
|
31
|
+
});
|
|
32
|
+
return verifiers;
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.log('error', error);
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"qr": "https://creds-testnet.dock.io/proof/6de279ba-caf3-4979-a067-553284b40767",
|
|
3
|
+
"id": "6de279ba-caf3-4979-a067-553284b40767",
|
|
4
|
+
"name": "Any credential",
|
|
5
|
+
"nonce": "b75fab9a5006216173500bfd3df5d0c5",
|
|
6
|
+
"created": "2023-08-09T20:19:46.278Z",
|
|
7
|
+
"updated": "2023-08-09T20:19:46.278Z",
|
|
8
|
+
"verified": false,
|
|
9
|
+
"response_url": "https://api-testnet.dock.io/proof-requests/6de279ba-caf3-4979-a067-553284b40767/send-presentation",
|
|
10
|
+
"request": {
|
|
11
|
+
"id": "6de279ba-caf3-4979-a067-553284b40767",
|
|
12
|
+
"input_descriptors": [
|
|
13
|
+
{
|
|
14
|
+
"id": "Credential 1",
|
|
15
|
+
"name": "Any credential",
|
|
16
|
+
"purpose": "Any credential",
|
|
17
|
+
"constraints": {
|
|
18
|
+
"fields": [
|
|
19
|
+
{
|
|
20
|
+
"path": [
|
|
21
|
+
"$.id"
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"type": "proof-request"
|
|
30
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": [
|
|
3
|
+
"https://www.w3.org/2018/credentials/v1",
|
|
4
|
+
{
|
|
5
|
+
"dk": "https://ld.dock.io/credentials#",
|
|
6
|
+
"BiometricsCredential": "dk:BiometricsCredential",
|
|
7
|
+
"name": "dk:name"
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"credentialStatus": {
|
|
11
|
+
"id": "dock:accumulator:0xa632a41f2fbdb681c14b33daae4fcc46af41661b90b35c4ac1545c9bebf0d7cc",
|
|
12
|
+
"type": "DockVBAccumulator2022",
|
|
13
|
+
"revocationCheck": "membership",
|
|
14
|
+
"revocationId": "9"
|
|
15
|
+
},
|
|
16
|
+
"id": "https://creds-staging.dock.io/83e0641f88e7ae5b18e8ae4a9ca616d23df8370501375269db9e21d857d6ce55",
|
|
17
|
+
"type": [
|
|
18
|
+
"VerifiableCredential",
|
|
19
|
+
"BiometricsCredential"
|
|
20
|
+
],
|
|
21
|
+
"credentialSubject": {
|
|
22
|
+
"id": "did:key:z6MksJKDx1wXLmWYE5Ppp4L1xtsyBccYVaYXP5nUPt5MbXve",
|
|
23
|
+
"name": "test"
|
|
24
|
+
},
|
|
25
|
+
"issuanceDate": "2024-01-09T19:14:04.108Z",
|
|
26
|
+
"issuer": {
|
|
27
|
+
"name": "profile bbs+",
|
|
28
|
+
"id": "did:dock:5GJeBeStWSxqyPGUJnERMFhm3wKcfCZP6nhqtoKyRAmq9FeU"
|
|
29
|
+
},
|
|
30
|
+
"name": "test",
|
|
31
|
+
"cryptoVersion": "0.4.0",
|
|
32
|
+
"credentialSchema": {
|
|
33
|
+
"id": "data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22%40context%22%3A%7B%22type%22%3A%22string%22%7D%2C%22credentialSchema%22%3A%7B%22type%22%3A%22string%22%7D%2C%22credentialStatus%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationCheck%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22cryptoVersion%22%3A%7B%22type%22%3A%22string%22%7D%2C%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22issuanceDate%22%3A%7B%22format%22%3A%22date-time%22%2C%22type%22%3A%22string%22%7D%2C%22issuer%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22%40context%22%3A%7B%22items%22%3A%5B%7B%22properties%22%3A%7B%22proof%22%3A%7B%22properties%22%3A%7B%22%40container%22%3A%7B%22type%22%3A%22string%22%7D%2C%22%40id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22%40type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22sec%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%7B%22type%22%3A%22string%22%7D%5D%2C%22type%22%3A%22array%22%7D%2C%22created%22%3A%7B%22format%22%3A%22date-time%22%2C%22type%22%3A%22string%22%7D%2C%22proofPurpose%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%2C%22verificationMethod%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D",
|
|
34
|
+
"type": "JsonSchemaValidator2018",
|
|
35
|
+
"parsingOptions": {
|
|
36
|
+
"useDefaults": false,
|
|
37
|
+
"defaultMinimumInteger": -4294967295,
|
|
38
|
+
"defaultMinimumDate": -17592186044415,
|
|
39
|
+
"defaultDecimalPlaces": 0
|
|
40
|
+
},
|
|
41
|
+
"version": "0.2.0"
|
|
42
|
+
},
|
|
43
|
+
"proof": {
|
|
44
|
+
"@context": [
|
|
45
|
+
{
|
|
46
|
+
"sec": "https://w3id.org/security#",
|
|
47
|
+
"proof": {
|
|
48
|
+
"@id": "sec:proof",
|
|
49
|
+
"@type": "@id",
|
|
50
|
+
"@container": "@graph"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"https://ld.dock.io/security/bbs/v1"
|
|
54
|
+
],
|
|
55
|
+
"type": "Bls12381BBS+SignatureDock2022",
|
|
56
|
+
"created": "2024-01-26T12:50:36Z",
|
|
57
|
+
"verificationMethod": "did:dock:5GJeBeStWSxqyPGUJnERMFhm3wKcfCZP6nhqtoKyRAmq9FeU#keys-2",
|
|
58
|
+
"proofPurpose": "assertionMethod",
|
|
59
|
+
"proofValue": "zY4LVnbLxwjnk2En988EVHvqsysjELpAcD3A72832JUHS3DreVjv2P9fN6J4CyWo9qC1qiiqBWkNzKP73ZF6tdSzTLzYgByqsXKDxLoyW7LqU2byPjAhHx2GKXTkKVqB3P3WtwxMGCcXR1tQqNhz91do5h"
|
|
60
|
+
},
|
|
61
|
+
"$$accum__witness$$": "0xb2249e8faadb33015bfc2dbe74bbd916f5efacff92d0e1235827e4e1b23438d9c45e427376cbcc164ab41c3bd0ace3c8"
|
|
62
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": [
|
|
3
|
+
"https://www.w3.org/2018/credentials/v1",
|
|
4
|
+
{
|
|
5
|
+
"dk": "https://ld.dock.io/credentials#",
|
|
6
|
+
"CustomerCredential": "dk:CustomerCredential",
|
|
7
|
+
"name": "dk:name",
|
|
8
|
+
"email": "dk:email",
|
|
9
|
+
"dateOfBirth": "dk:dateOfBirth",
|
|
10
|
+
"phone": "dk:phone",
|
|
11
|
+
"description": "dk:description",
|
|
12
|
+
"logo": "dk:logo"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"id": "https://creds-testnet.dock.io/986dccbe32eb61a0abb9678fd51aca796caa3d9f72088f66d60c9495b3d71174",
|
|
16
|
+
"type": ["VerifiableCredential", "CustomerCredential"],
|
|
17
|
+
"credentialSubject": {
|
|
18
|
+
"id": "did:key:z6MkoQzWru66w91EH7U9Xsv5eYXQabw9U3ZJd5GkatMWkmZT",
|
|
19
|
+
"name": "Alice Doe",
|
|
20
|
+
"email": "alice@dock.io",
|
|
21
|
+
"dateOfBirth": "1990-01-01",
|
|
22
|
+
"phone": "555-555-5555"
|
|
23
|
+
},
|
|
24
|
+
"issuanceDate": "2023-08-09T13:16:08.991Z",
|
|
25
|
+
"issuer": {
|
|
26
|
+
"name": "Test123",
|
|
27
|
+
"description": "",
|
|
28
|
+
"logo": "",
|
|
29
|
+
"id": "did:dock:5CgR1iELH33Qm8CN7LLXiEdTnrPTFKHgdxZgTuDwxgiyokjB"
|
|
30
|
+
},
|
|
31
|
+
"name": "Customer Credential",
|
|
32
|
+
"proof": {
|
|
33
|
+
"type": "Ed25519Signature2018",
|
|
34
|
+
"created": "2023-08-09T13:16:09Z",
|
|
35
|
+
"verificationMethod": "did:dock:5CgR1iELH33Qm8CN7LLXiEdTnrPTFKHgdxZgTuDwxgiyokjB#keys-1",
|
|
36
|
+
"proofPurpose": "assertionMethod",
|
|
37
|
+
"jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..2NJhT4Kx8W-q0pws4y86zsWMDkFrXz6Sfb5XRrJO_aRhvzhDZLsbXqvtRzRgGIrJKCBvTEDNiKBCicKT9f8hDA"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": [
|
|
3
|
+
"https://www.w3.org/2018/credentials/v1",
|
|
4
|
+
{
|
|
5
|
+
"dk": "https://ld.dock.io/credentials#",
|
|
6
|
+
"IIW": "dk:IIW",
|
|
7
|
+
"holderName": "dk:holderName",
|
|
8
|
+
"booleanYesNO": "dk:booleanYesNO",
|
|
9
|
+
"name": "dk:name",
|
|
10
|
+
"description": "dk:description",
|
|
11
|
+
"logo": "dk:logo"
|
|
12
|
+
},
|
|
13
|
+
"https://ld.dock.io/credentials/prettyvc"
|
|
14
|
+
],
|
|
15
|
+
"id": "https://creds-staging.dock.io/d02cc3892ae688dae923dd470443b1ee41a046206a6ae1775e4dbff25abccc6f",
|
|
16
|
+
"type": [
|
|
17
|
+
"VerifiableCredential",
|
|
18
|
+
"IIW",
|
|
19
|
+
"PrettyVerifiableCredential"
|
|
20
|
+
],
|
|
21
|
+
"credentialSubject": {
|
|
22
|
+
"holderName": "mike's request",
|
|
23
|
+
"booleanYesNO": true
|
|
24
|
+
},
|
|
25
|
+
"issuanceDate": "2023-08-17T17:32:04.335Z",
|
|
26
|
+
"expirationDate": "2024-08-17T17:32:12.812Z",
|
|
27
|
+
"issuer": {
|
|
28
|
+
"name": "DID on 17.08",
|
|
29
|
+
"description": "",
|
|
30
|
+
"logo": "",
|
|
31
|
+
"type": "dock",
|
|
32
|
+
"id": "did:dock:5EKnfGZpVun1NohRNH2u5KJtWu9B2yYJfGiiujwn4KjeAjob"
|
|
33
|
+
},
|
|
34
|
+
"name": "IIW",
|
|
35
|
+
"prettyVC": {
|
|
36
|
+
"type": "liquid",
|
|
37
|
+
"orientation": "landscape",
|
|
38
|
+
"size": "a4",
|
|
39
|
+
"proof": "<div style=\"color:rgb(255, 255, 255);font-weight:400;text-align:left;font-size:2.5em;overflow-wrap:break-word;width:100%;height:100%;position:absolute;background-color:rgb(255, 255, 255);z-index:0;left:0px;top:0px;background-size:contain;background-position:left top;background-repeat:no-repeat;background-image:url("data:image/png;base64,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")\"></div><div style=\"left:400px;display:block\"></div><div style=\"top:282.825px;display:block\"></div><div style=\"position:absolute;left:22.375%;top:5.48036%;width:65.592%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"color:rgb(0, 0, 0);font-weight:400;text-align:left;font-size:4.5em;overflow-wrap:break-word;width:100%;height:100%\"><b>{{credential.name}}</b></div><div></div></div></div><div style=\"position:absolute;left:22.375%;top:31.6447%;width:75.592%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"color:rgb(0, 99, 247);font-family:Verdana, sans-serif;font-weight:400;text-align:left;font-size:5.5em;overflow-wrap:break-word;width:100%;height:100%\"><b>{{subject.name}}</b></div><div></div></div></div><div style=\"position:absolute;left:22.375%;top:22.6286%;width:65.592%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"color:rgb(0, 0, 0);font-family:Verdana, sans-serif;font-weight:400;text-align:left;font-size:1.75em;overflow-wrap:break-word;width:100%;height:100%\">Presented to</div><div></div></div></div><div style=\"position:absolute;left:22.375%;top:91.3983%;width:25.012%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"color:rgb(150, 150, 150);font-family:Verdana, sans-serif;font-weight:400;text-align:left;font-size:1.75em;overflow-wrap:break-word;width:100%;height:100%\">Issued by: {{issuer.name}}</div><div></div></div></div><div style=\"position:absolute;left:22.375%;top:58.1625%;width:65.592%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"color:rgb(0, 0, 0);font-family:Verdana, sans-serif;font-weight:400;text-align:left;font-size:1.75em;overflow-wrap:break-word;width:100%;height:100%\">Issued on {{credential.issuanceDate | date: \"%B %d, %Y\"}}</div><div></div></div></div><div style=\"position:absolute;left:75%;top:64.35%;width:22.5%;height:32.7054%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"width:100%;height:100%;background:rgb(255, 255, 255);padding:0.5em\"><img src=\"{{qrImage}}\" alt=\"Scan QR\" style=\"width:100%\" /></div><div></div></div></div><div style=\"position:absolute;left:50%;top:50%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"color:rgb(150, 150, 150);font-family:Verdana, sans-serif;font-weight:400;text-align:left;font-size:1.75em;overflow-wrap:break-word;width:100%;height:100%\">{{subject.holderName}}</div><div></div></div></div><div style=\"position:absolute;left:25.75%;top:67.3561%;opacity:1\"><div style=\"position:relative;user-select:auto;width:auto;height:auto;min-width:20px;min-height:20px;box-sizing:border-box;flex-shrink:0\"><div style=\"color:rgb(150, 150, 150);font-family:Verdana, sans-serif;font-weight:400;text-align:left;font-size:1.75em;overflow-wrap:break-word;width:100%;height:100%\">{{subject.booleanYesNO}}</div><div></div></div></div>"
|
|
40
|
+
},
|
|
41
|
+
"proof": {
|
|
42
|
+
"@context": [
|
|
43
|
+
{
|
|
44
|
+
"sec": "https://w3id.org/security#",
|
|
45
|
+
"proof": {
|
|
46
|
+
"@id": "sec:proof",
|
|
47
|
+
"@type": "@id",
|
|
48
|
+
"@container": "@graph"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"https://ld.dock.io/security/bbs/v1"
|
|
52
|
+
],
|
|
53
|
+
"type": "Bls12381BBS+SignatureDock2022",
|
|
54
|
+
"created": "2023-08-17T17:32:29Z",
|
|
55
|
+
"verificationMethod": "did:dock:5EKnfGZpVun1NohRNH2u5KJtWu9B2yYJfGiiujwn4KjeAjob#keys-2",
|
|
56
|
+
"proofPurpose": "assertionMethod",
|
|
57
|
+
"proofValue": "zY1u5WbkW3NZinByxJX4MwL3fneQLCwPgYgiHHpMg6bNdmz95Qtbw5GMFAjCdxWAsuid4RhZvsPed7FcPrJatGd3RnhQwHiqAFCg854b9r4pVQDAqh2H3dqt8hXKmqZr1ouz7guVTQ5jjhDRWUGSw79KWo"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"qr": "https://creds-staging.dock.io/proof/f6b0c6a7-ae27-4044-80a3-07f5af6e61c8",
|
|
3
|
+
"id": "f6b0c6a7-ae27-4044-80a3-07f5af6e61c8",
|
|
4
|
+
"name": "boolean",
|
|
5
|
+
"nonce": "e2cb13292035d73e97543c8f463c3f06",
|
|
6
|
+
"created": "2023-08-17T17:38:38.276Z",
|
|
7
|
+
"updated": "2023-08-17T17:38:38.276Z",
|
|
8
|
+
"verified": false,
|
|
9
|
+
"response_url": "https://api-staging.dock.io/proof-requests/f6b0c6a7-ae27-4044-80a3-07f5af6e61c8/send-presentation",
|
|
10
|
+
"request": {
|
|
11
|
+
"id": "f6b0c6a7-ae27-4044-80a3-07f5af6e61c8",
|
|
12
|
+
"input_descriptors": [
|
|
13
|
+
{
|
|
14
|
+
"id": "Credential 1",
|
|
15
|
+
"name": "boolean",
|
|
16
|
+
"constraints": {
|
|
17
|
+
"fields": [
|
|
18
|
+
{
|
|
19
|
+
"path": [
|
|
20
|
+
"$.credentialSubject.booleanYesNO",
|
|
21
|
+
"$.credentialSubject.name",
|
|
22
|
+
"$.credentialSubject.id",
|
|
23
|
+
"$.credentialSubject.email",
|
|
24
|
+
"$.issuer.name"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"type": "proof-request"
|
|
33
|
+
}
|