@pagopa/io-react-native-wallet 0.15.3 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/commonjs/credential/index.js +3 -1
- package/lib/commonjs/credential/index.js.map +1 -1
- package/lib/commonjs/credential/issuance/04-complete-user-authorization.js +19 -4
- package/lib/commonjs/credential/issuance/04-complete-user-authorization.js.map +1 -1
- package/lib/commonjs/credential/issuance/05-authorize-access.js +9 -12
- package/lib/commonjs/credential/issuance/05-authorize-access.js.map +1 -1
- package/lib/commonjs/credential/issuance/06-obtain-credential.js +13 -2
- package/lib/commonjs/credential/issuance/06-obtain-credential.js.map +1 -1
- package/lib/commonjs/credential/status/01-start-flow.js +2 -0
- package/lib/commonjs/credential/status/01-start-flow.js.map +1 -0
- package/lib/commonjs/credential/status/02-status-attestation.js +72 -0
- package/lib/commonjs/credential/status/02-status-attestation.js.map +1 -0
- package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js +52 -0
- package/lib/commonjs/credential/status/03-verify-and-parse-status-attestation.js.map +1 -0
- package/lib/commonjs/credential/status/errors.js +38 -0
- package/lib/commonjs/credential/status/errors.js.map +1 -0
- package/lib/commonjs/credential/status/index.js +27 -0
- package/lib/commonjs/credential/status/index.js.map +1 -0
- package/lib/commonjs/credential/status/types.js +48 -0
- package/lib/commonjs/credential/status/types.js.map +1 -0
- package/lib/commonjs/utils/errors.js +44 -2
- package/lib/commonjs/utils/errors.js.map +1 -1
- package/lib/commonjs/utils/misc.js +41 -3
- package/lib/commonjs/utils/misc.js.map +1 -1
- package/lib/commonjs/utils/par.js +1 -1
- package/lib/commonjs/utils/par.js.map +1 -1
- package/lib/module/credential/index.js +2 -1
- package/lib/module/credential/index.js.map +1 -1
- package/lib/module/credential/issuance/04-complete-user-authorization.js +21 -6
- package/lib/module/credential/issuance/04-complete-user-authorization.js.map +1 -1
- package/lib/module/credential/issuance/05-authorize-access.js +9 -12
- package/lib/module/credential/issuance/05-authorize-access.js.map +1 -1
- package/lib/module/credential/issuance/06-obtain-credential.js +13 -3
- package/lib/module/credential/issuance/06-obtain-credential.js.map +1 -1
- package/lib/module/credential/status/01-start-flow.js +2 -0
- package/lib/module/credential/status/01-start-flow.js.map +1 -0
- package/lib/module/credential/status/02-status-attestation.js +64 -0
- package/lib/module/credential/status/02-status-attestation.js.map +1 -0
- package/lib/module/credential/status/03-verify-and-parse-status-attestation.js +46 -0
- package/lib/module/credential/status/03-verify-and-parse-status-attestation.js.map +1 -0
- package/lib/module/credential/status/errors.js +30 -0
- package/lib/module/credential/status/errors.js.map +1 -0
- package/lib/module/credential/status/index.js +5 -0
- package/lib/module/credential/status/index.js.map +1 -0
- package/lib/module/credential/status/types.js +40 -0
- package/lib/module/credential/status/types.js.map +1 -0
- package/lib/module/utils/errors.js +40 -1
- package/lib/module/utils/errors.js.map +1 -1
- package/lib/module/utils/misc.js +38 -3
- package/lib/module/utils/misc.js.map +1 -1
- package/lib/module/utils/par.js +1 -1
- package/lib/module/utils/par.js.map +1 -1
- package/lib/typescript/credential/index.d.ts +2 -1
- package/lib/typescript/credential/index.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts +3 -1
- package/lib/typescript/credential/issuance/04-complete-user-authorization.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/05-authorize-access.d.ts +2 -1
- package/lib/typescript/credential/issuance/05-authorize-access.d.ts.map +1 -1
- package/lib/typescript/credential/issuance/06-obtain-credential.d.ts +3 -1
- package/lib/typescript/credential/issuance/06-obtain-credential.d.ts.map +1 -1
- package/lib/typescript/credential/status/01-start-flow.d.ts +10 -0
- package/lib/typescript/credential/status/01-start-flow.d.ts.map +1 -0
- package/lib/typescript/credential/status/02-status-attestation.d.ts +20 -0
- package/lib/typescript/credential/status/02-status-attestation.d.ts.map +1 -0
- package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts +24 -0
- package/lib/typescript/credential/status/03-verify-and-parse-status-attestation.d.ts.map +1 -0
- package/lib/typescript/credential/status/errors.d.ts +14 -0
- package/lib/typescript/credential/status/errors.d.ts.map +1 -0
- package/lib/typescript/credential/status/index.d.ts +7 -0
- package/lib/typescript/credential/status/index.d.ts.map +1 -0
- package/lib/typescript/credential/status/types.d.ts +305 -0
- package/lib/typescript/credential/status/types.d.ts.map +1 -0
- package/lib/typescript/utils/errors.d.ts +31 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -1
- package/lib/typescript/utils/misc.d.ts +18 -1
- package/lib/typescript/utils/misc.d.ts.map +1 -1
- package/lib/typescript/utils/par.d.ts +1 -4
- package/lib/typescript/utils/par.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/credential/index.ts +2 -1
- package/src/credential/issuance/04-complete-user-authorization.ts +36 -6
- package/src/credential/issuance/05-authorize-access.ts +13 -15
- package/src/credential/issuance/06-obtain-credential.ts +24 -4
- package/src/credential/status/01-start-flow.ts +9 -0
- package/src/credential/status/02-status-attestation.ts +101 -0
- package/src/credential/status/03-verify-and-parse-status-attestation.ts +60 -0
- package/src/credential/status/errors.ts +31 -0
- package/src/credential/status/index.ts +22 -0
- package/src/credential/status/types.ts +43 -0
- package/src/utils/errors.ts +46 -1
- package/src/utils/misc.ts +45 -4
- package/src/utils/par.ts +2 -2
@@ -3,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.WalletProviderResponseError = exports.WalletInstanceRevokedError = exports.WalletInstanceNotFoundError = exports.WalletInstanceAttestationIssuingError = exports.ValidationFailed = exports.PidMetadataError = exports.PidIssuingError = exports.NoSuitableKeysFoundInEntityConfiguration = exports.IoWalletError = exports.ClaimsNotFoundInToken = exports.ClaimsNotFoundBetweenDislosures = exports.AuthorizationIdpError = exports.AuthorizationError = exports.AuthRequestDecodeError = void 0;
|
6
|
+
exports.serializeAttrs = exports.WalletProviderResponseError = exports.WalletInstanceRevokedError = exports.WalletInstanceNotFoundError = exports.WalletInstanceAttestationIssuingError = exports.ValidationFailed = exports.UnexpectedStatusCodeError = exports.PidMetadataError = exports.PidIssuingError = exports.OperationAbortedError = exports.NoSuitableKeysFoundInEntityConfiguration = exports.IoWalletError = exports.ClaimsNotFoundInToken = exports.ClaimsNotFoundBetweenDislosures = exports.AuthorizationIdpError = exports.AuthorizationError = exports.AuthRequestDecodeError = void 0;
|
7
7
|
/**
|
8
8
|
* utility to format a set of attributes into an error message string
|
9
9
|
*
|
@@ -30,6 +30,7 @@ const serializeAttrs = attrs => Object.entries(attrs).map(_ref => {
|
|
30
30
|
* }
|
31
31
|
* ```
|
32
32
|
*/
|
33
|
+
exports.serializeAttrs = serializeAttrs;
|
33
34
|
class IoWalletError extends Error {
|
34
35
|
/** A unique error code for the particular error subclass. */
|
35
36
|
static get code() {
|
@@ -46,11 +47,32 @@ class IoWalletError extends Error {
|
|
46
47
|
(_Error$captureStackTr = Error.captureStackTrace) === null || _Error$captureStackTr === void 0 ? void 0 : _Error$captureStackTr.call(Error, this, this.constructor);
|
47
48
|
}
|
48
49
|
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* An error subclass thrown when a Wallet Provider http request has a status code different from the one expected.
|
53
|
+
*/
|
54
|
+
exports.IoWalletError = IoWalletError;
|
55
|
+
class UnexpectedStatusCodeError extends IoWalletError {
|
56
|
+
static get code() {
|
57
|
+
return "ERR_UNEXPECTED_STATUS_CODE";
|
58
|
+
}
|
59
|
+
code = "ERR_UNEXPECTED_STATUS_CODE";
|
60
|
+
|
61
|
+
/** HTTP status code */
|
62
|
+
|
63
|
+
constructor(message, statusCode) {
|
64
|
+
super(serializeAttrs({
|
65
|
+
message,
|
66
|
+
statusCode: statusCode.toString()
|
67
|
+
}));
|
68
|
+
this.statusCode = statusCode;
|
69
|
+
}
|
70
|
+
}
|
49
71
|
/**
|
50
72
|
* An error subclass thrown when validation fail
|
51
73
|
*
|
52
74
|
*/
|
53
|
-
exports.
|
75
|
+
exports.UnexpectedStatusCodeError = UnexpectedStatusCodeError;
|
54
76
|
class ValidationFailed extends IoWalletError {
|
55
77
|
static get code() {
|
56
78
|
return "ERR_IO_WALLET_VALIDATION_FAILED";
|
@@ -335,5 +357,25 @@ class AuthorizationIdpError extends IoWalletError {
|
|
335
357
|
this.errorDescription = errorDescription;
|
336
358
|
}
|
337
359
|
}
|
360
|
+
|
361
|
+
/**
|
362
|
+
* Error subclass thrown when an operation has been aborted.
|
363
|
+
*/
|
338
364
|
exports.AuthorizationIdpError = AuthorizationIdpError;
|
365
|
+
class OperationAbortedError extends IoWalletError {
|
366
|
+
static get code() {
|
367
|
+
return "ERR_IO_WALLET_OPERATION_ABORTED";
|
368
|
+
}
|
369
|
+
code = "ERR_IO_WALLET_OPERATION_ABORTED";
|
370
|
+
|
371
|
+
/** The aborted operation */
|
372
|
+
|
373
|
+
constructor(operation) {
|
374
|
+
super(serializeAttrs({
|
375
|
+
operation
|
376
|
+
}));
|
377
|
+
this.operation = operation;
|
378
|
+
}
|
379
|
+
}
|
380
|
+
exports.OperationAbortedError = OperationAbortedError;
|
339
381
|
//# sourceMappingURL=errors.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["serializeAttrs","attrs","Object","entries","map","_ref","k","v","Array","isArray","join","_","IoWalletError","Error","code","constructor","message","_Error$captureStackTr","name","captureStackTrace","call","
|
1
|
+
{"version":3,"names":["serializeAttrs","attrs","Object","entries","map","_ref","k","v","Array","isArray","join","_","exports","IoWalletError","Error","code","constructor","message","_Error$captureStackTr","name","captureStackTrace","call","UnexpectedStatusCodeError","statusCode","toString","ValidationFailed","claim","arguments","length","undefined","reason","WalletInstanceAttestationIssuingError","AuthRequestDecodeError","PidIssuingError","ClaimsNotFoundBetweenDislosures","claims","c","ClaimsNotFoundInToken","NoSuitableKeysFoundInEntityConfiguration","scenario","PidMetadataError","WalletProviderResponseError","WalletInstanceRevokedError","WalletInstanceNotFoundError","AuthorizationError","AuthorizationIdpError","error","errorDescription","OperationAbortedError","operation"],"sourceRoot":"../../../src","sources":["utils/errors.ts"],"mappings":"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"}
|
@@ -3,16 +3,18 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.until = exports.hasStatus = exports.generateRandomAlphaNumericString = void 0;
|
6
|
+
exports.until = exports.isDefined = exports.hasStatus = exports.getCredentialHashWithouDiscloures = exports.generateRandomAlphaNumericString = exports.createAbortPromiseFromSignal = void 0;
|
7
7
|
var _errors = require("./errors");
|
8
|
+
var _jsSha = require("js-sha256");
|
8
9
|
/**
|
9
10
|
* Check if a response is in the expected status, other
|
10
|
-
* @param status The expected status
|
11
|
+
* @param status - The expected status
|
12
|
+
* @throws {@link UnexpectedStatusCodeError} if the status is different from the one expected
|
11
13
|
* @returns The given response object
|
12
14
|
*/
|
13
15
|
const hasStatus = status => async res => {
|
14
16
|
if (res.status !== status) {
|
15
|
-
throw new _errors.
|
17
|
+
throw new _errors.UnexpectedStatusCodeError(`Http request failed. Expected ${status}, got ${res.status}, url: ${res.url} with response: ${await res.text()}`, res.status);
|
16
18
|
}
|
17
19
|
return res;
|
18
20
|
};
|
@@ -52,5 +54,41 @@ const until = (conditionFunction, timeoutSeconds) => new Promise((resolve, rejec
|
|
52
54
|
};
|
53
55
|
poll();
|
54
56
|
});
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Get the hash of a credential without discloures.
|
60
|
+
* A credential is a string like `header.body.sign~sd1~sd2....` where `~` is the separator between the credential and the discloures.
|
61
|
+
* @param credential - The credential to hash
|
62
|
+
* @returns The hash of the credential without discloures
|
63
|
+
*/
|
55
64
|
exports.until = until;
|
65
|
+
const getCredentialHashWithouDiscloures = async credential => {
|
66
|
+
const tildeIndex = credential.indexOf("~");
|
67
|
+
if (tildeIndex === -1) {
|
68
|
+
throw new _errors.IoWalletError("Invalid credential format");
|
69
|
+
}
|
70
|
+
return (0, _jsSha.sha256)(credential.slice(0, tildeIndex));
|
71
|
+
};
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Creates a promise that waits until the provided signal is aborted.
|
75
|
+
* @returns {Object} An object with `listen` and `remove` methods to handle subscribing and unsubscribing.
|
76
|
+
*/
|
77
|
+
exports.getCredentialHashWithouDiscloures = getCredentialHashWithouDiscloures;
|
78
|
+
const createAbortPromiseFromSignal = signal => {
|
79
|
+
let listener;
|
80
|
+
return {
|
81
|
+
listen: () => new Promise(resolve => {
|
82
|
+
if (signal.aborted) {
|
83
|
+
return resolve("OPERATION_ABORTED");
|
84
|
+
}
|
85
|
+
listener = () => resolve("OPERATION_ABORTED");
|
86
|
+
signal.addEventListener("abort", listener);
|
87
|
+
}),
|
88
|
+
remove: () => signal.removeEventListener("abort", listener)
|
89
|
+
};
|
90
|
+
};
|
91
|
+
exports.createAbortPromiseFromSignal = createAbortPromiseFromSignal;
|
92
|
+
const isDefined = x => Boolean(x);
|
93
|
+
exports.isDefined = isDefined;
|
56
94
|
//# sourceMappingURL=misc.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_errors","require","hasStatus","status","res","
|
1
|
+
{"version":3,"names":["_errors","require","_jsSha","hasStatus","status","res","UnexpectedStatusCodeError","url","text","exports","generateRandomAlphaNumericString","size","Array","from","Math","floor","random","toString","join","until","conditionFunction","timeoutSeconds","Promise","resolve","reject","start","Date","now","poll","undefined","Error","setTimeout","getCredentialHashWithouDiscloures","credential","tildeIndex","indexOf","IoWalletError","sha256","slice","createAbortPromiseFromSignal","signal","listener","listen","aborted","addEventListener","remove","removeEventListener","isDefined","x","Boolean"],"sourceRoot":"../../../src","sources":["utils/misc.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,SAAS,GACnBC,MAAc,IACf,MAAOC,GAAa,IAAwB;EAC1C,IAAIA,GAAG,CAACD,MAAM,KAAKA,MAAM,EAAE;IACzB,MAAM,IAAIE,iCAAyB,CAChC,iCAAgCF,MAAO,SAAQC,GAAG,CAACD,MAAO,UACzDC,GAAG,CAACE,GACL,mBAAkB,MAAMF,GAAG,CAACG,IAAI,CAAC,CAAE,EAAC,EACrCH,GAAG,CAACD,MACN,CAAC;EACH;EACA,OAAOC,GAAG;AACZ,CAAC;;AAEH;AACA;AAAAI,OAAA,CAAAN,SAAA,GAAAA,SAAA;AAOA;AACA;AACA;AACA;AACA;AACO,MAAMO,gCAAgC,GAAIC,IAAY,IAC3DC,KAAK,CAACC,IAAI,CAACD,KAAK,CAACD,IAAI,CAAC,EAAE,MACtBG,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,CAC5C,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVAT,OAAA,CAAAC,gCAAA,GAAAA,gCAAA;AAWO,MAAMS,KAAK,GAAGA,CACnBC,iBAAgC,EAChCC,cAAuB,KAEvB,IAAIC,OAAO,CAAO,CAACC,OAAO,EAAEC,MAAM,KAAK;EACrC,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EACxB,MAAMC,IAAI,GAAGA,CAAA,KAAM;IACjB,IAAIR,iBAAiB,CAAC,CAAC,EAAE;MACvBG,OAAO,CAAC,CAAC;IACX,CAAC,MAAM,IACLF,cAAc,KAAKQ,SAAS,IAC5BH,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,KAAK,IAAIJ,cAAc,GAAG,IAAI,EAC3C;MACAG,MAAM,CAAC,IAAIM,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACvC,CAAC,MAAM;MACLC,UAAU,CAACH,IAAI,EAAE,GAAG,CAAC;IACvB;EACF,CAAC;EAEDA,IAAI,CAAC,CAAC;AACR,CAAC,CAAC;;AAEJ;AACA;AACA;AACA;AACA;AACA;AALAnB,OAAA,CAAAU,KAAA,GAAAA,KAAA;AAMO,MAAMa,iCAAiC,GAAG,MAC/CC,UAAkB,IACE;EACpB,MAAMC,UAAU,GAAGD,UAAU,CAACE,OAAO,CAAC,GAAG,CAAC;EAC1C,IAAID,UAAU,KAAK,CAAC,CAAC,EAAE;IACrB,MAAM,IAAIE,qBAAa,CAAC,2BAA2B,CAAC;EACtD;EACA,OAAO,IAAAC,aAAM,EAACJ,UAAU,CAACK,KAAK,CAAC,CAAC,EAAEJ,UAAU,CAAC,CAAC;AAChD,CAAC;;AAED;AACA;AACA;AACA;AAHAzB,OAAA,CAAAuB,iCAAA,GAAAA,iCAAA;AAIO,MAAMO,4BAA4B,GAAIC,MAAmB,IAAK;EACnE,IAAIC,QAAoB;EACxB,OAAO;IACLC,MAAM,EAAEA,CAAA,KACN,IAAIpB,OAAO,CAAuBC,OAAO,IAAK;MAC5C,IAAIiB,MAAM,CAACG,OAAO,EAAE;QAClB,OAAOpB,OAAO,CAAC,mBAAmB,CAAC;MACrC;MACAkB,QAAQ,GAAGA,CAAA,KAAMlB,OAAO,CAAC,mBAAmB,CAAC;MAC7CiB,MAAM,CAACI,gBAAgB,CAAC,OAAO,EAAEH,QAAQ,CAAC;IAC5C,CAAC,CAAC;IACJI,MAAM,EAAEA,CAAA,KAAML,MAAM,CAACM,mBAAmB,CAAC,OAAO,EAAEL,QAAQ;EAC5D,CAAC;AACH,CAAC;AAAChC,OAAA,CAAA8B,4BAAA,GAAAA,4BAAA;AAEK,MAAMQ,SAAS,GAAOC,CAA4B,IACvDC,OAAO,CAACD,CAAC,CAAC;AAACvC,OAAA,CAAAsC,SAAA,GAAAA,SAAA"}
|
@@ -28,7 +28,7 @@ exports.AuthorizationDetails = AuthorizationDetails;
|
|
28
28
|
const makeParRequest = _ref => {
|
29
29
|
let {
|
30
30
|
wiaCryptoContext,
|
31
|
-
appFetch
|
31
|
+
appFetch
|
32
32
|
} = _ref;
|
33
33
|
return async (clientId, codeVerifier, redirectUri, responseMode, parEndpoint, walletInstanceAttestation, authorizationDetails, assertionType) => {
|
34
34
|
const wiaPublicKey = await wiaCryptoContext.getPublicKey();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_ioReactNativeJwt","require","_reactNativeUuid","_interopRequireDefault","z","_interopRequireWildcard","WalletInstanceAttestation","_misc","_pop","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","AuthorizationDetail","object","credential_configuration_id","string","format","union","literal","type","exports","AuthorizationDetails","array","makeParRequest","_ref","wiaCryptoContext","appFetch","
|
1
|
+
{"version":3,"names":["_ioReactNativeJwt","require","_reactNativeUuid","_interopRequireDefault","z","_interopRequireWildcard","WalletInstanceAttestation","_misc","_pop","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","AuthorizationDetail","object","credential_configuration_id","string","format","union","literal","type","exports","AuthorizationDetails","array","makeParRequest","_ref","wiaCryptoContext","appFetch","clientId","codeVerifier","redirectUri","responseMode","parEndpoint","walletInstanceAttestation","authorizationDetails","assertionType","wiaPublicKey","getPublicKey","parUrl","URL","aud","protocol","hostname","iss","decode","payload","cnf","jwk","kid","signedWiaPoP","createPopToken","jti","uuid","v4","codeChallengeMethod","codeChallenge","sha256ToBase64","signedJwtForPar","SignJWT","setProtectedHeader","typ","setPayload","response_type","response_mode","client_id","state","generateRandomAlphaNumericString","code_challenge","code_challenge_method","authorization_details","redirect_uri","client_assertion_type","client_assertion","setIssuedAt","setExpirationTime","sign","formBody","URLSearchParams","request","method","headers","body","toString","then","hasStatus","res","json","result","request_uri"],"sourceRoot":"../../../src","sources":["utils/par.ts"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["Issuance","Presentation"],"sourceRoot":"../../../src","sources":["credential/index.ts"],"mappings":"AAAA,OAAO,KAAKA,QAAQ,MAAM,YAAY;AACtC,OAAO,KAAKC,YAAY,MAAM,gBAAgB;
|
1
|
+
{"version":3,"names":["Issuance","Presentation","Status"],"sourceRoot":"../../../src","sources":["credential/index.ts"],"mappings":"AAAA,OAAO,KAAKA,QAAQ,MAAM,YAAY;AACtC,OAAO,KAAKC,YAAY,MAAM,gBAAgB;AAC9C,OAAO,KAAKC,MAAM,MAAM,UAAU;AAElC,SAASF,QAAQ,EAAEC,YAAY,EAAEC,MAAM"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { AuthorizationErrorShape, AuthorizationResultShape } from "../../utils/auth";
|
2
|
-
import { hasStatus, until } from "../../utils/misc";
|
2
|
+
import { createAbortPromiseFromSignal, hasStatus, isDefined, until } from "../../utils/misc";
|
3
3
|
import parseUrl from "parse-url";
|
4
|
-
import { AuthorizationError, AuthorizationIdpError, ValidationFailed } from "../../utils/errors";
|
4
|
+
import { AuthorizationError, AuthorizationIdpError, OperationAbortedError, ValidationFailed } from "../../utils/errors";
|
5
5
|
import { Linking } from "react-native";
|
6
6
|
import { decode, encodeBase64, SignJWT } from "@pagopa/io-react-native-jwt";
|
7
7
|
import { RequestObject } from "../presentation/types";
|
@@ -26,11 +26,13 @@ import { getJwtFromFormPost } from "../../utils/decoder";
|
|
26
26
|
* If not specified, the default browser is used
|
27
27
|
* @param idphint Unique identifier of the SPID IDP selected by the user
|
28
28
|
* @param redirectUri The url to reach to complete the user authorization which is the custom URL scheme that the Wallet Instance is registered to handle, usually a custom URL or deeplink
|
29
|
+
* @param signal An optional {@link AbortSignal} to abort the operation when using the default browser
|
29
30
|
* @throws {AuthorizationError} if an error occurs during the authorization process
|
30
31
|
* @throws {AuthorizationIdpError} if an error occurs during the authorization process and the error is related to the IDP
|
32
|
+
* @throws {OperationAbortedError} if the caller aborts the operation via the provided signal
|
31
33
|
* @returns the authorization response which contains code, state and iss
|
32
34
|
*/
|
33
|
-
export const completeUserAuthorizationWithQueryMode = async (issuerRequestUri, clientId, issuerConf, idpHint, redirectUri, authorizationContext) => {
|
35
|
+
export const completeUserAuthorizationWithQueryMode = async (issuerRequestUri, clientId, issuerConf, idpHint, redirectUri, authorizationContext, signal) => {
|
34
36
|
const authzRequestEndpoint = issuerConf.oauth_authorization_server.authorization_endpoint;
|
35
37
|
const params = new URLSearchParams({
|
36
38
|
client_id: clientId,
|
@@ -46,7 +48,7 @@ export const completeUserAuthorizationWithQueryMode = async (issuerRequestUri, c
|
|
46
48
|
});
|
47
49
|
} else {
|
48
50
|
// handler for redirectUri
|
49
|
-
Linking.addEventListener("url", _ref => {
|
51
|
+
const urlEventListener = Linking.addEventListener("url", _ref => {
|
50
52
|
let {
|
51
53
|
url
|
52
54
|
} = _ref;
|
@@ -54,14 +56,27 @@ export const completeUserAuthorizationWithQueryMode = async (issuerRequestUri, c
|
|
54
56
|
authRedirectUrl = url;
|
55
57
|
}
|
56
58
|
});
|
57
|
-
const
|
59
|
+
const operationIsAborted = signal ? createAbortPromiseFromSignal(signal) : undefined;
|
60
|
+
await Linking.openURL(authUrl);
|
58
61
|
|
59
62
|
/*
|
60
63
|
* Waits for 120 seconds for the identificationRedirectUrl variable to be set
|
61
64
|
* by the custom url handler. If the timeout is exceeded, throw an exception
|
62
65
|
*/
|
63
66
|
const unitAuthRedirectIsNotUndefined = until(() => authRedirectUrl !== undefined, 120);
|
64
|
-
|
67
|
+
|
68
|
+
/**
|
69
|
+
* Simultaneously listen for the abort signal (when provided) and the redirect url.
|
70
|
+
* The first event that occurs will resolve the promise.
|
71
|
+
* This is useful to properly cleanup when the caller aborts this operation.
|
72
|
+
*/
|
73
|
+
const winner = await Promise.race([operationIsAborted === null || operationIsAborted === void 0 ? void 0 : operationIsAborted.listen(), unitAuthRedirectIsNotUndefined].filter(isDefined)).finally(() => {
|
74
|
+
urlEventListener.remove();
|
75
|
+
operationIsAborted === null || operationIsAborted === void 0 ? void 0 : operationIsAborted.remove();
|
76
|
+
});
|
77
|
+
if (winner === "OPERATION_ABORTED") {
|
78
|
+
throw new OperationAbortedError("DefaultQueryModeAuthorization");
|
79
|
+
}
|
65
80
|
if (authRedirectUrl === undefined) {
|
66
81
|
throw new AuthorizationError("Invalid authentication redirect url");
|
67
82
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["AuthorizationErrorShape","AuthorizationResultShape","hasStatus","until","parseUrl","AuthorizationError","AuthorizationIdpError","ValidationFailed","Linking","decode","encodeBase64","SignJWT","RequestObject","uuid","ResponseUriResultShape","getJwtFromFormPost","completeUserAuthorizationWithQueryMode","issuerRequestUri","clientId","issuerConf","idpHint","redirectUri","authorizationContext","authzRequestEndpoint","oauth_authorization_server","authorization_endpoint","params","URLSearchParams","client_id","request_uri","idphint","authUrl","authRedirectUrl","redirectSchema","URL","protocol","replace","authorize","catch","e","message","addEventListener","_ref","url","includes","
|
1
|
+
{"version":3,"names":["AuthorizationErrorShape","AuthorizationResultShape","createAbortPromiseFromSignal","hasStatus","isDefined","until","parseUrl","AuthorizationError","AuthorizationIdpError","OperationAbortedError","ValidationFailed","Linking","decode","encodeBase64","SignJWT","RequestObject","uuid","ResponseUriResultShape","getJwtFromFormPost","completeUserAuthorizationWithQueryMode","issuerRequestUri","clientId","issuerConf","idpHint","redirectUri","authorizationContext","signal","authzRequestEndpoint","oauth_authorization_server","authorization_endpoint","params","URLSearchParams","client_id","request_uri","idphint","authUrl","authRedirectUrl","redirectSchema","URL","protocol","replace","authorize","catch","e","message","urlEventListener","addEventListener","_ref","url","includes","operationIsAborted","undefined","openURL","unitAuthRedirectIsNotUndefined","winner","Promise","race","listen","filter","finally","remove","query","parseAuthroizationResponse","getRequestedCredentialToBePresented","appFetch","arguments","length","fetch","requestObject","toString","method","then","res","text","jws","reqObj","safeParse","payload","success","error","data","completeUserAuthorizationWithFormPostJwtMode","ctx","wiaCryptoContext","pidCryptoContext","pid","walletInstanceAttestation","wiaWpToken","setProtectedHeader","alg","typ","setPayload","vp","jti","v4","nonce","setIssuedAt","setExpirationTime","setAudience","response_uri","sign","pidWpToken","presentationSubmission","definition_id","id","descriptor_map","path","format","authzResponsePayload","JSON","stringify","state","presentation_submission","vp_token","body","response","resUriRes","headers","reqUri","json","responseUri","redirect_uri","cbRes","decodedJwt","authRes","authResParsed","authErr","error_description"],"sourceRoot":"../../../../src","sources":["credential/issuance/04-complete-user-authorization.ts"],"mappings":"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"}
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import { hasStatus } from "../../utils/misc";
|
2
|
-
import { withEphemeralKey } from "../../utils/crypto";
|
3
2
|
import { createDPopToken } from "../../utils/dpop";
|
4
3
|
import uuid from "react-native-uuid";
|
5
4
|
import { createPopToken } from "../../utils/pop";
|
@@ -19,6 +18,7 @@ import { ValidationFailed } from "../../utils/errors";
|
|
19
18
|
* @param codeVerifier The code verifier returned by {@link startUserAuthorization}
|
20
19
|
* @param context.walletInstanceAttestation The Wallet Instance's attestation
|
21
20
|
* @param context.wiaCryptoContext The Wallet Instance's crypto context
|
21
|
+
* @param context.dPopCryptoContext The DPoP crypto context
|
22
22
|
* @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
|
23
23
|
* @throws {ValidationFailed} if an error occurs while parsing the token response
|
24
24
|
* @return The token response containing the access token along with the token request signed with DPoP which has to be used in the {@link obtainCredential} step.
|
@@ -27,21 +27,19 @@ export const authorizeAccess = async (issuerConf, code, clientId, redirectUri, c
|
|
27
27
|
const {
|
28
28
|
appFetch = fetch,
|
29
29
|
walletInstanceAttestation,
|
30
|
-
wiaCryptoContext
|
30
|
+
wiaCryptoContext,
|
31
|
+
dPopCryptoContext
|
31
32
|
} = context;
|
32
33
|
const parEndpoint = issuerConf.oauth_authorization_server.pushed_authorization_request_endpoint;
|
33
34
|
const parUrl = new URL(parEndpoint);
|
34
35
|
const aud = `${parUrl.protocol}//${parUrl.hostname}`;
|
35
36
|
const iss = WalletInstanceAttestation.decode(walletInstanceAttestation).payload.cnf.jwk.kid;
|
36
37
|
const tokenUrl = issuerConf.oauth_authorization_server.token_endpoint;
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
jti: `${uuid.v4()}`
|
43
|
-
}, ephimeralContext);
|
44
|
-
});
|
38
|
+
const tokenRequestSignedDPop = await createDPopToken({
|
39
|
+
htm: "POST",
|
40
|
+
htu: tokenUrl,
|
41
|
+
jti: `${uuid.v4()}`
|
42
|
+
}, dPopCryptoContext);
|
45
43
|
const signedWiaPoP = await createPopToken({
|
46
44
|
jti: `${uuid.v4()}`,
|
47
45
|
aud,
|
@@ -69,8 +67,7 @@ export const authorizeAccess = async (issuerConf, code, clientId, redirectUri, c
|
|
69
67
|
throw new ValidationFailed(tokenRes.error.message);
|
70
68
|
}
|
71
69
|
return {
|
72
|
-
accessToken: tokenRes.data
|
73
|
-
tokenRequestSignedDPop
|
70
|
+
accessToken: tokenRes.data
|
74
71
|
};
|
75
72
|
};
|
76
73
|
//# sourceMappingURL=05-authorize-access.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["hasStatus","
|
1
|
+
{"version":3,"names":["hasStatus","createDPopToken","uuid","createPopToken","WalletInstanceAttestation","ASSERTION_TYPE","TokenResponse","ValidationFailed","authorizeAccess","issuerConf","code","clientId","redirectUri","codeVerifier","context","appFetch","fetch","walletInstanceAttestation","wiaCryptoContext","dPopCryptoContext","parEndpoint","oauth_authorization_server","pushed_authorization_request_endpoint","parUrl","URL","aud","protocol","hostname","iss","decode","payload","cnf","jwk","kid","tokenUrl","token_endpoint","tokenRequestSignedDPop","htm","htu","jti","v4","signedWiaPoP","requestBody","grant_type","client_id","redirect_uri","code_verifier","client_assertion_type","client_assertion","authorizationRequestFormBody","URLSearchParams","tokenRes","method","headers","DPoP","body","toString","then","res","json","safeParse","success","error","message","accessToken","data"],"sourceRoot":"../../../../src","sources":["credential/issuance/05-authorize-access.ts"],"mappings":"AAAA,SAASA,SAAS,QAAkB,kBAAkB;AAGtD,SAASC,eAAe,QAAQ,kBAAkB;AAClD,OAAOC,IAAI,MAAM,mBAAmB;AACpC,SAASC,cAAc,QAAQ,iBAAiB;AAChD,OAAO,KAAKC,yBAAyB,MAAM,mCAAmC;AAE9E,SAASC,cAAc,QAAQ,SAAS;AACxC,SAASC,aAAa,QAAQ,SAAS;AACvC,SAASC,gBAAgB,QAAQ,oBAAoB;AAiBrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAgC,GAAG,MAAAA,CAC9CC,UAAU,EACVC,IAAI,EACJC,QAAQ,EACRC,WAAW,EACXC,YAAY,EACZC,OAAO,KACJ;EACH,MAAM;IACJC,QAAQ,GAAGC,KAAK;IAChBC,yBAAyB;IACzBC,gBAAgB;IAChBC;EACF,CAAC,GAAGL,OAAO;EAEX,MAAMM,WAAW,GACfX,UAAU,CAACY,0BAA0B,CAACC,qCAAqC;EAC7E,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAACJ,WAAW,CAAC;EACnC,MAAMK,GAAG,GAAI,GAAEF,MAAM,CAACG,QAAS,KAAIH,MAAM,CAACI,QAAS,EAAC;EACpD,MAAMC,GAAG,GAAGxB,yBAAyB,CAACyB,MAAM,CAACZ,yBAAyB,CAAC,CACpEa,OAAO,CAACC,GAAG,CAACC,GAAG,CAACC,GAAG;EAEtB,MAAMC,QAAQ,GAAGzB,UAAU,CAACY,0BAA0B,CAACc,cAAc;EAErE,MAAMC,sBAAsB,GAAG,MAAMnC,eAAe,CAClD;IACEoC,GAAG,EAAE,MAAM;IACXC,GAAG,EAAEJ,QAAQ;IACbK,GAAG,EAAG,GAAErC,IAAI,CAACsC,EAAE,CAAC,CAAE;EACpB,CAAC,EACDrB,iBACF,CAAC;EAED,MAAMsB,YAAY,GAAG,MAAMtC,cAAc,CACvC;IACEoC,GAAG,EAAG,GAAErC,IAAI,CAACsC,EAAE,CAAC,CAAE,EAAC;IACnBf,GAAG;IACHG;EACF,CAAC,EACDV,gBACF,CAAC;EAED,MAAMwB,WAAW,GAAG;IAClBC,UAAU,EAAE,oBAAoB;IAChCC,SAAS,EAAEjC,QAAQ;IACnBD,IAAI;IACJmC,YAAY,EAAEjC,WAAW;IACzBkC,aAAa,EAAEjC,YAAY;IAC3BkC,qBAAqB,EAAE1C,cAAc;IACrC2C,gBAAgB,EAAE/B,yBAAyB,GAAG,GAAG,GAAGwB;EACtD,CAAC;EAED,MAAMQ,4BAA4B,GAAG,IAAIC,eAAe,CAACR,WAAW,CAAC;EACrE,MAAMS,QAAQ,GAAG,MAAMpC,QAAQ,CAACmB,QAAQ,EAAE;IACxCkB,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MACP,cAAc,EAAE,mCAAmC;MACnDC,IAAI,EAAElB;IACR,CAAC;IACDmB,IAAI,EAAEN,4BAA4B,CAACO,QAAQ,CAAC;EAC9C,CAAC,CAAC,CACCC,IAAI,CAACzD,SAAS,CAAC,GAAG,CAAC,CAAC,CACpByD,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAC,CAAC,CAAC,CACzBF,IAAI,CAAEF,IAAI,IAAKjD,aAAa,CAACsD,SAAS,CAACL,IAAI,CAAC,CAAC;EAEhD,IAAI,CAACJ,QAAQ,CAACU,OAAO,EAAE;IACrB,MAAM,IAAItD,gBAAgB,CAAC4C,QAAQ,CAACW,KAAK,CAACC,OAAO,CAAC;EACpD;EAEA,OAAO;IAAEC,WAAW,EAAEb,QAAQ,CAACc;EAAK,CAAC;AACvC,CAAC"}
|
@@ -1,7 +1,9 @@
|
|
1
|
-
import { SignJWT } from "@pagopa/io-react-native-jwt";
|
1
|
+
import { sha256ToBase64, SignJWT } from "@pagopa/io-react-native-jwt";
|
2
2
|
import { hasStatus } from "../../utils/misc";
|
3
3
|
import { ValidationFailed } from "../../utils/errors";
|
4
4
|
import { CredentialResponse } from "./types";
|
5
|
+
import { createDPopToken } from "../../utils/dpop";
|
6
|
+
import uuid from "react-native-uuid";
|
5
7
|
export const createNonceProof = async (nonce, issuer, audience, ctx) => {
|
6
8
|
const jwk = await ctx.getPublicKey();
|
7
9
|
return new SignJWT(ctx).setPayload({
|
@@ -24,13 +26,15 @@ export const createNonceProof = async (nonce, issuer, audience, ctx) => {
|
|
24
26
|
* @param credentialDefinition The credential definition of the credential to be obtained returned by {@link startUserAuthorization}
|
25
27
|
* @param tokenRequestSignedDPop The DPoP signed token request returned by {@link authorizeAccess}
|
26
28
|
* @param context.credentialCryptoContext The crypto context used to obtain the credential
|
29
|
+
* @param context.dPopCryptoContext The DPoP crypto context
|
27
30
|
* @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
|
28
31
|
* @returns The credential response containing the credential
|
29
32
|
*/
|
30
|
-
export const obtainCredential = async (issuerConf, accessToken, clientId, credentialDefinition,
|
33
|
+
export const obtainCredential = async (issuerConf, accessToken, clientId, credentialDefinition, context) => {
|
31
34
|
const {
|
32
35
|
credentialCryptoContext,
|
33
|
-
appFetch = fetch
|
36
|
+
appFetch = fetch,
|
37
|
+
dPopCryptoContext
|
34
38
|
} = context;
|
35
39
|
const credentialUrl = issuerConf.openid_credential_issuer.credential_endpoint;
|
36
40
|
|
@@ -58,6 +62,12 @@ export const obtainCredential = async (issuerConf, accessToken, clientId, creden
|
|
58
62
|
proof_type: "jwt"
|
59
63
|
}
|
60
64
|
};
|
65
|
+
const tokenRequestSignedDPop = await await createDPopToken({
|
66
|
+
htm: "POST",
|
67
|
+
htu: credentialUrl,
|
68
|
+
jti: `${uuid.v4()}`,
|
69
|
+
ath: await sha256ToBase64(accessToken.access_token)
|
70
|
+
}, dPopCryptoContext);
|
61
71
|
const credentialRes = await appFetch(credentialUrl, {
|
62
72
|
method: "POST",
|
63
73
|
headers: {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["SignJWT","hasStatus","ValidationFailed","CredentialResponse","createNonceProof","nonce","issuer","audience","ctx","jwk","getPublicKey","setPayload","setProtectedHeader","typ","setAudience","setIssuer","setIssuedAt","setExpirationTime","sign","obtainCredential","issuerConf","accessToken","clientId","credentialDefinition","
|
1
|
+
{"version":3,"names":["sha256ToBase64","SignJWT","hasStatus","ValidationFailed","CredentialResponse","createDPopToken","uuid","createNonceProof","nonce","issuer","audience","ctx","jwk","getPublicKey","setPayload","setProtectedHeader","typ","setAudience","setIssuer","setIssuedAt","setExpirationTime","sign","obtainCredential","issuerConf","accessToken","clientId","credentialDefinition","context","credentialCryptoContext","appFetch","fetch","dPopCryptoContext","credentialUrl","openid_credential_issuer","credential_endpoint","signedNonceProof","c_nonce","constainsCredentialDefinition","authorization_details","some","c","credential_configuration_id","format","type","credentialRequestFormBody","credential_definition","proof","jwt","proof_type","tokenRequestSignedDPop","htm","htu","jti","v4","ath","access_token","credentialRes","method","headers","DPoP","Authorization","token_type","body","JSON","stringify","then","res","json","safeParse","success","error","message","data"],"sourceRoot":"../../../../src","sources":["credential/issuance/06-obtain-credential.ts"],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["credential/status/01-start-flow.ts"],"mappings":""}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import { getCredentialHashWithouDiscloures, hasStatus } from "../../utils/misc";
|
2
|
+
import { SignJWT } from "@pagopa/io-react-native-jwt";
|
3
|
+
import uuid from "react-native-uuid";
|
4
|
+
import { StatusAttestationResponse } from "./types";
|
5
|
+
import { UnexpectedStatusCodeError } from "../../utils/errors";
|
6
|
+
import { StatusAttestationError, StatusAttestationInvalid } from "./errors";
|
7
|
+
/**
|
8
|
+
* WARNING: This function must be called after {@link startFlow}.
|
9
|
+
* Verify the status of the credential attestation.
|
10
|
+
* @param issuerConf - The issuer's configuration
|
11
|
+
* @param credential - The credential to be verified
|
12
|
+
* @param credentialCryptoContext - The credential's crypto context
|
13
|
+
* @param context.appFetch (optional) fetch api implementation. Default: built-in fetch
|
14
|
+
* @throws {@link StatusAttestationInvalid} if the status attestation is invalid and thus the credential is not valid
|
15
|
+
* @throws {@link StatusAttestationError} if an error occurs during the status attestation
|
16
|
+
* @returns The credential status attestation
|
17
|
+
*/
|
18
|
+
export const statusAttestation = async function (issuerConf, credential, credentialCryptoContext) {
|
19
|
+
let appFetch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : fetch;
|
20
|
+
const jwk = await credentialCryptoContext.getPublicKey();
|
21
|
+
const credentialHash = await getCredentialHashWithouDiscloures(credential);
|
22
|
+
const statusAttUrl = issuerConf.openid_credential_issuer.status_attestation_endpoint;
|
23
|
+
const credentialPop = await new SignJWT(credentialCryptoContext).setPayload({
|
24
|
+
aud: statusAttUrl,
|
25
|
+
jti: uuid.v4().toString(),
|
26
|
+
credential_hash: credentialHash,
|
27
|
+
credential_hash_alg: "S256"
|
28
|
+
}).setProtectedHeader({
|
29
|
+
alg: "ES256",
|
30
|
+
typ: "status-attestation-request+jwt",
|
31
|
+
kid: jwk.kid
|
32
|
+
}).setIssuedAt().setExpirationTime("5m").sign();
|
33
|
+
const body = {
|
34
|
+
credential_pop: credentialPop
|
35
|
+
};
|
36
|
+
const result = await appFetch(statusAttUrl, {
|
37
|
+
method: "POST",
|
38
|
+
headers: {
|
39
|
+
"Content-Type": "application/json"
|
40
|
+
},
|
41
|
+
body: JSON.stringify(body)
|
42
|
+
}).then(hasStatus(201)).then(raw => raw.json()).then(json => StatusAttestationResponse.parse(json)).catch(handleStatusAttestationError);
|
43
|
+
return {
|
44
|
+
statusAttestation: result.status_attestation
|
45
|
+
};
|
46
|
+
};
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Handle the status attestation error by mapping it to a custom exception.
|
50
|
+
* If the error is not an instance of {@link UnexpectedStatusCodeError}, it is thrown as is.
|
51
|
+
* @param e - The error to be handled
|
52
|
+
* @throws {@link StatusAttestationError} if the status code is different from 404
|
53
|
+
* @throws {@link StatusAttestationInvalid} if the status code is 404 (meaning the credential is invalid)
|
54
|
+
*/
|
55
|
+
const handleStatusAttestationError = e => {
|
56
|
+
if (!(e instanceof UnexpectedStatusCodeError)) {
|
57
|
+
throw e;
|
58
|
+
}
|
59
|
+
if (e.statusCode === 404) {
|
60
|
+
throw new StatusAttestationInvalid("Invalid status found for the given credential", e.message);
|
61
|
+
}
|
62
|
+
throw new StatusAttestationError(`Unable to obtain the status attestation for the given credential [response status code: ${e.statusCode}]`, e.message);
|
63
|
+
};
|
64
|
+
//# sourceMappingURL=02-status-attestation.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["getCredentialHashWithouDiscloures","hasStatus","SignJWT","uuid","StatusAttestationResponse","UnexpectedStatusCodeError","StatusAttestationError","StatusAttestationInvalid","statusAttestation","issuerConf","credential","credentialCryptoContext","appFetch","arguments","length","undefined","fetch","jwk","getPublicKey","credentialHash","statusAttUrl","openid_credential_issuer","status_attestation_endpoint","credentialPop","setPayload","aud","jti","v4","toString","credential_hash","credential_hash_alg","setProtectedHeader","alg","typ","kid","setIssuedAt","setExpirationTime","sign","body","credential_pop","result","method","headers","JSON","stringify","then","raw","json","parse","catch","handleStatusAttestationError","status_attestation","e","statusCode","message"],"sourceRoot":"../../../../src","sources":["credential/status/02-status-attestation.ts"],"mappings":"AAAA,SACEA,iCAAiC,EACjCC,SAAS,QAEJ,kBAAkB;AAEzB,SAASC,OAAO,QAA4B,6BAA6B;AACzE,OAAOC,IAAI,MAAM,mBAAmB;AACpC,SAASC,yBAAyB,QAAQ,SAAS;AACnD,SAASC,yBAAyB,QAAQ,oBAAoB;AAC9D,SAASC,sBAAsB,EAAEC,wBAAwB,QAAQ,UAAU;AAW3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAoC,GAAG,eAAAA,CAClDC,UAAU,EACVC,UAAU,EACVC,uBAAuB,EAEpB;EAAA,IADHC,QAA8B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGG,KAAK;EAEtC,MAAMC,GAAG,GAAG,MAAMN,uBAAuB,CAACO,YAAY,CAAC,CAAC;EACxD,MAAMC,cAAc,GAAG,MAAMnB,iCAAiC,CAACU,UAAU,CAAC;EAC1E,MAAMU,YAAY,GAChBX,UAAU,CAACY,wBAAwB,CAACC,2BAA2B;EACjE,MAAMC,aAAa,GAAG,MAAM,IAAIrB,OAAO,CAACS,uBAAuB,CAAC,CAC7Da,UAAU,CAAC;IACVC,GAAG,EAAEL,YAAY;IACjBM,GAAG,EAAEvB,IAAI,CAACwB,EAAE,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;IACzBC,eAAe,EAAEV,cAAc;IAC/BW,mBAAmB,EAAE;EACvB,CAAC,CAAC,CACDC,kBAAkB,CAAC;IAClBC,GAAG,EAAE,OAAO;IACZC,GAAG,EAAE,gCAAgC;IACrCC,GAAG,EAAEjB,GAAG,CAACiB;EACX,CAAC,CAAC,CACDC,WAAW,CAAC,CAAC,CACbC,iBAAiB,CAAC,IAAI,CAAC,CACvBC,IAAI,CAAC,CAAC;EAET,MAAMC,IAAI,GAAG;IACXC,cAAc,EAAEhB;EAClB,CAAC;EAED,MAAMiB,MAAM,GAAG,MAAM5B,QAAQ,CAACQ,YAAY,EAAE;IAC1CqB,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MACP,cAAc,EAAE;IAClB,CAAC;IACDJ,IAAI,EAAEK,IAAI,CAACC,SAAS,CAACN,IAAI;EAC3B,CAAC,CAAC,CACCO,IAAI,CAAC5C,SAAS,CAAC,GAAG,CAAC,CAAC,CACpB4C,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAC,CAAC,CAAC,CACzBF,IAAI,CAAEE,IAAI,IAAK3C,yBAAyB,CAAC4C,KAAK,CAACD,IAAI,CAAC,CAAC,CACrDE,KAAK,CAACC,4BAA4B,CAAC;EAEtC,OAAO;IAAE1C,iBAAiB,EAAEgC,MAAM,CAACW;EAAmB,CAAC;AACzD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMD,4BAA4B,GAAIE,CAAU,IAAK;EACnD,IAAI,EAAEA,CAAC,YAAY/C,yBAAyB,CAAC,EAAE;IAC7C,MAAM+C,CAAC;EACT;EAEA,IAAIA,CAAC,CAACC,UAAU,KAAK,GAAG,EAAE;IACxB,MAAM,IAAI9C,wBAAwB,CAChC,+CAA+C,EAC/C6C,CAAC,CAACE,OACJ,CAAC;EACH;EAEA,MAAM,IAAIhD,sBAAsB,CAC7B,2FAA0F8C,CAAC,CAACC,UAAW,GAAE,EAC1GD,CAAC,CAACE,OACJ,CAAC;AACH,CAAC"}
|