@meshconnect/uwc-core 1.4.0 → 1.4.1-snapshot.089e410
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/dist/services/transaction-service.d.ts.map +1 -1
- package/dist/services/transaction-service.js +20 -0
- package/dist/services/transaction-service.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -5
- package/src/services/transaction-service.test.ts +48 -0
- package/src/services/transaction-service.ts +25 -0
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAmB1D;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,uBAAuB;gBALvB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,EAC1C,sBAAsB,EAAE,OAAO,EAC/B,YAAY,EAAE,YAAY,EAE1B,uBAAuB,EAAE,MAAM;IAGzC;;;;;OAKG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,iBAAiB,CAAC;IAsD7B;;;;OAIG;IACG,0BAA0B,CAC9B,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;CAqBvB"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { instrumentHandoff, sessionHandoffContext } from '../observability/instrument-handoff';
|
|
2
2
|
import { resolveSessionProvider } from '../utils/resolve-session-provider';
|
|
3
3
|
import { validateWalletSession, getSessionConnector } from '../utils/validate-wallet-session';
|
|
4
|
+
/**
|
|
5
|
+
* Token-2022 (SPL Token Extensions) program id. Kept as a literal so core takes
|
|
6
|
+
* no @solana/spl-token dependency — used only to tag an observability
|
|
7
|
+
* breadcrumb, never to build a transaction.
|
|
8
|
+
*/
|
|
9
|
+
const SOLANA_TOKEN_2022_PROGRAM_ID = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';
|
|
4
10
|
/**
|
|
5
11
|
* Service for handling transaction operations across different connector types.
|
|
6
12
|
*
|
|
@@ -42,6 +48,20 @@ export class TransactionService {
|
|
|
42
48
|
// Validation, not wallet work — a missing provider must not enter the funnel.
|
|
43
49
|
// undefined only for tonConnect, whose connector resolves its own provider.
|
|
44
50
|
const provider = resolveSessionProvider(session, this.usingIntegratedBrowser);
|
|
51
|
+
// Breadcrumb: a Token-2022 transfer is about to be handed to the wallet.
|
|
52
|
+
// The Solana builder emits a bare transferChecked (no transfer-hook
|
|
53
|
+
// extra-account-metas); if a mint ever enables a transfer hook, that
|
|
54
|
+
// transfer fails at the wallet with a generic error. This log lets us spot
|
|
55
|
+
// Token-2022 transfer volume — and correlate any failure spike — in
|
|
56
|
+
// telemetry without adding an RPC lookup here. See ONC-57.
|
|
57
|
+
if ('tokenMint' in request &&
|
|
58
|
+
request.tokenProgram === SOLANA_TOKEN_2022_PROGRAM_ID) {
|
|
59
|
+
this.eventManager.emit('log', {
|
|
60
|
+
level: 'info',
|
|
61
|
+
message: 'solana token-2022 transfer',
|
|
62
|
+
args: []
|
|
63
|
+
});
|
|
64
|
+
}
|
|
45
65
|
const result = await instrumentHandoff({
|
|
46
66
|
eventManager: this.eventManager,
|
|
47
67
|
timeoutMs: this.walletResponseTimeoutMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-service.js","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AASA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,kCAAkC,CAAA;AAEzC;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAEnB;IACA;IACA;IACA;IAEA;IANV,YACU,cAA8B,EAC9B,UAA0C,EAC1C,sBAA+B,EAC/B,YAA0B;IAClC,yEAAyE;IACjE,uBAA+B;QAL/B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,eAAU,GAAV,UAAU,CAAgC;QAC1C,2BAAsB,GAAtB,sBAAsB,CAAS;QAC/B,iBAAY,GAAZ,YAAY,CAAc;QAE1B,4BAAuB,GAAvB,uBAAuB,CAAQ;IACtC,CAAC;IAEJ;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CACnB,OAA2B,EAC3B,OAAwB;QAExB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QACjC,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE;YACzD,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC/D,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;QAED,8EAA8E;QAC9E,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,sBAAsB,CACrC,OAAO,EACP,IAAI,CAAC,sBAAsB,CAC5B,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;YACE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,uBAAuB;YACvC,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,EACD,qBAAqB,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACjD,uEAAuE;QACvE,GAAG,EAAE,CACH,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,SAAS,CAAC,eAAgB,CAAC,OAAO,CAAC;YACrC,CAAC,CAAC,SAAS,CAAC,eAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CACpD,CAAA;QACD,0EAA0E;QAC1E,0EAA0E;QAC1E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QACjC,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,0BAA0B,CAC9B,YAAwB;QAExB,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE;YACzD,cAAc,EAAE,KAAK;SACtB,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,cAAe,CAAC,CAAA;QAC9D,IAAI,CAAC,SAAS,EAAE,0BAA0B,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,+DAA+D,OAAO,CAAC,cAAc,GAAG,CACzF,CAAA;QACH,CAAC;QAED,OAAO,MAAM,iBAAiB,CAC5B;YACE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,uBAAuB;SACxC,EACD,qBAAqB,CAAC,uBAAuB,EAAE,OAAO,CAAC,EACvD,GAAG,EAAE,CAAC,SAAS,CAAC,0BAA2B,CAAC,YAAY,CAAC,CAC1D,CAAA;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"transaction-service.js","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const UWC_CORE_VERSION = "1.4.
|
|
1
|
+
export declare const UWC_CORE_VERSION = "1.4.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshconnect/uwc-core",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1-snapshot.089e410",
|
|
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-
|
|
20
|
-
"@meshconnect/uwc-
|
|
21
|
-
"@meshconnect/uwc-
|
|
22
|
-
"@meshconnect/uwc-
|
|
19
|
+
"@meshconnect/uwc-ton-connector": "0.7.3-snapshot.089e410",
|
|
20
|
+
"@meshconnect/uwc-types": "0.20.0-snapshot.089e410",
|
|
21
|
+
"@meshconnect/uwc-wallet-connect-connector": "0.11.0-snapshot.089e410",
|
|
22
|
+
"@meshconnect/uwc-injected-connector": "0.16.5-snapshot.089e410"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"typescript": "^5.9.3"
|
|
@@ -37,6 +37,7 @@ describe('TransactionService.sendTransaction', () => {
|
|
|
37
37
|
let mockConnector: Connector
|
|
38
38
|
let connectors: Map<ConnectionMode, Connector>
|
|
39
39
|
let events: string[]
|
|
40
|
+
let logs: { message: string }[]
|
|
40
41
|
|
|
41
42
|
const connectSession = (
|
|
42
43
|
mode: ConnectionMode = 'injected',
|
|
@@ -52,6 +53,7 @@ describe('TransactionService.sendTransaction', () => {
|
|
|
52
53
|
sessionManager = new SessionManager()
|
|
53
54
|
eventManager = new EventManager()
|
|
54
55
|
events = []
|
|
56
|
+
logs = []
|
|
55
57
|
for (const name of [
|
|
56
58
|
'awaitingWallet',
|
|
57
59
|
'walletSucceeded',
|
|
@@ -60,6 +62,7 @@ describe('TransactionService.sendTransaction', () => {
|
|
|
60
62
|
] as const) {
|
|
61
63
|
eventManager.on(name, () => events.push(name))
|
|
62
64
|
}
|
|
65
|
+
eventManager.on('log', d => logs.push(d))
|
|
63
66
|
|
|
64
67
|
mockConnector = {
|
|
65
68
|
connect: vi.fn(),
|
|
@@ -217,6 +220,51 @@ describe('TransactionService.sendTransaction', () => {
|
|
|
217
220
|
expect(mockConnector.sendTransaction).toHaveBeenCalledWith(request)
|
|
218
221
|
expect(events).toEqual(['awaitingWallet', 'walletSucceeded'])
|
|
219
222
|
})
|
|
223
|
+
|
|
224
|
+
// ONC-57: observability breadcrumb for Token-2022 transfers (the builder
|
|
225
|
+
// emits a bare transferChecked, which would fail at the wallet if a mint ever
|
|
226
|
+
// enabled a transfer hook — this log lets us spot/correlate that in prod).
|
|
227
|
+
it('emits a token-2022 breadcrumb when sending a Token-2022 Solana transfer', async () => {
|
|
228
|
+
connectSession()
|
|
229
|
+
const token2022Request = {
|
|
230
|
+
from: '0x123',
|
|
231
|
+
to: 'destOwner',
|
|
232
|
+
amount: BigInt(1),
|
|
233
|
+
blockhash: 'bh',
|
|
234
|
+
tokenMint: 'mint',
|
|
235
|
+
tokenDecimals: 6,
|
|
236
|
+
tokenProgram: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'
|
|
237
|
+
} as unknown as TransactionRequest
|
|
238
|
+
|
|
239
|
+
await transactionService.sendTransaction(token2022Request)
|
|
240
|
+
|
|
241
|
+
expect(logs.map(l => l.message)).toContain('solana token-2022 transfer')
|
|
242
|
+
// The breadcrumb does not interfere with the normal handoff.
|
|
243
|
+
expect(events).toEqual(['awaitingWallet', 'walletSucceeded'])
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
it('does NOT emit the breadcrumb for a legacy SPL (TOKEN_PROGRAM) transfer', async () => {
|
|
247
|
+
connectSession()
|
|
248
|
+
const legacyRequest = {
|
|
249
|
+
from: '0x123',
|
|
250
|
+
to: 'destOwner',
|
|
251
|
+
amount: BigInt(1),
|
|
252
|
+
blockhash: 'bh',
|
|
253
|
+
tokenMint: 'mint',
|
|
254
|
+
tokenDecimals: 6,
|
|
255
|
+
tokenProgram: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'
|
|
256
|
+
} as unknown as TransactionRequest
|
|
257
|
+
|
|
258
|
+
await transactionService.sendTransaction(legacyRequest)
|
|
259
|
+
|
|
260
|
+
expect(logs.map(l => l.message)).not.toContain('solana token-2022 transfer')
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
it('does NOT emit the breadcrumb for a non-Solana (EVM) transfer', async () => {
|
|
264
|
+
connectSession()
|
|
265
|
+
await transactionService.sendTransaction(request)
|
|
266
|
+
expect(logs.map(l => l.message)).not.toContain('solana token-2022 transfer')
|
|
267
|
+
})
|
|
220
268
|
})
|
|
221
269
|
|
|
222
270
|
describe('TransactionService.signSolanaTransactionBytes', () => {
|
|
@@ -17,6 +17,14 @@ import {
|
|
|
17
17
|
getSessionConnector
|
|
18
18
|
} from '../utils/validate-wallet-session'
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Token-2022 (SPL Token Extensions) program id. Kept as a literal so core takes
|
|
22
|
+
* no @solana/spl-token dependency — used only to tag an observability
|
|
23
|
+
* breadcrumb, never to build a transaction.
|
|
24
|
+
*/
|
|
25
|
+
const SOLANA_TOKEN_2022_PROGRAM_ID =
|
|
26
|
+
'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb'
|
|
27
|
+
|
|
20
28
|
/**
|
|
21
29
|
* Service for handling transaction operations across different connector types.
|
|
22
30
|
*
|
|
@@ -62,6 +70,23 @@ export class TransactionService {
|
|
|
62
70
|
this.usingIntegratedBrowser
|
|
63
71
|
)
|
|
64
72
|
|
|
73
|
+
// Breadcrumb: a Token-2022 transfer is about to be handed to the wallet.
|
|
74
|
+
// The Solana builder emits a bare transferChecked (no transfer-hook
|
|
75
|
+
// extra-account-metas); if a mint ever enables a transfer hook, that
|
|
76
|
+
// transfer fails at the wallet with a generic error. This log lets us spot
|
|
77
|
+
// Token-2022 transfer volume — and correlate any failure spike — in
|
|
78
|
+
// telemetry without adding an RPC lookup here. See ONC-57.
|
|
79
|
+
if (
|
|
80
|
+
'tokenMint' in request &&
|
|
81
|
+
request.tokenProgram === SOLANA_TOKEN_2022_PROGRAM_ID
|
|
82
|
+
) {
|
|
83
|
+
this.eventManager.emit('log', {
|
|
84
|
+
level: 'info',
|
|
85
|
+
message: 'solana token-2022 transfer',
|
|
86
|
+
args: []
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
|
|
65
90
|
const result = await instrumentHandoff(
|
|
66
91
|
{
|
|
67
92
|
eventManager: this.eventManager,
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated from package.json by scripts/generate-version.mjs — do not edit.
|
|
2
|
-
export const UWC_CORE_VERSION = '1.4.
|
|
2
|
+
export const UWC_CORE_VERSION = '1.4.1'
|