@relayprotocol/relay-ton-wallet-adapter 2.0.0

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.
@@ -0,0 +1 @@
1
+ {"type": "module","sideEffects":false}
@@ -0,0 +1,199 @@
1
+ import { LogLevel, getClient } from '@relayprotocol/relay-sdk';
2
+ import { TonClient } from '@ton/ton';
3
+ import { Address, Cell, beginCell, loadMessage, storeMessage } from '@ton/core';
4
+ // TON Connect CHAIN identifier for mainnet (Relay only supports TON mainnet).
5
+ const TON_MAINNET_CHAIN = '-239';
6
+ // Relay's numeric chainId for TON mainnet. TON is single-chain for Relay, so
7
+ // the adapter owns this rather than taking it as a parameter.
8
+ const TON_CHAIN_ID = 224235520;
9
+ const DEFAULT_VALID_FOR_SECONDS = 300;
10
+ const CONFIRM_POLL_MS = 2000;
11
+ const CONFIRM_TIMEOUT_MS = 120_000;
12
+ const CONFIRM_TX_LOOKBACK = 32;
13
+ /**
14
+ * Adapts a TON wallet for use with the Relay SDK.
15
+ *
16
+ * The user's key lives in their wallet (e.g. Dynamic / TON Connect), so this
17
+ * adapter never signs. It maps the Relay quote step into a TON Connect request,
18
+ * hands it to the wallet-provided `sendTransaction` callback (which signs +
19
+ * broadcasts), and then confirms the origin transaction landed successfully.
20
+ *
21
+ * @param walletAddress - The connected wallet's address.
22
+ * @param sendTransaction - Wallet callback that signs + broadcasts a request.
23
+ */
24
+ export const adaptTonWallet = (walletAddress, sendTransaction) => {
25
+ if (typeof sendTransaction !== 'function') {
26
+ throw new Error('adaptTonWallet requires a sendTransaction function');
27
+ }
28
+ // Parse (and validate) the wallet address once, then reuse it for confirmation.
29
+ const walletAccount = Address.parse(walletAddress);
30
+ return {
31
+ vmType: 'tonvm',
32
+ getChainId: async () => TON_CHAIN_ID,
33
+ address: async () => walletAddress,
34
+ handleSignMessageStep: async () => {
35
+ // Not used by deposit/bridge flows; mirrors the other VM adapters.
36
+ throw new Error('Message signing not implemented for TON');
37
+ },
38
+ handleSendTransactionStep: async (_chainId, stepItem) => {
39
+ const client = getClient();
40
+ const messages = stepItem.data.messages;
41
+ if (!messages || messages.length === 0) {
42
+ throw new Error('TON transaction step is missing messages');
43
+ }
44
+ // Relay returns internal-message fields (to/value/body); map them to the
45
+ // TON Connect request shape the wallet expects (address/amount/payload).
46
+ // TON Connect has no per-message bounce flag — the wallet derives it from
47
+ // the address form — so honor the step's `bounce` field by re-encoding the
48
+ // address (e.g. bounce:false -> non-bounceable `UQ…`). Sending a deposit
49
+ // to the bounceable form makes the depository bounce the funds back.
50
+ const request = {
51
+ validUntil: Math.floor(Date.now() / 1000) + DEFAULT_VALID_FOR_SECONDS,
52
+ network: TON_MAINNET_CHAIN,
53
+ messages: messages.map((message) => ({
54
+ address: encodeAddress(message.to, message.bounce),
55
+ amount: message.value.toString(),
56
+ ...(message.body ? { payload: message.body } : {}),
57
+ ...(message.stateInit ? { stateInit: message.stateInit } : {})
58
+ }))
59
+ };
60
+ client.log(['Sending TON transaction', request], LogLevel.Verbose);
61
+ const result = await sendTransaction(request);
62
+ // The wallet returns the signed external-message BOC (base64). Reduce it
63
+ // to the external-message hash so callers get a clean identifier (the raw
64
+ // BOC mangles explorer URLs) that also matches the on-chain transaction.
65
+ const boc = result.boc ?? result.transactionHash;
66
+ if (!boc) {
67
+ throw new Error('No result returned from the TON wallet');
68
+ }
69
+ const messageHash = toMessageHash(boc, walletAccount);
70
+ client.log(['TON transaction submitted', messageHash], LogLevel.Verbose);
71
+ return messageHash;
72
+ },
73
+ handleConfirmTransactionStep: async (externalMessageHash, chainId) => {
74
+ const client = getClient();
75
+ // Read the TON RPC from the Relay client's chain config so integrators can
76
+ // override it by configuring the chain — no adapter-level endpoint option.
77
+ const rpcUrl = client.chains.find((chain) => chain.id === chainId)
78
+ ?.httpRpcUrl;
79
+ if (!rpcUrl) {
80
+ throw new Error(`No TON httpRpcUrl configured for chainId ${chainId} in the Relay client`);
81
+ }
82
+ const tonClient = new TonClient({ endpoint: rpcUrl });
83
+ // `handleSendTransactionStep` returns the external-message hash, which
84
+ // equals the inbound message hash of the transaction it produces. Poll the
85
+ // wallet's recent transactions for that one and confirm the origin
86
+ // (deposit) executed successfully. This confirms the wallet's external-in
87
+ // transaction; it does not independently verify each emitted internal
88
+ // message against the Relay step.
89
+ const start = Date.now();
90
+ const maxAttempts = Math.ceil(CONFIRM_TIMEOUT_MS / CONFIRM_POLL_MS) + 1;
91
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
92
+ let match;
93
+ try {
94
+ const transactions = await tonClient.getTransactions(walletAccount, {
95
+ limit: CONFIRM_TX_LOOKBACK
96
+ });
97
+ for (const tx of transactions) {
98
+ if (!tx.inMessage) {
99
+ continue;
100
+ }
101
+ if (hashMessage(tx.inMessage) === externalMessageHash) {
102
+ match = {
103
+ hash: tx.hash().toString('hex'),
104
+ lt: tx.lt.toString(),
105
+ description: tx.description
106
+ };
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ catch (error) {
112
+ client.log(['Error polling for TON transaction', error], LogLevel.Verbose);
113
+ }
114
+ if (match) {
115
+ if (!isTransactionSuccessful(match.description)) {
116
+ client.log(['TON transaction failed', match.description], LogLevel.Verbose);
117
+ throw new Error('TON transaction failed');
118
+ }
119
+ return { hash: match.hash, lt: match.lt };
120
+ }
121
+ if (Date.now() - start > CONFIRM_TIMEOUT_MS) {
122
+ break;
123
+ }
124
+ await new Promise((resolve) => setTimeout(resolve, CONFIRM_POLL_MS));
125
+ }
126
+ throw new Error('TON transaction confirmation timed out');
127
+ },
128
+ switchChain: () => Promise.resolve()
129
+ };
130
+ };
131
+ /** Canonical message hash, used identically for the BOC and on-chain messages. */
132
+ const hashMessage = (message) => {
133
+ return beginCell()
134
+ .store(storeMessage(message))
135
+ .endCell()
136
+ .hash()
137
+ .toString('hex');
138
+ };
139
+ /**
140
+ * Reduce the wallet's result to the external-message hash. The wallet returns
141
+ * the signed external-message BOC; we parse it as a message and hash it via the
142
+ * same `hashMessage` used on-chain (so both sides use identical serialization).
143
+ * Validates it's an external-in message addressed to the expected wallet. Falls
144
+ * back only when the input is already a 64-char hex hash.
145
+ */
146
+ const toMessageHash = (bocOrHash, expectedWallet) => {
147
+ try {
148
+ const message = loadMessage(Cell.fromBase64(bocOrHash).beginParse());
149
+ if (message.info.type !== 'external-in') {
150
+ throw new Error(`Expected an external-in message, got ${message.info.type}`);
151
+ }
152
+ if (expectedWallet && !message.info.dest.equals(expectedWallet)) {
153
+ throw new Error('TON wallet returned a BOC for an unexpected account');
154
+ }
155
+ return hashMessage(message);
156
+ }
157
+ catch (error) {
158
+ const normalized = bocOrHash.trim().replace(/^0x/, '').toLowerCase();
159
+ if (/^[0-9a-f]{64}$/.test(normalized)) {
160
+ return normalized;
161
+ }
162
+ throw error;
163
+ }
164
+ };
165
+ /**
166
+ * TON Connect derives a message's bounceability from the address form, so
167
+ * re-encode the destination to match the Relay step's `bounce` flag
168
+ * (`bounce: false` -> non-bounceable `UQ…`). When `bounce` is undefined the
169
+ * address is left as-is; a malformed address with an explicit flag is a bad
170
+ * step and fails loudly.
171
+ */
172
+ const encodeAddress = (to, bounce) => {
173
+ if (bounce === undefined) {
174
+ return to;
175
+ }
176
+ return Address.parse(to).toString({ bounceable: bounce, urlSafe: true });
177
+ };
178
+ /**
179
+ * Origin success: the external message executed and the wallet emitted its
180
+ * action. Deliberately lenient — only an explicit failure (aborted, or a phase
181
+ * reporting `success: false`) is treated as failed, to avoid false negatives on
182
+ * a deposit that actually landed (the SDK's route polling catches real route
183
+ * failures separately).
184
+ */
185
+ const isTransactionSuccessful = (description) => {
186
+ const desc = description;
187
+ if (desc?.type !== 'generic') {
188
+ return true;
189
+ }
190
+ if (desc.aborted === true) {
191
+ return false;
192
+ }
193
+ const computeOk = desc.computePhase?.type === 'vm'
194
+ ? desc.computePhase.success !== false
195
+ : true;
196
+ const actionOk = desc.actionPhase ? desc.actionPhase.success !== false : true;
197
+ return computeOk && actionOk;
198
+ };
199
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './adapter.js';
2
+ export * from './types.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,7 @@
1
+ // TonConnect-compatible transaction request shapes.
2
+ //
3
+ // These mirror the TON Connect `SendTransactionRequest` spec and the request
4
+ // shape accepted by wallet providers such as Dynamic's `sendTransaction`:
5
+ // https://www.dynamic.xyz/docs/javascript/reference/ton/send-transaction
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,0EAA0E;AAC1E,yEAAyE"}