@velocitycareerlabs/vcl-react-native 2.10.0-rc.3 → 2.10.1
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/README.md +37 -0
- package/android/src/main/java/io/velocitycareerlabs/reactnative/extensions/VCLErrorExtensions.kt +1 -7
- package/lib/module/api/VCLApi.js +2 -1
- package/lib/module/api/VCLApi.js.map +1 -1
- package/lib/module/api/entities/error/VCLError.js +36 -0
- package/lib/module/api/entities/error/VCLError.js.map +1 -1
- package/lib/module/api/entities/error/VCLErrorDeserializer.js +14 -0
- package/lib/module/api/entities/error/VCLErrorDeserializer.js.map +1 -1
- package/lib/typescript/src/api/entities/error/VCLError.d.ts +27 -0
- package/lib/typescript/src/api/entities/error/VCLError.d.ts.map +1 -1
- package/lib/typescript/src/api/entities/error/VCLErrorDeserializer.d.ts +1 -0
- package/lib/typescript/src/api/entities/error/VCLErrorDeserializer.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/api/VCLApi.ts +1 -1
- package/src/api/entities/error/VCLError.ts +43 -0
- package/src/api/entities/error/VCLErrorDeserializer.ts +27 -0
package/README.md
CHANGED
|
@@ -90,4 +90,41 @@ const initializationDescriptor: VCLInitializationDescriptor = {
|
|
|
90
90
|
};
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
+
### Error context
|
|
94
|
+
When the native SDKs map a failure to a taxonomy `errorCode`, `VCLError` keeps
|
|
95
|
+
the original error code and the request it belongs to. Each field is an optional
|
|
96
|
+
string, set only when the native SDK recorded it:
|
|
97
|
+
|
|
98
|
+
| Field | Description |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| `sourceErrorCode` | The error code before the taxonomy mapping, e.g. the server's `exchange_invalid` behind `client_request_rejected`. Failures the SDK detects itself have no `payload`, so this is their only record of the cause. |
|
|
101
|
+
| `validationPhase` | The phase that failed: `link_validation`, `client_request_fetch`, `did_resolution`, `registration_check`, `request_validation` or `request_authorization`. |
|
|
102
|
+
| `requestDid` | The DID of the issuer or verifier the request was for. |
|
|
103
|
+
| `requestUri` | The URI of the failed request, with the `push_delegate.push_token` value replaced by `[redacted]`. |
|
|
104
|
+
| `requestKind` | `issuing_request` or `presentation_request`. |
|
|
105
|
+
|
|
106
|
+
```js
|
|
107
|
+
try {
|
|
108
|
+
await vcl.getCredentialManifest(credentialManifestDescriptor);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
// error.errorCode === 'client_request_rejected'
|
|
111
|
+
// error.sourceErrorCode === 'exchange_invalid'
|
|
112
|
+
// error.validationPhase === 'client_request_fetch'
|
|
113
|
+
// error.requestKind === 'issuing_request'
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The SDK passes these values through unchanged, with one exception. When you
|
|
118
|
+
pass a `pushDelegate`, the native SDKs add its push URL and push token to the
|
|
119
|
+
request URI, so the SDK replaces the `push_delegate.push_token` value in
|
|
120
|
+
`requestUri` with `[redacted]`. `requestUri` can still carry other query
|
|
121
|
+
parameters (`exchange_id`, `credential_types`, `vendorOriginContext` and
|
|
122
|
+
issuer-specific values), so redact it before sending it to telemetry.
|
|
123
|
+
|
|
124
|
+
In `Legacy` mode the native SDKs clear these fields and report the error codes
|
|
125
|
+
they used before 2.10.0.
|
|
126
|
+
|
|
127
|
+
A rejection that does not come from a native `VCLError` is still thrown as a
|
|
128
|
+
`VCLError`, with the original rejection as its `cause`.
|
|
129
|
+
|
|
93
130
|
More details can be found [HERE](https://www.velocitynetwork.foundation/main/career-wallets-velocity-sdks#react-native)
|
package/android/src/main/java/io/velocitycareerlabs/reactnative/extensions/VCLErrorExtensions.kt
CHANGED
|
@@ -36,13 +36,7 @@ fun Promise.rejectBridgedVCLError(error: VCLError) {
|
|
|
36
36
|
|
|
37
37
|
private fun VCLError.toBridgedJsonObject(
|
|
38
38
|
nativeErrorStackFrameLimit: Int
|
|
39
|
-
) =
|
|
40
|
-
putOpt("payload", payload)
|
|
41
|
-
putOpt("error", error)
|
|
42
|
-
putOpt("errorCode", errorCode)
|
|
43
|
-
putOpt("requestId", requestId)
|
|
44
|
-
putOpt("message", message)
|
|
45
|
-
putOpt("statusCode", statusCode)
|
|
39
|
+
) = toJsonObject().apply {
|
|
46
40
|
put("diagnostics", toDiagnosticsJsonObject(nativeErrorStackFrameLimit))
|
|
47
41
|
}
|
|
48
42
|
|
package/lib/module/api/VCLApi.js
CHANGED
|
@@ -149,7 +149,8 @@ const toVCLError = error => {
|
|
|
149
149
|
return VCLErrorDeserializer.fromJsonString(error.message);
|
|
150
150
|
}
|
|
151
151
|
return new VCLError({
|
|
152
|
-
message: toErrorMessage(error)
|
|
152
|
+
message: toErrorMessage(error),
|
|
153
|
+
cause: error
|
|
153
154
|
});
|
|
154
155
|
};
|
|
155
156
|
const isBridgedVCLError = error => typeof error === 'object' && error != null && error.code === BRIDGED_VCL_ERROR_CODE && typeof error.message === 'string';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","VCLError","BRIDGED_VCL_ERROR_CODE","VCLErrorDeserializer","VclReactNative","VclApi","initialize","initializationDescriptor","e","toVCLError","getCountries","getCredentialTypes","getCredentialTypeSchemas","getPresentationRequest","presentationRequestDescriptor","submitPresentation","presentationSubmission","authToken","getExchangeProgress","exchangeDescriptor","searchForOrganizations","organizationsSearchDescriptor","getCredentialManifest","credentialManifestDescriptor","generateOffers","generateOffersDescriptor","checkForOffers","sessionToken","finalizeOffers","finalizeOffersDescriptor","getAuthToken","authTokenDescriptor","getCredentialTypesUIFormSchema","credentialTypesUIFormSchemaDescriptor","getVerifiedProfile","verifiedProfileDescriptor","verifyJwt","jwt","jwkPublic","remoteCryptoServicesToken","generateSignedJwt","jwtDescriptor","didJwk","generateDidJwk","didJwkDescriptor","error","isBridgedVCLError","fromJsonString","message","toErrorMessage","code","Error","JSON","stringify","String","_stringifyError"],"sourceRoot":"../../../src","sources":["api/VCLApi.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["NativeModules","VCLError","BRIDGED_VCL_ERROR_CODE","VCLErrorDeserializer","VclReactNative","VclApi","initialize","initializationDescriptor","e","toVCLError","getCountries","getCredentialTypes","getCredentialTypeSchemas","getPresentationRequest","presentationRequestDescriptor","submitPresentation","presentationSubmission","authToken","getExchangeProgress","exchangeDescriptor","searchForOrganizations","organizationsSearchDescriptor","getCredentialManifest","credentialManifestDescriptor","generateOffers","generateOffersDescriptor","checkForOffers","sessionToken","finalizeOffers","finalizeOffersDescriptor","getAuthToken","authTokenDescriptor","getCredentialTypesUIFormSchema","credentialTypesUIFormSchemaDescriptor","getVerifiedProfile","verifiedProfileDescriptor","verifyJwt","jwt","jwkPublic","remoteCryptoServicesToken","generateSignedJwt","jwtDescriptor","didJwk","generateDidJwk","didJwkDescriptor","error","isBridgedVCLError","fromJsonString","message","toErrorMessage","cause","code","Error","JSON","stringify","String","_stringifyError"],"sourceRoot":"../../../src","sources":["api/VCLApi.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,27 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
export class VCLError extends Error {
|
|
11
|
+
/**
|
|
12
|
+
* The error code before the native SDK mapped it to the taxonomy `errorCode`,
|
|
13
|
+
* e.g. the server's `exchange_invalid` behind `client_request_rejected`.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** The native validation phase that failed, e.g. `client_request_fetch`. */
|
|
17
|
+
|
|
18
|
+
/** The DID of the issuer or verifier the failed request was for. */
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The URI of the failed request. The value of its `push_delegate.push_token`
|
|
22
|
+
* query parameter is replaced with `[redacted]`, and the rest is passed
|
|
23
|
+
* through unchanged. It can still carry query parameters such as
|
|
24
|
+
* `exchange_id`, `credential_types`, `vendorOriginContext` and
|
|
25
|
+
* issuer-specific values, so redact it before sending it to telemetry.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** The kind of request that failed, e.g. `issuing_request`. */
|
|
29
|
+
|
|
30
|
+
/** The original rejection, when it was not a bridged native `VCLError`. */
|
|
31
|
+
|
|
11
32
|
constructor(error = {}) {
|
|
12
33
|
super(error.message);
|
|
13
34
|
this.name = 'VCLError';
|
|
@@ -16,7 +37,22 @@ export class VCLError extends Error {
|
|
|
16
37
|
this.errorCode = error.errorCode;
|
|
17
38
|
this.requestId = error.requestId;
|
|
18
39
|
this.statusCode = error.statusCode;
|
|
40
|
+
this.sourceErrorCode = error.sourceErrorCode;
|
|
41
|
+
this.validationPhase = error.validationPhase;
|
|
42
|
+
this.requestDid = error.requestDid;
|
|
43
|
+
this.requestUri = error.requestUri;
|
|
44
|
+
this.requestKind = error.requestKind;
|
|
19
45
|
this.diagnostics = error.diagnostics;
|
|
46
|
+
if (error.cause !== undefined) {
|
|
47
|
+
// Defined like the ES2022 `new Error(message, { cause })` option, which
|
|
48
|
+
// not every JS engine supports.
|
|
49
|
+
Object.defineProperty(this, 'cause', {
|
|
50
|
+
value: error.cause,
|
|
51
|
+
writable: true,
|
|
52
|
+
enumerable: false,
|
|
53
|
+
configurable: true
|
|
54
|
+
});
|
|
55
|
+
}
|
|
20
56
|
}
|
|
21
57
|
}
|
|
22
58
|
//# sourceMappingURL=VCLError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VCLError","Error","constructor","error","message","name","payload","errorCode","requestId","statusCode","diagnostics"],"sourceRoot":"../../../../../src","sources":["api/entities/error/VCLError.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["VCLError","Error","constructor","error","message","name","payload","errorCode","requestId","statusCode","sourceErrorCode","validationPhase","requestDid","requestUri","requestKind","diagnostics","cause","undefined","Object","defineProperty","value","writable","enumerable","configurable"],"sourceRoot":"../../../../../src","sources":["api/entities/error/VCLError.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AA+BA,OAAO,MAAMA,QAAQ,SAASC,KAAK,CAAC;EAMlC;AACF;AACA;AACA;;EAEE;;EAEA;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;;EAEE;;EAGA;;EAGAC,WAAWA,CAACC,KAAmB,GAAG,CAAC,CAAC,EAAE;IACpC,KAAK,CAACA,KAAK,CAACC,OAAO,CAAC;IACpB,IAAI,CAACC,IAAI,GAAG,UAAU;IACtB,IAAI,CAACC,OAAO,GAAGH,KAAK,CAACG,OAAO;IAC5B,IAAI,CAACH,KAAK,GAAGA,KAAK,CAACA,KAAK;IACxB,IAAI,CAACI,SAAS,GAAGJ,KAAK,CAACI,SAAS;IAChC,IAAI,CAACC,SAAS,GAAGL,KAAK,CAACK,SAAS;IAChC,IAAI,CAACC,UAAU,GAAGN,KAAK,CAACM,UAAU;IAClC,IAAI,CAACC,eAAe,GAAGP,KAAK,CAACO,eAAe;IAC5C,IAAI,CAACC,eAAe,GAAGR,KAAK,CAACQ,eAAe;IAC5C,IAAI,CAACC,UAAU,GAAGT,KAAK,CAACS,UAAU;IAClC,IAAI,CAACC,UAAU,GAAGV,KAAK,CAACU,UAAU;IAClC,IAAI,CAACC,WAAW,GAAGX,KAAK,CAACW,WAAW;IACpC,IAAI,CAACC,WAAW,GAAGZ,KAAK,CAACY,WAAW;IAEpC,IAAIZ,KAAK,CAACa,KAAK,KAAKC,SAAS,EAAE;MAC7B;MACA;MACAC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;QACnCC,KAAK,EAAEjB,KAAK,CAACa,KAAK;QAClBK,QAAQ,EAAE,IAAI;QACdC,UAAU,EAAE,KAAK;QACjBC,YAAY,EAAE;MAChB,CAAC,CAAC;IACJ;EACF;AACF","ignoreList":[]}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
import { VCLError } from "./VCLError.js";
|
|
11
11
|
export const BRIDGED_VCL_ERROR_CODE = 'VCL_BRIDGED_ERROR_V1';
|
|
12
|
+
const PUSH_TOKEN_QUERY_PARAM = /([?&]push_delegate\.push_token=)[^&#]*/g;
|
|
13
|
+
const REDACTED_VALUE = '[redacted]';
|
|
12
14
|
export class VCLErrorDeserializer {
|
|
13
15
|
static fromJsonString(jsonString) {
|
|
14
16
|
try {
|
|
@@ -26,6 +28,11 @@ export class VCLErrorDeserializer {
|
|
|
26
28
|
requestId: error.requestId,
|
|
27
29
|
message: error.message,
|
|
28
30
|
statusCode: VCLErrorDeserializer.parseStatusCode(error.statusCode),
|
|
31
|
+
sourceErrorCode: VCLErrorDeserializer.parseString(error.sourceErrorCode),
|
|
32
|
+
validationPhase: VCLErrorDeserializer.parseString(error.validationPhase),
|
|
33
|
+
requestDid: VCLErrorDeserializer.parseString(error.requestDid),
|
|
34
|
+
requestUri: VCLErrorDeserializer.parseRequestUri(error.requestUri),
|
|
35
|
+
requestKind: VCLErrorDeserializer.parseString(error.requestKind),
|
|
29
36
|
diagnostics: VCLErrorDeserializer.parseDiagnostics(error.diagnostics)
|
|
30
37
|
});
|
|
31
38
|
} catch (_parseError) {
|
|
@@ -44,6 +51,13 @@ export class VCLErrorDeserializer {
|
|
|
44
51
|
const parsedStatusCode = parseInt(String(statusCode), 10);
|
|
45
52
|
return Number.isNaN(parsedStatusCode) ? undefined : parsedStatusCode;
|
|
46
53
|
}
|
|
54
|
+
|
|
55
|
+
// The native SDKs report the request endpoint, which includes the wallet's
|
|
56
|
+
// push token when the caller passed a `pushDelegate`. The caller already has
|
|
57
|
+
// the token, so it is redacted here rather than by every consumer.
|
|
58
|
+
static parseRequestUri(requestUri) {
|
|
59
|
+
return VCLErrorDeserializer.parseString(requestUri)?.replace(PUSH_TOKEN_QUERY_PARAM, `$1${REDACTED_VALUE}`);
|
|
60
|
+
}
|
|
47
61
|
static parseDiagnostics(diagnostics) {
|
|
48
62
|
if (typeof diagnostics !== 'object' || diagnostics == null) {
|
|
49
63
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VCLError","BRIDGED_VCL_ERROR_CODE","VCLErrorDeserializer","fromJsonString","jsonString","parsedError","JSON","parse","isSerializedVCLError","message","error","payload","errorCode","requestId","statusCode","parseStatusCode","diagnostics","parseDiagnostics","_parseError","value","Array","isArray","undefined","parsedStatusCode","parseInt","String","Number","isNaN","nativePlatform","parseNativePlatform","nativeType","
|
|
1
|
+
{"version":3,"names":["VCLError","BRIDGED_VCL_ERROR_CODE","PUSH_TOKEN_QUERY_PARAM","REDACTED_VALUE","VCLErrorDeserializer","fromJsonString","jsonString","parsedError","JSON","parse","isSerializedVCLError","message","error","payload","errorCode","requestId","statusCode","parseStatusCode","sourceErrorCode","parseString","validationPhase","requestDid","requestUri","parseRequestUri","requestKind","diagnostics","parseDiagnostics","_parseError","value","Array","isArray","undefined","parsedStatusCode","parseInt","String","Number","isNaN","replace","nativePlatform","parseNativePlatform","nativeType","nativeStackFrames","parseStringArray","nativeCause","parseNativeCause","type","stackFrames","filter","stackFrame","length"],"sourceRoot":"../../../../../src","sources":["api/entities/error/VCLErrorDeserializer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,7 +22,13 @@ export type VCLErrorInit = {
|
|
|
22
22
|
requestId?: string;
|
|
23
23
|
message?: string;
|
|
24
24
|
statusCode?: number;
|
|
25
|
+
sourceErrorCode?: string;
|
|
26
|
+
validationPhase?: string;
|
|
27
|
+
requestDid?: string;
|
|
28
|
+
requestUri?: string;
|
|
29
|
+
requestKind?: string;
|
|
25
30
|
diagnostics?: VCLDiagnostics;
|
|
31
|
+
cause?: unknown;
|
|
26
32
|
};
|
|
27
33
|
export declare class VCLError extends Error {
|
|
28
34
|
payload?: string;
|
|
@@ -30,7 +36,28 @@ export declare class VCLError extends Error {
|
|
|
30
36
|
errorCode?: string;
|
|
31
37
|
requestId?: string;
|
|
32
38
|
statusCode?: number;
|
|
39
|
+
/**
|
|
40
|
+
* The error code before the native SDK mapped it to the taxonomy `errorCode`,
|
|
41
|
+
* e.g. the server's `exchange_invalid` behind `client_request_rejected`.
|
|
42
|
+
*/
|
|
43
|
+
sourceErrorCode?: string;
|
|
44
|
+
/** The native validation phase that failed, e.g. `client_request_fetch`. */
|
|
45
|
+
validationPhase?: string;
|
|
46
|
+
/** The DID of the issuer or verifier the failed request was for. */
|
|
47
|
+
requestDid?: string;
|
|
48
|
+
/**
|
|
49
|
+
* The URI of the failed request. The value of its `push_delegate.push_token`
|
|
50
|
+
* query parameter is replaced with `[redacted]`, and the rest is passed
|
|
51
|
+
* through unchanged. It can still carry query parameters such as
|
|
52
|
+
* `exchange_id`, `credential_types`, `vendorOriginContext` and
|
|
53
|
+
* issuer-specific values, so redact it before sending it to telemetry.
|
|
54
|
+
*/
|
|
55
|
+
requestUri?: string;
|
|
56
|
+
/** The kind of request that failed, e.g. `issuing_request`. */
|
|
57
|
+
requestKind?: string;
|
|
33
58
|
diagnostics?: VCLDiagnostics;
|
|
59
|
+
/** The original rejection, when it was not a bridged native `VCLError`. */
|
|
60
|
+
cause?: unknown;
|
|
34
61
|
constructor(error?: VCLErrorInit);
|
|
35
62
|
}
|
|
36
63
|
//# sourceMappingURL=VCLError.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCLError.d.ts","sourceRoot":"","sources":["../../../../../../src/api/entities/error/VCLError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"VCLError.d.ts","sourceRoot":"","sources":["../../../../../../src/api/entities/error/VCLError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,QAAS,SAAQ,KAAK;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEJ,KAAK,GAAE,YAAiB;CA0BrC"}
|
|
@@ -10,6 +10,7 @@ export declare class VCLErrorDeserializer {
|
|
|
10
10
|
static fromJsonString(jsonString: string): VCLError;
|
|
11
11
|
private static isSerializedVCLError;
|
|
12
12
|
private static parseStatusCode;
|
|
13
|
+
private static parseRequestUri;
|
|
13
14
|
private static parseDiagnostics;
|
|
14
15
|
private static parseNativeCause;
|
|
15
16
|
private static parseNativePlatform;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCLErrorDeserializer.d.ts","sourceRoot":"","sources":["../../../../../../src/api/entities/error/VCLErrorDeserializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EAGT,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"VCLErrorDeserializer.d.ts","sourceRoot":"","sources":["../../../../../../src/api/entities/error/VCLErrorDeserializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EAGT,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAoB7D,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ;IAgCnD,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAMnC,OAAO,CAAC,MAAM,CAAC,eAAe;IAY9B,OAAO,CAAC,MAAM,CAAC,eAAe;IAO9B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAqC/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAwB/B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAWhC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@velocitycareerlabs/vcl-react-native",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.1",
|
|
4
4
|
"vclNativeSdkVersions": {
|
|
5
|
-
"ios": "2.10.0
|
|
6
|
-
"android": "2.10.0
|
|
5
|
+
"ios": "2.10.0",
|
|
6
|
+
"android": "2.10.0"
|
|
7
7
|
},
|
|
8
8
|
"description": "Velocity Career Labs React Native SDK",
|
|
9
9
|
"license": "Apache-2.0",
|
|
@@ -119,6 +119,9 @@
|
|
|
119
119
|
],
|
|
120
120
|
"jest": {
|
|
121
121
|
"preset": "react-native",
|
|
122
|
+
"moduleNameMapper": {
|
|
123
|
+
"^@velocitycareerlabs/vcl-react-native$": "<rootDir>/src/index"
|
|
124
|
+
},
|
|
122
125
|
"modulePathIgnorePatterns": [
|
|
123
126
|
"<rootDir>/example/node_modules",
|
|
124
127
|
"<rootDir>/lib/"
|
package/src/api/VCLApi.ts
CHANGED
|
@@ -263,7 +263,7 @@ const toVCLError = (error: unknown): VCLError => {
|
|
|
263
263
|
return VCLErrorDeserializer.fromJsonString(error.message);
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
return new VCLError({ message: toErrorMessage(error) });
|
|
266
|
+
return new VCLError({ message: toErrorMessage(error), cause: error });
|
|
267
267
|
};
|
|
268
268
|
|
|
269
269
|
const isBridgedVCLError = (
|
|
@@ -25,7 +25,13 @@ export type VCLErrorInit = {
|
|
|
25
25
|
requestId?: string;
|
|
26
26
|
message?: string;
|
|
27
27
|
statusCode?: number;
|
|
28
|
+
sourceErrorCode?: string;
|
|
29
|
+
validationPhase?: string;
|
|
30
|
+
requestDid?: string;
|
|
31
|
+
requestUri?: string;
|
|
32
|
+
requestKind?: string;
|
|
28
33
|
diagnostics?: VCLDiagnostics;
|
|
34
|
+
cause?: unknown;
|
|
29
35
|
};
|
|
30
36
|
|
|
31
37
|
export class VCLError extends Error {
|
|
@@ -34,7 +40,28 @@ export class VCLError extends Error {
|
|
|
34
40
|
errorCode?: string;
|
|
35
41
|
requestId?: string;
|
|
36
42
|
statusCode?: number;
|
|
43
|
+
/**
|
|
44
|
+
* The error code before the native SDK mapped it to the taxonomy `errorCode`,
|
|
45
|
+
* e.g. the server's `exchange_invalid` behind `client_request_rejected`.
|
|
46
|
+
*/
|
|
47
|
+
sourceErrorCode?: string;
|
|
48
|
+
/** The native validation phase that failed, e.g. `client_request_fetch`. */
|
|
49
|
+
validationPhase?: string;
|
|
50
|
+
/** The DID of the issuer or verifier the failed request was for. */
|
|
51
|
+
requestDid?: string;
|
|
52
|
+
/**
|
|
53
|
+
* The URI of the failed request. The value of its `push_delegate.push_token`
|
|
54
|
+
* query parameter is replaced with `[redacted]`, and the rest is passed
|
|
55
|
+
* through unchanged. It can still carry query parameters such as
|
|
56
|
+
* `exchange_id`, `credential_types`, `vendorOriginContext` and
|
|
57
|
+
* issuer-specific values, so redact it before sending it to telemetry.
|
|
58
|
+
*/
|
|
59
|
+
requestUri?: string;
|
|
60
|
+
/** The kind of request that failed, e.g. `issuing_request`. */
|
|
61
|
+
requestKind?: string;
|
|
37
62
|
diagnostics?: VCLDiagnostics;
|
|
63
|
+
/** The original rejection, when it was not a bridged native `VCLError`. */
|
|
64
|
+
cause?: unknown;
|
|
38
65
|
|
|
39
66
|
constructor(error: VCLErrorInit = {}) {
|
|
40
67
|
super(error.message);
|
|
@@ -44,6 +71,22 @@ export class VCLError extends Error {
|
|
|
44
71
|
this.errorCode = error.errorCode;
|
|
45
72
|
this.requestId = error.requestId;
|
|
46
73
|
this.statusCode = error.statusCode;
|
|
74
|
+
this.sourceErrorCode = error.sourceErrorCode;
|
|
75
|
+
this.validationPhase = error.validationPhase;
|
|
76
|
+
this.requestDid = error.requestDid;
|
|
77
|
+
this.requestUri = error.requestUri;
|
|
78
|
+
this.requestKind = error.requestKind;
|
|
47
79
|
this.diagnostics = error.diagnostics;
|
|
80
|
+
|
|
81
|
+
if (error.cause !== undefined) {
|
|
82
|
+
// Defined like the ES2022 `new Error(message, { cause })` option, which
|
|
83
|
+
// not every JS engine supports.
|
|
84
|
+
Object.defineProperty(this, 'cause', {
|
|
85
|
+
value: error.cause,
|
|
86
|
+
writable: true,
|
|
87
|
+
enumerable: false,
|
|
88
|
+
configurable: true,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
48
91
|
}
|
|
49
92
|
}
|
|
@@ -13,6 +13,9 @@ import {
|
|
|
13
13
|
|
|
14
14
|
export const BRIDGED_VCL_ERROR_CODE = 'VCL_BRIDGED_ERROR_V1';
|
|
15
15
|
|
|
16
|
+
const PUSH_TOKEN_QUERY_PARAM = /([?&]push_delegate\.push_token=)[^&#]*/g;
|
|
17
|
+
const REDACTED_VALUE = '[redacted]';
|
|
18
|
+
|
|
16
19
|
type SerializedVCLError = {
|
|
17
20
|
payload?: string;
|
|
18
21
|
error?: string;
|
|
@@ -20,6 +23,11 @@ type SerializedVCLError = {
|
|
|
20
23
|
requestId?: string;
|
|
21
24
|
message?: string;
|
|
22
25
|
statusCode?: unknown;
|
|
26
|
+
sourceErrorCode?: unknown;
|
|
27
|
+
validationPhase?: unknown;
|
|
28
|
+
requestDid?: unknown;
|
|
29
|
+
requestUri?: unknown;
|
|
30
|
+
requestKind?: unknown;
|
|
23
31
|
diagnostics?: unknown;
|
|
24
32
|
};
|
|
25
33
|
|
|
@@ -40,6 +48,15 @@ export class VCLErrorDeserializer {
|
|
|
40
48
|
requestId: error.requestId,
|
|
41
49
|
message: error.message,
|
|
42
50
|
statusCode: VCLErrorDeserializer.parseStatusCode(error.statusCode),
|
|
51
|
+
sourceErrorCode: VCLErrorDeserializer.parseString(
|
|
52
|
+
error.sourceErrorCode
|
|
53
|
+
),
|
|
54
|
+
validationPhase: VCLErrorDeserializer.parseString(
|
|
55
|
+
error.validationPhase
|
|
56
|
+
),
|
|
57
|
+
requestDid: VCLErrorDeserializer.parseString(error.requestDid),
|
|
58
|
+
requestUri: VCLErrorDeserializer.parseRequestUri(error.requestUri),
|
|
59
|
+
requestKind: VCLErrorDeserializer.parseString(error.requestKind),
|
|
43
60
|
diagnostics: VCLErrorDeserializer.parseDiagnostics(error.diagnostics),
|
|
44
61
|
});
|
|
45
62
|
} catch (_parseError) {
|
|
@@ -62,6 +79,16 @@ export class VCLErrorDeserializer {
|
|
|
62
79
|
return Number.isNaN(parsedStatusCode) ? undefined : parsedStatusCode;
|
|
63
80
|
}
|
|
64
81
|
|
|
82
|
+
// The native SDKs report the request endpoint, which includes the wallet's
|
|
83
|
+
// push token when the caller passed a `pushDelegate`. The caller already has
|
|
84
|
+
// the token, so it is redacted here rather than by every consumer.
|
|
85
|
+
private static parseRequestUri(requestUri: unknown): string | undefined {
|
|
86
|
+
return VCLErrorDeserializer.parseString(requestUri)?.replace(
|
|
87
|
+
PUSH_TOKEN_QUERY_PARAM,
|
|
88
|
+
`$1${REDACTED_VALUE}`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
65
92
|
private static parseDiagnostics(
|
|
66
93
|
diagnostics: unknown
|
|
67
94
|
): VCLDiagnostics | undefined {
|