@sphereon/oid4vci-client 0.2.0 → 0.4.1-unstable.247
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 +201 -201
- package/README.md +494 -371
- package/dist/AccessTokenClient.d.ts +30 -0
- package/dist/AccessTokenClient.d.ts.map +1 -0
- package/dist/AccessTokenClient.js +226 -0
- package/dist/AccessTokenClient.js.map +1 -0
- package/dist/AuthorizationDetailsBuilder.d.ts +11 -0
- package/dist/AuthorizationDetailsBuilder.d.ts.map +1 -0
- package/dist/AuthorizationDetailsBuilder.js +44 -0
- package/dist/AuthorizationDetailsBuilder.js.map +1 -0
- package/dist/CredentialOffer.d.ts +6 -0
- package/dist/CredentialOffer.d.ts.map +1 -0
- package/dist/CredentialOffer.js +49 -0
- package/dist/CredentialOffer.js.map +1 -0
- package/dist/CredentialRequestClient.d.ts +29 -0
- package/dist/CredentialRequestClient.d.ts.map +1 -0
- package/dist/CredentialRequestClient.js +63 -0
- package/dist/CredentialRequestClient.js.map +1 -0
- package/dist/CredentialRequestClientBuilderV1_0_09.d.ts +29 -0
- package/dist/CredentialRequestClientBuilderV1_0_09.d.ts.map +1 -0
- package/dist/CredentialRequestClientBuilderV1_0_09.js +63 -0
- package/dist/CredentialRequestClientBuilderV1_0_09.js.map +1 -0
- package/dist/{main/lib/MetadataClient.d.ts → MetadataClient.d.ts} +39 -38
- package/dist/MetadataClient.d.ts.map +1 -0
- package/dist/MetadataClient.js +148 -0
- package/dist/MetadataClient.js.map +1 -0
- package/dist/OpenID4VCIClient.d.ts +72 -0
- package/dist/OpenID4VCIClient.d.ts.map +1 -0
- package/dist/OpenID4VCIClient.js +361 -0
- package/dist/OpenID4VCIClient.js.map +1 -0
- package/dist/ProofOfPossessionBuilder.d.ts +35 -0
- package/dist/ProofOfPossessionBuilder.d.ts.map +1 -0
- package/dist/ProofOfPossessionBuilder.js +120 -0
- package/dist/ProofOfPossessionBuilder.js.map +1 -0
- package/dist/{main/lib/functions → functions}/Encoding.d.ts +20 -17
- package/dist/functions/Encoding.d.ts.map +1 -0
- package/dist/functions/Encoding.js +144 -0
- package/dist/functions/Encoding.js.map +1 -0
- package/dist/functions/HttpUtils.d.ts +24 -0
- package/dist/functions/HttpUtils.d.ts.map +1 -0
- package/dist/functions/HttpUtils.js +93 -0
- package/dist/functions/HttpUtils.js.map +1 -0
- package/dist/functions/ProofUtil.d.ts +29 -0
- package/dist/functions/ProofUtil.d.ts.map +1 -0
- package/dist/functions/ProofUtil.js +103 -0
- package/dist/functions/ProofUtil.js.map +1 -0
- package/dist/functions/index.d.ts +4 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/{main/lib/functions → functions}/index.js +20 -20
- package/dist/functions/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{main/lib/index.js → index.js} +25 -24
- package/dist/index.js.map +1 -0
- package/lib/AccessTokenClient.ts +270 -0
- package/lib/AuthorizationDetailsBuilder.ts +46 -0
- package/lib/CredentialOffer.ts +55 -0
- package/lib/CredentialRequestClient.ts +77 -0
- package/lib/CredentialRequestClientBuilderV1_0_09.ts +99 -0
- package/lib/MetadataClient.ts +147 -0
- package/lib/OpenID4VCIClient.ts +477 -0
- package/lib/ProofOfPossessionBuilder.ts +156 -0
- package/lib/__tests__/AccessTokenClient.spec.ts +221 -0
- package/lib/__tests__/AuthorizationDetailsBuilder.spec.ts +65 -0
- package/lib/__tests__/AuthzFlowType.spec.ts +39 -0
- package/lib/__tests__/CredentialRequestClient.spec.ts +261 -0
- package/lib/__tests__/CredentialRequestClientBuilder.spec.ts +103 -0
- package/lib/__tests__/HttpUtils.spec.ts +37 -0
- package/lib/__tests__/IT.spec.ts +155 -0
- package/lib/__tests__/IssuanceInitiation.spec.ts +37 -0
- package/lib/__tests__/JsonURIConversions.spec.ts +86 -0
- package/lib/__tests__/MetadataClient.spec.ts +198 -0
- package/lib/__tests__/MetadataMocks.ts +428 -0
- package/lib/__tests__/OpenID4VCIClient.spec.ts +166 -0
- package/lib/__tests__/OpenID4VCIClientPAR.spec.ts +112 -0
- package/lib/__tests__/ProofOfPossessionBuilder.spec.ts +109 -0
- package/lib/__tests__/data/VciDataFixtures.ts +744 -0
- package/lib/functions/Encoding.ts +138 -0
- package/lib/functions/HttpUtils.ts +106 -0
- package/lib/functions/ProofUtil.ts +128 -0
- package/{dist/main/lib/functions/index.d.ts → lib/functions/index.ts} +3 -3
- package/lib/index.ts +8 -0
- package/package.json +68 -71
- package/CHANGELOG.md +0 -21
- package/dist/main/index.d.ts +0 -1
- package/dist/main/index.js +0 -18
- package/dist/main/lib/AccessTokenClient.d.ts +0 -20
- package/dist/main/lib/AccessTokenClient.js +0 -141
- package/dist/main/lib/CredentialRequestClient.d.ts +0 -31
- package/dist/main/lib/CredentialRequestClient.js +0 -66
- package/dist/main/lib/CredentialRequestClientBuilder.d.ts +0 -21
- package/dist/main/lib/CredentialRequestClientBuilder.js +0 -56
- package/dist/main/lib/IssuanceInitiation.d.ts +0 -5
- package/dist/main/lib/IssuanceInitiation.js +0 -29
- package/dist/main/lib/MetadataClient.js +0 -127
- package/dist/main/lib/functions/Encoding.js +0 -138
- package/dist/main/lib/functions/HttpUtils.d.ts +0 -17
- package/dist/main/lib/functions/HttpUtils.js +0 -133
- package/dist/main/lib/functions/ProofUtil.d.ts +0 -9
- package/dist/main/lib/functions/ProofUtil.js +0 -76
- package/dist/main/lib/index.d.ts +0 -7
- package/dist/main/lib/types/Authorization.types.d.ts +0 -66
- package/dist/main/lib/types/Authorization.types.js +0 -35
- package/dist/main/lib/types/CredentialIssuance.types.d.ts +0 -88
- package/dist/main/lib/types/CredentialIssuance.types.js +0 -8
- package/dist/main/lib/types/Generic.types.d.ts +0 -19
- package/dist/main/lib/types/Generic.types.js +0 -11
- package/dist/main/lib/types/OAuth2ASMetadata.d.ts +0 -37
- package/dist/main/lib/types/OAuth2ASMetadata.js +0 -3
- package/dist/main/lib/types/OID4VCIServerMetadata.d.ts +0 -65
- package/dist/main/lib/types/OID4VCIServerMetadata.js +0 -3
- package/dist/main/lib/types/Oidc4vciErrors.d.ts +0 -3
- package/dist/main/lib/types/Oidc4vciErrors.js +0 -7
- package/dist/main/lib/types/index.d.ts +0 -6
- package/dist/main/lib/types/index.js +0 -23
- package/dist/main/tsconfig.build.tsbuildinfo +0 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AccessTokenRequest, AccessTokenRequestOpts, AccessTokenResponse, AuthorizationServerOpts, EndpointMetadata, IssuerOpts, OpenIDResponse } from '@sphereon/oid4vci-common';
|
|
2
|
+
export declare class AccessTokenClient {
|
|
3
|
+
acquireAccessToken({ credentialOffer, asOpts, pin, codeVerifier, code, redirectUri, metadata, }: AccessTokenRequestOpts): Promise<OpenIDResponse<AccessTokenResponse>>;
|
|
4
|
+
acquireAccessTokenUsingRequest({ accessTokenRequest, isPinRequired, metadata, asOpts, issuerOpts, }: {
|
|
5
|
+
accessTokenRequest: AccessTokenRequest;
|
|
6
|
+
isPinRequired?: boolean;
|
|
7
|
+
metadata?: EndpointMetadata;
|
|
8
|
+
asOpts?: AuthorizationServerOpts;
|
|
9
|
+
issuerOpts?: IssuerOpts;
|
|
10
|
+
}): Promise<OpenIDResponse<AccessTokenResponse>>;
|
|
11
|
+
createAccessTokenRequest({ credentialOffer, asOpts, pin, codeVerifier, code, redirectUri, }: AccessTokenRequestOpts): Promise<AccessTokenRequest>;
|
|
12
|
+
private assertPreAuthorizedGrantType;
|
|
13
|
+
private assertAuthorizationGrantType;
|
|
14
|
+
private isPinRequiredValue;
|
|
15
|
+
private assertNumericPin;
|
|
16
|
+
private assertNonEmptyPreAuthorizedCode;
|
|
17
|
+
private assertNonEmptyCodeVerifier;
|
|
18
|
+
private assertNonEmptyCode;
|
|
19
|
+
private assertNonEmptyRedirectUri;
|
|
20
|
+
private validate;
|
|
21
|
+
private sendAuthCode;
|
|
22
|
+
static determineTokenURL({ asOpts, issuerOpts, metadata, }: {
|
|
23
|
+
asOpts?: AuthorizationServerOpts;
|
|
24
|
+
issuerOpts?: IssuerOpts;
|
|
25
|
+
metadata?: EndpointMetadata;
|
|
26
|
+
}): string;
|
|
27
|
+
private static creatTokenURLFromURL;
|
|
28
|
+
private throwNotSupportedFlow;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=AccessTokenClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccessTokenClient.d.ts","sourceRoot":"","sources":["../lib/AccessTokenClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EAIvB,gBAAgB,EAKhB,UAAU,EACV,cAAc,EAGf,MAAM,0BAA0B,CAAC;AASlC,qBAAa,iBAAiB;IACf,kBAAkB,CAAC,EAC9B,eAAe,EACf,MAAM,EACN,GAAG,EACH,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,QAAQ,GACT,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAwB3D,8BAA8B,CAAC,EAC1C,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,MAAM,EACN,UAAU,GACX,EAAE;QACD,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;QAC5B,MAAM,CAAC,EAAE,uBAAuB,CAAC;QACjC,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,GAAG,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAcnC,wBAAwB,CAAC,EACpC,eAAe,EACf,MAAM,EACN,GAAG,EACH,YAAY,EACZ,IAAI,EACJ,WAAW,GACZ,EAAE,sBAAsB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoCvD,OAAO,CAAC,4BAA4B;IAMpC,OAAO,CAAC,4BAA4B;IAMpC,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,+BAA+B;IAOvC,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,QAAQ;YAeF,YAAY;WAIZ,iBAAiB,CAAC,EAC9B,MAAM,EACN,UAAU,EACV,QAAQ,GACT,EAAE;QACD,MAAM,CAAC,EAAE,uBAAuB,CAAC;QACjC,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;KAC7B,GAAG,MAAM;IAuBV,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAUnC,OAAO,CAAC,qBAAqB;CAI9B"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AccessTokenClient = void 0;
|
|
16
|
+
const oid4vci_common_1 = require("@sphereon/oid4vci-common");
|
|
17
|
+
const ssi_types_1 = require("@sphereon/ssi-types");
|
|
18
|
+
const debug_1 = __importDefault(require("debug"));
|
|
19
|
+
const MetadataClient_1 = require("./MetadataClient");
|
|
20
|
+
const functions_1 = require("./functions");
|
|
21
|
+
const debug = (0, debug_1.default)('sphereon:openid4vci:token');
|
|
22
|
+
class AccessTokenClient {
|
|
23
|
+
acquireAccessToken({ credentialOffer, asOpts, pin, codeVerifier, code, redirectUri, metadata, }) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
const { request } = credentialOffer;
|
|
26
|
+
const isPinRequired = this.isPinRequiredValue(request);
|
|
27
|
+
const issuerOpts = {
|
|
28
|
+
issuer: (0, oid4vci_common_1.getIssuerFromCredentialOfferPayload)(request) ? (0, oid4vci_common_1.getIssuerFromCredentialOfferPayload)(request) : metadata === null || metadata === void 0 ? void 0 : metadata.issuer,
|
|
29
|
+
};
|
|
30
|
+
return yield this.acquireAccessTokenUsingRequest({
|
|
31
|
+
accessTokenRequest: yield this.createAccessTokenRequest({
|
|
32
|
+
credentialOffer,
|
|
33
|
+
asOpts,
|
|
34
|
+
codeVerifier,
|
|
35
|
+
code,
|
|
36
|
+
redirectUri,
|
|
37
|
+
pin,
|
|
38
|
+
}),
|
|
39
|
+
isPinRequired,
|
|
40
|
+
metadata,
|
|
41
|
+
asOpts,
|
|
42
|
+
issuerOpts,
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
acquireAccessTokenUsingRequest({ accessTokenRequest, isPinRequired, metadata, asOpts, issuerOpts, }) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
this.validate(accessTokenRequest, isPinRequired);
|
|
49
|
+
const requestTokenURL = AccessTokenClient.determineTokenURL({
|
|
50
|
+
asOpts,
|
|
51
|
+
issuerOpts,
|
|
52
|
+
metadata: metadata
|
|
53
|
+
? metadata
|
|
54
|
+
: (issuerOpts === null || issuerOpts === void 0 ? void 0 : issuerOpts.fetchMetadata)
|
|
55
|
+
? yield MetadataClient_1.MetadataClient.retrieveAllMetadata(issuerOpts.issuer, { errorOnNotFound: false })
|
|
56
|
+
: undefined,
|
|
57
|
+
});
|
|
58
|
+
return this.sendAuthCode(requestTokenURL, accessTokenRequest);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
createAccessTokenRequest({ credentialOffer, asOpts, pin, codeVerifier, code, redirectUri, }) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
const credentialOfferRequest = credentialOffer.request;
|
|
64
|
+
const request = {};
|
|
65
|
+
if (asOpts === null || asOpts === void 0 ? void 0 : asOpts.clientId) {
|
|
66
|
+
request.client_id = asOpts.clientId;
|
|
67
|
+
}
|
|
68
|
+
this.assertNumericPin(this.isPinRequiredValue(credentialOfferRequest), pin);
|
|
69
|
+
request.user_pin = pin;
|
|
70
|
+
if (credentialOfferRequest[oid4vci_common_1.PRE_AUTH_CODE_LITERAL]) {
|
|
71
|
+
if (codeVerifier) {
|
|
72
|
+
throw new Error('Cannot pass a code_verifier when flow type is pre-authorized');
|
|
73
|
+
}
|
|
74
|
+
request.grant_type = oid4vci_common_1.GrantTypes.PRE_AUTHORIZED_CODE;
|
|
75
|
+
//todo: handle this for v11
|
|
76
|
+
request[oid4vci_common_1.PRE_AUTH_CODE_LITERAL] = credentialOfferRequest[oid4vci_common_1.PRE_AUTH_CODE_LITERAL];
|
|
77
|
+
}
|
|
78
|
+
if ('op_state' in credentialOfferRequest || 'issuer_state' in credentialOfferRequest) {
|
|
79
|
+
this.throwNotSupportedFlow();
|
|
80
|
+
request.grant_type = oid4vci_common_1.GrantTypes.AUTHORIZATION_CODE;
|
|
81
|
+
}
|
|
82
|
+
if (codeVerifier) {
|
|
83
|
+
request.code_verifier = codeVerifier;
|
|
84
|
+
request.code = code;
|
|
85
|
+
request.redirect_uri = redirectUri;
|
|
86
|
+
request.grant_type = oid4vci_common_1.GrantTypes.AUTHORIZATION_CODE;
|
|
87
|
+
}
|
|
88
|
+
//todo: handle this for v11
|
|
89
|
+
if (request.grant_type === oid4vci_common_1.GrantTypes.AUTHORIZATION_CODE && credentialOfferRequest[oid4vci_common_1.PRE_AUTH_CODE_LITERAL]) {
|
|
90
|
+
throw Error('A pre_authorized_code flow cannot have an op_state in the initiation request');
|
|
91
|
+
}
|
|
92
|
+
return request;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
assertPreAuthorizedGrantType(grantType) {
|
|
96
|
+
if (oid4vci_common_1.GrantTypes.PRE_AUTHORIZED_CODE !== grantType) {
|
|
97
|
+
throw new Error("grant type must be 'urn:ietf:params:oauth:grant-type:pre-authorized_code'");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
assertAuthorizationGrantType(grantType) {
|
|
101
|
+
if (oid4vci_common_1.GrantTypes.AUTHORIZATION_CODE !== grantType) {
|
|
102
|
+
throw new Error("grant type must be 'authorization_code'");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
isPinRequiredValue(requestPayload) {
|
|
106
|
+
let isPinRequired = false;
|
|
107
|
+
if (!requestPayload) {
|
|
108
|
+
throw new Error(oid4vci_common_1.TokenErrorResponse.invalid_request);
|
|
109
|
+
}
|
|
110
|
+
const issuer = (0, oid4vci_common_1.getIssuerFromCredentialOfferPayload)(requestPayload);
|
|
111
|
+
if ((0, oid4vci_common_1.isCredentialOfferV1_0_09)(requestPayload)) {
|
|
112
|
+
requestPayload = requestPayload;
|
|
113
|
+
if (typeof requestPayload.user_pin_required === 'string') {
|
|
114
|
+
isPinRequired = requestPayload.user_pin_required.toLowerCase() === 'true';
|
|
115
|
+
}
|
|
116
|
+
else if (typeof requestPayload.user_pin_required === 'boolean') {
|
|
117
|
+
isPinRequired = requestPayload.user_pin_required;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if ((0, oid4vci_common_1.isCredentialOfferV1_0_11)(requestPayload)) {
|
|
121
|
+
requestPayload = requestPayload;
|
|
122
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
123
|
+
if ('grants' in requestPayload && 'urn:ietf:params:oauth:grant-type:pre-authorized_code' in requestPayload.grants) {
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
125
|
+
isPinRequired = requestPayload.grants['urn:ietf:params:oauth:grant-type:pre-authorized_code'].user_pin_required;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
debug(`Pin required for issuer ${issuer}: ${isPinRequired}`);
|
|
129
|
+
return isPinRequired;
|
|
130
|
+
}
|
|
131
|
+
assertNumericPin(isPinRequired, pin) {
|
|
132
|
+
if (isPinRequired) {
|
|
133
|
+
if (!pin || !/^\d{1,8}$/.test(pin)) {
|
|
134
|
+
debug(`Pin is not 1 to 8 digits long`);
|
|
135
|
+
throw new Error('A valid pin consisting of maximal 8 numeric characters must be present.');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (pin) {
|
|
139
|
+
debug(`Pin set, whilst not required`);
|
|
140
|
+
throw new Error('Cannot set a pin, when the pin is not required.');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
assertNonEmptyPreAuthorizedCode(accessTokenRequest) {
|
|
144
|
+
if (!accessTokenRequest[oid4vci_common_1.PRE_AUTH_CODE_LITERAL]) {
|
|
145
|
+
debug(`No pre-authorized code present, whilst it is required`);
|
|
146
|
+
throw new Error('Pre-authorization must be proven by presenting the pre-authorized code. Code must be present.');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
assertNonEmptyCodeVerifier(accessTokenRequest) {
|
|
150
|
+
if (!accessTokenRequest.code_verifier) {
|
|
151
|
+
debug('No code_verifier present, whilst it is required');
|
|
152
|
+
throw new Error('Authorization flow requires the code_verifier to be present');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
assertNonEmptyCode(accessTokenRequest) {
|
|
156
|
+
if (!accessTokenRequest.code) {
|
|
157
|
+
debug('No code present, whilst it is required');
|
|
158
|
+
throw new Error('Authorization flow requires the code to be present');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
assertNonEmptyRedirectUri(accessTokenRequest) {
|
|
162
|
+
if (!accessTokenRequest.redirect_uri) {
|
|
163
|
+
debug('No redirect_uri present, whilst it is required');
|
|
164
|
+
throw new Error('Authorization flow requires the redirect_uri to be present');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
validate(accessTokenRequest, isPinRequired) {
|
|
168
|
+
if (accessTokenRequest.grant_type === oid4vci_common_1.GrantTypes.PRE_AUTHORIZED_CODE) {
|
|
169
|
+
this.assertPreAuthorizedGrantType(accessTokenRequest.grant_type);
|
|
170
|
+
this.assertNonEmptyPreAuthorizedCode(accessTokenRequest);
|
|
171
|
+
this.assertNumericPin(isPinRequired, accessTokenRequest.user_pin);
|
|
172
|
+
}
|
|
173
|
+
else if (accessTokenRequest.grant_type === oid4vci_common_1.GrantTypes.AUTHORIZATION_CODE) {
|
|
174
|
+
this.assertAuthorizationGrantType(accessTokenRequest.grant_type);
|
|
175
|
+
this.assertNonEmptyCodeVerifier(accessTokenRequest);
|
|
176
|
+
this.assertNonEmptyCode(accessTokenRequest);
|
|
177
|
+
this.assertNonEmptyRedirectUri(accessTokenRequest);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this.throwNotSupportedFlow;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
sendAuthCode(requestTokenURL, accessTokenRequest) {
|
|
184
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
185
|
+
return yield (0, functions_1.formPost)(requestTokenURL, (0, functions_1.convertJsonToURI)(accessTokenRequest));
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
static determineTokenURL({ asOpts, issuerOpts, metadata, }) {
|
|
189
|
+
if (!asOpts && !(metadata === null || metadata === void 0 ? void 0 : metadata.token_endpoint) && !issuerOpts) {
|
|
190
|
+
throw new Error('Cannot determine token URL if no issuer, metadata and no Authorization Server values are present');
|
|
191
|
+
}
|
|
192
|
+
let url;
|
|
193
|
+
if (asOpts && asOpts.as) {
|
|
194
|
+
url = this.creatTokenURLFromURL(asOpts.as, asOpts === null || asOpts === void 0 ? void 0 : asOpts.allowInsecureEndpoints, asOpts.tokenEndpoint);
|
|
195
|
+
}
|
|
196
|
+
else if (metadata === null || metadata === void 0 ? void 0 : metadata.token_endpoint) {
|
|
197
|
+
url = metadata.token_endpoint;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
if (!issuerOpts) {
|
|
201
|
+
throw Error('Either authorization server options, a token endpoint or issuer options are required at this point');
|
|
202
|
+
}
|
|
203
|
+
url = this.creatTokenURLFromURL(issuerOpts.issuer, asOpts === null || asOpts === void 0 ? void 0 : asOpts.allowInsecureEndpoints, issuerOpts.tokenEndpoint);
|
|
204
|
+
}
|
|
205
|
+
if (!url || !ssi_types_1.ObjectUtils.isString(url)) {
|
|
206
|
+
throw new Error('No authorization server token URL present. Cannot acquire access token');
|
|
207
|
+
}
|
|
208
|
+
debug(`Token endpoint determined to be ${url}`);
|
|
209
|
+
return url;
|
|
210
|
+
}
|
|
211
|
+
static creatTokenURLFromURL(url, allowInsecureEndpoints, tokenEndpoint) {
|
|
212
|
+
if (allowInsecureEndpoints !== true && url.startsWith('http://')) {
|
|
213
|
+
throw Error(`Unprotected token endpoints are not allowed ${url}`);
|
|
214
|
+
}
|
|
215
|
+
const hostname = url.replace(/https?:\/\//, '').replace(/\/$/, '');
|
|
216
|
+
const endpoint = tokenEndpoint ? (tokenEndpoint.startsWith('/') ? tokenEndpoint : tokenEndpoint.substring(1)) : '/token';
|
|
217
|
+
// We always require https
|
|
218
|
+
return `https://${hostname}${endpoint}`;
|
|
219
|
+
}
|
|
220
|
+
throwNotSupportedFlow() {
|
|
221
|
+
debug(`Only pre-authorized flow supported.`);
|
|
222
|
+
throw new Error('Only pre-authorized-code flow is supported');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.AccessTokenClient = AccessTokenClient;
|
|
226
|
+
//# sourceMappingURL=AccessTokenClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccessTokenClient.js","sourceRoot":"","sources":["../lib/AccessTokenClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AuthorizationDetailsJwtVcJson, CredentialFormatEnum } from '@sphereon/oid4vci-common';
|
|
2
|
+
export declare class AuthorizationDetailsBuilder {
|
|
3
|
+
private readonly authorizationDetails;
|
|
4
|
+
constructor();
|
|
5
|
+
withType(type: string): AuthorizationDetailsBuilder;
|
|
6
|
+
withFormats(format: CredentialFormatEnum): AuthorizationDetailsBuilder;
|
|
7
|
+
withLocations(locations: string[]): AuthorizationDetailsBuilder;
|
|
8
|
+
addLocation(location: string): AuthorizationDetailsBuilder;
|
|
9
|
+
buildJwtVcJson(): AuthorizationDetailsJwtVcJson;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=AuthorizationDetailsBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorizationDetailsBuilder.d.ts","sourceRoot":"","sources":["../lib/AuthorizationDetailsBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAG/F,qBAAa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyC;;IAM9E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,2BAA2B;IAKnD,WAAW,CAAC,MAAM,EAAE,oBAAoB,GAAG,2BAA2B;IAKtE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,2BAA2B;IAS/D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,2BAA2B;IAU1D,cAAc,IAAI,6BAA6B;CAMhD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthorizationDetailsBuilder = void 0;
|
|
4
|
+
//todo: refactor this builder to be able to create ldp details as well
|
|
5
|
+
class AuthorizationDetailsBuilder {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.authorizationDetails = {};
|
|
8
|
+
}
|
|
9
|
+
withType(type) {
|
|
10
|
+
this.authorizationDetails.type = type;
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
withFormats(format) {
|
|
14
|
+
this.authorizationDetails.format = format;
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
withLocations(locations) {
|
|
18
|
+
if (this.authorizationDetails.locations) {
|
|
19
|
+
this.authorizationDetails.locations.push(...locations);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.authorizationDetails.locations = locations;
|
|
23
|
+
}
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
addLocation(location) {
|
|
27
|
+
if (this.authorizationDetails.locations) {
|
|
28
|
+
this.authorizationDetails.locations.push(location);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.authorizationDetails.locations = [location];
|
|
32
|
+
}
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
//todo: we have to consider one thing, if this is a general purpose builder, we want to support ldp types here as well. and for that we need a few checks.
|
|
36
|
+
buildJwtVcJson() {
|
|
37
|
+
if (this.authorizationDetails.format && this.authorizationDetails.type) {
|
|
38
|
+
return this.authorizationDetails;
|
|
39
|
+
}
|
|
40
|
+
throw new Error('Type and format are required properties');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.AuthorizationDetailsBuilder = AuthorizationDetailsBuilder;
|
|
44
|
+
//# sourceMappingURL=AuthorizationDetailsBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorizationDetailsBuilder.js","sourceRoot":"","sources":["../lib/AuthorizationDetailsBuilder.ts"],"names":[],"mappings":";;;AAEA,sEAAsE;AACtE,MAAa,2BAA2B;IAGtC;QACE,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,oBAAoB,CAAC,IAAI,GAAG,IAAI,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,MAA4B;QACtC,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,SAAmB;QAC/B,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE;YACvC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;SACxD;aAAM;YACL,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,SAAS,CAAC;SACjD;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE;YACvC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpD;aAAM;YACL,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;SAClD;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0JAA0J;IAC1J,cAAc;QACZ,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;YACtE,OAAO,IAAI,CAAC,oBAAqD,CAAC;SACnE;QACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;CACF;AA1CD,kEA0CC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CredentialOfferRequestWithBaseUrl } from '@sphereon/oid4vci-common';
|
|
2
|
+
export declare class CredentialOffer {
|
|
3
|
+
static fromURI(uri: string): CredentialOfferRequestWithBaseUrl;
|
|
4
|
+
static toURI(uri: CredentialOfferRequestWithBaseUrl): string;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=CredentialOffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CredentialOffer.d.ts","sourceRoot":"","sources":["../lib/CredentialOffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,iCAAiC,EAElC,MAAM,0BAA0B,CAAC;AAQlC,qBAAa,eAAe;WACZ,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iCAAiC;WA+BvD,KAAK,CAAC,GAAG,EAAE,iCAAiC,GAAG,MAAM;CAQpE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
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.CredentialOffer = void 0;
|
|
7
|
+
const oid4vci_common_1 = require("@sphereon/oid4vci-common");
|
|
8
|
+
const oid4vci_common_2 = require("@sphereon/oid4vci-common");
|
|
9
|
+
const debug_1 = __importDefault(require("debug"));
|
|
10
|
+
const functions_1 = require("./functions");
|
|
11
|
+
const debug = (0, debug_1.default)('sphereon:openid4vci:initiation');
|
|
12
|
+
class CredentialOffer {
|
|
13
|
+
static fromURI(uri) {
|
|
14
|
+
debug(`issuance initiation URI: ${uri}`);
|
|
15
|
+
if (!uri.includes('?')) {
|
|
16
|
+
debug(`Invalid issuance initiation URI: ${uri}`);
|
|
17
|
+
throw new Error('Invalid Issuance Initiation Request Payload');
|
|
18
|
+
}
|
|
19
|
+
const baseUrl = uri.split('?')[0];
|
|
20
|
+
const version = (0, oid4vci_common_2.determineSpecVersionFromURI)(uri);
|
|
21
|
+
const issuanceInitiationRequest = version < oid4vci_common_1.OpenId4VCIVersion.VER_1_0_11
|
|
22
|
+
? (0, functions_1.convertURIToJsonObject)(uri, {
|
|
23
|
+
arrayTypeProperties: ['credential_type'],
|
|
24
|
+
requiredProperties: ['issuer', 'credential_type'],
|
|
25
|
+
})
|
|
26
|
+
: (0, functions_1.convertURIToJsonObject)(uri, {
|
|
27
|
+
arrayTypeProperties: ['credentials'],
|
|
28
|
+
requiredProperties: ['credentials', 'credential_issuer'],
|
|
29
|
+
});
|
|
30
|
+
const request = version < oid4vci_common_1.OpenId4VCIVersion.VER_1_0_11.valueOf()
|
|
31
|
+
? issuanceInitiationRequest
|
|
32
|
+
: issuanceInitiationRequest;
|
|
33
|
+
return {
|
|
34
|
+
baseUrl,
|
|
35
|
+
request,
|
|
36
|
+
version,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
static toURI(uri) {
|
|
40
|
+
const request = uri.request;
|
|
41
|
+
return (0, functions_1.convertJsonToURI)(request, {
|
|
42
|
+
baseUrl: uri.baseUrl,
|
|
43
|
+
arrayTypeProperties: ['credential_type'],
|
|
44
|
+
uriTypeProperties: ['issuer', 'credential_type'],
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.CredentialOffer = CredentialOffer;
|
|
49
|
+
//# sourceMappingURL=CredentialOffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CredentialOffer.js","sourceRoot":"","sources":["../lib/CredentialOffer.ts"],"names":[],"mappings":";;;;;;AAAA,6DAMkC;AAClC,6DAAuE;AACvE,kDAA0B;AAE1B,2CAAuE;AAEvE,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,gCAAgC,CAAC,CAAC;AAEtD,MAAa,eAAe;IACnB,MAAM,CAAC,OAAO,CAAC,GAAW;QAC/B,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtB,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAA,4CAA2B,EAAC,GAAG,CAAC,CAAC;QACjD,MAAM,yBAAyB,GAC7B,OAAO,GAAG,kCAAiB,CAAC,UAAU;YACpC,CAAC,CAAE,IAAA,kCAAsB,EAAC,GAAG,EAAE;gBAC3B,mBAAmB,EAAE,CAAC,iBAAiB,CAAC;gBACxC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;aAClD,CAAmC;YACtC,CAAC,CAAE,IAAA,kCAAsB,EAAC,GAAG,EAAE;gBAC3B,mBAAmB,EAAE,CAAC,aAAa,CAAC;gBACpC,kBAAkB,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC;aACzD,CAAmC,CAAC;QAE3C,MAAM,OAAO,GACX,OAAO,GAAG,kCAAiB,CAAC,UAAU,CAAC,OAAO,EAAE;YAC9C,CAAC,CAAE,yBAA2D;YAC9D,CAAC,CAAE,yBAA2D,CAAC;QAEnE,OAAO;YACL,OAAO;YACP,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,GAAsC;QACxD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,OAAO,IAAA,4BAAgB,EAAC,OAAO,EAAE;YAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,mBAAmB,EAAE,CAAC,iBAAiB,CAAC;YACxC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACjD,CAAC,CAAC;IACL,CAAC;CACF;AAxCD,0CAwCC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CredentialRequest, CredentialResponse, OpenIDResponse, ProofOfPossession } from '@sphereon/oid4vci-common';
|
|
2
|
+
import { CredentialFormat } from '@sphereon/ssi-types';
|
|
3
|
+
import { CredentialRequestClientBuilderV1_0_09 } from './CredentialRequestClientBuilderV1_0_09';
|
|
4
|
+
import { ProofOfPossessionBuilder } from './ProofOfPossessionBuilder';
|
|
5
|
+
export interface CredentialRequestOpts {
|
|
6
|
+
credentialEndpoint: string;
|
|
7
|
+
credentialType: string | string[];
|
|
8
|
+
format: CredentialFormat | CredentialFormat[];
|
|
9
|
+
proof: ProofOfPossession;
|
|
10
|
+
token: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class CredentialRequestClient {
|
|
13
|
+
private readonly _credentialRequestOpts;
|
|
14
|
+
get credentialRequestOpts(): CredentialRequestOpts;
|
|
15
|
+
getCredentialEndpoint(): string;
|
|
16
|
+
constructor(builder: CredentialRequestClientBuilderV1_0_09);
|
|
17
|
+
acquireCredentialsUsingProof({ proofInput, credentialType, format, }: {
|
|
18
|
+
proofInput: ProofOfPossessionBuilder | ProofOfPossession;
|
|
19
|
+
credentialType?: string | string[];
|
|
20
|
+
format?: CredentialFormat | CredentialFormat[];
|
|
21
|
+
}): Promise<OpenIDResponse<CredentialResponse>>;
|
|
22
|
+
acquireCredentialsUsingRequest(request: CredentialRequest): Promise<OpenIDResponse<CredentialResponse>>;
|
|
23
|
+
createCredentialRequest({ proofInput, credentialType, format, }: {
|
|
24
|
+
proofInput: ProofOfPossessionBuilder | ProofOfPossession;
|
|
25
|
+
credentialType?: string | string[];
|
|
26
|
+
format?: CredentialFormat | CredentialFormat[];
|
|
27
|
+
}): Promise<CredentialRequest>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=CredentialRequestClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CredentialRequestClient.d.ts","sourceRoot":"","sources":["../lib/CredentialRequestClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAiB,MAAM,0BAA0B,CAAC;AACnI,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAKtE,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAC9C,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiC;IAExE,IAAI,qBAAqB,IAAI,qBAAqB,CAEjD;IAEM,qBAAqB,IAAI,MAAM;gBAInB,OAAO,EAAE,qCAAqC;IAIpD,4BAA4B,CAAC,EACxC,UAAU,EACV,cAAc,EACd,MAAM,GACP,EAAE;QACD,UAAU,EAAE,wBAAwB,GAAG,iBAAiB,CAAC;QACzD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;KAChD,GAAG,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAKlC,8BAA8B,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAavG,uBAAuB,CAAC,EACnC,UAAU,EACV,cAAc,EACd,MAAM,GACP,EAAE;QACD,UAAU,EAAE,wBAAwB,GAAG,iBAAiB,CAAC;QACzD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;KAChD,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAS/B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.CredentialRequestClient = void 0;
|
|
16
|
+
const oid4vci_common_1 = require("@sphereon/oid4vci-common");
|
|
17
|
+
const debug_1 = __importDefault(require("debug"));
|
|
18
|
+
const ProofOfPossessionBuilder_1 = require("./ProofOfPossessionBuilder");
|
|
19
|
+
const functions_1 = require("./functions");
|
|
20
|
+
const debug = (0, debug_1.default)('sphereon:openid4vci:credential');
|
|
21
|
+
class CredentialRequestClient {
|
|
22
|
+
get credentialRequestOpts() {
|
|
23
|
+
return this._credentialRequestOpts;
|
|
24
|
+
}
|
|
25
|
+
getCredentialEndpoint() {
|
|
26
|
+
return this.credentialRequestOpts.credentialEndpoint;
|
|
27
|
+
}
|
|
28
|
+
constructor(builder) {
|
|
29
|
+
this._credentialRequestOpts = Object.assign({}, builder);
|
|
30
|
+
}
|
|
31
|
+
acquireCredentialsUsingProof({ proofInput, credentialType, format, }) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
const request = yield this.createCredentialRequest({ proofInput, credentialType, format });
|
|
34
|
+
return yield this.acquireCredentialsUsingRequest(request);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
acquireCredentialsUsingRequest(request) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const credentialEndpoint = this.credentialRequestOpts.credentialEndpoint;
|
|
40
|
+
if (!(0, functions_1.isValidURL)(credentialEndpoint)) {
|
|
41
|
+
debug(`Invalid credential endpoint: ${credentialEndpoint}`);
|
|
42
|
+
throw new Error(oid4vci_common_1.URL_NOT_VALID);
|
|
43
|
+
}
|
|
44
|
+
debug(`Acquiring credential(s) from: ${credentialEndpoint}`);
|
|
45
|
+
const requestToken = this.credentialRequestOpts.token;
|
|
46
|
+
const response = yield (0, functions_1.post)(credentialEndpoint, JSON.stringify(request), { bearerToken: requestToken });
|
|
47
|
+
debug(`Credential endpoint ${credentialEndpoint} response:\r\n${response}`);
|
|
48
|
+
return response;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
createCredentialRequest({ proofInput, credentialType, format, }) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const proof = 'proof_type' in proofInput ? yield ProofOfPossessionBuilder_1.ProofOfPossessionBuilder.fromProof(proofInput).build() : yield proofInput.build();
|
|
54
|
+
return {
|
|
55
|
+
type: credentialType ? credentialType : this.credentialRequestOpts.credentialType,
|
|
56
|
+
format: format ? format : this.credentialRequestOpts.format,
|
|
57
|
+
proof,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.CredentialRequestClient = CredentialRequestClient;
|
|
63
|
+
//# sourceMappingURL=CredentialRequestClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CredentialRequestClient.js","sourceRoot":"","sources":["../lib/CredentialRequestClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAAmI;AAEnI,kDAA0B;AAG1B,yEAAsE;AACtE,2CAA+C;AAE/C,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,gCAAgC,CAAC,CAAC;AAUtD,MAAa,uBAAuB;IAGlC,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,sBAA+C,CAAC;IAC9D,CAAC;IAEM,qBAAqB;QAC1B,OAAO,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC;IACvD,CAAC;IAED,YAAmB,OAA8C;QAC/D,IAAI,CAAC,sBAAsB,qBAAQ,OAAO,CAAE,CAAC;IAC/C,CAAC;IAEY,4BAA4B,CAAC,EACxC,UAAU,EACV,cAAc,EACd,MAAM,GAKP;;YACC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3F,OAAO,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;KAAA;IAEY,8BAA8B,CAAC,OAA0B;;YACpE,MAAM,kBAAkB,GAAW,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC;YACjF,IAAI,CAAC,IAAA,sBAAU,EAAC,kBAAkB,CAAC,EAAE;gBACnC,KAAK,CAAC,gCAAgC,kBAAkB,EAAE,CAAC,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,8BAAa,CAAC,CAAC;aAChC;YACD,KAAK,CAAC,iCAAiC,kBAAkB,EAAE,CAAC,CAAC;YAC7D,MAAM,YAAY,GAAW,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAC9D,MAAM,QAAQ,GAAuC,MAAM,IAAA,gBAAI,EAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5I,KAAK,CAAC,uBAAuB,kBAAkB,iBAAiB,QAAQ,EAAE,CAAC,CAAC;YAC5E,OAAO,QAAQ,CAAC;QAClB,CAAC;KAAA;IAEY,uBAAuB,CAAC,EACnC,UAAU,EACV,cAAc,EACd,MAAM,GAKP;;YACC,MAAM,KAAK,GACT,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,mDAAwB,CAAC,SAAS,CAAC,UAA+B,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YAC5I,OAAO;gBACL,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc;gBACjF,MAAM,EAAE,MAAM,CAAC,CAAC,CAAE,MAAiB,CAAC,CAAC,CAAE,IAAI,CAAC,qBAAqB,CAAC,MAAiB;gBACnF,KAAK;aACN,CAAC;QACJ,CAAC;KAAA;CACF;AA1DD,0DA0DC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AccessTokenResponse, CredentialOfferPayload, CredentialOfferRequestWithBaseUrl, EndpointMetadata, IssuerMetadata } from '@sphereon/oid4vci-common';
|
|
2
|
+
import { CredentialFormat } from '@sphereon/ssi-types';
|
|
3
|
+
import { CredentialRequestClient } from './CredentialRequestClient';
|
|
4
|
+
export declare class CredentialRequestClientBuilderV1_0_09 {
|
|
5
|
+
credentialEndpoint?: string;
|
|
6
|
+
credentialType?: string | string[];
|
|
7
|
+
format?: CredentialFormat | CredentialFormat[];
|
|
8
|
+
token?: string;
|
|
9
|
+
static fromURI({ uri, metadata }: {
|
|
10
|
+
uri: string;
|
|
11
|
+
metadata?: EndpointMetadata;
|
|
12
|
+
}): CredentialRequestClientBuilderV1_0_09;
|
|
13
|
+
static fromCredentialOfferRequest({ request, metadata, }: {
|
|
14
|
+
request: CredentialOfferPayload;
|
|
15
|
+
metadata?: EndpointMetadata;
|
|
16
|
+
}): CredentialRequestClientBuilderV1_0_09;
|
|
17
|
+
static fromCredentialOffer({ credentialOffer, metadata, }: {
|
|
18
|
+
credentialOffer: CredentialOfferRequestWithBaseUrl;
|
|
19
|
+
metadata?: EndpointMetadata;
|
|
20
|
+
}): CredentialRequestClientBuilderV1_0_09;
|
|
21
|
+
withCredentialEndpointFromMetadata(metadata: IssuerMetadata): CredentialRequestClientBuilderV1_0_09;
|
|
22
|
+
withCredentialEndpoint(credentialEndpoint: string): CredentialRequestClientBuilderV1_0_09;
|
|
23
|
+
withCredentialType(credentialType: string | string[]): CredentialRequestClientBuilderV1_0_09;
|
|
24
|
+
withFormat(format: CredentialFormat | CredentialFormat[]): CredentialRequestClientBuilderV1_0_09;
|
|
25
|
+
withToken(accessToken: string): CredentialRequestClientBuilderV1_0_09;
|
|
26
|
+
withTokenFromResponse(response: AccessTokenResponse): CredentialRequestClientBuilderV1_0_09;
|
|
27
|
+
build(): CredentialRequestClient;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=CredentialRequestClientBuilderV1_0_09.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CredentialRequestClientBuilderV1_0_09.d.ts","sourceRoot":"","sources":["../lib/CredentialRequestClientBuilderV1_0_09.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAEtB,iCAAiC,EACjC,gBAAgB,EAEhB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,qBAAa,qCAAqC;IAChD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;WAED,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;KAAE,GAAG,qCAAqC;WAU/G,0BAA0B,CAAC,EACvC,OAAO,EACP,QAAQ,GACT,EAAE;QACD,OAAO,EAAE,sBAAsB,CAAC;QAChC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;KAC7B,GAAG,qCAAqC;WAgB3B,mBAAmB,CAAC,EAChC,eAAe,EACf,QAAQ,GACT,EAAE;QACD,eAAe,EAAE,iCAAiC,CAAC;QACnD,QAAQ,CAAC,EAAE,gBAAgB,CAAC;KAC7B,GAAG,qCAAqC;IAOlC,kCAAkC,CAAC,QAAQ,EAAE,cAAc,GAAG,qCAAqC;IAKnG,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,GAAG,qCAAqC;IAKzF,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,qCAAqC;IAK5F,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,qCAAqC;IAKhG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,qCAAqC;IAKrE,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,qCAAqC;IAK3F,KAAK,IAAI,uBAAuB;CAGxC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CredentialRequestClientBuilderV1_0_09 = void 0;
|
|
4
|
+
const oid4vci_common_1 = require("@sphereon/oid4vci-common");
|
|
5
|
+
const CredentialRequestClient_1 = require("./CredentialRequestClient");
|
|
6
|
+
const functions_1 = require("./functions");
|
|
7
|
+
class CredentialRequestClientBuilderV1_0_09 {
|
|
8
|
+
static fromURI({ uri, metadata }) {
|
|
9
|
+
return CredentialRequestClientBuilderV1_0_09.fromCredentialOfferRequest({
|
|
10
|
+
request: (0, functions_1.convertURIToJsonObject)(uri, {
|
|
11
|
+
arrayTypeProperties: ['credential_type'],
|
|
12
|
+
requiredProperties: ['issuer', 'credential_type'],
|
|
13
|
+
}),
|
|
14
|
+
metadata,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
static fromCredentialOfferRequest({ request, metadata, }) {
|
|
18
|
+
const builder = new CredentialRequestClientBuilderV1_0_09();
|
|
19
|
+
const issuer = (0, oid4vci_common_1.getIssuerFromCredentialOfferPayload)(request)
|
|
20
|
+
? (0, oid4vci_common_1.getIssuerFromCredentialOfferPayload)(request)
|
|
21
|
+
: metadata === null || metadata === void 0 ? void 0 : metadata.issuer;
|
|
22
|
+
builder.withCredentialEndpoint((metadata === null || metadata === void 0 ? void 0 : metadata.credential_endpoint) ? metadata.credential_endpoint : issuer.endsWith('/') ? `${issuer}credential` : `${issuer}/credential`);
|
|
23
|
+
//todo: This basically sets all types available during initiation. Probably the user only wants a subset. So do we want to do this?
|
|
24
|
+
//todo: handle this for v11
|
|
25
|
+
builder.withCredentialType(request.credential_type);
|
|
26
|
+
return builder;
|
|
27
|
+
}
|
|
28
|
+
static fromCredentialOffer({ credentialOffer, metadata, }) {
|
|
29
|
+
return CredentialRequestClientBuilderV1_0_09.fromCredentialOfferRequest({
|
|
30
|
+
request: credentialOffer.request,
|
|
31
|
+
metadata,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
withCredentialEndpointFromMetadata(metadata) {
|
|
35
|
+
this.credentialEndpoint = metadata.credential_endpoint;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
withCredentialEndpoint(credentialEndpoint) {
|
|
39
|
+
this.credentialEndpoint = credentialEndpoint;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
withCredentialType(credentialType) {
|
|
43
|
+
this.credentialType = credentialType;
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
withFormat(format) {
|
|
47
|
+
this.format = format;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
withToken(accessToken) {
|
|
51
|
+
this.token = accessToken;
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
withTokenFromResponse(response) {
|
|
55
|
+
this.token = response.access_token;
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
build() {
|
|
59
|
+
return new CredentialRequestClient_1.CredentialRequestClient(this);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.CredentialRequestClientBuilderV1_0_09 = CredentialRequestClientBuilderV1_0_09;
|
|
63
|
+
//# sourceMappingURL=CredentialRequestClientBuilderV1_0_09.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CredentialRequestClientBuilderV1_0_09.js","sourceRoot":"","sources":["../lib/CredentialRequestClientBuilderV1_0_09.ts"],"names":[],"mappings":";;;AAAA,6DAQkC;AAGlC,uEAAoE;AACpE,2CAAqD;AAErD,MAAa,qCAAqC;IAMzC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAgD;QACnF,OAAO,qCAAqC,CAAC,0BAA0B,CAAC;YACtE,OAAO,EAAE,IAAA,kCAAsB,EAAC,GAAG,EAAE;gBACnC,mBAAmB,EAAE,CAAC,iBAAiB,CAAC;gBACxC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;aAClD,CAA2B;YAC5B,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,0BAA0B,CAAC,EACvC,OAAO,EACP,QAAQ,GAIT;QACC,MAAM,OAAO,GAAG,IAAI,qCAAqC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAA,oDAAmC,EAAC,OAAO,CAAC;YACzD,CAAC,CAAE,IAAA,oDAAmC,EAAC,OAAO,CAAY;YAC1D,CAAC,CAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAiB,CAAC;QACjC,OAAO,CAAC,sBAAsB,CAC5B,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,EAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,aAAa,CACrI,CAAC;QAEF,mIAAmI;QACnI,2BAA2B;QAC3B,OAAO,CAAC,kBAAkB,CAAE,OAAyC,CAAC,eAAe,CAAC,CAAC;QAEvF,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,EAChC,eAAe,EACf,QAAQ,GAIT;QACC,OAAO,qCAAqC,CAAC,0BAA0B,CAAC;YACtE,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAEM,kCAAkC,CAAC,QAAwB;QAChE,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,sBAAsB,CAAC,kBAA0B;QACtD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,kBAAkB,CAAC,cAAiC;QACzD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,UAAU,CAAC,MAA6C;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,SAAS,CAAC,WAAmB;QAClC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,qBAAqB,CAAC,QAA6B;QACxD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,iDAAuB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF;AApFD,sFAoFC"}
|