@sphereon/oid4vci-client 0.0.1-unstable.1 → 0.0.1-unstable.2

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.
Files changed (55) hide show
  1. package/dist/main/index.d.ts +1 -0
  2. package/dist/main/index.js +18 -1
  3. package/dist/main/lib/AccessTokenClient.d.ts +19 -0
  4. package/dist/main/lib/AccessTokenClient.js +127 -0
  5. package/dist/main/lib/CredentialRequestClient.d.ts +23 -0
  6. package/dist/main/lib/CredentialRequestClient.js +58 -0
  7. package/dist/main/lib/CredentialRequestClientBuilder.d.ts +14 -0
  8. package/dist/main/lib/CredentialRequestClientBuilder.js +35 -0
  9. package/dist/main/lib/IssuanceInitiation.d.ts +5 -0
  10. package/dist/main/lib/IssuanceInitiation.js +28 -0
  11. package/dist/main/lib/functions/Encoding.d.ts +17 -0
  12. package/dist/main/lib/functions/Encoding.js +138 -0
  13. package/dist/main/lib/functions/HttpUtils.d.ts +2 -0
  14. package/dist/main/lib/functions/HttpUtils.js +54 -0
  15. package/dist/main/lib/functions/ProofUtil.d.ts +9 -0
  16. package/dist/main/lib/functions/ProofUtil.js +71 -0
  17. package/{lib/functions/index.ts → dist/main/lib/functions/index.d.ts} +3 -3
  18. package/dist/main/lib/functions/index.js +20 -0
  19. package/{lib/index.ts → dist/main/lib/index.d.ts} +6 -6
  20. package/dist/main/lib/index.js +23 -0
  21. package/dist/main/lib/types/Authorization.types.d.ts +63 -0
  22. package/dist/main/lib/types/Authorization.types.js +34 -0
  23. package/dist/main/lib/types/CredentialIssuance.types.d.ts +87 -0
  24. package/dist/main/lib/types/CredentialIssuance.types.js +8 -0
  25. package/dist/main/lib/types/Generic.types.d.ts +6 -0
  26. package/dist/main/lib/types/Generic.types.js +3 -0
  27. package/dist/main/lib/types/Oidc4vciErrors.d.ts +3 -0
  28. package/dist/main/lib/types/Oidc4vciErrors.js +7 -0
  29. package/dist/main/lib/types/index.d.ts +4 -0
  30. package/dist/main/lib/types/index.js +21 -0
  31. package/dist/main/tsconfig.build.tsbuildinfo +1 -0
  32. package/package.json +13 -2
  33. package/.eslintrc.json +0 -77
  34. package/.github/workflows/main.yml +0 -34
  35. package/.prettierignore +0 -3
  36. package/docs/preauthorized-code-flow.puml +0 -38
  37. package/index.ts +0 -0
  38. package/jest.config.cjs +0 -26
  39. package/lib/AccessTokenClient.ts +0 -139
  40. package/lib/CredentialRequestClient.ts +0 -61
  41. package/lib/CredentialRequestClientBuilder.ts +0 -46
  42. package/lib/IssuanceInitiation.ts +0 -28
  43. package/lib/functions/Encoding.ts +0 -132
  44. package/lib/functions/HttpUtils.ts +0 -42
  45. package/lib/functions/ProofUtil.ts +0 -56
  46. package/lib/types/OIDC4VCI.types.ts +0 -72
  47. package/lib/types/Oidc4vciErrors.ts +0 -3
  48. package/lib/types/VCIssuance.types.ts +0 -118
  49. package/lib/types/index.ts +0 -3
  50. package/tests/AccessTokenClient.spec.ts +0 -149
  51. package/tests/IT.spec.ts +0 -11
  52. package/tests/IssuanceInitiation.spec.ts +0 -141
  53. package/tests/VcIssuanceClient.spec.ts +0 -159
  54. package/tsconfig.build.json +0 -6
  55. package/tsconfig.json +0 -52
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -1 +1,18 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./lib"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQXFCIn0=
@@ -0,0 +1,19 @@
1
+ import { AccessTokenRequest, AccessTokenRequestOpts, AccessTokenResponse, AuthorizationServerOpts, ErrorResponse, IssuanceInitiationRequestPayload, IssuanceInitiationWithBaseUrl, IssuerTokenEndpointOpts } from './types';
2
+ export declare class AccessTokenClient {
3
+ acquireAccessTokenUsingIssuanceInitiation(issuanceInitiation: IssuanceInitiationWithBaseUrl, clientId: string, opts?: AccessTokenRequestOpts): Promise<AccessTokenResponse | ErrorResponse>;
4
+ acquireAccessTokenUsingRequest(accessTokenRequest: AccessTokenRequest, opts: {
5
+ isPinRequired?: boolean;
6
+ asOpts?: AuthorizationServerOpts;
7
+ issuerOpts?: IssuerTokenEndpointOpts;
8
+ }): Promise<AccessTokenResponse | ErrorResponse>;
9
+ createAccessTokenRequest(issuanceInitiationRequest: IssuanceInitiationRequestPayload, clientId: string, opts?: AccessTokenRequestOpts): Promise<AccessTokenRequest>;
10
+ private assertPreAuthorizedGrantType;
11
+ private assertNumericPin;
12
+ private assertNonEmptyPreAuthorizedCode;
13
+ private assertNonEmptyClientId;
14
+ private validate;
15
+ private sendAuthCode;
16
+ private determineTokenURL;
17
+ private creatTokenURLFromURL;
18
+ private throwNotSupportedFlow;
19
+ }
@@ -0,0 +1,127 @@
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.AccessTokenClient = void 0;
13
+ const ssi_types_1 = require("@sphereon/ssi-types");
14
+ const functions_1 = require("./functions");
15
+ const types_1 = require("./types");
16
+ class AccessTokenClient {
17
+ // private _clientId?: string;
18
+ // private _authorizationServerUrl?: string;
19
+ acquireAccessTokenUsingIssuanceInitiation(issuanceInitiation, clientId, opts) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const { issuanceInitiationRequest } = issuanceInitiation;
22
+ const reqOpts = {
23
+ isPinRequired: issuanceInitiationRequest.user_pin_required || false,
24
+ issuerOpts: { issuer: issuanceInitiationRequest.issuer },
25
+ asOpts: (opts === null || opts === void 0 ? void 0 : opts.asOpts) ? Object.assign({}, opts.asOpts) : undefined,
26
+ };
27
+ return yield this.acquireAccessTokenUsingRequest(yield this.createAccessTokenRequest(issuanceInitiationRequest, clientId, opts), reqOpts);
28
+ });
29
+ }
30
+ acquireAccessTokenUsingRequest(accessTokenRequest, opts) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ this.validate(accessTokenRequest, opts === null || opts === void 0 ? void 0 : opts.isPinRequired);
33
+ const requestTokenURL = (0, functions_1.convertJsonToURI)(accessTokenRequest, {
34
+ baseUrl: this.determineTokenURL(opts === null || opts === void 0 ? void 0 : opts.asOpts, opts === null || opts === void 0 ? void 0 : opts.issuerOpts),
35
+ });
36
+ return this.sendAuthCode(requestTokenURL, accessTokenRequest);
37
+ });
38
+ }
39
+ createAccessTokenRequest(issuanceInitiationRequest, clientId, opts) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ const request = {
42
+ client_id: clientId,
43
+ };
44
+ if (issuanceInitiationRequest.user_pin_required) {
45
+ this.assertNumericPin(true, opts.pin);
46
+ request.user_pin = opts.pin;
47
+ }
48
+ if (issuanceInitiationRequest.pre_authorized_code) {
49
+ request.grant_type = types_1.GrantTypes.PRE_AUTHORIZED_CODE;
50
+ request.pre_authorized_code = issuanceInitiationRequest.pre_authorized_code;
51
+ }
52
+ if (issuanceInitiationRequest.op_state) {
53
+ if (issuanceInitiationRequest.pre_authorized_code) {
54
+ throw new Error('Cannot have both a pre_authorized_code and a op_state in the same initiation request');
55
+ }
56
+ request.grant_type = types_1.GrantTypes.AUTHORIZATION_CODE;
57
+ this.throwNotSupportedFlow();
58
+ }
59
+ return request;
60
+ });
61
+ }
62
+ assertPreAuthorizedGrantType(grantType) {
63
+ if (types_1.GrantTypes.PRE_AUTHORIZED_CODE !== grantType) {
64
+ throw new Error("grant type must be 'urn:ietf:params:oauth:grant-type:pre-authorized_code'");
65
+ }
66
+ }
67
+ assertNumericPin(isPinRequired, pin) {
68
+ if (isPinRequired) {
69
+ if (!pin || pin < 0 || 99999999 < pin) {
70
+ throw new Error('A valid pin consisting of maximal 8 numeric characters must be present.');
71
+ }
72
+ }
73
+ else if (pin) {
74
+ throw new Error('Cannot set a pin, when the pin is not required.');
75
+ }
76
+ }
77
+ assertNonEmptyPreAuthorizedCode(accessTokenRequest) {
78
+ if (!accessTokenRequest.pre_authorized_code) {
79
+ throw new Error('Pre-authorization must be proven by presenting the pre-authorized code. Code must be present.');
80
+ }
81
+ }
82
+ assertNonEmptyClientId(accessTokenRequest) {
83
+ if (!accessTokenRequest.client_id || accessTokenRequest.client_id.length < 1) {
84
+ throw new Error('The client Id must be present.');
85
+ }
86
+ }
87
+ validate(accessTokenRequest, isPinRequired) {
88
+ if (accessTokenRequest.grant_type === types_1.GrantTypes.PRE_AUTHORIZED_CODE) {
89
+ this.assertPreAuthorizedGrantType(accessTokenRequest.grant_type);
90
+ this.assertNonEmptyPreAuthorizedCode(accessTokenRequest);
91
+ this.assertNumericPin(isPinRequired, accessTokenRequest.user_pin);
92
+ this.assertNonEmptyClientId(accessTokenRequest);
93
+ }
94
+ else {
95
+ this.throwNotSupportedFlow();
96
+ }
97
+ }
98
+ sendAuthCode(requestTokenURL, accessTokenRequest) {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ const response = yield (0, functions_1.post)(requestTokenURL, accessTokenRequest);
101
+ return yield response.json();
102
+ });
103
+ }
104
+ determineTokenURL(asOpts, issuerOpts) {
105
+ if (!asOpts && !issuerOpts) {
106
+ throw new Error('Cannot determine token URL if no issuer and no Authorization Server values are present');
107
+ }
108
+ const url = asOpts
109
+ ? this.creatTokenURLFromURL(asOpts.as, asOpts.tokenEndpoint)
110
+ : this.creatTokenURLFromURL(issuerOpts.issuer, issuerOpts.tokenEndpoint);
111
+ if (!url || !ssi_types_1.ObjectUtils.isString(url)) {
112
+ throw new Error('No authorization server token URL present. Cannot acquire access token');
113
+ }
114
+ return url;
115
+ }
116
+ creatTokenURLFromURL(url, tokenEndpoint) {
117
+ const hostname = url.replace(/https?:\/\//, '').split('/')[0];
118
+ const endpoint = tokenEndpoint ? tokenEndpoint : '/token';
119
+ // We always require https
120
+ return `https://${hostname}${endpoint}`;
121
+ }
122
+ throwNotSupportedFlow() {
123
+ throw new Error('Only pre-authorized-code flow is supported');
124
+ }
125
+ }
126
+ exports.AccessTokenClient = AccessTokenClient;
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzVG9rZW5DbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvQWNjZXNzVG9rZW5DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWtEO0FBRWxELDJDQUFxRDtBQUNyRCxtQ0FVaUI7QUFFakIsTUFBYSxpQkFBaUI7SUFDNUIsOEJBQThCO0lBQzlCLDRDQUE0QztJQUUvQix5Q0FBeUMsQ0FDcEQsa0JBQWlELEVBQ2pELFFBQWdCLEVBQ2hCLElBQTZCOztZQUU3QixNQUFNLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztZQUN6RCxNQUFNLE9BQU8sR0FBRztnQkFDZCxhQUFhLEVBQUUseUJBQXlCLENBQUMsaUJBQWlCLElBQUksS0FBSztnQkFDbkUsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixDQUFDLE1BQU0sRUFBRTtnQkFDeEQsTUFBTSxFQUFFLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sRUFBQyxDQUFDLG1CQUFNLElBQUksQ0FBQyxNQUFNLEVBQUcsQ0FBQyxDQUFDLFNBQVM7YUFDdEQsQ0FBQztZQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMseUJBQXlCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVJLENBQUM7S0FBQTtJQUVZLDhCQUE4QixDQUN6QyxrQkFBc0MsRUFDdEMsSUFBeUc7O1lBRXpHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sZUFBZSxHQUFHLElBQUEsNEJBQWdCLEVBQUMsa0JBQWtCLEVBQUU7Z0JBQzNELE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENB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
@@ -0,0 +1,23 @@
1
+ import { CredentialFormat } from '@sphereon/ssi-types';
2
+ import CredentialRequestClientBuilder from './CredentialRequestClientBuilder';
3
+ import { CredentialRequest, CredentialResponse, ErrorResponse, ProofOfPossession, ProofOfPossessionOpts } from './types';
4
+ export declare class CredentialRequestClient {
5
+ _issuanceRequestOpts: Partial<{
6
+ credentialRequestUrl: string;
7
+ credentialType: string | string[];
8
+ format: CredentialFormat | CredentialFormat[];
9
+ proof: ProofOfPossession;
10
+ token: string;
11
+ }>;
12
+ getCredentialRequestUrl(): string;
13
+ constructor(builder: CredentialRequestClientBuilder);
14
+ static builder(): CredentialRequestClientBuilder;
15
+ sendCredentialRequest(request: CredentialRequest, opts?: {
16
+ overrideCredentialRequestUrl?: string;
17
+ overrideToken?: string;
18
+ }): Promise<CredentialResponse | ErrorResponse>;
19
+ createCredentialRequest(proof: ProofOfPossession | ProofOfPossessionOpts, opts?: {
20
+ credentialType?: string | string[];
21
+ format?: CredentialFormat | CredentialFormat[];
22
+ }): Promise<CredentialRequest>;
23
+ }
@@ -0,0 +1,58 @@
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 CredentialRequestClientBuilder_1 = __importDefault(require("./CredentialRequestClientBuilder"));
17
+ const functions_1 = require("./functions");
18
+ const types_1 = require("./types");
19
+ class CredentialRequestClient {
20
+ constructor(builder) {
21
+ this._issuanceRequestOpts = Object.assign({}, builder);
22
+ }
23
+ getCredentialRequestUrl() {
24
+ return this._issuanceRequestOpts.credentialRequestUrl;
25
+ }
26
+ static builder() {
27
+ return new CredentialRequestClientBuilder_1.default();
28
+ }
29
+ sendCredentialRequest(request, opts) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const requestUrl = (opts === null || opts === void 0 ? void 0 : opts.overrideCredentialRequestUrl)
32
+ ? opts.overrideCredentialRequestUrl
33
+ : this._issuanceRequestOpts.credentialRequestUrl;
34
+ if (!(0, functions_1.isValidURL)(requestUrl)) {
35
+ throw new Error(types_1.URL_NOT_VALID);
36
+ }
37
+ const requestToken = (opts === null || opts === void 0 ? void 0 : opts.overrideToken) ? opts.overrideToken : this._issuanceRequestOpts.token;
38
+ const response = yield (0, functions_1.post)(requestUrl, request, requestToken);
39
+ const responseJson = yield response.json();
40
+ if (responseJson.error) {
41
+ return Object.assign({}, responseJson);
42
+ }
43
+ return Object.assign({}, responseJson);
44
+ });
45
+ }
46
+ createCredentialRequest(proof, opts) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ const proofOfPossession = 'jwt' in proof ? proof : yield (0, functions_1.createProofOfPossession)(proof);
49
+ return {
50
+ type: (opts === null || opts === void 0 ? void 0 : opts.credentialType) ? opts.credentialType : this._issuanceRequestOpts.credentialType,
51
+ format: (opts === null || opts === void 0 ? void 0 : opts.format) ? opts.format : this._issuanceRequestOpts.format,
52
+ proof: proofOfPossession,
53
+ };
54
+ });
55
+ }
56
+ }
57
+ exports.CredentialRequestClient = CredentialRequestClient;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlZGVudGlhbFJlcXVlc3RDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvQ3JlZGVudGlhbFJlcXVlc3RDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsc0dBQThFO0FBQzlFLDJDQUF3RTtBQUN4RSxtQ0FBd0k7QUFFeEksTUFBYSx1QkFBdUI7SUFhbEMsWUFBbUIsT0FBdUM7UUFDeEQsSUFBSSxDQUFDLG9CQUFvQixxQkFBUSxPQUFPLENBQUUsQ0FBQztJQUM3QyxDQUFDO0lBTk0sdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDO0lBQ3hELENBQUM7SUFNTSxNQUFNLENBQUMsT0FBTztRQUNuQixPQUFPLElBQUksd0NBQThCLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRVkscUJBQXFCLENBQ2hDLE9BQTBCLEVBQzFCLElBQXdFOztZQUV4RSxNQUFNLFVBQVUsR0FBVyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSw0QkFBNEI7Z0JBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCO2dCQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELElBQUksQ0FBQyxJQUFBLHNCQUFVLEVBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQWEsQ0FBQyxDQUFDO2FBQ2hDO1lBQ0QsTUFBTSxZQUFZLEdBQVcsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ3hHLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxnQkFBSSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDL0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUN0QixPQUFPLGtCQUFLLFlBQVksQ0FBbUIsQ0FBQzthQUM3QztZQUNELE9BQU8sa0JBQUssWUFBWSxDQUF3QixDQUFDO1FBQ25ELENBQUM7S0FBQTtJQUVZLHVCQUF1QixDQUNsQyxLQUFnRCxFQUNoRCxJQUdDOztZQUVELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUEsbUNBQXVCLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEYsT0FBTztnQkFDTCxJQUFJLEVBQUUsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYztnQkFDM0YsTUFBTSxFQUFFLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU07Z0JBQ3JFLEtBQUssRUFBRSxpQkFBaUI7YUFDekIsQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGO0FBdERELDBEQXNEQyJ9
@@ -0,0 +1,14 @@
1
+ import { CredentialFormat } from '@sphereon/ssi-types';
2
+ import { CredentialRequestClient } from './CredentialRequestClient';
3
+ import { IssuanceInitiationRequestPayload } from './types';
4
+ export default class CredentialRequestClientBuilder {
5
+ credentialRequestUrl: string;
6
+ credentialType: string | string[];
7
+ format: CredentialFormat | CredentialFormat[];
8
+ static fromIssuanceInitiationURI(issuanceInitiation: string): CredentialRequestClientBuilder;
9
+ static fromIssuanceInitiationRequest(issuanceInitiation: IssuanceInitiationRequestPayload): CredentialRequestClientBuilder;
10
+ withCredentialRequestUrl(credentialRequestUrl: string): CredentialRequestClientBuilder;
11
+ withCredentialType(credentialType: string | string[]): CredentialRequestClientBuilder;
12
+ withFormat(format: CredentialFormat | CredentialFormat[]): CredentialRequestClientBuilder;
13
+ build(): CredentialRequestClient;
14
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const CredentialRequestClient_1 = require("./CredentialRequestClient");
4
+ const functions_1 = require("./functions");
5
+ class CredentialRequestClientBuilder {
6
+ static fromIssuanceInitiationURI(issuanceInitiation) {
7
+ return CredentialRequestClientBuilder.fromIssuanceInitiationRequest((0, functions_1.convertURIToJsonObject)(issuanceInitiation, {
8
+ arrayTypeProperties: ['credential_type'],
9
+ requiredProperties: ['issuer', 'credential_type'],
10
+ }));
11
+ }
12
+ static fromIssuanceInitiationRequest(issuanceInitiation) {
13
+ const builder = new CredentialRequestClientBuilder();
14
+ builder.withCredentialRequestUrl(issuanceInitiation.issuer);
15
+ builder.withCredentialType(issuanceInitiation.credential_type);
16
+ return builder;
17
+ }
18
+ withCredentialRequestUrl(credentialRequestUrl) {
19
+ this.credentialRequestUrl = credentialRequestUrl;
20
+ return this;
21
+ }
22
+ withCredentialType(credentialType) {
23
+ this.credentialType = credentialType;
24
+ return this;
25
+ }
26
+ withFormat(format) {
27
+ this.format = format;
28
+ return this;
29
+ }
30
+ build() {
31
+ return new CredentialRequestClient_1.CredentialRequestClient(this);
32
+ }
33
+ }
34
+ exports.default = CredentialRequestClientBuilder;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JlZGVudGlhbFJlcXVlc3RDbGllbnRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL0NyZWRlbnRpYWxSZXF1ZXN0Q2xpZW50QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLHVFQUFvRTtBQUNwRSwyQ0FBcUQ7QUFHckQsTUFBcUIsOEJBQThCO0lBS2pELE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBMEI7UUFDekQsT0FBTyw4QkFBOEIsQ0FBQyw2QkFBNkIsQ0FDakUsSUFBQSxrQ0FBc0IsRUFBQyxrQkFBa0IsRUFBRTtZQUN6QyxtQkFBbUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ3hDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1NBQ2xELENBQXFDLENBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLDZCQUE2QixDQUFDLGtCQUFvRDtRQUN2RixNQUFNLE9BQU8sR0FBRyxJQUFJLDhCQUE4QixFQUFFLENBQUM7UUFDckQsT0FBTyxDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsb0JBQTRCO1FBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUFpQztRQUNsRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBNkM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxpREFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUF2Q0QsaURBdUNDIn0=
@@ -0,0 +1,5 @@
1
+ import { IssuanceInitiationWithBaseUrl } from './types';
2
+ export default class IssuanceInitiation {
3
+ static fromURI(issuanceInitiationURI: string): IssuanceInitiationWithBaseUrl;
4
+ static toURI(issuanceInitiation: IssuanceInitiationWithBaseUrl): string;
5
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const functions_1 = require("./functions");
4
+ class IssuanceInitiation {
5
+ static fromURI(issuanceInitiationURI) {
6
+ if (!issuanceInitiationURI.includes('?')) {
7
+ throw new Error('Invalid Issuance Initiation Request Payload');
8
+ }
9
+ const baseUrl = issuanceInitiationURI.split('?')[0];
10
+ const issuanceInitiationRequest = (0, functions_1.convertURIToJsonObject)(issuanceInitiationURI, {
11
+ arrayTypeProperties: ['credential_type'],
12
+ requiredProperties: ['issuer', 'credential_type'],
13
+ });
14
+ return {
15
+ baseUrl,
16
+ issuanceInitiationRequest,
17
+ };
18
+ }
19
+ static toURI(issuanceInitiation) {
20
+ return (0, functions_1.convertJsonToURI)(issuanceInitiation.issuanceInitiationRequest, {
21
+ baseUrl: issuanceInitiation.baseUrl,
22
+ arrayTypeProperties: ['credential_type'],
23
+ uriTypeProperties: ['issuer', 'credential_type'],
24
+ });
25
+ }
26
+ }
27
+ exports.default = IssuanceInitiation;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNzdWFuY2VJbml0aWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL0lzc3VhbmNlSW5pdGlhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUF1RTtBQUd2RSxNQUFxQixrQkFBa0I7SUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBNkI7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDaEU7UUFDRCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsTUFBTSx5QkFBeUIsR0FBRyxJQUFBLGtDQUFzQixFQUFDLHFCQUFxQixFQUFFO1lBQzlFLG1CQUFtQixFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDeEMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUM7U0FDbEQsQ0FBcUMsQ0FBQztRQUV2QyxPQUFPO1lBQ0wsT0FBTztZQUNQLHlCQUF5QjtTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWlEO1FBQzVELE9BQU8sSUFBQSw0QkFBZ0IsRUFBQyxrQkFBa0IsQ0FBQyx5QkFBeUIsRUFBRTtZQUNwRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsT0FBTztZQUNuQyxtQkFBbUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ3hDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1NBQ2pELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhCRCxxQ0F3QkMifQ==
@@ -0,0 +1,17 @@
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;
@@ -0,0 +1,138 @@
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.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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
@@ -0,0 +1,2 @@
1
+ export declare function post(url: string, body: unknown, bearerToken?: string): Promise<Response>;
2
+ export declare function isValidURL(url: string): boolean;
@@ -0,0 +1,54 @@
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.isValidURL = exports.post = void 0;
13
+ const cross_fetch_1 = require("cross-fetch");
14
+ function post(url, body, bearerToken) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ let message = '';
17
+ try {
18
+ const payload = {
19
+ method: 'POST',
20
+ body: JSON.stringify(body),
21
+ };
22
+ if (bearerToken) {
23
+ payload.headers = {
24
+ Authorization: `Bearer ${bearerToken}`,
25
+ };
26
+ }
27
+ const response = yield (0, cross_fetch_1.fetch)(url, payload);
28
+ if (response && response.status && response.status < 400) {
29
+ return response;
30
+ }
31
+ else {
32
+ if (response) {
33
+ message = `${response.status}:${response.statusText}, ${yield response.text()}`;
34
+ }
35
+ }
36
+ }
37
+ catch (error) {
38
+ throw new Error(`${error.message}`);
39
+ }
40
+ throw new Error('unexpected error: ' + message);
41
+ });
42
+ }
43
+ exports.post = post;
44
+ function isValidURL(url) {
45
+ const urlPattern = new RegExp('^(https:\\/\\/)?' + // validate protocol
46
+ '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // validate domain name
47
+ '((\\d{1,3}\\.){3}\\d{1,3}))' + // validate OR ip (v4) address
48
+ '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // validate port and path
49
+ '(\\?[;&a-z\\d%_.~+=-]*)?' + // validate query string
50
+ '(\\#[-a-z\\d_]*)?$', 'i'); // validate fragment locator
51
+ return !!urlPattern.test(url);
52
+ }
53
+ exports.isValidURL = isValidURL;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Z1bmN0aW9ucy9IdHRwVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQW9DO0FBRXBDLFNBQXNCLElBQUksQ0FBQyxHQUFXLEVBQUUsSUFBYSxFQUFFLFdBQW9COztRQUN6RSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFnQjtnQkFDM0IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2FBQzNCLENBQUM7WUFFRixJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLENBQUMsT0FBTyxHQUFHO29CQUNoQixhQUFhLEVBQUUsVUFBVSxXQUFXLEVBQUU7aUJBQ3ZDLENBQUM7YUFDSDtZQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxtQkFBSyxFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUN4RCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtpQkFBTTtnQkFDTCxJQUFJLFFBQVEsRUFBRTtvQkFDWixPQUFPLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztpQkFDakY7YUFDRjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUksS0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDaEQ7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FBQTtBQTFCRCxvQkEwQkM7QUFFRCxTQUFnQixVQUFVLENBQUMsR0FBVztJQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FDM0Isa0JBQWtCLEdBQUcsb0JBQW9CO1FBQ3ZDLGtEQUFrRCxHQUFHLHVCQUF1QjtRQUM1RSw2QkFBNkIsR0FBRyw4QkFBOEI7UUFDOUQsaUNBQWlDLEdBQUcseUJBQXlCO1FBQzdELDBCQUEwQixHQUFHLHdCQUF3QjtRQUNyRCxvQkFBb0IsRUFDdEIsR0FBRyxDQUNKLENBQUMsQ0FBQyw0QkFBNEI7SUFDL0IsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBWEQsZ0NBV0MifQ==
@@ -0,0 +1,9 @@
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>;