@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 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)
@@ -36,13 +36,7 @@ fun Promise.rejectBridgedVCLError(error: VCLError) {
36
36
 
37
37
  private fun VCLError.toBridgedJsonObject(
38
38
  nativeErrorStackFrameLimit: Int
39
- ) = JSONObject().apply {
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
 
@@ -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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","ignoreList":[]}
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;;AAyBA,OAAO,MAAMA,QAAQ,SAASC,KAAK,CAAC;EAQlCC,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,WAAW,GAAGP,KAAK,CAACO,WAAW;EACtC;AACF","ignoreList":[]}
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","parseString","nativeStackFrames","parseStringArray","nativeCause","parseNativeCause","type","stackFrames","filter","stackFrame","length"],"sourceRoot":"../../../../../src","sources":["api/entities/error/VCLErrorDeserializer.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,QAAQ,QAGH,eAAY;AAEnB,OAAO,MAAMC,sBAAsB,GAAG,sBAAsB;AAY5D,OAAO,MAAMC,oBAAoB,CAAC;EAChC,OAAOC,cAAcA,CAACC,UAAkB,EAAY;IAClD,IAAI;MACF,MAAMC,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACH,UAAU,CAAC;MAE1C,IAAI,CAACF,oBAAoB,CAACM,oBAAoB,CAACH,WAAW,CAAC,EAAE;QAC3D,OAAO,IAAIL,QAAQ,CAAC;UAAES,OAAO,EAAEL;QAAW,CAAC,CAAC;MAC9C;MAEA,MAAMM,KAAK,GAAGL,WAAiC;MAC/C,OAAO,IAAIL,QAAQ,CAAC;QAClBW,OAAO,EAAED,KAAK,CAACC,OAAO;QACtBD,KAAK,EAAEA,KAAK,CAACA,KAAK;QAClBE,SAAS,EAAEF,KAAK,CAACE,SAAS;QAC1BC,SAAS,EAAEH,KAAK,CAACG,SAAS;QAC1BJ,OAAO,EAAEC,KAAK,CAACD,OAAO;QACtBK,UAAU,EAAEZ,oBAAoB,CAACa,eAAe,CAACL,KAAK,CAACI,UAAU,CAAC;QAClEE,WAAW,EAAEd,oBAAoB,CAACe,gBAAgB,CAACP,KAAK,CAACM,WAAW;MACtE,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOE,WAAW,EAAE;MACpB,OAAO,IAAIlB,QAAQ,CAAC;QAAES,OAAO,EAAEL;MAAW,CAAC,CAAC;IAC9C;EACF;EAEA,OAAeI,oBAAoBA,CACjCW,KAAc,EACe;IAC7B,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,IAAI,IAAI,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC;EAC5E;EAEA,OAAeJ,eAAeA,CAACD,UAAmB,EAAsB;IACtE,IAAIA,UAAU,IAAI,IAAI,EAAE;MACtB,OAAOQ,SAAS;IAClB;IAEA,MAAMC,gBAAgB,GAAGC,QAAQ,CAACC,MAAM,CAACX,UAAU,CAAC,EAAE,EAAE,CAAC;IACzD,OAAOY,MAAM,CAACC,KAAK,CAACJ,gBAAgB,CAAC,GAAGD,SAAS,GAAGC,gBAAgB;EACtE;EAEA,OAAeN,gBAAgBA,CAC7BD,WAAoB,EACQ;IAC5B,IAAI,OAAOA,WAAW,KAAK,QAAQ,IAAIA,WAAW,IAAI,IAAI,EAAE;MAC1D,OAAOM,SAAS;IAClB;IAEA,MAAMM,cAAc,GAAG1B,oBAAoB,CAAC2B,mBAAmB,CAC5Db,WAAW,CAAkCY,cAChD,CAAC;IACD,MAAME,UAAU,GAAG5B,oBAAoB,CAAC6B,WAAW,CAChDf,WAAW,CAA8Bc,UAC5C,CAAC;IACD,MAAME,iBAAiB,GAAG9B,oBAAoB,CAAC+B,gBAAgB,CAC5DjB,WAAW,CAAqCgB,iBACnD,CAAC;IACD,MAAME,WAAW,GAAGhC,oBAAoB,CAACiC,gBAAgB,CACtDnB,WAAW,CAA+BkB,WAC7C,CAAC;IAED,IACEN,cAAc,IAAI,IAAI,IACtBE,UAAU,IAAI,IAAI,IAClBE,iBAAiB,IAAI,IAAI,IACzBE,WAAW,IAAI,IAAI,EACnB;MACA,OAAOZ,SAAS;IAClB;IAEA,OAAO;MACLM,cAAc;MACdE,UAAU;MACVE,iBAAiB;MACjBE;IACF,CAAC;EACH;EAEA,OAAeC,gBAAgBA,CAC7BD,WAAoB,EACmB;IACvC,IAAI,OAAOA,WAAW,KAAK,QAAQ,IAAIA,WAAW,IAAI,IAAI,EAAE;MAC1D,OAAOZ,SAAS;IAClB;IAEA,MAAMc,IAAI,GAAGlC,oBAAoB,CAAC6B,WAAW,CAC1CG,WAAW,CAAwBE,IACtC,CAAC;IACD,MAAM3B,OAAO,GAAGP,oBAAoB,CAAC6B,WAAW,CAC7CG,WAAW,CAA2BzB,OACzC,CAAC;IACD,MAAM4B,WAAW,GAAGnC,oBAAoB,CAAC+B,gBAAgB,CACtDC,WAAW,CAA+BG,WAC7C,CAAC;IAED,IAAID,IAAI,IAAI,IAAI,IAAI3B,OAAO,IAAI,IAAI,IAAI4B,WAAW,IAAI,IAAI,EAAE;MAC1D,OAAOf,SAAS;IAClB;IAEA,OAAO;MAAEc,IAAI;MAAE3B,OAAO;MAAE4B;IAAY,CAAC;EACvC;EAEA,OAAeR,mBAAmBA,CAChCD,cAAuB,EACW;IAClC,IAAIA,cAAc,KAAK,KAAK,IAAIA,cAAc,KAAK,SAAS,EAAE;MAC5D,OAAOA,cAAc;IACvB;IAEA,OAAON,SAAS;EAClB;EAEA,OAAeS,WAAWA,CAACZ,KAAc,EAAsB;IAC7D,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGG,SAAS;EACtD;EAEA,OAAeW,gBAAgBA,CAACd,KAAc,EAAwB;IACpE,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE;MACzB,OAAOG,SAAS;IAClB;IAEA,MAAMe,WAAW,GAAGlB,KAAK,CAACmB,MAAM,CAC7BC,UAAU,IAA2B,OAAOA,UAAU,KAAK,QAC9D,CAAC;IAED,OAAOF,WAAW,CAACG,MAAM,GAAG,CAAC,GAAGH,WAAW,GAAGf,SAAS;EACzD;AACF","ignoreList":[]}
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;CAC9B,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,WAAW,CAAC,EAAE,cAAc,CAAC;gBAEjB,KAAK,GAAE,YAAiB;CAUrC"}
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;AAY7D,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ;IAuBnD,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAMnC,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B,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"}
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.0-rc.3",
3
+ "version": "2.10.1",
4
4
  "vclNativeSdkVersions": {
5
- "ios": "2.10.0-rc",
6
- "android": "2.10.0-rc"
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 {