@meshconnect/uwc-core 1.5.0-snapshot.4e344c2 → 1.5.0-snapshot.7469077
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-wallet-error.d.ts","sourceRoot":"","sources":["../../src/utils/to-wallet-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAA;AAW/B;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CASzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQvD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,WAAW,CAAA;CACpB,CAMA;
|
|
1
|
+
{"version":3,"file":"to-wallet-error.d.ts","sourceRoot":"","sources":["../../src/utils/to-wallet-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAA;AAW/B;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CASzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQvD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,WAAW,CAAA;CACpB,CAMA;AAsED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUpD"}
|
|
@@ -59,20 +59,25 @@ export function classifyError(error) {
|
|
|
59
59
|
}
|
|
60
60
|
function classifyErrorUnguarded(error) {
|
|
61
61
|
const code = error?.code;
|
|
62
|
-
|
|
62
|
+
// Only a finite integer is a valid JSON-RPC/EIP-1193 code. NaN/Infinity/floats
|
|
63
|
+
// are not — gating here keeps them from mis-attributing source or emitting a
|
|
64
|
+
// meaningless numeric errorCode, even when a raw error reaches this classifier.
|
|
65
|
+
const hasNumericCode = typeof code === 'number' && Number.isInteger(code);
|
|
63
66
|
// Numeric codes pass through; STRING codes are wallet-controlled free-form
|
|
64
67
|
// data headed for structured telemetry fields, so they get the same scrubber
|
|
65
68
|
// as error.message plus a length cap. Known enum-likes ('ACTION_REJECTED')
|
|
66
69
|
// are short and pattern-free — they pass unchanged.
|
|
67
|
-
const errorCode =
|
|
70
|
+
const errorCode = hasNumericCode
|
|
68
71
|
? String(code)
|
|
69
72
|
: typeof code === 'string'
|
|
70
73
|
? scrubMessage(code).slice(0, MAX_ERROR_CODE_LENGTH)
|
|
71
74
|
: undefined;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
// A numeric code is the strongest origin signal, so it wins even when a
|
|
76
|
+
// connector re-wrapped the error (WalletConnectorError now carries it through).
|
|
77
|
+
const source = hasNumericCode
|
|
78
|
+
? 'provider'
|
|
79
|
+
: error instanceof WalletConnectorError
|
|
80
|
+
? 'connector'
|
|
76
81
|
: 'unknown';
|
|
77
82
|
let failureKind = 'unknown';
|
|
78
83
|
if (isUserRejection(error)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-wallet-error.js","sourceRoot":"","sources":["../../src/utils/to-wallet-error.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAIjB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAErD;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,EAAE,CAAA;AAEhC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC;QACH,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;QACrD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAA;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAA;IAChE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,CAAC;QACH,IAAI,KAAK,YAAY,oBAAoB;YAAE,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAA;QAC3E,MAAM,IAAI,GAAI,KAA+C,EAAE,IAAI,CAAA;QACnE,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,iBAAiB,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAK1C,IAAI,CAAC;QACH,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IACtD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAK5C,MAAM,IAAI,GAAI,KAA+C,EAAE,IAAI,CAAA;IACnE,MAAM,cAAc,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"to-wallet-error.js","sourceRoot":"","sources":["../../src/utils/to-wallet-error.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshconnect/uwc-core",
|
|
3
|
-
"version": "1.5.0-snapshot.
|
|
3
|
+
"version": "1.5.0-snapshot.7469077",
|
|
4
4
|
"description": "Core functionality for Universal Wallet Connector",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@meshconnect/uwc-injected-connector": "0.16.6-snapshot.
|
|
20
|
-
"@meshconnect/uwc-ton-connector": "0.7.3-snapshot.
|
|
21
|
-
"@meshconnect/uwc-types": "0.20.0-snapshot.
|
|
22
|
-
"@meshconnect/uwc-wallet-connect-connector": "0.11.1-snapshot.
|
|
19
|
+
"@meshconnect/uwc-injected-connector": "0.16.6-snapshot.7469077",
|
|
20
|
+
"@meshconnect/uwc-ton-connector": "0.7.3-snapshot.7469077",
|
|
21
|
+
"@meshconnect/uwc-types": "0.20.0-snapshot.7469077",
|
|
22
|
+
"@meshconnect/uwc-wallet-connect-connector": "0.11.1-snapshot.7469077"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"typescript": "^5.9.3"
|
|
@@ -49,6 +49,38 @@ describe('classifyError', () => {
|
|
|
49
49
|
)
|
|
50
50
|
})
|
|
51
51
|
|
|
52
|
+
it('classifies a WalletConnectorError that carries a numeric code from its code (MFS-667)', () => {
|
|
53
|
+
// The fix: connectors wrap raw provider errors as WalletConnectorError. Before
|
|
54
|
+
// MFS-667 the numeric `.code` was dropped at wrap time, so a -32002 "already
|
|
55
|
+
// pending" landed as unknown/connector even though the classifier had a rule
|
|
56
|
+
// for it. With the code preserved, the rule fires and origin attributes to the
|
|
57
|
+
// provider — no message inference involved.
|
|
58
|
+
const wrapped = new WalletConnectorError({
|
|
59
|
+
type: 'unknown',
|
|
60
|
+
message: "Request of type 'wallet_requestPermissions' already pending",
|
|
61
|
+
code: -32002
|
|
62
|
+
})
|
|
63
|
+
expect(classifyError(wrapped)).toEqual({
|
|
64
|
+
errorCode: '-32002',
|
|
65
|
+
failureKind: 'provider_error',
|
|
66
|
+
source: 'provider'
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('still classifies a codeless WalletConnectorError as unknown/connector', () => {
|
|
71
|
+
// Guard against over-reach: a wrapped error with no numeric code keeps the
|
|
72
|
+
// connector attribution and stays unknown — the fix only lights up when a real
|
|
73
|
+
// code survives.
|
|
74
|
+
const wrapped = new WalletConnectorError({
|
|
75
|
+
type: 'unknown',
|
|
76
|
+
message: 'No accounts returned from wallet'
|
|
77
|
+
})
|
|
78
|
+
expect(classifyError(wrapped)).toEqual({
|
|
79
|
+
failureKind: 'unknown',
|
|
80
|
+
source: 'connector'
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
|
|
52
84
|
it('classifies an expired WalletConnectorError', () => {
|
|
53
85
|
const err = new WalletConnectorError({ type: 'expired', message: 'gone' })
|
|
54
86
|
expect(classifyError(err)).toEqual({
|
|
@@ -67,6 +99,17 @@ describe('classifyError', () => {
|
|
|
67
99
|
expect(classifyError({ code: 4901 }).failureKind).toBe('network_error')
|
|
68
100
|
})
|
|
69
101
|
|
|
102
|
+
it('ignores non-integer numeric codes (NaN / Infinity / float)', () => {
|
|
103
|
+
// classifyError is public and receives raw errors, so a non-integer code must
|
|
104
|
+
// not flip source to provider or emit a meaningless errorCode.
|
|
105
|
+
for (const code of [NaN, Infinity, -Infinity, 1.5]) {
|
|
106
|
+
expect(classifyError({ code, message: 'x' })).toEqual({
|
|
107
|
+
failureKind: 'unknown',
|
|
108
|
+
source: 'unknown'
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
|
|
70
113
|
it('falls back to unknown/unknown for a plain Error (no reliable signal)', () => {
|
|
71
114
|
// RELIABLE-ONLY: a plain Error carries no code and is not a typed connector
|
|
72
115
|
// error, so we never guess a kind from its message.
|
|
@@ -75,25 +75,28 @@ function classifyErrorUnguarded(error: unknown): {
|
|
|
75
75
|
source: ErrorSource
|
|
76
76
|
} {
|
|
77
77
|
const code = (error as { code?: unknown } | null | undefined)?.code
|
|
78
|
-
|
|
78
|
+
// Only a finite integer is a valid JSON-RPC/EIP-1193 code. NaN/Infinity/floats
|
|
79
|
+
// are not — gating here keeps them from mis-attributing source or emitting a
|
|
80
|
+
// meaningless numeric errorCode, even when a raw error reaches this classifier.
|
|
81
|
+
const hasNumericCode = typeof code === 'number' && Number.isInteger(code)
|
|
79
82
|
|
|
80
83
|
// Numeric codes pass through; STRING codes are wallet-controlled free-form
|
|
81
84
|
// data headed for structured telemetry fields, so they get the same scrubber
|
|
82
85
|
// as error.message plus a length cap. Known enum-likes ('ACTION_REJECTED')
|
|
83
86
|
// are short and pattern-free — they pass unchanged.
|
|
84
|
-
const errorCode =
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
: undefined
|
|
87
|
+
const errorCode = hasNumericCode
|
|
88
|
+
? String(code)
|
|
89
|
+
: typeof code === 'string'
|
|
90
|
+
? scrubMessage(code).slice(0, MAX_ERROR_CODE_LENGTH)
|
|
91
|
+
: undefined
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
// A numeric code is the strongest origin signal, so it wins even when a
|
|
94
|
+
// connector re-wrapped the error (WalletConnectorError now carries it through).
|
|
95
|
+
const source: ErrorSource = hasNumericCode
|
|
96
|
+
? 'provider'
|
|
97
|
+
: error instanceof WalletConnectorError
|
|
93
98
|
? 'connector'
|
|
94
|
-
:
|
|
95
|
-
? 'provider'
|
|
96
|
-
: 'unknown'
|
|
99
|
+
: 'unknown'
|
|
97
100
|
|
|
98
101
|
let failureKind: FailureKind = 'unknown'
|
|
99
102
|
if (isUserRejection(error)) {
|