@sphereon/ssi-sdk.siopv2-oid4vp-rp-rest-api 0.32.1-next.18 → 0.32.1-next.287
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/dist/siop-api-functions.d.ts.map +1 -1
- package/dist/siop-api-functions.js +39 -17
- package/dist/siop-api-functions.js.map +1 -1
- package/dist/siopv2-rp-api-server.d.ts +3 -0
- package/dist/siopv2-rp-api-server.d.ts.map +1 -1
- package/dist/siopv2-rp-api-server.js +31 -4
- package/dist/siopv2-rp-api-server.js.map +1 -1
- package/dist/types/QRCode.types.d.ts +204 -0
- package/dist/types/QRCode.types.d.ts.map +1 -0
- package/dist/types/QRCode.types.js +3 -0
- package/dist/types/QRCode.types.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/{types.d.ts → types/types.d.ts} +5 -1
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js.map +1 -0
- package/dist/webapp-api-functions.d.ts +1 -0
- package/dist/webapp-api-functions.d.ts.map +1 -1
- package/dist/webapp-api-functions.js +69 -18
- package/dist/webapp-api-functions.js.map +1 -1
- package/package.json +21 -16
- package/src/siop-api-functions.ts +52 -18
- package/src/siopv2-rp-api-server.ts +42 -3
- package/src/types/QRCode.types.ts +227 -0
- package/src/types/index.ts +2 -0
- package/src/{types.ts → types/types.ts} +5 -1
- package/src/webapp-api-functions.ts +45 -12
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{types.js → types/types.js} +0 -0
|
@@ -3,15 +3,18 @@ import { IPresentationExchange } from '@sphereon/ssi-sdk.presentation-exchange'
|
|
|
3
3
|
import { ISIOPv2RP } from '@sphereon/ssi-sdk.siopv2-oid4vp-rp-auth'
|
|
4
4
|
import { IAgentContext, ICredentialVerifier } from '@veramo/core'
|
|
5
5
|
import { IPDManager } from '@sphereon/ssi-sdk.pd-manager'
|
|
6
|
+
import { QRCodeOpts } from './QRCode.types'
|
|
6
7
|
|
|
7
8
|
export type SiopFeatures = 'rp-status' | 'siop'
|
|
8
9
|
export interface ISIOPv2RPRestAPIOpts {
|
|
9
10
|
enableFeatures?: SiopFeatures[]
|
|
10
11
|
endpointOpts?: {
|
|
11
12
|
basePath?: string
|
|
13
|
+
trustProxy?: boolean | Array<string>
|
|
12
14
|
globalAuth?: GenericAuthArgs & { secureSiopEndpoints?: boolean }
|
|
13
15
|
webappCreateAuthRequest?: ICreateAuthRequestWebappEndpointOpts // Override the create Auth Request path. Needs to contain correlationId and definitionId path params!
|
|
14
16
|
webappDeleteAuthRequest?: ISingleEndpointOpts // Override the delete Auth Request path. Needs to contain correlationId and definitionId path params!
|
|
17
|
+
webappGetDefinitions?: ISingleEndpointOpts // Override the delete Auth Request path. Needs to contain correlationId and definitionId path params!
|
|
15
18
|
webappAuthStatus?: ISingleEndpointOpts // Override the Auth status path. CorrelationId and definitionId need to come from the body!
|
|
16
19
|
siopVerifyAuthResponse?: ISingleEndpointOpts // Override the siop Verify Response path. Needs to contain correlationId and definitionId path params!
|
|
17
20
|
siopGetAuthRequest?: ISingleEndpointOpts // Override the siop get Auth Request path. Needs to contain correlationId and definitionId path params!
|
|
@@ -19,9 +22,10 @@ export interface ISIOPv2RPRestAPIOpts {
|
|
|
19
22
|
}
|
|
20
23
|
export interface ICreateAuthRequestWebappEndpointOpts extends ISingleEndpointOpts {
|
|
21
24
|
siopBaseURI?: string
|
|
25
|
+
qrCodeOpts?: QRCodeOpts
|
|
22
26
|
webappAuthStatusPath?: string
|
|
23
27
|
webappBaseURI?: string
|
|
24
|
-
|
|
28
|
+
responseRedirectURI?: string
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
export type IRequiredPlugins = ICredentialVerifier & ISIOPv2RP & IPresentationExchange & IPDManager
|
|
@@ -17,33 +17,49 @@ export function createAuthRequestWebappEndpoint(router: Router, context: IRequir
|
|
|
17
17
|
try {
|
|
18
18
|
// if (!request.agent) throw Error('No agent configured')
|
|
19
19
|
const definitionId = request.params.definitionId
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if (!definitionId) {
|
|
21
|
+
return sendErrorResponse(response, 400, 'No definitionId query parameter provided')
|
|
22
|
+
}
|
|
23
|
+
const state: string = request.body.state ?? uuid.uuid()
|
|
24
|
+
const correlationId = request.body.correlationId ?? state
|
|
25
|
+
const qrCodeOpts = request.body.qrCodeOpts ?? opts?.qrCodeOpts
|
|
22
26
|
|
|
23
|
-
const requestByReferenceURI = uriWithBase(`/siop/definitions/${definitionId}/auth-requests/${
|
|
27
|
+
const requestByReferenceURI = uriWithBase(`/siop/definitions/${definitionId}/auth-requests/${state}`, {
|
|
24
28
|
baseURI: opts?.siopBaseURI,
|
|
25
29
|
})
|
|
26
|
-
const responseURI = uriWithBase(`/siop/definitions/${definitionId}/auth-responses/${
|
|
27
|
-
|
|
30
|
+
const responseURI = uriWithBase(`/siop/definitions/${definitionId}/auth-responses/${state}`, { baseURI: opts?.siopBaseURI })
|
|
31
|
+
// first version is for backwards compat
|
|
32
|
+
const responseRedirectURI =
|
|
33
|
+
('response_redirect_uri' in request.body && (request.body.response_redirect_uri as string | undefined)) ??
|
|
34
|
+
('responseRedirectURI' in request.body && (request.body.responseRedirectURI as string | undefined))
|
|
28
35
|
|
|
29
36
|
const authRequestURI = await context.agent.siopCreateAuthRequestURI({
|
|
30
37
|
definitionId,
|
|
31
38
|
correlationId,
|
|
32
39
|
state,
|
|
33
|
-
nonce:
|
|
40
|
+
nonce: uuid.uuid(),
|
|
34
41
|
requestByReferenceURI,
|
|
35
42
|
responseURIType: 'response_uri',
|
|
36
43
|
responseURI,
|
|
37
44
|
...(responseRedirectURI && { responseRedirectURI }),
|
|
38
45
|
})
|
|
46
|
+
|
|
47
|
+
let qrCodeDataUri: string | undefined
|
|
48
|
+
if (qrCodeOpts) {
|
|
49
|
+
const { AwesomeQR } = await import('awesome-qr')
|
|
50
|
+
const qrCode = new AwesomeQR({ ...qrCodeOpts, text: authRequestURI })
|
|
51
|
+
qrCodeDataUri = `data:image/png;base64,${(await qrCode.draw())!.toString('base64')}`
|
|
52
|
+
}
|
|
39
53
|
const authRequestBody: GenerateAuthRequestURIResponse = {
|
|
40
54
|
correlationId,
|
|
55
|
+
state,
|
|
41
56
|
definitionId,
|
|
42
57
|
authRequestURI,
|
|
43
58
|
authStatusURI: `${uriWithBase(opts?.webappAuthStatusPath ?? '/webapp/auth-status', { baseURI: opts?.webappBaseURI })}`,
|
|
59
|
+
...(qrCodeDataUri && { qrCodeDataUri }),
|
|
44
60
|
}
|
|
45
61
|
console.log(`Auth Request URI data to send back: ${JSON.stringify(authRequestBody)}`)
|
|
46
|
-
return response.
|
|
62
|
+
return response.json(authRequestBody)
|
|
47
63
|
} catch (error) {
|
|
48
64
|
return sendErrorResponse(response, 500, 'Could not create an authorization request URI', error)
|
|
49
65
|
}
|
|
@@ -82,7 +98,7 @@ export function authStatusWebappEndpoint(router: Router, context: IRequiredConte
|
|
|
82
98
|
definitionId,
|
|
83
99
|
lastUpdated: requestState ? requestState.lastUpdated : Date.now(),
|
|
84
100
|
}
|
|
85
|
-
return response.
|
|
101
|
+
return response.json(statusBody)
|
|
86
102
|
}
|
|
87
103
|
|
|
88
104
|
let includeVerifiedData: VerifiedDataMode = VerifiedDataMode.NONE
|
|
@@ -114,13 +130,13 @@ export function authStatusWebappEndpoint(router: Router, context: IRequiredConte
|
|
|
114
130
|
}
|
|
115
131
|
: {}),
|
|
116
132
|
}
|
|
117
|
-
console.
|
|
133
|
+
console.debug(`Will send auth status: ${JSON.stringify(statusBody)}`)
|
|
118
134
|
if (overallState.status === 'error') {
|
|
119
135
|
response.statusCode = 500
|
|
120
|
-
return response.
|
|
136
|
+
return response.json(statusBody)
|
|
121
137
|
}
|
|
122
138
|
response.statusCode = 200
|
|
123
|
-
return response.
|
|
139
|
+
return response.json(statusBody)
|
|
124
140
|
} catch (error) {
|
|
125
141
|
return sendErrorResponse(response, 500, error.message, error)
|
|
126
142
|
}
|
|
@@ -142,7 +158,24 @@ export function removeAuthRequestStateWebappEndpoint(router: Router, context: IR
|
|
|
142
158
|
return sendErrorResponse(response, 404, 'No authorization request could be found')
|
|
143
159
|
}
|
|
144
160
|
response.statusCode = 200
|
|
145
|
-
return response.
|
|
161
|
+
return response.json(await context.agent.siopDeleteAuthState({ definitionId, correlationId }))
|
|
162
|
+
} catch (error) {
|
|
163
|
+
return sendErrorResponse(response, 500, error.message, error)
|
|
164
|
+
}
|
|
165
|
+
})
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function getDefinitionsEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {
|
|
169
|
+
if (opts?.enabled === false) {
|
|
170
|
+
console.log(`getDefinitions Webapp endpoint is disabled`)
|
|
171
|
+
return
|
|
172
|
+
}
|
|
173
|
+
const path = opts?.path ?? '/webapp/definitions'
|
|
174
|
+
router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
175
|
+
try {
|
|
176
|
+
const definitions = await context.agent.pdmGetDefinitions()
|
|
177
|
+
response.statusCode = 200
|
|
178
|
+
return response.json(definitions)
|
|
146
179
|
} catch (error) {
|
|
147
180
|
return sendErrorResponse(response, 500, error.message, error)
|
|
148
181
|
}
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAEzD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,MAAM,CAAA;AAC/C,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,YAAY,EAAE,CAAA;IAC/B,YAAY,CAAC,EAAE;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,eAAe,GAAG;YAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;QAChE,uBAAuB,CAAC,EAAE,oCAAoC,CAAA;QAC9D,uBAAuB,CAAC,EAAE,mBAAmB,CAAA;QAC7C,gBAAgB,CAAC,EAAE,mBAAmB,CAAA;QACtC,sBAAsB,CAAC,EAAE,mBAAmB,CAAA;QAC5C,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;KACzC,CAAA;CACF;AACD,MAAM,WAAW,oCAAqC,SAAQ,mBAAmB;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,SAAS,GAAG,qBAAqB,GAAG,UAAU,CAAA;AACnG,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAA"}
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
File without changes
|