@sphereon/ssi-sdk.uni-resolver-registrar-api 0.13.1-next.32 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -58
- package/dist/api-functions.d.ts.map +1 -1
- package/dist/api-functions.js +4 -4
- package/dist/api-functions.js.map +1 -1
- package/package.json +12 -12
- package/src/api-functions.ts +200 -196
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
**Warning: This package is in early development. Breaking changes without notice will happen at this point!**
|
|
12
12
|
|
|
13
13
|
---
|
|
14
|
+
|
|
14
15
|
This module provides a DIF Universal Resolver and Universal Registrar API, to allow DIDs managed by the agent to be
|
|
15
16
|
resolved using standardized APIs, as well as to create and manage new DIDs using the registrar APIs.
|
|
16
17
|
|
|
@@ -71,12 +72,8 @@ curl -X GET\
|
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
],
|
|
74
|
-
"authentication": [
|
|
75
|
-
|
|
76
|
-
],
|
|
77
|
-
"assertionMethod": [
|
|
78
|
-
"did:web:ddip.sphereon.com#JWK2020-RSA"
|
|
79
|
-
],
|
|
75
|
+
"authentication": ["did:web:ddip.sphereon.com#JWK2020-RSA"],
|
|
76
|
+
"assertionMethod": ["did:web:ddip.sphereon.com#JWK2020-RSA"],
|
|
80
77
|
"service": []
|
|
81
78
|
}
|
|
82
79
|
}
|
|
@@ -162,44 +159,43 @@ Note: You can have multiple instances of the UniResolverApiServer, as long as yo
|
|
|
162
159
|
for each instance and that the same express is being used.
|
|
163
160
|
|
|
164
161
|
```typescript
|
|
165
|
-
|
|
166
162
|
// agent is a configured SSI-SDK/Veramo agent (see below for an example)
|
|
167
163
|
|
|
168
164
|
// Let's first build express to listen on port 5000
|
|
169
165
|
const expressBuilder = ExpressBuilder.fromServerOpts({
|
|
170
|
-
|
|
171
|
-
|
|
166
|
+
port: 5000,
|
|
167
|
+
hostname: '0.0.0.0',
|
|
172
168
|
}).withPassportAuth(false)
|
|
173
|
-
const expressArgs = expressBuilder.build({startListening: true})
|
|
169
|
+
const expressArgs = expressBuilder.build({ startListening: true })
|
|
174
170
|
|
|
175
171
|
// Now create the Universal Resolver API, with DID resolution and persistence enabled and authentication disabled
|
|
176
172
|
new UniResolverApiServer({
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
},
|
|
185
|
-
},
|
|
173
|
+
opts: {
|
|
174
|
+
enableFeatures: ['did-persist', 'did-resolve'],
|
|
175
|
+
endpointOpts: {
|
|
176
|
+
basePath: '/1.0', // Let's make sure the eventual path becomes <agent>/1.0/idenfitiers/<did>
|
|
177
|
+
globalAuth: {
|
|
178
|
+
authentication: {
|
|
179
|
+
enabled: false,
|
|
186
180
|
},
|
|
181
|
+
},
|
|
187
182
|
},
|
|
188
|
-
|
|
189
|
-
|
|
183
|
+
},
|
|
184
|
+
expressArgs,
|
|
185
|
+
agent,
|
|
190
186
|
})
|
|
191
187
|
// At this point you can execute the example above, as the Uniresolver is now listening on port 5000
|
|
192
188
|
```
|
|
193
189
|
|
|
194
|
-
|
|
195
190
|
## DID Web Service
|
|
196
|
-
|
|
191
|
+
|
|
192
|
+
This service hosts agent managed did:web DIDs at the appropriate locations as a did.json file. Meaning that whenever you hit
|
|
197
193
|
https://agent/.well-known/did.json or http://agent/example/path/test/did.json for instance, the agent will lookup the appropriate DID managed by the agent.
|
|
198
194
|
If no DID is found for the URL, it will return the below response, with an HTTP code 404
|
|
199
195
|
|
|
200
196
|
```json
|
|
201
197
|
{
|
|
202
|
-
|
|
198
|
+
"error": "Not found"
|
|
203
199
|
}
|
|
204
200
|
```
|
|
205
201
|
|
|
@@ -246,46 +242,46 @@ these DID methods.
|
|
|
246
242
|
|
|
247
243
|
```typescript
|
|
248
244
|
export const resolver = new Resolver({
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
245
|
+
...getDidWebResolver(),
|
|
246
|
+
...getDidKeyResolver(),
|
|
247
|
+
...getDidJwkResolver(),
|
|
248
|
+
...getDidIonResolver(),
|
|
253
249
|
})
|
|
254
250
|
|
|
255
251
|
export const didProviders = {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
252
|
+
[`did:web`]: new WebDIDProvider({
|
|
253
|
+
defaultKms: 'local',
|
|
254
|
+
}),
|
|
255
|
+
[`did:key`]: new KeyDIDProvider({
|
|
256
|
+
defaultKms: 'local',
|
|
257
|
+
}),
|
|
258
|
+
[`did:ion`]: new IonDIDProvider({
|
|
259
|
+
defaultKms: 'local',
|
|
260
|
+
}),
|
|
261
|
+
[`did:jwk`]: new JwkDIDProvider({
|
|
262
|
+
defaultKms: 'local',
|
|
263
|
+
}),
|
|
268
264
|
}
|
|
269
265
|
|
|
270
266
|
const agent = createAgent<IDIDManager & IKeyManager & IDataStore & IDataStoreORM & IResolver>({
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
267
|
+
plugins: [
|
|
268
|
+
new DataStore(dbConnection),
|
|
269
|
+
new DataStoreORM(dbConnection),
|
|
270
|
+
new KeyManager({
|
|
271
|
+
store: new KeyStore(dbConnection),
|
|
272
|
+
kms: {
|
|
273
|
+
local: new KeyManagementSystem(privateKeyStore),
|
|
274
|
+
},
|
|
275
|
+
}),
|
|
276
|
+
new DIDManager({
|
|
277
|
+
store: new DIDStore(dbConnection),
|
|
278
|
+
defaultProvider: 'did:jwk',
|
|
279
|
+
providers: didProviders,
|
|
280
|
+
}),
|
|
281
|
+
new DIDResolverPlugin({
|
|
282
|
+
resolver,
|
|
283
|
+
}),
|
|
284
|
+
],
|
|
289
285
|
})
|
|
290
286
|
```
|
|
291
287
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-functions.d.ts","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"api-functions.d.ts","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,mBAAmB,EAAqB,MAAM,mCAAmC,CAAA;AAGrG,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,EAIL,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,sBAAsB,QAgFzG;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,QAe1G;AAsBD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE,mBAAmB,GAAG;IAC3B,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;CACrC,QA4BF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,QAsB1G;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,yBAAyB,QAoC/G"}
|
package/dist/api-functions.js
CHANGED
|
@@ -68,10 +68,10 @@ function createDidEndpoint(router, context, opts) {
|
|
|
68
68
|
if (createRequest.options.storeSecrets === false) {
|
|
69
69
|
return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 400, 'Only storeSecrets mode is supported currently');
|
|
70
70
|
/*const memoryKMS = new SphereonKeyManager({
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
store: new MemoryKeyStore(),
|
|
72
|
+
kms: {'mem': new KeyManagementSystem(new MemoryPrivateKeyStore())}
|
|
73
|
+
})
|
|
74
|
+
identifier = await memoryKMS..didManagerCreate({provider, alias, kms: opts?.kms})*/
|
|
75
75
|
}
|
|
76
76
|
else if (createRequest.options.storeSecrets || (opts === null || opts === void 0 ? void 0 : opts.storeSecrets)) {
|
|
77
77
|
identifier = yield context.agent.didManagerCreate({ provider, alias, kms: opts === null || opts === void 0 ? void 0 : opts.kms });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-functions.js","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"api-functions.js","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-sdk.uni-resolver-registrar-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"start:dev": "ts-node __tests__/agent.ts"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@sphereon/ssi-sdk-ext.did-utils": "0.
|
|
15
|
-
"@sphereon/ssi-sdk-ext.key-manager": "0.
|
|
16
|
-
"@sphereon/ssi-sdk-ext.key-utils": "0.
|
|
17
|
-
"@sphereon/ssi-sdk.core": "0.
|
|
18
|
-
"@sphereon/ssi-sdk.express-support": "0.
|
|
19
|
-
"@sphereon/ssi-types": "0.
|
|
14
|
+
"@sphereon/ssi-sdk-ext.did-utils": "0.13.0",
|
|
15
|
+
"@sphereon/ssi-sdk-ext.key-manager": "0.13.0",
|
|
16
|
+
"@sphereon/ssi-sdk-ext.key-utils": "0.13.0",
|
|
17
|
+
"@sphereon/ssi-sdk.core": "0.14.0",
|
|
18
|
+
"@sphereon/ssi-sdk.express-support": "0.14.0",
|
|
19
|
+
"@sphereon/ssi-types": "0.14.0",
|
|
20
20
|
"@veramo/core": "4.2.0",
|
|
21
21
|
"body-parser": "^1.19.0",
|
|
22
22
|
"casbin": "^5.26.1",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@sphereon/did-uni-client": "^0.6.0",
|
|
33
|
-
"@sphereon/ssi-sdk-ext.did-provider-jwk": "0.
|
|
34
|
-
"@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.
|
|
35
|
-
"@sphereon/ssi-sdk.data-store": "0.
|
|
36
|
-
"@sphereon/ssi-sdk.vc-handler-ld-local": "0.
|
|
33
|
+
"@sphereon/ssi-sdk-ext.did-provider-jwk": "0.13.0",
|
|
34
|
+
"@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.13.0",
|
|
35
|
+
"@sphereon/ssi-sdk.data-store": "0.14.0",
|
|
36
|
+
"@sphereon/ssi-sdk.vc-handler-ld-local": "0.14.0",
|
|
37
37
|
"@types/body-parser": "^1.19.2",
|
|
38
38
|
"@types/cookie-parser": "^1.4.3",
|
|
39
39
|
"@types/cors": "^2.8.13",
|
|
@@ -89,5 +89,5 @@
|
|
|
89
89
|
"Inversal Registrar",
|
|
90
90
|
"DIF"
|
|
91
91
|
],
|
|
92
|
-
"gitHead": "
|
|
92
|
+
"gitHead": "bf86b361a5e77883294ca1e4cecca616eb51633f"
|
|
93
93
|
}
|
package/src/api-functions.ts
CHANGED
|
@@ -1,192 +1,196 @@
|
|
|
1
|
-
import {DIDResolutionResult} from '@sphereon/did-uni-client'
|
|
2
|
-
import {getAgentDIDMethods, toDidDocument, toDidResolutionResult} from '@sphereon/ssi-sdk-ext.did-utils'
|
|
3
|
-
import {JwkKeyUse} from '@sphereon/ssi-sdk-ext.key-utils'
|
|
4
|
-
import {checkAuth, ISingleEndpointOpts, sendErrorResponse} from '@sphereon/ssi-sdk.express-support'
|
|
5
|
-
import {parseDid} from '@sphereon/ssi-types'
|
|
6
|
-
import {IIdentifier} from '@veramo/core'
|
|
7
|
-
import {Request, Response, Router} from 'express'
|
|
8
|
-
import {v4} from 'uuid'
|
|
1
|
+
import { DIDResolutionResult } from '@sphereon/did-uni-client'
|
|
2
|
+
import { getAgentDIDMethods, toDidDocument, toDidResolutionResult } from '@sphereon/ssi-sdk-ext.did-utils'
|
|
3
|
+
import { JwkKeyUse } from '@sphereon/ssi-sdk-ext.key-utils'
|
|
4
|
+
import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-sdk.express-support'
|
|
5
|
+
import { parseDid } from '@sphereon/ssi-types'
|
|
6
|
+
import { IIdentifier } from '@veramo/core'
|
|
7
|
+
import { Request, Response, Router } from 'express'
|
|
8
|
+
import { v4 } from 'uuid'
|
|
9
9
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
CreateState,
|
|
11
|
+
DidRegistrationCreateRequest,
|
|
12
|
+
DidStateValue,
|
|
13
|
+
ICreateDidEndpointOpts,
|
|
14
|
+
IGlobalDidWebEndpointOpts,
|
|
15
|
+
IRequiredContext,
|
|
16
16
|
} from './types'
|
|
17
17
|
|
|
18
18
|
export function createDidEndpoint(router: Router, context: IRequiredContext, opts?: ICreateDidEndpointOpts) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
if (opts?.enabled === false) {
|
|
20
|
+
console.log(`create DID endpoint is disabled`)
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
const path = opts?.path ?? '/identifiers'
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
25
|
+
router.post(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
26
|
+
try {
|
|
27
|
+
const createRequest: DidRegistrationCreateRequest = request.body
|
|
28
|
+
if (!createRequest) {
|
|
29
|
+
return sendErrorResponse(response, 400, 'No DID create request present')
|
|
30
|
+
}
|
|
31
|
+
const did = createRequest.did
|
|
32
|
+
const didMethod = (request.query.method as string) ?? (did ? parseDid(did).method : opts?.defaultMethod)
|
|
33
|
+
const allDidMethods = await getAgentDIDMethods(context)
|
|
34
|
+
if (!didMethod) {
|
|
35
|
+
return sendErrorResponse(response, 400, 'No DID method supplied or deductible')
|
|
36
|
+
} else if (did && parseDid(did).method != didMethod) {
|
|
37
|
+
return sendErrorResponse(response, 400, 'DID method did not match method param')
|
|
38
|
+
} else if (!allDidMethods.includes(didMethod)) {
|
|
39
|
+
return sendErrorResponse(response, 400, 'DID method not supported')
|
|
40
|
+
}
|
|
41
|
+
const provider = `did:${didMethod}`
|
|
42
|
+
const jobId = createRequest.jobId ?? `urn:uuid:${v4()}`
|
|
43
|
+
let alias: string | undefined = undefined
|
|
44
|
+
if (didMethod === 'web') {
|
|
45
|
+
if (!did) {
|
|
46
|
+
return sendErrorResponse(response, 400, 'Please provide a value for "did" in the request body when creating a DID web')
|
|
47
|
+
}
|
|
48
|
+
alias = parseDid(did).id
|
|
49
|
+
if (!alias) {
|
|
50
|
+
return sendErrorResponse(response, 400, 'Could not determine alias from did:web DID value: ' + did)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
54
|
+
let identifier: IIdentifier | undefined
|
|
55
|
+
let state: DidStateValue | undefined
|
|
56
|
+
if (opts?.noErrorOnExistingDid && did) {
|
|
57
|
+
try {
|
|
58
|
+
identifier = await context.agent.didManagerGet({ did })
|
|
59
|
+
state = 'exists'
|
|
60
|
+
} catch (e) {
|
|
61
|
+
// Okay, since we will create a new one
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (identifier === undefined) {
|
|
65
|
+
if (createRequest.options.storeSecrets === false) {
|
|
66
|
+
return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently')
|
|
67
|
+
/*const memoryKMS = new SphereonKeyManager({
|
|
68
68
|
store: new MemoryKeyStore(),
|
|
69
69
|
kms: {'mem': new KeyManagementSystem(new MemoryPrivateKeyStore())}
|
|
70
70
|
})
|
|
71
71
|
identifier = await memoryKMS..didManagerCreate({provider, alias, kms: opts?.kms})*/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (!identifier || !state) {
|
|
80
|
-
return sendErrorResponse(response, 400, 'An identifier and did state should be present at this point')
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const didDocument = toDidDocument(identifier, {did, use: [JwkKeyUse.Signature, JwkKeyUse.Encryption]})
|
|
84
|
-
const createState: CreateState = {
|
|
85
|
-
jobId,
|
|
86
|
-
didState: {
|
|
87
|
-
did: identifier.did,
|
|
88
|
-
state,
|
|
89
|
-
didDocument,
|
|
90
|
-
},
|
|
91
|
-
}
|
|
92
|
-
response.statusCode = 200
|
|
93
|
-
return response.send(createState)
|
|
94
|
-
} catch (e) {
|
|
95
|
-
return sendErrorResponse(response, 500, e.message as string, e)
|
|
72
|
+
} else if (createRequest.options.storeSecrets || opts?.storeSecrets) {
|
|
73
|
+
identifier = await context.agent.didManagerCreate({ provider, alias, kms: opts?.kms })
|
|
74
|
+
state = 'finished'
|
|
75
|
+
} else {
|
|
76
|
+
return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently')
|
|
96
77
|
}
|
|
97
|
-
|
|
78
|
+
}
|
|
79
|
+
if (!identifier || !state) {
|
|
80
|
+
return sendErrorResponse(response, 400, 'An identifier and did state should be present at this point')
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const didDocument = toDidDocument(identifier, { did, use: [JwkKeyUse.Signature, JwkKeyUse.Encryption] })
|
|
84
|
+
const createState: CreateState = {
|
|
85
|
+
jobId,
|
|
86
|
+
didState: {
|
|
87
|
+
did: identifier.did,
|
|
88
|
+
state,
|
|
89
|
+
didDocument,
|
|
90
|
+
},
|
|
91
|
+
}
|
|
92
|
+
response.statusCode = 200
|
|
93
|
+
return response.send(createState)
|
|
94
|
+
} catch (e) {
|
|
95
|
+
return sendErrorResponse(response, 500, e.message as string, e)
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
export function getDidMethodsEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
if (opts?.enabled === false) {
|
|
102
|
+
console.log(`Get DID methods endpoint is disabled`)
|
|
103
|
+
return
|
|
104
|
+
}
|
|
105
|
+
const path = opts?.path ?? '/methods'
|
|
106
|
+
router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
107
|
+
try {
|
|
108
|
+
const methods = await getAgentDIDMethods(context) // these are already without the 'did:' prefix
|
|
109
|
+
response.statusCode = 200
|
|
110
|
+
return response.send(methods)
|
|
111
|
+
} catch (e) {
|
|
112
|
+
return sendErrorResponse(response, 500, e.message as string, e)
|
|
104
113
|
}
|
|
105
|
-
|
|
106
|
-
router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
107
|
-
try {
|
|
108
|
-
const methods = await getAgentDIDMethods(context) // these are already without the 'did:' prefix
|
|
109
|
-
response.statusCode = 200
|
|
110
|
-
return response.send(methods)
|
|
111
|
-
} catch (e) {
|
|
112
|
-
return sendErrorResponse(response, 500, e.message as string, e)
|
|
113
|
-
}
|
|
114
|
-
})
|
|
114
|
+
})
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
async function agentDidToResolutionResult(context: IRequiredContext, did: string) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
118
|
+
try {
|
|
119
|
+
const identifier = await context.agent.didManagerGet({ did })
|
|
120
|
+
console.log(JSON.stringify(identifier, null, 2))
|
|
121
|
+
return toDidResolutionResult(identifier, {
|
|
122
|
+
did,
|
|
123
|
+
supportedMethods: await getAgentDIDMethods(context),
|
|
124
|
+
})
|
|
125
|
+
} catch (error) {
|
|
126
|
+
console.log(JSON.stringify(error.message))
|
|
127
|
+
return {
|
|
128
|
+
didDocument: null,
|
|
129
|
+
didResolutionMetadata: {
|
|
130
|
+
error: 'notFound',
|
|
131
|
+
},
|
|
132
|
+
didDocumentMetadata: {},
|
|
134
133
|
}
|
|
134
|
+
}
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
export function resolveDidEndpoint(
|
|
137
|
+
export function resolveDidEndpoint(
|
|
138
|
+
router: Router,
|
|
139
|
+
context: IRequiredContext,
|
|
140
|
+
opts?: ISingleEndpointOpts & {
|
|
138
141
|
mode?: 'local' | 'hybrid' | 'global'
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
142
|
+
}
|
|
143
|
+
) {
|
|
144
|
+
if (opts?.enabled === false) {
|
|
145
|
+
console.log(`Resolve DID endpoint is disabled`)
|
|
146
|
+
return
|
|
147
|
+
}
|
|
148
|
+
const path = opts?.path ?? '/identifiers/:identifier'
|
|
149
|
+
router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
150
|
+
try {
|
|
151
|
+
const did = request.params.identifier
|
|
152
|
+
if (!did) {
|
|
153
|
+
return sendErrorResponse(response, 400, 'no identifier provided')
|
|
154
|
+
}
|
|
155
|
+
const mode = request.query.mode?.toString().toLowerCase() ?? opts?.mode?.toLowerCase() ?? 'hybrid'
|
|
156
|
+
let resolutionResult: DIDResolutionResult | undefined
|
|
157
|
+
if (mode === 'local' || mode === 'hybrid') {
|
|
158
|
+
resolutionResult = await agentDidToResolutionResult(context, did)
|
|
159
|
+
}
|
|
160
|
+
if (mode !== 'local' && !resolutionResult?.didDocument) {
|
|
161
|
+
resolutionResult = await context.agent.resolveDid({ didUrl: did })
|
|
162
|
+
}
|
|
159
163
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
response.statusCode = 200
|
|
165
|
+
return response.send(resolutionResult)
|
|
166
|
+
} catch (e) {
|
|
167
|
+
return sendErrorResponse(response, 500, e.message as string, e)
|
|
168
|
+
}
|
|
169
|
+
})
|
|
166
170
|
}
|
|
167
171
|
|
|
168
172
|
export function deactivateDidEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
173
|
+
if (opts?.enabled === false) {
|
|
174
|
+
console.log(`Deactivate DID endpoint is disabled`)
|
|
175
|
+
return
|
|
176
|
+
}
|
|
177
|
+
router.delete(opts?.path ?? '/identifiers/:identifier', checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
178
|
+
try {
|
|
179
|
+
const did = request.params.identifier
|
|
180
|
+
if (!did) {
|
|
181
|
+
return sendErrorResponse(response, 400, 'no DID provided')
|
|
182
|
+
}
|
|
179
183
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
184
|
+
const result = await context.agent.didManagerDelete({ did })
|
|
185
|
+
if (!result) {
|
|
186
|
+
return sendErrorResponse(response, 404, `id ${did} not found`)
|
|
187
|
+
}
|
|
188
|
+
response.statusCode = 200
|
|
189
|
+
return response.send()
|
|
190
|
+
} catch (e) {
|
|
191
|
+
return sendErrorResponse(response, 500, e.message as string, e)
|
|
192
|
+
}
|
|
193
|
+
})
|
|
190
194
|
}
|
|
191
195
|
|
|
192
196
|
/**
|
|
@@ -205,39 +209,39 @@ export function deactivateDidEndpoint(router: Router, context: IRequiredContext,
|
|
|
205
209
|
* @param opts
|
|
206
210
|
*/
|
|
207
211
|
export function didWebDomainEndpoint(router: Router, context: IRequiredContext, opts?: IGlobalDidWebEndpointOpts) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
const suffix = path.replace(/\//g, ':').replace(/%2F/g, ':')
|
|
225
|
-
if (!suffix.startsWith(':')) {
|
|
226
|
-
did += ':'
|
|
227
|
-
}
|
|
228
|
-
did += suffix
|
|
229
|
-
} else if (opts?.disableWellKnown) {
|
|
230
|
-
return sendErrorResponse(response, 404, 'Not found')
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
const resolutionResult = await agentDidToResolutionResult(context, did)
|
|
234
|
-
if (!resolutionResult || !resolutionResult.didDocument || resolutionResult?.didResolutionMetadata?.error === 'notFound') {
|
|
235
|
-
return sendErrorResponse(response, 404, 'Not found')
|
|
236
|
-
}
|
|
237
|
-
response.statusCode = 200
|
|
238
|
-
return response.send(resolutionResult.didDocument)
|
|
239
|
-
} catch (e) {
|
|
240
|
-
return sendErrorResponse(response, 500, e.message as string, e)
|
|
212
|
+
if (opts?.enabled === false) {
|
|
213
|
+
console.log(`DID Web domain resolution endpoint is disabled`)
|
|
214
|
+
return
|
|
215
|
+
}
|
|
216
|
+
router.get(opts?.path ?? ':path(*)/did.json', checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
217
|
+
try {
|
|
218
|
+
const path = request.params.path
|
|
219
|
+
if (!path || path.length === 0) {
|
|
220
|
+
return sendErrorResponse(response, 404, 'Not found')
|
|
221
|
+
}
|
|
222
|
+
let did: string
|
|
223
|
+
did = `did:web:${opts?.hostname ?? request.hostname}`
|
|
224
|
+
if (path !== '.well-known') {
|
|
225
|
+
if (opts?.disableSubPaths) {
|
|
226
|
+
return sendErrorResponse(response, 404, 'Not found')
|
|
241
227
|
}
|
|
242
|
-
|
|
228
|
+
const suffix = path.replace(/\//g, ':').replace(/%2F/g, ':')
|
|
229
|
+
if (!suffix.startsWith(':')) {
|
|
230
|
+
did += ':'
|
|
231
|
+
}
|
|
232
|
+
did += suffix
|
|
233
|
+
} else if (opts?.disableWellKnown) {
|
|
234
|
+
return sendErrorResponse(response, 404, 'Not found')
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const resolutionResult = await agentDidToResolutionResult(context, did)
|
|
238
|
+
if (!resolutionResult || !resolutionResult.didDocument || resolutionResult?.didResolutionMetadata?.error === 'notFound') {
|
|
239
|
+
return sendErrorResponse(response, 404, 'Not found')
|
|
240
|
+
}
|
|
241
|
+
response.statusCode = 200
|
|
242
|
+
return response.send(resolutionResult.didDocument)
|
|
243
|
+
} catch (e) {
|
|
244
|
+
return sendErrorResponse(response, 500, e.message as string, e)
|
|
245
|
+
}
|
|
246
|
+
})
|
|
243
247
|
}
|