@sphereon/oid4vci-client 0.2.0 → 0.4.1-next.285
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 +222 -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/CredentialOfferClient.d.ts +10 -0
- package/dist/CredentialOfferClient.d.ts.map +1 -0
- package/dist/CredentialOfferClient.js +101 -0
- package/dist/CredentialOfferClient.js.map +1 -0
- package/dist/CredentialRequestClient.d.ts +33 -0
- package/dist/CredentialRequestClient.d.ts.map +1 -0
- package/dist/CredentialRequestClient.js +118 -0
- package/dist/CredentialRequestClient.js.map +1 -0
- package/dist/CredentialRequestClientBuilder.d.ts +34 -0
- package/dist/CredentialRequestClientBuilder.d.ts.map +1 -0
- package/dist/CredentialRequestClientBuilder.js +87 -0
- package/dist/CredentialRequestClientBuilder.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 +75 -0
- package/dist/OpenID4VCIClient.d.ts.map +1 -0
- package/dist/OpenID4VCIClient.js +403 -0
- package/dist/OpenID4VCIClient.js.map +1 -0
- package/dist/ProofOfPossessionBuilder.d.ts +38 -0
- package/dist/ProofOfPossessionBuilder.d.ts.map +1 -0
- package/dist/ProofOfPossessionBuilder.js +129 -0
- package/dist/ProofOfPossessionBuilder.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 +104 -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 → functions}/index.js +20 -18
- 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 +249 -0
- package/lib/AuthorizationDetailsBuilder.ts +46 -0
- package/lib/CredentialOfferClient.ts +108 -0
- package/lib/CredentialRequestClient.ts +137 -0
- package/lib/CredentialRequestClientBuilder.ts +110 -0
- package/lib/MetadataClient.ts +147 -0
- package/lib/OpenID4VCIClient.ts +523 -0
- package/lib/ProofOfPossessionBuilder.ts +181 -0
- package/lib/__tests__/AccessTokenClient.spec.ts +225 -0
- package/lib/__tests__/AuthorizationDetailsBuilder.spec.ts +65 -0
- package/lib/__tests__/AuthzFlowType.spec.ts +39 -0
- package/lib/__tests__/CredentialRequestClient.spec.ts +291 -0
- package/lib/__tests__/CredentialRequestClientBuilder.spec.ts +121 -0
- package/lib/__tests__/HttpUtils.spec.ts +37 -0
- package/lib/__tests__/IT.spec.ts +173 -0
- package/lib/__tests__/IssuanceInitiation.spec.ts +48 -0
- package/lib/__tests__/JsonURIConversions.spec.ts +146 -0
- package/lib/__tests__/MetadataClient.spec.ts +203 -0
- package/lib/__tests__/MetadataMocks.ts +444 -0
- package/lib/__tests__/OpenID4VCIClient.spec.ts +166 -0
- package/lib/__tests__/OpenID4VCIClientPAR.spec.ts +112 -0
- package/lib/__tests__/ProofOfPossessionBuilder.spec.ts +110 -0
- package/lib/__tests__/data/VciDataFixtures.ts +744 -0
- package/lib/functions/ProofUtil.ts +120 -0
- package/lib/functions/index.ts +3 -0
- package/{dist/main/lib/index.d.ts → lib/index.ts} +8 -7
- package/package.json +68 -71
- package/CHANGELOG.md +0 -21
- package/dist/main/index.d.ts +0 -1
- 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.d.ts +0 -17
- 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/functions/index.d.ts +0 -3
- package/dist/main/lib/functions/index.js +0 -20
- 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
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CredentialRequestClientBuilder = void 0;
|
|
4
|
-
const CredentialRequestClient_1 = require("./CredentialRequestClient");
|
|
5
|
-
const functions_1 = require("./functions");
|
|
6
|
-
class CredentialRequestClientBuilder {
|
|
7
|
-
static fromIssuanceInitiationURI(issuanceInitiationURI, metadata) {
|
|
8
|
-
return CredentialRequestClientBuilder.fromIssuanceInitiationRequest((0, functions_1.convertURIToJsonObject)(issuanceInitiationURI, {
|
|
9
|
-
arrayTypeProperties: ['credential_type'],
|
|
10
|
-
requiredProperties: ['issuer', 'credential_type'],
|
|
11
|
-
}), metadata);
|
|
12
|
-
}
|
|
13
|
-
static fromIssuanceInitiationRequest(issuanceInitiationRequest, metadata) {
|
|
14
|
-
const builder = new CredentialRequestClientBuilder();
|
|
15
|
-
builder.withCredentialEndpoint((metadata === null || metadata === void 0 ? void 0 : metadata.credential_endpoint) ? metadata.credential_endpoint : `${issuanceInitiationRequest.issuer}/credential`);
|
|
16
|
-
//todo: This basically sets all types available during initiation. Probably the user only wants a subset. So do we want to do this?
|
|
17
|
-
builder.withCredentialType(issuanceInitiationRequest.credential_type);
|
|
18
|
-
return builder;
|
|
19
|
-
}
|
|
20
|
-
static fromIssuanceInitiation(issuanceInitiation, metadata) {
|
|
21
|
-
return CredentialRequestClientBuilder.fromIssuanceInitiationRequest(issuanceInitiation.issuanceInitiationRequest, metadata);
|
|
22
|
-
}
|
|
23
|
-
withCredentialEndpointFromMetadata(metadata) {
|
|
24
|
-
this.credentialEndpoint = metadata.credential_endpoint;
|
|
25
|
-
return this;
|
|
26
|
-
}
|
|
27
|
-
withCredentialEndpoint(credentialEndpoint) {
|
|
28
|
-
this.credentialEndpoint = credentialEndpoint;
|
|
29
|
-
return this;
|
|
30
|
-
}
|
|
31
|
-
withCredentialType(credentialType) {
|
|
32
|
-
this.credentialType = credentialType;
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
|
-
withFormat(format) {
|
|
36
|
-
this.format = format;
|
|
37
|
-
return this;
|
|
38
|
-
}
|
|
39
|
-
withClientId(clientId) {
|
|
40
|
-
this.clientId = clientId;
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
withToken(accessToken) {
|
|
44
|
-
this.token = accessToken;
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
|
-
withTokenFromResponse(response) {
|
|
48
|
-
this.token = response.access_token;
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
build() {
|
|
52
|
-
return new CredentialRequestClient_1.CredentialRequestClient(this);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.CredentialRequestClientBuilder = CredentialRequestClientBuilder;
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlZGVudGlhbFJlcXVlc3RDbGllbnRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL0NyZWRlbnRpYWxSZXF1ZXN0Q2xpZW50QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx1RUFBb0U7QUFDcEUsMkNBQXFEO0FBU3JELE1BQWEsOEJBQThCO0lBT2xDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxxQkFBNkIsRUFBRSxRQUEyQjtRQUNoRyxPQUFPLDhCQUE4QixDQUFDLDZCQUE2QixDQUNqRSxJQUFBLGtDQUFzQixFQUFDLHFCQUFxQixFQUFFO1lBQzVDLG1CQUFtQixFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDeEMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUM7U0FDbEQsQ0FBcUMsRUFDdEMsUUFBUSxDQUNULENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLDZCQUE2QixDQUN6Qyx5QkFBMkQsRUFDM0QsUUFBMkI7UUFFM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxtQkFBbUIsRUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLE1BQU0sYUFBYSxDQUFDLENBQUM7UUFFaEosbUlBQW1JO1FBQ25JLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0RSxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU0sTUFBTSxDQUFDLHNCQUFzQixDQUNsQyxrQkFBaUQsRUFDakQsUUFBMkI7UUFFM0IsT0FBTyw4QkFBOEIsQ0FBQyw2QkFBNkIsQ0FBQyxrQkFBa0IsQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRU0sa0NBQWtDLENBQUMsUUFBK0I7UUFDdkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxrQkFBMEI7UUFDdEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGNBQWlDO1FBQ3pELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUE2QztRQUM3RCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxZQUFZLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sU0FBUyxDQUFDLFdBQW1CO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLHFCQUFxQixDQUFDLFFBQTZCO1FBQ3hELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxLQUFLO1FBQ1YsT0FBTyxJQUFJLGlEQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQTNFRCx3RUEyRUMifQ==
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.IssuanceInitiation = void 0;
|
|
4
|
-
const functions_1 = require("./functions");
|
|
5
|
-
class IssuanceInitiation {
|
|
6
|
-
static fromURI(issuanceInitiationURI) {
|
|
7
|
-
if (!issuanceInitiationURI.includes('?')) {
|
|
8
|
-
throw new Error('Invalid Issuance Initiation Request Payload');
|
|
9
|
-
}
|
|
10
|
-
const baseUrl = issuanceInitiationURI.split('?')[0];
|
|
11
|
-
const issuanceInitiationRequest = (0, functions_1.convertURIToJsonObject)(issuanceInitiationURI, {
|
|
12
|
-
arrayTypeProperties: ['credential_type'],
|
|
13
|
-
requiredProperties: ['issuer', 'credential_type'],
|
|
14
|
-
});
|
|
15
|
-
return {
|
|
16
|
-
baseUrl,
|
|
17
|
-
issuanceInitiationRequest,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
static toURI(issuanceInitiation) {
|
|
21
|
-
return (0, functions_1.convertJsonToURI)(issuanceInitiation.issuanceInitiationRequest, {
|
|
22
|
-
baseUrl: issuanceInitiation.baseUrl,
|
|
23
|
-
arrayTypeProperties: ['credential_type'],
|
|
24
|
-
uriTypeProperties: ['issuer', 'credential_type'],
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
exports.IssuanceInitiation = IssuanceInitiation;
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNzdWFuY2VJbml0aWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL0lzc3VhbmNlSW5pdGlhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUU7QUFHdkUsTUFBYSxrQkFBa0I7SUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBNkI7UUFDakQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDaEU7UUFDRCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsTUFBTSx5QkFBeUIsR0FBRyxJQUFBLGtDQUFzQixFQUFDLHFCQUFxQixFQUFFO1lBQzlFLG1CQUFtQixFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDeEMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUM7U0FDbEQsQ0FBcUMsQ0FBQztRQUV2QyxPQUFPO1lBQ0wsT0FBTztZQUNQLHlCQUF5QjtTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWlEO1FBQ25FLE9BQU8sSUFBQSw0QkFBZ0IsRUFBQyxrQkFBa0IsQ0FBQyx5QkFBeUIsRUFBRTtZQUNwRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsT0FBTztZQUNuQyxtQkFBbUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ3hDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1NBQ2pELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhCRCxnREF3QkMifQ==
|
|
@@ -1,127 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.MetadataClient = void 0;
|
|
13
|
-
const functions_1 = require("./functions");
|
|
14
|
-
const types_1 = require("./types");
|
|
15
|
-
class MetadataClient {
|
|
16
|
-
/**
|
|
17
|
-
* Retrieve metadata using the Initiation obtained from a previous step
|
|
18
|
-
*
|
|
19
|
-
* @param initiation
|
|
20
|
-
*/
|
|
21
|
-
static retrieveAllMetadataFromInitiation(initiation) {
|
|
22
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
return MetadataClient.retrieveAllMetadataFromInitiationRequest(initiation.issuanceInitiationRequest);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Retrieve the metada using the initiation request obtained from a previous step
|
|
28
|
-
* @param initiationRequest
|
|
29
|
-
*/
|
|
30
|
-
static retrieveAllMetadataFromInitiationRequest(initiationRequest) {
|
|
31
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
return MetadataClient.retrieveAllMetadata(initiationRequest.issuer);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Retrieve all metadata from an issuer
|
|
37
|
-
* @param issuer The issuer URL
|
|
38
|
-
*/
|
|
39
|
-
static retrieveAllMetadata(issuer, opts) {
|
|
40
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
-
let token_endpoint;
|
|
42
|
-
let credential_endpoint;
|
|
43
|
-
let oid4vciMetadata = yield MetadataClient.retrieveOID4VCIServerMetadata(issuer);
|
|
44
|
-
if (oid4vciMetadata) {
|
|
45
|
-
credential_endpoint = oid4vciMetadata.credential_endpoint;
|
|
46
|
-
token_endpoint = oid4vciMetadata.token_endpoint;
|
|
47
|
-
if (!token_endpoint && oid4vciMetadata.authorization_server) {
|
|
48
|
-
// Crossword uses this to separate the AS metadata. We fail when not found, since we now have no way of getting the token endpoint
|
|
49
|
-
const asMetadata = yield this.retrieveWellknown(oid4vciMetadata.authorization_server, types_1.WellKnownEndpoints.OAUTH_AS, {
|
|
50
|
-
errorOnNotFound: true,
|
|
51
|
-
});
|
|
52
|
-
token_endpoint = asMetadata === null || asMetadata === void 0 ? void 0 : asMetadata.token_endpoint;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
// No specific OID4VCI endpoint. Either can be an OAuth2 AS or an OpenID IDP. Let's start with OIDC first
|
|
57
|
-
let asConfig = yield MetadataClient.retrieveWellknown(issuer, types_1.WellKnownEndpoints.OIDC_CONFIGURATION, {
|
|
58
|
-
errorOnNotFound: false,
|
|
59
|
-
});
|
|
60
|
-
if (!asConfig) {
|
|
61
|
-
// Now oAuth2
|
|
62
|
-
asConfig = yield MetadataClient.retrieveWellknown(issuer, types_1.WellKnownEndpoints.OAUTH_AS, { errorOnNotFound: false });
|
|
63
|
-
}
|
|
64
|
-
if (asConfig) {
|
|
65
|
-
oid4vciMetadata = asConfig; // TODO: Strip other info?
|
|
66
|
-
credential_endpoint = oid4vciMetadata.credential_endpoint;
|
|
67
|
-
token_endpoint = oid4vciMetadata.token_endpoint;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (!token_endpoint) {
|
|
71
|
-
if (opts === null || opts === void 0 ? void 0 : opts.errorOnNotFound) {
|
|
72
|
-
throw new Error(`Could not deduce the token endpoint for ${issuer}`);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
token_endpoint = `${issuer}${issuer.endsWith('/') ? '' : '/'}token`;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (!credential_endpoint) {
|
|
79
|
-
if (opts === null || opts === void 0 ? void 0 : opts.errorOnNotFound) {
|
|
80
|
-
throw new Error(`Could not deduce the credential endpoint for ${issuer}`);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
credential_endpoint = `${issuer}${issuer.endsWith('/') ? '' : '/'}credential`;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
issuer,
|
|
88
|
-
token_endpoint,
|
|
89
|
-
credential_endpoint,
|
|
90
|
-
oid4vci_metadata: oid4vciMetadata,
|
|
91
|
-
};
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Retrieve only the OID4VCI metadata for the issuer. So no OIDC/OAuth2 metadata
|
|
96
|
-
*
|
|
97
|
-
* @param issuerHost The issuer hostname
|
|
98
|
-
*/
|
|
99
|
-
static retrieveOID4VCIServerMetadata(issuerHost) {
|
|
100
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
101
|
-
// Since the server metadata endpoint is optional we are not going to throw an error.
|
|
102
|
-
return MetadataClient.retrieveWellknown(issuerHost, types_1.WellKnownEndpoints.OIDC4VCI, { errorOnNotFound: false });
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Allows to retrieve information from a well-known location
|
|
107
|
-
*
|
|
108
|
-
* @param host The host
|
|
109
|
-
* @param endpointType The endpoint type, currently supports OID4VCI, OIDC and OAuth2 endpoint types
|
|
110
|
-
* @param opts Options, like for instance whether an error should be thrown in case the endpoint doesn't exist
|
|
111
|
-
*/
|
|
112
|
-
static retrieveWellknown(host, endpointType, opts) {
|
|
113
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
-
try {
|
|
115
|
-
return yield (0, functions_1.getJson)(`${host.endsWith('/') ? host.slice(0, -1) : host}${endpointType}`);
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
if (!(opts === null || opts === void 0 ? void 0 : opts.errorOnNotFound) && error instanceof functions_1.NotFoundError) {
|
|
119
|
-
return undefined;
|
|
120
|
-
}
|
|
121
|
-
throw error;
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
exports.MetadataClient = MetadataClient;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGFDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvTWV0YWRhdGFDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXFEO0FBQ3JELG1DQVFpQjtBQUVqQixNQUFhLGNBQWM7SUFHekI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBTyxpQ0FBaUMsQ0FBQyxVQUF5Qzs7WUFDN0YsT0FBTyxjQUFjLENBQUMsd0NBQXdDLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDdkcsQ0FBQztLQUFBO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFPLHdDQUF3QyxDQUFDLGlCQUFtRDs7WUFDOUcsT0FBTyxjQUFjLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEUsQ0FBQztLQUFBO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFPLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxJQUFtQzs7WUFDekYsSUFBSSxjQUFjLENBQUM7WUFDbkIsSUFBSSxtQkFBbUIsQ0FBQztZQUN4QixJQUFJLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVqRixJQUFJLGVBQWUsRUFBRTtnQkFDbkIsbUJBQW1CLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDO2dCQUMxRCxjQUFjLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGNBQWMsSUFBSSxlQUFlLENBQUMsb0JBQW9CLEVBQUU7b0JBQzNELGtJQUFrSTtvQkFDbEksTUFBTSxVQUFVLEdBQXFCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSwwQkFBa0IsQ0FBQyxRQUFRLEVBQUU7d0JBQ25JLGVBQWUsRUFBRSxJQUFJO3FCQUN0QixDQUFDLENBQUM7b0JBQ0gsY0FBYyxHQUFHLFVB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
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { DecodeURIAsJsonOpts, EncodeJsonAsURIOpts } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* @function encodeJsonAsURI encodes a Json object into a URI
|
|
4
|
-
* @param json object
|
|
5
|
-
* @param opts:
|
|
6
|
-
* - urlTypeProperties: a list of properties of which the value is a URL
|
|
7
|
-
* - arrayTypeProperties: a list of properties which are an array
|
|
8
|
-
*/
|
|
9
|
-
export declare function convertJsonToURI(json: unknown, opts?: EncodeJsonAsURIOpts): string;
|
|
10
|
-
/**
|
|
11
|
-
* @function decodeUriAsJson decodes an URI into a Json object
|
|
12
|
-
* @param uri string
|
|
13
|
-
* @param opts:
|
|
14
|
-
* - requiredProperties: the required properties
|
|
15
|
-
* - arrayTypeProperties: properties that can show up more that once
|
|
16
|
-
*/
|
|
17
|
-
export declare function convertURIToJsonObject(uri: string, opts?: DecodeURIAsJsonOpts): unknown;
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertURIToJsonObject = exports.convertJsonToURI = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
/**
|
|
6
|
-
* @function encodeJsonAsURI encodes a Json object into a URI
|
|
7
|
-
* @param json object
|
|
8
|
-
* @param opts:
|
|
9
|
-
* - urlTypeProperties: a list of properties of which the value is a URL
|
|
10
|
-
* - arrayTypeProperties: a list of properties which are an array
|
|
11
|
-
*/
|
|
12
|
-
function convertJsonToURI(json, opts) {
|
|
13
|
-
var _a, _b;
|
|
14
|
-
if (typeof json === 'string') {
|
|
15
|
-
return convertJsonToURI(JSON.parse(json), opts);
|
|
16
|
-
}
|
|
17
|
-
const results = [];
|
|
18
|
-
function encodeAndStripWhitespace(key) {
|
|
19
|
-
return encodeURIComponent(key.replace(' ', ''));
|
|
20
|
-
}
|
|
21
|
-
for (const [key, value] of Object.entries(json)) {
|
|
22
|
-
if (!value) {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
//Skip properties that are not of URL type
|
|
26
|
-
if (!((_a = opts === null || opts === void 0 ? void 0 : opts.uriTypeProperties) === null || _a === void 0 ? void 0 : _a.includes(key))) {
|
|
27
|
-
results.push(`${key}=${value}`);
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
if (((_b = opts === null || opts === void 0 ? void 0 : opts.arrayTypeProperties) === null || _b === void 0 ? void 0 : _b.includes(key)) && Array.isArray(value)) {
|
|
31
|
-
results.push(value.map((v) => `${encodeAndStripWhitespace(key)}=${customEncodeURIComponent(v, /\./g)}`).join('&'));
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
const isBool = typeof value == 'boolean';
|
|
35
|
-
const isNumber = typeof value == 'number';
|
|
36
|
-
const isString = typeof value == 'string';
|
|
37
|
-
let encoded;
|
|
38
|
-
if (isBool || isNumber) {
|
|
39
|
-
encoded = `${encodeAndStripWhitespace(key)}=${value}`;
|
|
40
|
-
}
|
|
41
|
-
else if (isString) {
|
|
42
|
-
encoded = `${encodeAndStripWhitespace(key)}=${customEncodeURIComponent(value, /\./g)}`;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
encoded = `${encodeAndStripWhitespace(key)}=${customEncodeURIComponent(JSON.stringify(value), /\./g)}`;
|
|
46
|
-
}
|
|
47
|
-
results.push(encoded);
|
|
48
|
-
}
|
|
49
|
-
const components = results.join('&');
|
|
50
|
-
if (opts === null || opts === void 0 ? void 0 : opts.baseUrl) {
|
|
51
|
-
return `${opts.baseUrl}?${components}`;
|
|
52
|
-
}
|
|
53
|
-
return components;
|
|
54
|
-
}
|
|
55
|
-
exports.convertJsonToURI = convertJsonToURI;
|
|
56
|
-
/**
|
|
57
|
-
* @function decodeUriAsJson decodes an URI into a Json object
|
|
58
|
-
* @param uri string
|
|
59
|
-
* @param opts:
|
|
60
|
-
* - requiredProperties: the required properties
|
|
61
|
-
* - arrayTypeProperties: properties that can show up more that once
|
|
62
|
-
*/
|
|
63
|
-
function convertURIToJsonObject(uri, opts) {
|
|
64
|
-
if (!uri || !(opts === null || opts === void 0 ? void 0 : opts.requiredProperties.every((p) => uri.includes(p)))) {
|
|
65
|
-
throw new Error(types_1.BAD_PARAMS);
|
|
66
|
-
}
|
|
67
|
-
const uriComponents = getURIComponentsAsArray(uri, opts === null || opts === void 0 ? void 0 : opts.arrayTypeProperties);
|
|
68
|
-
return decodeJsonProperties(uriComponents);
|
|
69
|
-
}
|
|
70
|
-
exports.convertURIToJsonObject = convertURIToJsonObject;
|
|
71
|
-
function decodeJsonProperties(parts) {
|
|
72
|
-
const json = {};
|
|
73
|
-
for (const key in parts) {
|
|
74
|
-
const value = parts[key];
|
|
75
|
-
if (!value) {
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
if (Array.isArray(value)) {
|
|
79
|
-
if (value.length > 1) {
|
|
80
|
-
json[decodeURIComponent(key)] = value.map((v) => decodeURIComponent(v));
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
json[decodeURIComponent(key)] = decodeURIComponent(value[0]);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
const isBool = typeof value == 'boolean';
|
|
87
|
-
const isNumber = typeof value == 'number';
|
|
88
|
-
const isString = typeof value == 'string';
|
|
89
|
-
if (isBool || isNumber) {
|
|
90
|
-
json[decodeURIComponent(key)] = value;
|
|
91
|
-
}
|
|
92
|
-
else if (isString) {
|
|
93
|
-
const decoded = decodeURIComponent(value);
|
|
94
|
-
if (decoded.startsWith('{') && decoded.endsWith('}')) {
|
|
95
|
-
json[decodeURIComponent(key)] = JSON.parse(decoded);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
json[decodeURIComponent(key)] = decoded;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return json;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* @function get URI Components as Array
|
|
106
|
-
* @param uri string
|
|
107
|
-
* @param arrayType array of string containing array like keys
|
|
108
|
-
*/
|
|
109
|
-
function getURIComponentsAsArray(uri, arrayType) {
|
|
110
|
-
const parts = uri.includes('?') ? uri.split('?')[1] : uri.includes('://') ? uri.split('://')[1] : uri;
|
|
111
|
-
const json = [];
|
|
112
|
-
const dict = parts.split('&');
|
|
113
|
-
for (const entry of dict) {
|
|
114
|
-
const pair = entry.split('=');
|
|
115
|
-
if (arrayType === null || arrayType === void 0 ? void 0 : arrayType.includes(pair[0])) {
|
|
116
|
-
if (json[pair[0]] !== undefined) {
|
|
117
|
-
json[pair[0]].push(pair[1]);
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
json[pair[0]] = [pair[1]];
|
|
121
|
-
}
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
json[pair[0]] = pair[1];
|
|
125
|
-
}
|
|
126
|
-
return json;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* @function customEncodeURIComponent is used to encode chars that are not encoded by default
|
|
130
|
-
* @param searchValue The pattern/regexp to find the char(s) to be encoded
|
|
131
|
-
* @param uriComponent query string
|
|
132
|
-
*/
|
|
133
|
-
function customEncodeURIComponent(uriComponent, searchValue) {
|
|
134
|
-
// -_.!~*'() are not escaped because they are considered safe.
|
|
135
|
-
// Add them to the regex as you need
|
|
136
|
-
return encodeURIComponent(uriComponent).replace(searchValue, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
137
|
-
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5jb2RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZnVuY3Rpb25zL0VuY29kaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUE2RjtBQUU3Rjs7Ozs7O0dBTUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxJQUFhLEVBQUUsSUFBMEI7O0lBQ3hFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNqRDtJQUNELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUVuQixTQUFTLHdCQUF3QixDQUFDLEdBQVc7UUFDM0MsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsU0FBUztTQUNWO1FBQ0QsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxDQUFBLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGlCQUFpQiwwQ0FBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUEsRUFBRTtZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEMsU0FBUztTQUNWO1FBQ0QsSUFBSSxDQUFBLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLG1CQUFtQiwwQ0FBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwRSxPQUFPLENB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
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare class NotFoundError extends Error {
|
|
2
|
-
constructor(message: string);
|
|
3
|
-
}
|
|
4
|
-
export declare function getJson<T>(URL: string): Promise<T>;
|
|
5
|
-
export declare function formPost(url: string, body: BodyInit, opts?: {
|
|
6
|
-
bearerToken?: string;
|
|
7
|
-
contentType?: string;
|
|
8
|
-
accept?: string;
|
|
9
|
-
customHeaders?: HeadersInit;
|
|
10
|
-
}): Promise<Response>;
|
|
11
|
-
export declare function post(url: string, body: BodyInit, opts?: {
|
|
12
|
-
bearerToken?: string;
|
|
13
|
-
contentType?: string;
|
|
14
|
-
accept?: string;
|
|
15
|
-
customHeaders?: HeadersInit;
|
|
16
|
-
}): Promise<Response>;
|
|
17
|
-
export declare function isValidURL(url: string): boolean;
|
|
@@ -1,133 +0,0 @@
|
|
|
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.isValidURL = exports.post = exports.formPost = exports.getJson = exports.NotFoundError = void 0;
|
|
16
|
-
const cross_fetch_1 = require("cross-fetch");
|
|
17
|
-
const debug_1 = __importDefault(require("debug"));
|
|
18
|
-
const types_1 = require("../types");
|
|
19
|
-
const debug = (0, debug_1.default)('sphereon:oid4vci:http');
|
|
20
|
-
class NotFoundError extends Error {
|
|
21
|
-
constructor(message) {
|
|
22
|
-
super(message);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.NotFoundError = NotFoundError;
|
|
26
|
-
function getJson(URL) {
|
|
27
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
-
let message = '';
|
|
29
|
-
debug(`Fetching well-known URL: ${URL}`);
|
|
30
|
-
const response = yield (0, cross_fetch_1.fetch)(URL);
|
|
31
|
-
if (!response) {
|
|
32
|
-
message = 'no response returned';
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
if (response.status && response.status < 400) {
|
|
36
|
-
const json = yield response.json();
|
|
37
|
-
debug(`Well-knonw response: ${JSON.stringify(json, null, 2)}`);
|
|
38
|
-
return json;
|
|
39
|
-
}
|
|
40
|
-
else if (response.status === 404) {
|
|
41
|
-
throw new NotFoundError(`URL ${URL} was not found`);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
message = `${response.status}:${response.statusText}, ${yield response.text()}`;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
debug(`Well-known url ${URL} gave an error: ${message}`);
|
|
48
|
-
throw new Error('error: ' + message);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
exports.getJson = getJson;
|
|
52
|
-
function formPost(url, body, opts) {
|
|
53
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
return yield post(url, body, (opts === null || opts === void 0 ? void 0 : opts.contentType) ? Object.assign({}, opts) : Object.assign({ contentType: types_1.Encoding.FORM_URL_ENCODED }, opts));
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
exports.formPost = formPost;
|
|
58
|
-
function post(url, body, opts) {
|
|
59
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
let message = '';
|
|
61
|
-
const headers = (opts === null || opts === void 0 ? void 0 : opts.customHeaders) ? opts.customHeaders : [];
|
|
62
|
-
if (opts === null || opts === void 0 ? void 0 : opts.bearerToken) {
|
|
63
|
-
headers['Authorization'] = `Bearer ${opts.bearerToken}`;
|
|
64
|
-
}
|
|
65
|
-
headers['Content-Type'] = (opts === null || opts === void 0 ? void 0 : opts.contentType) ? opts.contentType : 'application/json';
|
|
66
|
-
headers['Accept'] = (opts === null || opts === void 0 ? void 0 : opts.accept) ? opts.accept : 'application/json';
|
|
67
|
-
const payload = {
|
|
68
|
-
method: 'POST',
|
|
69
|
-
headers,
|
|
70
|
-
body,
|
|
71
|
-
};
|
|
72
|
-
try {
|
|
73
|
-
// TODO: Remove the console.logs!
|
|
74
|
-
console.log(`START fetching url: ${url}`);
|
|
75
|
-
console.log('token (if any) and body:');
|
|
76
|
-
console.log('==========================');
|
|
77
|
-
console.log(opts.bearerToken);
|
|
78
|
-
console.log(JSON.stringify(body));
|
|
79
|
-
console.log('==========================');
|
|
80
|
-
console.log(`Headers: ${JSON.stringify(payload.headers)}`);
|
|
81
|
-
const response = yield (0, cross_fetch_1.fetch)(url, payload);
|
|
82
|
-
if (response && response.status >= 200 && response.status < 400) {
|
|
83
|
-
const logResponse = response.clone();
|
|
84
|
-
try {
|
|
85
|
-
debug(`Success response with status ${logResponse.status}. Headers: ${JSON.stringify(logResponse.headers)}`);
|
|
86
|
-
console.log(`Success response: ${yield logResponse.text()}`);
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
console.log('success response did throw error: ' + error.message);
|
|
90
|
-
}
|
|
91
|
-
console.log(`END fetching url: ${url}`);
|
|
92
|
-
return response;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
if (response) {
|
|
96
|
-
const logResponse = response.clone();
|
|
97
|
-
console.log(`Response with status ${logResponse.status} and status text ${logResponse.statusText} with headers ${JSON.stringify(logResponse.headers)})}`);
|
|
98
|
-
try {
|
|
99
|
-
message = `${logResponse.status}:${logResponse.statusText}, response: ${yield logResponse.text()}`;
|
|
100
|
-
}
|
|
101
|
-
catch (jsonerror) {
|
|
102
|
-
console.log(`accessing error body as json failed. ${jsonerror.message}`);
|
|
103
|
-
message = `${logResponse.status}:${logResponse.statusText}, ${yield logResponse.text()}`;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
console.log(`No response received for ${url}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
const err = error;
|
|
113
|
-
console.log(`Error: ${JSON.stringify(err.stack)} ${error.message}`);
|
|
114
|
-
console.log(`END fetching url: ${url}`);
|
|
115
|
-
throw new Error(`${error.message}`);
|
|
116
|
-
}
|
|
117
|
-
console.log(`unexpected Error: ${JSON.stringify(message)}`);
|
|
118
|
-
console.log(`END fetching url: ${url}`);
|
|
119
|
-
throw new Error('unexpected error: ' + message);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
exports.post = post;
|
|
123
|
-
function isValidURL(url) {
|
|
124
|
-
const urlPattern = new RegExp('^(https?:\\/\\/)?' + // validate protocol
|
|
125
|
-
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // validate domain name
|
|
126
|
-
'((\\d{1,3}\\.){3}\\d{1,3}))' + // validate OR ip (v4) address
|
|
127
|
-
'(\\:\\d+)?(\\/[-a-z\\d%_.~+:]*)*' + // validate port and path
|
|
128
|
-
'(\\?[;&a-z\\d%_.~+=-]*)?' + // validate query string
|
|
129
|
-
'(\\#[-a-z\\d_]*)?$', 'i'); // validate fragment locator
|
|
130
|
-
return !!urlPattern.test(url);
|
|
131
|
-
}
|
|
132
|
-
exports.isValidURL = isValidURL;
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Z1bmN0aW9ucy9IdHRwVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQW9DO0FBQ3BDLGtEQUEwQjtBQUUxQixvQ0FBb0M7QUFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBQSxlQUFLLEVBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUU3QyxNQUFhLGFBQWMsU0FBUSxLQUFLO0lBQ3RDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBSkQsc0NBSUM7QUFFRCxTQUFzQixPQUFPLENBQUksR0FBVzs7UUFDMUMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWpCLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsbUJBQUssRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxHQUFHLHNCQUFzQixDQUFDO1NBQ2xDO2FBQU07WUFDTCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQzVDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQyxLQUFLLENBQUMsd0JBQXdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sSUFBUyxDQUFDO2FBQ2xCO2lCQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ2xDLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0wsT0FB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
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ProofOfPossession, ProofOfPossessionOpts } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* createProofOfPossession creates and returns the ProofOfPossession object
|
|
4
|
-
* @param opts
|
|
5
|
-
* - jwtSignerArgs: The arguments to create the signature
|
|
6
|
-
* - jwtSignerCallback: function to sign the proof
|
|
7
|
-
* - jwtVerifyCallback: function to verify if JWT is valid
|
|
8
|
-
*/
|
|
9
|
-
export declare function createProofOfPossession(opts: ProofOfPossessionOpts): Promise<ProofOfPossession>;
|
|
@@ -1,76 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.createProofOfPossession = void 0;
|
|
13
|
-
const types_1 = require("../types");
|
|
14
|
-
/**
|
|
15
|
-
* createProofOfPossession creates and returns the ProofOfPossession object
|
|
16
|
-
* @param opts
|
|
17
|
-
* - jwtSignerArgs: The arguments to create the signature
|
|
18
|
-
* - jwtSignerCallback: function to sign the proof
|
|
19
|
-
* - jwtVerifyCallback: function to verify if JWT is valid
|
|
20
|
-
*/
|
|
21
|
-
function createProofOfPossession(opts) {
|
|
22
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
if (!opts.jwtSignerCallback || !opts.jwtSignerArgs) {
|
|
24
|
-
throw new Error(types_1.BAD_PARAMS);
|
|
25
|
-
}
|
|
26
|
-
const signerArgs = setJWSDefaults(opts.jwtSignerArgs, opts.issuerURL, opts.clientId);
|
|
27
|
-
const jwt = yield opts.jwtSignerCallback(signerArgs);
|
|
28
|
-
try {
|
|
29
|
-
if (opts.jwtVerifyCallback) {
|
|
30
|
-
const algorithm = opts.jwtSignerArgs.header.alg;
|
|
31
|
-
yield opts.jwtVerifyCallback({ jws: jwt, key: opts.jwtSignerArgs.publicKey, algorithms: [algorithm] });
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
partiallyValidateJWS(jwt);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch (_a) {
|
|
38
|
-
throw new Error(types_1.JWS_NOT_VALID);
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
proof_type: types_1.ProofType.JWT,
|
|
42
|
-
jwt,
|
|
43
|
-
};
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
exports.createProofOfPossession = createProofOfPossession;
|
|
47
|
-
function partiallyValidateJWS(jws) {
|
|
48
|
-
if (jws.split('.').length !== 3 || !jws.startsWith('ey')) {
|
|
49
|
-
throw new Error(types_1.JWS_NOT_VALID);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function setJWSDefaults(args, issuerUrl, clientId) {
|
|
53
|
-
const now = +new Date();
|
|
54
|
-
const aud = args.payload.aud ? args.payload.aud : issuerUrl;
|
|
55
|
-
if (!aud) {
|
|
56
|
-
throw new Error('No issuer url provided');
|
|
57
|
-
}
|
|
58
|
-
const iss = args.payload.iss ? args.payload.iss : clientId;
|
|
59
|
-
if (!iss) {
|
|
60
|
-
throw new Error('No clientId provided');
|
|
61
|
-
}
|
|
62
|
-
const defaultPayload = {
|
|
63
|
-
aud,
|
|
64
|
-
iss,
|
|
65
|
-
iat: args.payload.iat ? args.payload.iat : now / 1000 - 60,
|
|
66
|
-
exp: args.payload.exp ? args.payload.exp : now / 1000 + 10 * 60,
|
|
67
|
-
};
|
|
68
|
-
const defaultHeader = {
|
|
69
|
-
alg: 'ES256',
|
|
70
|
-
typ: 'JWT',
|
|
71
|
-
};
|
|
72
|
-
args.payload = Object.assign(Object.assign({}, defaultPayload), args.payload);
|
|
73
|
-
args.header = Object.assign(Object.assign({}, defaultHeader), args.header);
|
|
74
|
-
return args;
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvb2ZVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Z1bmN0aW9ucy9Qcm9vZlV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsb0NBQWdKO0FBRWhKOzs7Ozs7R0FNRztBQUNILFNBQXNCLHVCQUF1QixDQUFDLElBQTJCOztRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFVLENBQUMsQ0FBQztTQUM3QjtRQUNELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELElBQUk7WUFDRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUNoRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN4RztpQkFBTTtnQkFDTCxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzQjtTQUNGO1FBQUMsV0FBTTtZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQWEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTztZQUNMLFVBQVUsRUFBRSxpQkFBUyxDQUFDLEdBQUc7WUFDekIsR0FBRztTQUNKLENBQUM7SUFDSixDQUFDO0NBQUE7QUFwQkQsMERBb0JDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxHQUFXO0lBQ3ZDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFhLENBQUMsQ0FBQztLQUNoQztBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFtQixFQUFFLFNBQWlCLEVBQUUsUUFBaUI7SUFDL0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzVELElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDUixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0FDM0M7SUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMzRCxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsTUFBTSxjQUFjLEdBQXdCO1FBQzFDLEdBQUc7UUFDSCxHQUFHO1FBQ0gsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFO1FBQzFELEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7S0FDaEUsQ0FBQztJQUNGLE1BQU0sYUFBYSxHQUFjO1FBQy9CLEdBQUcsRUFBRSxPQUFPO1FBQ1osR0FBRyxFQUFFLEtBQUs7S0FDWCxDQUFDO0lBQ0YsSUFBSSxDQUFDLE9BQU8sbUNBQVEsY0FBYyxHQUFLLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQztJQUN0RCxJQUFJLENBQUMsTUFBTSxtQ0FBUSxhQUFhLEdBQUssSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFDO0lBQ25ELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
|