@storm-trade/wallet-core 1.0.25 → 1.0.27
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/wallet-core.js +108 -104
- package/dist/wallet-core.js.map +1 -1
- package/dist/wallet-core.umd.cjs +1 -1
- package/dist/wallet-core.umd.cjs.map +1 -1
- package/package.json +7 -8
package/dist/wallet-core.js
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
var M = Object.defineProperty;
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { beginCell as
|
|
2
|
+
var E = (n, e, t) => e in n ? M(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
|
|
3
|
+
var c = (n, e, t) => E(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import { beginCell as d, Address as l, Dictionary as o, toNano as g, Cell as B, contractAddress as C } from "@ton/ton";
|
|
5
|
+
const u = "[embedded-wallet v1.0.27]";
|
|
5
6
|
class K {
|
|
6
7
|
constructor(e) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
c(this, "host");
|
|
9
|
+
c(this, "timeouts");
|
|
10
|
+
c(this, "waitingForResponse", /* @__PURE__ */ new Map());
|
|
11
|
+
c(this, "iframe");
|
|
12
|
+
c(this, "state", "not-ready");
|
|
13
|
+
c(this, "i18nInit");
|
|
14
|
+
c(this, "handleMessage", (e) => {
|
|
14
15
|
if (typeof e.data != "object" || e.data === null || !("id" in e.data) || !("status" in e.data) || typeof e.data.id != "string" || typeof e.data.status != "string")
|
|
15
16
|
return;
|
|
16
17
|
const t = this.waitingForResponse.get(e.data.id);
|
|
17
18
|
if (!t)
|
|
18
19
|
return;
|
|
19
|
-
const [s,
|
|
20
|
-
this.waitingForResponse.delete(e.data.id), e.data.status === "success" ? "payload" in e.data ? s(e.data.payload) : s(void 0) : "error" in e.data ?
|
|
20
|
+
const [s, r] = t;
|
|
21
|
+
this.waitingForResponse.delete(e.data.id), e.data.status === "success" ? "payload" in e.data ? s(e.data.payload) : s(void 0) : "error" in e.data ? r(new Error(e.data.error)) : r(new Error("Unknown error"));
|
|
21
22
|
});
|
|
22
23
|
this.host = e.host, this.timeouts = {
|
|
23
24
|
init: 1e3,
|
|
@@ -32,56 +33,59 @@ class K {
|
|
|
32
33
|
}, this.i18nInit = e.i18n;
|
|
33
34
|
}
|
|
34
35
|
async sendMessage(e, t) {
|
|
35
|
-
var
|
|
36
|
-
const s = Math.random().toString(),
|
|
37
|
-
new Promise((
|
|
38
|
-
this.waitingForResponse.set(s, [
|
|
36
|
+
var a, i;
|
|
37
|
+
const s = Math.random().toString(), r = Promise.race([
|
|
38
|
+
new Promise((f, b) => {
|
|
39
|
+
this.waitingForResponse.set(s, [f, b]);
|
|
39
40
|
}),
|
|
40
|
-
new Promise((
|
|
41
|
+
new Promise((f, b) => {
|
|
41
42
|
setTimeout(() => {
|
|
42
43
|
b(new Error("Response timeout"));
|
|
43
44
|
}, t);
|
|
44
45
|
})
|
|
45
46
|
]);
|
|
46
|
-
return (
|
|
47
|
+
return (i = (a = this.iframe) == null ? void 0 : a.contentWindow) == null || i.postMessage({ id: s, payload: e }, this.host), r;
|
|
47
48
|
}
|
|
48
49
|
setupMessageListener() {
|
|
49
50
|
window.addEventListener("message", this.handleMessage);
|
|
50
51
|
}
|
|
51
52
|
async attachIframe(e) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
n(o);
|
|
59
|
-
}, { once: !0 });
|
|
53
|
+
const t = document.createElement("iframe");
|
|
54
|
+
t.src = this.host, t.frameBorder = "0", t.width = "100%", t.height = "100%";
|
|
55
|
+
const s = new Promise((a, i) => {
|
|
56
|
+
t.addEventListener("load", () => a(), { once: !0 }), t.addEventListener("error", (f) => i(f), { once: !0 });
|
|
57
|
+
}), r = new Promise((a, i) => {
|
|
58
|
+
setTimeout(() => i(new Error("Iframe load timeout")), this.timeouts.init);
|
|
60
59
|
});
|
|
61
|
-
return e.appendChild(this.iframe
|
|
60
|
+
return e.appendChild(t), this.iframe = t, Promise.race([s, r]);
|
|
62
61
|
}
|
|
63
62
|
async init(e) {
|
|
64
63
|
if (this.state === "not-ready") {
|
|
65
|
-
this.state = "initializing"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
64
|
+
this.state = "initializing";
|
|
65
|
+
try {
|
|
66
|
+
console.log(u, "attaching to root", e), await this.attachIframe(e), console.log(u, "iframe attached"), this.setupMessageListener(), console.log(u, "sending ping");
|
|
67
|
+
let t;
|
|
68
|
+
for (let s = 1; s <= 5; s++)
|
|
69
|
+
try {
|
|
70
|
+
await this.sendMessage({ type: "ping", i18n: this.i18nInit }, this.timeouts.init), console.log(u, "pong received"), this.state = "ready";
|
|
71
|
+
return;
|
|
72
|
+
} catch (r) {
|
|
73
|
+
t = r instanceof Error ? r : new Error(String(r)), console.warn(u, `ping attempt ${s}/5 failed:`, t.message), s < 5 && await new Promise((a) => setTimeout(a, 200));
|
|
74
|
+
}
|
|
75
|
+
throw new Error(`${u} ping retries exceeded: ${t == null ? void 0 : t.message}`);
|
|
76
|
+
} catch (t) {
|
|
77
|
+
throw this.destroy(), t;
|
|
78
|
+
}
|
|
77
79
|
}
|
|
78
80
|
}
|
|
79
81
|
destroy() {
|
|
80
82
|
var e;
|
|
81
|
-
this.state
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
if (this.state !== "not-ready") {
|
|
84
|
+
this.state = "not-ready", window.removeEventListener("message", this.handleMessage);
|
|
85
|
+
for (const [, t] of this.waitingForResponse.values())
|
|
86
|
+
t(new Error("Iframe disconnected"));
|
|
87
|
+
this.waitingForResponse.clear(), (e = this.iframe) == null || e.remove(), this.iframe = void 0;
|
|
88
|
+
}
|
|
85
89
|
}
|
|
86
90
|
async connect(e) {
|
|
87
91
|
return this.sendMessage({ type: "connect", address: e }, this.timeouts.connect);
|
|
@@ -112,50 +116,50 @@ class K {
|
|
|
112
116
|
return this.sendMessage({ type: "disconnect", address: e }, this.timeouts.disconnect);
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
|
-
const
|
|
116
|
-
serialize: (
|
|
117
|
-
e.storeBuilder(
|
|
119
|
+
const I = (n) => n.loadBuffer(32), P = (n) => d().storeBuffer(n, 32).endCell(), R = {
|
|
120
|
+
serialize: (n, e) => {
|
|
121
|
+
e.storeBuilder(P(n).asBuilder());
|
|
118
122
|
},
|
|
119
|
-
parse: (
|
|
120
|
-
},
|
|
121
|
-
function
|
|
122
|
-
const s = B.fromHex(t),
|
|
123
|
-
return
|
|
123
|
+
parse: (n) => I(n)
|
|
124
|
+
}, T = "b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f", _ = 0;
|
|
125
|
+
function x(n, e, t) {
|
|
126
|
+
const s = B.fromHex(t), r = d().storeUint(_, 8).storeAddress(e).storeAddress(n).storeDict(null).endCell();
|
|
127
|
+
return C(0, { code: s, data: r });
|
|
124
128
|
}
|
|
125
|
-
class
|
|
126
|
-
constructor(e, t, s =
|
|
129
|
+
class F {
|
|
130
|
+
constructor(e, t, s = T) {
|
|
127
131
|
this.tonClient = e, this.config = t, this.ordinarySmartAccountCode = s;
|
|
128
132
|
}
|
|
129
133
|
calculateSmartAccountAddressFromStateInit(e) {
|
|
130
|
-
return
|
|
134
|
+
return x(e, l.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);
|
|
131
135
|
}
|
|
132
136
|
async getSmartAccountAddress(e) {
|
|
133
|
-
return (await this.tonClient.runMethod(
|
|
137
|
+
return (await this.tonClient.runMethod(l.parse(this.config.smartAccountMasterAddress), "get_nft_address_by_index", [
|
|
134
138
|
{
|
|
135
139
|
type: "int",
|
|
136
|
-
value: BigInt(`0x${
|
|
140
|
+
value: BigInt(`0x${l.parse(e).hash.toString("hex")}`)
|
|
137
141
|
}
|
|
138
142
|
])).stack.readAddress();
|
|
139
143
|
}
|
|
140
144
|
async getSmartAccountData(e) {
|
|
141
|
-
const t =
|
|
145
|
+
const t = l.parse(e);
|
|
142
146
|
try {
|
|
143
|
-
const
|
|
144
|
-
let
|
|
145
|
-
b && (
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
).values(),
|
|
147
|
+
const r = (await this.tonClient.runMethod(t, "get_storage_data")).stack, a = r.readBigNumber(), i = r.readAddress(), f = r.readAddress(), b = r.readCellOpt();
|
|
148
|
+
let p = [];
|
|
149
|
+
b && (p = o.loadDirect(o.Keys.BigUint(256), o.Values.Cell(), b).keys());
|
|
150
|
+
const A = r.readAddress(), S = o.loadDirect(
|
|
151
|
+
o.Keys.Uint(8),
|
|
152
|
+
R,
|
|
153
|
+
r.readCell()
|
|
154
|
+
).values(), v = r.readNumber();
|
|
151
155
|
return {
|
|
152
|
-
index:
|
|
153
|
-
collectionAddress:
|
|
154
|
-
masterWalletAddress:
|
|
155
|
-
publicKeys:
|
|
156
|
-
adminAddress:
|
|
157
|
-
backendPublicKeys:
|
|
158
|
-
seqno:
|
|
156
|
+
index: a,
|
|
157
|
+
collectionAddress: i,
|
|
158
|
+
masterWalletAddress: f,
|
|
159
|
+
publicKeys: p,
|
|
160
|
+
adminAddress: A,
|
|
161
|
+
backendPublicKeys: S,
|
|
162
|
+
seqno: v
|
|
159
163
|
};
|
|
160
164
|
} catch (s) {
|
|
161
165
|
if (s.message.endsWith("-13"))
|
|
@@ -164,71 +168,71 @@ class P {
|
|
|
164
168
|
}
|
|
165
169
|
}
|
|
166
170
|
createDeploySmartAccountTx(e, t) {
|
|
167
|
-
const s =
|
|
168
|
-
s.set(
|
|
169
|
-
const
|
|
171
|
+
const s = o.empty(o.Keys.BigUint(256), o.Values.Cell());
|
|
172
|
+
s.set(U(e), d().endCell());
|
|
173
|
+
const r = d().storeUint(1983912421, 32).storeUint(0, 64).storeDict(s).endCell();
|
|
170
174
|
return {
|
|
171
175
|
address: this.config.smartAccountMasterAddress,
|
|
172
|
-
payload:
|
|
176
|
+
payload: r.toBoc().toString("base64"),
|
|
173
177
|
amount: t
|
|
174
178
|
};
|
|
175
179
|
}
|
|
176
180
|
createAddPublicKeyTx(e, t) {
|
|
177
|
-
const s =
|
|
181
|
+
const s = d().storeUint(571231257, 32).storeUint(0, 64).storeBuffer(t).endCell();
|
|
178
182
|
return {
|
|
179
183
|
address: e,
|
|
180
184
|
payload: s.toBoc().toString("base64"),
|
|
181
|
-
amount:
|
|
185
|
+
amount: g("0.05")
|
|
182
186
|
};
|
|
183
187
|
}
|
|
184
188
|
createRemovePublicKeyTx(e, t) {
|
|
185
|
-
const s =
|
|
189
|
+
const s = d().storeUint(1948765727, 32).storeUint(0, 64).storeBuffer(t).endCell();
|
|
186
190
|
return {
|
|
187
191
|
address: e,
|
|
188
192
|
payload: s.toBoc().toString("base64"),
|
|
189
|
-
amount:
|
|
193
|
+
amount: g("0.05")
|
|
190
194
|
};
|
|
191
195
|
}
|
|
192
196
|
createRemoveAllKeysExceptCurrentTx(e, t) {
|
|
193
|
-
const s =
|
|
197
|
+
const s = d().storeUint(1604127040, 32).storeUint(0, 64).storeBuffer(t).endCell();
|
|
194
198
|
return {
|
|
195
199
|
address: e,
|
|
196
200
|
payload: s.toBoc().toString("base64"),
|
|
197
|
-
amount:
|
|
201
|
+
amount: g("0.05")
|
|
198
202
|
// при необходимости настрой сумму
|
|
199
203
|
};
|
|
200
204
|
}
|
|
201
205
|
}
|
|
202
|
-
function
|
|
203
|
-
return BigInt("0x" +
|
|
206
|
+
function U(n) {
|
|
207
|
+
return BigInt("0x" + n.toString("hex"));
|
|
204
208
|
}
|
|
205
|
-
const
|
|
206
|
-
class
|
|
209
|
+
const w = 10n, h = 1022n, m = 8191n;
|
|
210
|
+
class y {
|
|
207
211
|
// [0 .. 1022]
|
|
208
212
|
constructor() {
|
|
209
|
-
|
|
213
|
+
c(this, "shift");
|
|
210
214
|
// [0 .. 8191]
|
|
211
|
-
|
|
215
|
+
c(this, "bitnumber");
|
|
212
216
|
this.shift = 0n, this.bitnumber = 0n;
|
|
213
217
|
}
|
|
214
218
|
static fromShiftAndBitNumber(e, t) {
|
|
215
|
-
const s = new
|
|
219
|
+
const s = new y();
|
|
216
220
|
if (s.shift = e, s.shift < 0) throw new Error("invalid shift");
|
|
217
|
-
if (s.shift >
|
|
221
|
+
if (s.shift > m) throw new Error("invalid shift");
|
|
218
222
|
if (s.bitnumber = t, s.bitnumber < 0) throw new Error("invalid bitnumber");
|
|
219
|
-
if (s.bitnumber >
|
|
223
|
+
if (s.bitnumber > h) throw new Error("invalid bitnumber");
|
|
220
224
|
return s;
|
|
221
225
|
}
|
|
222
226
|
getNext() {
|
|
223
227
|
let e = this.bitnumber + 1n, t = this.shift;
|
|
224
|
-
if (t ===
|
|
228
|
+
if (t === m && e > h - 1n)
|
|
225
229
|
throw new Error("Overload");
|
|
226
|
-
if (e >
|
|
230
|
+
if (e > h && (e = 0n, t += 1n, t > m))
|
|
227
231
|
throw new Error("Overload");
|
|
228
|
-
return
|
|
232
|
+
return y.fromShiftAndBitNumber(t, e);
|
|
229
233
|
}
|
|
230
234
|
hasNext() {
|
|
231
|
-
return !(this.bitnumber >=
|
|
235
|
+
return !(this.bitnumber >= h - 1n && this.shift === m);
|
|
232
236
|
}
|
|
233
237
|
getShift() {
|
|
234
238
|
return this.shift;
|
|
@@ -237,10 +241,10 @@ class g {
|
|
|
237
241
|
return this.bitnumber;
|
|
238
242
|
}
|
|
239
243
|
getQueryId() {
|
|
240
|
-
return (this.shift <<
|
|
244
|
+
return (this.shift << w) + this.bitnumber;
|
|
241
245
|
}
|
|
242
246
|
static fromQueryId(e) {
|
|
243
|
-
const t = e >>
|
|
247
|
+
const t = e >> w, s = e & 1023n;
|
|
244
248
|
return this.fromShiftAndBitNumber(t, s);
|
|
245
249
|
}
|
|
246
250
|
static fromSeqno(e) {
|
|
@@ -255,16 +259,16 @@ class g {
|
|
|
255
259
|
}
|
|
256
260
|
}
|
|
257
261
|
function k() {
|
|
258
|
-
const
|
|
259
|
-
return BigInt(
|
|
262
|
+
const n = Math.floor(Date.now() / 1e3) - 30;
|
|
263
|
+
return BigInt(n % (1 << 23));
|
|
260
264
|
}
|
|
261
|
-
const
|
|
265
|
+
const O = new Error("Session is expired or never provided");
|
|
262
266
|
export {
|
|
263
|
-
|
|
267
|
+
y as HighloadQueryId,
|
|
264
268
|
K as IframeAdapter,
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
269
|
+
O as SessionExpiredOrNotProvided,
|
|
270
|
+
F as StormWallet,
|
|
271
|
+
x as calculateSmartAccountAddressFromStateInit,
|
|
268
272
|
k as queryId
|
|
269
273
|
};
|
|
270
274
|
//# sourceMappingURL=wallet-core.js.map
|
package/dist/wallet-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-core.js","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n this.iframe = document.createElement('iframe');\n this.iframe.src = this.host;\n this.iframe.frameBorder = '0';\n this.iframe.width='100%'\n this.iframe.height='100%'\n const p = new Promise<void>((resolve, reject) => {\n this.iframe?.addEventListener('load', async () => {\n resolve();\n }, { once: true });\n this.iframe?.addEventListener('error', (e) => {\n reject(e);\n }, { once: true });\n });\n root.appendChild(this.iframe);\n return p;\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state === 'not-ready') {\n this.state = 'initializing';\n console.log('[embedded-wallet] attaching to root', root);\n await this.attachIframe(root);\n console.log('[embedded-wallet] iframe attached');\n this.setupMessageListener();\n console.log('[embedded-wallet] sending ping');\n let retryCount = 5;\n while (retryCount > 0) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n break;\n } catch (e) {\n retryCount--;\n if (retryCount === 0) {\n this.destroy();\n throw new Error('[embedded-wallet] ping retries exceeded. Init failed');\n } else {\n console.warn('[embedded-wallet] failed to ping attached iframe retrying');\n }\n }\n }\n console.log('[embedded-wallet] pong received');\n this.state = 'ready';\n }\n }\n\n destroy(): void {\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n for (const [_, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n this.iframe?.remove();\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async signMessages(masterAddress: string, messages: SignRequest[]): Promise<{ hashes: Uint8Array[]; signatures: Uint8Array[]; }> {\n return this.sendMessage({ type: 'sign-many', address: masterAddress, messages }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","p","e","retryCount","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":";;;;AAgBO,MAAMA,EAAc;AAAA,EAQzB,YAAYC,GAA2B;AAPtB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,gDAAyB,IAAoB;AACtD,IAAAA,EAAA;AACA,IAAAA,EAAA,eAAsB;AACb,IAAAA,EAAA;AAsCT,IAAAA,EAAA,uBAAgB,CAAC,MAA6B;AAOhD,UANA,OAAO,EAAE,QAAS,YAAY,EAAE,SAAS,QAGzC,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAGrC,OAAO,EAAE,KAAK,MAAO,YAAY,OAAO,EAAE,KAAK,UAAW;AAC5D;AAEF,YAAMC,IAAS,KAAK,mBAAmB,IAAI,EAAE,KAAK,EAAE;AACpD,UAAI,CAACA;AACH;AAEI,YAAA,CAACC,GAASC,CAAM,IAAIF;AAC1B,WAAK,mBAAmB,OAAO,EAAE,KAAK,EAAE,GACpC,EAAE,KAAK,WAAW,YAChB,aAAa,EAAE,OACTC,EAAA,EAAE,KAAK,OAAO,IAEtBA,EAAQ,MAAS,IAGf,WAAW,EAAE,OACfC,EAAO,IAAI,MAAM,EAAE,KAAK,KAAe,CAAC,IAEjCA,EAAA,IAAI,MAAM,eAAe,CAAC;AAAA,IAIvC;AAjEE,SAAK,OAAOJ,EAAM,MAClB,KAAK,WAAW;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,aAAa;AAAA,MACb,GAAGA,EAAM;AAAA,IACX,GACA,KAAK,WAAWA,EAAM;AAAA,EAAA;AAAA,EAGxB,MAAc,YAAeK,GAAkBC,GAA6B;;AAC1E,UAAMC,IAAY,KAAK,OAAO,EAAE,SAAS,GACnCC,IAAW,QAAQ,KAAK;AAAA,MAC5B,IAAI,QAAW,CAACL,GAASC,MAAW;AAClC,aAAK,mBAAmB,IAAIG,GAAW,CAACJ,GAASC,CAAM,CAAC;AAAA,MAAA,CACzD;AAAA,MACD,IAAI,QAAW,CAACK,GAAGL,MAAW;AAC5B,mBAAW,MAAM;AACR,UAAAA,EAAA,IAAI,MAAM,kBAAkB,CAAC;AAAA,WACnCE,CAAO;AAAA,MACX,CAAA;AAAA,IAAA,CACF;AACI,YAAAI,KAAAC,IAAA,KAAA,WAAA,gBAAAA,EAAQ,kBAAR,QAAAD,EAAuB,YAAY,EAAE,IAAIH,GAAW,SAAAF,EAAA,GAAW,KAAK,OAClEG;AAAA,EAAA;AAAA,EAGD,uBAAuB;AACtB,WAAA,iBAAiB,WAAW,KAAK,aAAa;AAAA,EAAA;AAAA,EAmCvD,MAAc,aAAaI,GAAkC;AACtD,SAAA,SAAS,SAAS,cAAc,QAAQ,GACxC,KAAA,OAAO,MAAM,KAAK,MACvB,KAAK,OAAO,cAAc,KAC1B,KAAK,OAAO,QAAM,QAClB,KAAK,OAAO,SAAO;AACnB,UAAMC,IAAI,IAAI,QAAc,CAACV,GAASC,MAAW;;AAC1C,OAAAO,IAAA,KAAA,WAAA,QAAAA,EAAQ,iBAAiB,QAAQ,YAAY;AACxC,QAAAR,EAAA;AAAA,MAAA,GACP,EAAE,MAAM,QACXO,IAAA,KAAK,WAAL,QAAAA,EAAa,iBAAiB,SAAS,CAACI,MAAM;AAC5C,QAAAV,EAAOU,CAAC;AAAA,MAAA,GACP,EAAE,MAAM;IAAM,CAClB;AACI,WAAAF,EAAA,YAAY,KAAK,MAAM,GACrBC;AAAA,EAAA;AAAA,EAGT,MAAM,KAAKD,GAAkC;AACvC,QAAA,KAAK,UAAU,aAAa;AAC9B,WAAK,QAAQ,gBACL,QAAA,IAAI,uCAAuCA,CAAI,GACjD,MAAA,KAAK,aAAaA,CAAI,GAC5B,QAAQ,IAAI,mCAAmC,GAC/C,KAAK,qBAAqB,GAC1B,QAAQ,IAAI,gCAAgC;AAC5C,UAAIG,IAAa;AACjB,aAAOA,IAAa;AACd,YAAA;AACI,gBAAA,KAAK,YAAY,EAAE,MAAM,QAAQ,MAAM,KAAK,SAAS,GAAG,KAAK,SAAS,IAAI;AAChF;AAAA,gBACU;AAEV,cADAA,KACIA,MAAe;AACjB,uBAAK,QAAQ,GACP,IAAI,MAAM,sDAAsD;AAEtE,kBAAQ,KAAK,2DAA2D;AAAA,QAC1E;AAGJ,cAAQ,IAAI,iCAAiC,GAC7C,KAAK,QAAQ;AAAA,IAAA;AAAA,EACf;AAAA,EAGF,UAAgB;;AACd,SAAK,QAAQ,aACN,OAAA,oBAAoB,WAAW,KAAK,aAAa;AACxD,eAAW,CAACN,GAAGL,CAAM,KAAK,KAAK,mBAAmB;AACzC,MAAAA,EAAA,IAAI,MAAM,qBAAqB,CAAC;AAEzC,SAAK,mBAAmB,MAAM,IAC9BO,IAAA,KAAK,WAAL,QAAAA,EAAa;AAAA,EAAO;AAAA,EAGtB,MAAM,QAAQK,GAAiD;AACtD,WAAA,KAAK,YAAY,EAAE,MAAM,WAAW,SAASA,KAAiB,KAAK,SAAS,OAAO;AAAA,EAAA;AAAA,EAK5F,MAAM,aAAaC,GAAgD;AAC1D,WAAA,KAAK,YAAY,EAAE,MAAM,kBAAkB,SAAAA,KAAW,KAAK,SAAS,YAAY;AAAA,EAAA;AAAA,EAGzF,MAAM,YAAYA,GAAyC;AAClD,WAAA,KAAK,YAAY,EAAE,MAAM,gBAAgB,SAAAA,KAAW,KAAK,SAAS,WAAW;AAAA,EAAA;AAAA,EAGtF,MAAM,YAAYD,GAAuBE,GAA6C;AAC7E,WAAA,KAAK,YAAY,EAAE,MAAM,QAAQ,SAASF,GAAe,SAAAE,EAAQ,GAAG,KAAK,SAAS,IAAI;AAAA,EAAA;AAAA,EAG/F,MAAM,aAAaF,GAAuBG,GAAuF;AACxH,WAAA,KAAK,YAAY,EAAE,MAAM,aAAa,SAASH,GAAe,UAAAG,EAAS,GAAG,KAAK,SAAS,IAAI;AAAA,EAAA;AAAA,EAGrG,MAAM,eAAeH,GAAuBE,GAAiE;AAC3G,WAAO,KAAK,YAAY;AAAA,MACtB,MAAM;AAAA,MACN,SAASF;AAAA,MACT,MAAME;AAAA,IAAA,GACL,KAAK,SAAS,cAAc;AAAA,EAAA;AAAA,EAGjC,MAAM,oBAAqD;AAClD,WAAA,KAAK,YAAY,EAAE,MAAM,qBAAqB,KAAK,SAAS,cAAc;AAAA,EAAA;AAAA,EAGnF,MAAM,WAAWF,GAAsC;AAC9C,WAAA,KAAK,YAAY,EAAE,MAAM,cAAc,SAASA,KAAiB,KAAK,SAAS,UAAU;AAAA,EAAA;AAEpG;ACvLa,MAAAI,IAAmB,CAACC,MACxBA,EAAG,WAAW,EAAE,GAGZC,IAAiB,CAACC,MACtBC,EAAY,EAAA,YAAYD,GAAY,EAAE,EAAE,QAAQ,GAG5CE,IAA2C;AAAA,EACtD,WAAW,CAACC,GAAaC,MAAY;AACnC,IAAAA,EAAQ,aAAaL,EAAeI,CAAG,EAAE,WAAW;AAAA,EACtD;AAAA,EACA,OAAO,CAACA,MACCN,EAAiBM,CAAG;AAE/B,GCEaE,IAAsC,ouEAC7CC,IAAgC;AAEtB,SAAAC,EAA0CC,GAAgBC,GAAkBC,GAA2C;AAC/H,QAAAC,IAAOC,EAAK,QAAQF,CAAwB,GAE5CG,IAAOZ,EAAU,EACpB,UAAUK,GAA+B,CAAC,EAC1C,aAAaG,CAAO,EACpB,aAAaD,CAAK,EAClB,UAAU,IAAI,EACd,QAAQ;AAEX,SAAOM,EAAgB,GAAG,EAAC,MAAAH,GAAM,MAAAE,GAAK;AACxC;AAEO,MAAME,EAAY;AAAA,EACvB,YAA6BC,GAAuCC,GAA4CP,IAA2BL,GAAqC;AAAnJ,SAAA,YAAAW,GAAuC,KAAA,SAAAC,GAA4C,KAAA,2BAAAP;AAAA,EAAA;AAAA,EAGhH,0CAA0CF,GAAyB;AAC1D,WAAAD,EAA0CC,GAAOU,EAAQ,MAAM,KAAK,OAAO,yBAAyB,GAAG,KAAK,wBAAwB;AAAA,EAAA;AAAA,EAG7I,MAAM,uBAAuBC,GAAyC;AAO7D,YANQ,MAAM,KAAK,UAAU,UAAUD,EAAQ,MAAM,KAAK,OAAO,yBAAyB,GAAG,4BAA4B;AAAA,MAC9H;AAAA,QACE,MAAM;AAAA,QACN,OAAO,OAAO,KAAKA,EAAQ,MAAMC,CAAa,EAAE,KAAK,SAAS,KAAK,CAAC,EAAE;AAAA,MAAA;AAAA,IACxE,CACD,GACa,MAAM,YAAY;AAAA,EAAA;AAAA,EAGlC,MAAM,oBAAoBC,GAA6B;AAC/C,UAAA1B,IAAUwB,EAAQ,MAAME,CAAmB;AAC7C,QAAA;AAEF,YAAMC,KADS,MAAM,KAAK,UAAU,UAAU3B,GAAS,kBAAkB,GACpD,OAEf4B,IAAQD,EAAM,cAAc,GAC5BE,IAAoBF,EAAM,YAAY,GACtCG,IAAsBH,EAAM,YAAY,GAGxCI,IAAUJ,EAAM,YAAY;AAClC,UAAIrB,IAAuB,CAAC;AAE5B,MAAIyB,MACFzB,IAAa0B,EAAW,WAAWA,EAAW,KAAK,QAAQ,GAAG,GAAGA,EAAW,OAAO,KAAQ,GAAAD,CAAO,EAAE,KAAK;AAGrG,YAAAE,IAAeN,EAAM,YAAY,GACjCO,IAAoBF,EAAW;AAAA,QACnCA,EAAW,KAAK,KAAK,CAAC;AAAA,QACtBxB;AAAA,QACAmB,EAAM,SAAS;AAAA,QACf,OAAO,GAEHQ,IAAQR,EAAM,WAAW;AAExB,aAAA;AAAA,QACL,OAAAC;AAAA,QACA,mBAAAC;AAAA,QACA,qBAAAC;AAAA,QACA,YAAAxB;AAAA,QACA,cAAA2B;AAAA,QACA,mBAAAC;AAAA,QACA,OAAAC;AAAA,MACF;AAAA,aACOtC,GAAG;AACV,UAAKA,EAAY,QAAQ,SAAS,KAAK;AAC9B,eAAA;AAEH,YAAAA;AAAA,IAAA;AAAA,EACR;AAAA,EAGF,2BAA2BuC,GAAmBC,GAAwB;AAC9D,UAAA/B,IAAuC0B,EAAW,MAAMA,EAAW,KAAK,QAAQ,GAAG,GAAGA,EAAW,OAAO,KAAA,CAAM;AACpH,IAAA1B,EAAW,IAAIgC,EAAeF,CAAS,GAAG7B,EAAU,EAAE,SAAS;AAE/D,UAAMnB,IAAUmB,EAAA,EACb,UAAU,YAAuC,EAAE,EACnD,UAAU,GAAG,EAAE,EACf,UAAUD,CAAU,EACpB,QAAQ;AAEJ,WAAA;AAAA,MACL,SAAS,KAAK,OAAO;AAAA,MACrB,SAASlB,EAAQ,QAAQ,SAAS,QAAQ;AAAA,MAC1C,QAAQiD;AAAA,IACV;AAAA,EAAA;AAAA,EAGF,qBAAqBX,GAA6BU,GAAmB;AACnE,UAAMhD,IAAUmB,EAAA,EACb,UAAU,WAAgD,EAAE,EAC5D,UAAU,GAAG,EAAE,EACf,YAAY6B,CAAS,EACrB,QAAQ;AAGJ,WAAA;AAAA,MACL,SAASV;AAAA,MACT,SAAStC,EAAQ,QAAQ,SAAS,QAAQ;AAAA,MAC1C,QAAQmD,EAAO,MAAM;AAAA,IACvB;AAAA,EAAA;AAAA,EAGF,wBAAwBb,GAA6BU,GAAmB;AACtE,UAAMhD,IAAUmB,EAAA,EACb,UAAU,YAA+C,EAAE,EAC3D,UAAU,GAAG,EAAE,EACf,YAAY6B,CAAS,EACrB,QAAQ;AAGJ,WAAA;AAAA,MACL,SAASV;AAAA,MACT,SAAStC,EAAQ,QAAQ,SAAS,QAAQ;AAAA,MAC1C,QAAQmD,EAAO,MAAM;AAAA,IACvB;AAAA,EAAA;AAAA,EAGF,mCAAmCb,GAA6BU,GAAmB;AACjF,UAAMhD,IAAUmB,EAAA,EACb,UAAU,YAAuD,EAAE,EACnE,UAAU,GAAG,EAAE,EACf,YAAY6B,CAAS,EACrB,QAAQ;AAEJ,WAAA;AAAA,MACL,SAASV;AAAA,MACT,SAAStC,EAAQ,QAAQ,SAAS,QAAQ;AAAA,MAC1C,QAAQmD,EAAO,MAAM;AAAA;AAAA,IACvB;AAAA,EAAA;AAEJ;AAEO,SAASD,EAAeE,GAAwB;AACrD,SAAO,OAAO,OAAOA,EAAO,SAAS,KAAK,CAAC;AAC7C;ACjKA,MAAMC,IAAkB,KAElBC,IAAiB,OACjBC,IAAY;AAEX,MAAMC,EAAgB;AAAA;AAAA,EAI3B,cAAc;AAHN,IAAA5D,EAAA;AACA;AAAA,IAAAA,EAAA;AAGN,SAAK,QAAQ,IACb,KAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,OAAO,sBAAsB6D,GAAeC,GAAoC;AACxE,UAAAC,IAAI,IAAIH,EAAgB;AAE9B,QADAG,EAAE,QAAQF,GACNE,EAAE,QAAQ,EAAS,OAAA,IAAI,MAAM,eAAe;AAChD,QAAIA,EAAE,QAAQJ,EAAiB,OAAA,IAAI,MAAM,eAAe;AAExD,QADAI,EAAE,YAAYD,GACVC,EAAE,YAAY,EAAS,OAAA,IAAI,MAAM,mBAAmB;AACxD,QAAIA,EAAE,YAAYL,EAAsB,OAAA,IAAI,MAAM,mBAAmB;AAC9D,WAAAK;AAAA,EAAA;AAAA,EAIT,UAAU;AACJ,QAAAC,IAAe,KAAK,YAAY,IAChCC,IAAW,KAAK;AAEpB,QAAIA,MAAaN,KAAaK,IAAgBN,IAAiB;AACvD,YAAA,IAAI,MAAM,UAAU;AAG5B,QAAIM,IAAeN,MACFM,IAAA,IACHC,KAAA,IACRA,IAAWN;AACP,YAAA,IAAI,MAAM,UAAU;AAIvB,WAAAC,EAAgB,sBAAsBK,GAAUD,CAAY;AAAA,EAAA;AAAA,EAGrE,UAAU;AAER,WAAO,EADO,KAAK,aAAcN,IAAiB,MAAO,KAAK,UAAUC;AAAA,EAChE;AAAA,EAGV,WAAmB;AACjB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,eAAuB;AACrB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,aAAqB;AACX,YAAA,KAAK,SAASF,KAAmB,KAAK;AAAA,EAAA;AAAA,EAGhD,OAAO,YAAYS,GAAkC;AACnD,UAAML,IAAQK,KAAWT,GACnBK,IAAYI,IAAU;AACrB,WAAA,KAAK,sBAAsBL,GAAOC,CAAS;AAAA,EAAA;AAAA,EAGpD,OAAO,UAAUK,GAA4B;AAC3C,UAAMN,IAAQM,IAAI,OACZL,IAAYK,IAAI;AACf,WAAA,KAAK,sBAAsBN,GAAOC,CAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAMpD,UAAkB;AACT,WAAA,KAAK,YAAY,KAAK,QAAQ;AAAA,EAAA;AAEzC;AAEO,SAASI,IAAkB;AAChC,QAAME,IAAK,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,IAAI;AAEpC,SAAA,OAAOA,KAAM,KAAK,GAAG;AAC9B;AC3Ea,MAAAC,IAA8B,IAAI,MAAM,sCAAsC;"}
|
|
1
|
+
{"version":3,"file":"wallet-core.js","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nconst LOG_PREFIX = `[embedded-wallet v${__VERSION__}]`;\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n const iframe = document.createElement('iframe');\n iframe.src = this.host;\n iframe.frameBorder = '0';\n iframe.width = '100%';\n iframe.height = '100%';\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n iframe.addEventListener('load', () => resolve(), { once: true });\n iframe.addEventListener('error', (e) => reject(e), { once: true });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Iframe load timeout')), this.timeouts.init);\n });\n\n root.appendChild(iframe);\n this.iframe = iframe;\n return Promise.race([loadPromise, timeoutPromise]);\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state !== 'not-ready') {\n return;\n }\n\n this.state = 'initializing';\n\n try {\n console.log(LOG_PREFIX, 'attaching to root', root);\n await this.attachIframe(root);\n console.log(LOG_PREFIX, 'iframe attached');\n this.setupMessageListener();\n console.log(LOG_PREFIX, 'sending ping');\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= 5; attempt++) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n console.log(LOG_PREFIX, 'pong received');\n this.state = 'ready';\n return;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n console.warn(LOG_PREFIX, `ping attempt ${attempt}/5 failed:`, lastError.message);\n if (attempt < 5) {\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n }\n }\n\n throw new Error(`${LOG_PREFIX} ping retries exceeded: ${lastError?.message}`);\n } catch (e) {\n this.destroy();\n throw e;\n }\n }\n\n destroy(): void {\n if (this.state === 'not-ready') {\n return;\n }\n\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n\n for (const [, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n\n this.iframe?.remove();\n this.iframe = undefined;\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async signMessages(masterAddress: string, messages: SignRequest[]): Promise<{ hashes: Uint8Array[]; signatures: Uint8Array[]; }> {\n return this.sendMessage({ type: 'sign-many', address: masterAddress, messages }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["LOG_PREFIX","IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","iframe","loadPromise","e","timeoutPromise","lastError","attempt","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":"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"}
|
package/dist/wallet-core.umd.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(i,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@ton/ton")):typeof define=="function"&&define.amd?define(["exports","@ton/ton"],r):(i=typeof globalThis<"u"?globalThis:i||self,r(i.WalletCore={},i.ton))})(this,function(i,r){"use strict";var R=Object.defineProperty;var
|
|
1
|
+
(function(i,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@ton/ton")):typeof define=="function"&&define.amd?define(["exports","@ton/ton"],r):(i=typeof globalThis<"u"?globalThis:i||self,r(i.WalletCore={},i.ton))})(this,function(i,r){"use strict";var R=Object.defineProperty;var _=(i,r,a)=>r in i?R(i,r,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[r]=a;var d=(i,r,a)=>_(i,typeof r!="symbol"?r+"":r,a);const a="[embedded-wallet v1.0.27]";class w{constructor(e){d(this,"host");d(this,"timeouts");d(this,"waitingForResponse",new Map);d(this,"iframe");d(this,"state","not-ready");d(this,"i18nInit");d(this,"handleMessage",e=>{if(typeof e.data!="object"||e.data===null||!("id"in e.data)||!("status"in e.data)||typeof e.data.id!="string"||typeof e.data.status!="string")return;const t=this.waitingForResponse.get(e.data.id);if(!t)return;const[s,n]=t;this.waitingForResponse.delete(e.data.id),e.data.status==="success"?"payload"in e.data?s(e.data.payload):s(void 0):"error"in e.data?n(new Error(e.data.error)):n(new Error("Unknown error"))});this.host=e.host,this.timeouts={init:1e3,connect:6e4,disconnect:1e3,sign:1e3,createTransfer:1e3,activeSessions:1e3,getPublicKey:1e3,resetDevice:1e3,...e.timeouts},this.i18nInit=e.i18n}async sendMessage(e,t){var o,f;const s=Math.random().toString(),n=Promise.race([new Promise((b,u)=>{this.waitingForResponse.set(s,[b,u])}),new Promise((b,u)=>{setTimeout(()=>{u(new Error("Response timeout"))},t)})]);return(f=(o=this.iframe)==null?void 0:o.contentWindow)==null||f.postMessage({id:s,payload:e},this.host),n}setupMessageListener(){window.addEventListener("message",this.handleMessage)}async attachIframe(e){const t=document.createElement("iframe");t.src=this.host,t.frameBorder="0",t.width="100%",t.height="100%";const s=new Promise((o,f)=>{t.addEventListener("load",()=>o(),{once:!0}),t.addEventListener("error",b=>f(b),{once:!0})}),n=new Promise((o,f)=>{setTimeout(()=>f(new Error("Iframe load timeout")),this.timeouts.init)});return e.appendChild(t),this.iframe=t,Promise.race([s,n])}async init(e){if(this.state==="not-ready"){this.state="initializing";try{console.log(a,"attaching to root",e),await this.attachIframe(e),console.log(a,"iframe attached"),this.setupMessageListener(),console.log(a,"sending ping");let t;for(let s=1;s<=5;s++)try{await this.sendMessage({type:"ping",i18n:this.i18nInit},this.timeouts.init),console.log(a,"pong received"),this.state="ready";return}catch(n){t=n instanceof Error?n:new Error(String(n)),console.warn(a,`ping attempt ${s}/5 failed:`,t.message),s<5&&await new Promise(o=>setTimeout(o,200))}throw new Error(`${a} ping retries exceeded: ${t==null?void 0:t.message}`)}catch(t){throw this.destroy(),t}}}destroy(){var e;if(this.state!=="not-ready"){this.state="not-ready",window.removeEventListener("message",this.handleMessage);for(const[,t]of this.waitingForResponse.values())t(new Error("Iframe disconnected"));this.waitingForResponse.clear(),(e=this.iframe)==null||e.remove(),this.iframe=void 0}}async connect(e){return this.sendMessage({type:"connect",address:e},this.timeouts.connect)}async getPublicKey(e){return this.sendMessage({type:"get-public-key",address:e},this.timeouts.getPublicKey)}async resetDevice(e){return this.sendMessage({type:"reset-device",address:e},this.timeouts.resetDevice)}async signMessage(e,t){return this.sendMessage({type:"sign",address:e,message:t},this.timeouts.sign)}async signMessages(e,t){return this.sendMessage({type:"sign-many",address:e,messages:t},this.timeouts.sign)}async createTransfer(e,t){return this.sendMessage({type:"create-transfer",address:e,data:t},this.timeouts.createTransfer)}async getActiveSessions(){return this.sendMessage({type:"active-sessions"},this.timeouts.activeSessions)}async disconnect(e){return this.sendMessage({type:"disconnect",address:e},this.timeouts.disconnect)}}const A=c=>c.loadBuffer(32),S=c=>r.beginCell().storeBuffer(c,32).endCell(),v={serialize:(c,e)=>{e.storeBuilder(S(c).asBuilder())},parse:c=>A(c)},C="b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f",M=0;function g(c,e,t){const s=r.Cell.fromHex(t),n=r.beginCell().storeUint(M,8).storeAddress(e).storeAddress(c).storeDict(null).endCell();return r.contractAddress(0,{code:s,data:n})}class E{constructor(e,t,s=C){this.tonClient=e,this.config=t,this.ordinarySmartAccountCode=s}calculateSmartAccountAddressFromStateInit(e){return g(e,r.Address.parse(this.config.smartAccountMasterAddress),this.ordinarySmartAccountCode)}async getSmartAccountAddress(e){return(await this.tonClient.runMethod(r.Address.parse(this.config.smartAccountMasterAddress),"get_nft_address_by_index",[{type:"int",value:BigInt(`0x${r.Address.parse(e).hash.toString("hex")}`)}])).stack.readAddress()}async getSmartAccountData(e){const t=r.Address.parse(e);try{const n=(await this.tonClient.runMethod(t,"get_storage_data")).stack,o=n.readBigNumber(),f=n.readAddress(),b=n.readAddress(),u=n.readCellOpt();let p=[];u&&(p=r.Dictionary.loadDirect(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell(),u).keys());const P=n.readAddress(),T=r.Dictionary.loadDirect(r.Dictionary.Keys.Uint(8),v,n.readCell()).values(),N=n.readNumber();return{index:o,collectionAddress:f,masterWalletAddress:b,publicKeys:p,adminAddress:P,backendPublicKeys:T,seqno:N}}catch(s){if(s.message.endsWith("-13"))return null;throw s}}createDeploySmartAccountTx(e,t){const s=r.Dictionary.empty(r.Dictionary.Keys.BigUint(256),r.Dictionary.Values.Cell());s.set(B(e),r.beginCell().endCell());const n=r.beginCell().storeUint(1983912421,32).storeUint(0,64).storeDict(s).endCell();return{address:this.config.smartAccountMasterAddress,payload:n.toBoc().toString("base64"),amount:t}}createAddPublicKeyTx(e,t){const s=r.beginCell().storeUint(571231257,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}createRemovePublicKeyTx(e,t){const s=r.beginCell().storeUint(1948765727,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}createRemoveAllKeysExceptCurrentTx(e,t){const s=r.beginCell().storeUint(1604127040,32).storeUint(0,64).storeBuffer(t).endCell();return{address:e,payload:s.toBoc().toString("base64"),amount:r.toNano("0.05")}}}function B(c){return BigInt("0x"+c.toString("hex"))}const y=10n,l=1022n,h=8191n;class m{constructor(){d(this,"shift");d(this,"bitnumber");this.shift=0n,this.bitnumber=0n}static fromShiftAndBitNumber(e,t){const s=new m;if(s.shift=e,s.shift<0)throw new Error("invalid shift");if(s.shift>h)throw new Error("invalid shift");if(s.bitnumber=t,s.bitnumber<0)throw new Error("invalid bitnumber");if(s.bitnumber>l)throw new Error("invalid bitnumber");return s}getNext(){let e=this.bitnumber+1n,t=this.shift;if(t===h&&e>l-1n)throw new Error("Overload");if(e>l&&(e=0n,t+=1n,t>h))throw new Error("Overload");return m.fromShiftAndBitNumber(t,e)}hasNext(){return!(this.bitnumber>=l-1n&&this.shift===h)}getShift(){return this.shift}getBitNumber(){return this.bitnumber}getQueryId(){return(this.shift<<y)+this.bitnumber}static fromQueryId(e){const t=e>>y,s=e&1023n;return this.fromShiftAndBitNumber(t,s)}static fromSeqno(e){const t=e/1023n,s=e%1023n;return this.fromShiftAndBitNumber(t,s)}toSeqno(){return this.bitnumber+this.shift*1023n}}function I(){const c=Math.floor(Date.now()/1e3)-30;return BigInt(c%(1<<23))}const D=new Error("Session is expired or never provided");i.HighloadQueryId=m,i.IframeAdapter=w,i.SessionExpiredOrNotProvided=D,i.StormWallet=E,i.calculateSmartAccountAddressFromStateInit=g,i.queryId=I,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=wallet-core.umd.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-core.umd.cjs","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n this.iframe = document.createElement('iframe');\n this.iframe.src = this.host;\n this.iframe.frameBorder = '0';\n this.iframe.width='100%'\n this.iframe.height='100%'\n const p = new Promise<void>((resolve, reject) => {\n this.iframe?.addEventListener('load', async () => {\n resolve();\n }, { once: true });\n this.iframe?.addEventListener('error', (e) => {\n reject(e);\n }, { once: true });\n });\n root.appendChild(this.iframe);\n return p;\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state === 'not-ready') {\n this.state = 'initializing';\n console.log('[embedded-wallet] attaching to root', root);\n await this.attachIframe(root);\n console.log('[embedded-wallet] iframe attached');\n this.setupMessageListener();\n console.log('[embedded-wallet] sending ping');\n let retryCount = 5;\n while (retryCount > 0) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n break;\n } catch (e) {\n retryCount--;\n if (retryCount === 0) {\n this.destroy();\n throw new Error('[embedded-wallet] ping retries exceeded. Init failed');\n } else {\n console.warn('[embedded-wallet] failed to ping attached iframe retrying');\n }\n }\n }\n console.log('[embedded-wallet] pong received');\n this.state = 'ready';\n }\n }\n\n destroy(): void {\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n for (const [_, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n this.iframe?.remove();\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async signMessages(masterAddress: string, messages: SignRequest[]): Promise<{ hashes: Uint8Array[]; signatures: Uint8Array[]; }> {\n return this.sendMessage({ type: 'sign-many', address: masterAddress, messages }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","p","e","retryCount","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wallet-core.umd.cjs","sources":["../src/adapters/iframe-adapter.ts","../src/utils/packers.ts","../src/wallet.ts","../src/utils/query-id.ts","../src/error.ts"],"sourcesContent":["import {\n ActiveSessionsResponse,\n AdapterState,\n ConnectResponse,\n CreateTransferRequest,\n CreateTransferResponse,\n EmptyResponse,\n GetPublicKeyResponse,\n IframeAdapterProps,\n SignRequest,\n SignResponse,\n Timeouts,\n} from '../types';\n\ntype Waiter = [(value: any) => void, (e: Error) => void]\n\nconst LOG_PREFIX = `[embedded-wallet v${__VERSION__}]`;\n\nexport class IframeAdapter {\n private readonly host: string;\n private readonly timeouts: Required<Timeouts>;\n private readonly waitingForResponse = new Map<string, Waiter>();\n private iframe?: HTMLIFrameElement;\n private state: AdapterState = 'not-ready';\n private readonly i18nInit?: IframeAdapterProps['i18n'];\n\n constructor(props: IframeAdapterProps) {\n this.host = props.host;\n this.timeouts = {\n init: 1000,\n connect: 60000,\n disconnect: 1000,\n sign: 1000,\n createTransfer: 1000,\n activeSessions: 1000,\n getPublicKey: 1000,\n resetDevice: 1000,\n ...props.timeouts,\n };\n this.i18nInit = props.i18n;\n }\n\n private async sendMessage<R>(payload: unknown, timeout: number): Promise<R> {\n const messageId = Math.random().toString();\n const response = Promise.race([\n new Promise<R>((resolve, reject) => {\n this.waitingForResponse.set(messageId, [resolve, reject]);\n }),\n new Promise<R>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Response timeout'));\n }, timeout);\n }),\n ]);\n this.iframe?.contentWindow?.postMessage({ id: messageId, payload }, this.host);\n return response;\n }\n\n private setupMessageListener() {\n window.addEventListener('message', this.handleMessage);\n }\n\n private handleMessage = (e: MessageEvent<unknown>) => {\n if (typeof e.data !== 'object' || e.data === null) {\n return;\n }\n if (!('id' in e.data) || !('status' in e.data)) {\n return;\n }\n if (typeof e.data.id !== 'string' || typeof e.data.status !== 'string') {\n return;\n }\n const waiter = this.waitingForResponse.get(e.data.id);\n if (!waiter) {\n return;\n }\n const [resolve, reject] = waiter;\n this.waitingForResponse.delete(e.data.id);\n if (e.data.status === 'success') {\n if ('payload' in e.data) {\n resolve(e.data.payload);\n } else {\n resolve(undefined);\n }\n } else {\n if ('error' in e.data) {\n reject(new Error(e.data.error as string));\n } else {\n reject(new Error('Unknown error'));\n }\n }\n\n };\n\n private async attachIframe(root: HTMLElement): Promise<void> {\n const iframe = document.createElement('iframe');\n iframe.src = this.host;\n iframe.frameBorder = '0';\n iframe.width = '100%';\n iframe.height = '100%';\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n iframe.addEventListener('load', () => resolve(), { once: true });\n iframe.addEventListener('error', (e) => reject(e), { once: true });\n });\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Iframe load timeout')), this.timeouts.init);\n });\n\n root.appendChild(iframe);\n this.iframe = iframe;\n return Promise.race([loadPromise, timeoutPromise]);\n }\n\n async init(root: HTMLElement): Promise<void> {\n if (this.state !== 'not-ready') {\n return;\n }\n\n this.state = 'initializing';\n\n try {\n console.log(LOG_PREFIX, 'attaching to root', root);\n await this.attachIframe(root);\n console.log(LOG_PREFIX, 'iframe attached');\n this.setupMessageListener();\n console.log(LOG_PREFIX, 'sending ping');\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= 5; attempt++) {\n try {\n await this.sendMessage({ type: 'ping', i18n: this.i18nInit }, this.timeouts.init);\n console.log(LOG_PREFIX, 'pong received');\n this.state = 'ready';\n return;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n console.warn(LOG_PREFIX, `ping attempt ${attempt}/5 failed:`, lastError.message);\n if (attempt < 5) {\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n }\n }\n\n throw new Error(`${LOG_PREFIX} ping retries exceeded: ${lastError?.message}`);\n } catch (e) {\n this.destroy();\n throw e;\n }\n }\n\n destroy(): void {\n if (this.state === 'not-ready') {\n return;\n }\n\n this.state = 'not-ready';\n window.removeEventListener('message', this.handleMessage);\n\n for (const [, reject] of this.waitingForResponse.values()) {\n reject(new Error('Iframe disconnected'));\n }\n this.waitingForResponse.clear();\n\n this.iframe?.remove();\n this.iframe = undefined;\n }\n\n async connect(masterAddress: string): Promise<ConnectResponse> {\n return this.sendMessage({ type: 'connect', address: masterAddress }, this.timeouts.connect);\n }\n\n\n\n async getPublicKey(address: string): Promise<GetPublicKeyResponse> {\n return this.sendMessage({ type: \"get-public-key\", address }, this.timeouts.getPublicKey);\n }\n\n async resetDevice(address: string): Promise<EmptyResponse> {\n return this.sendMessage({ type: \"reset-device\", address }, this.timeouts.resetDevice);\n }\n\n async signMessage(masterAddress: string, message: SignRequest): Promise<SignResponse> {\n return this.sendMessage({ type: 'sign', address: masterAddress, message }, this.timeouts.sign);\n }\n\n async signMessages(masterAddress: string, messages: SignRequest[]): Promise<{ hashes: Uint8Array[]; signatures: Uint8Array[]; }> {\n return this.sendMessage({ type: 'sign-many', address: masterAddress, messages }, this.timeouts.sign);\n }\n\n async createTransfer(masterAddress: string, message: CreateTransferRequest): Promise<CreateTransferResponse> {\n return this.sendMessage({\n type: 'create-transfer',\n address: masterAddress,\n data: message,\n }, this.timeouts.createTransfer);\n }\n\n async getActiveSessions(): Promise<ActiveSessionsResponse> {\n return this.sendMessage({ type: 'active-sessions' }, this.timeouts.activeSessions);\n }\n\n async disconnect(masterAddress: string): Promise<void> {\n return this.sendMessage({ type: 'disconnect', address: masterAddress }, this.timeouts.disconnect);\n }\n}\n","import { beginCell, Cell, DictionaryValue, Slice } from \"@ton/ton\";\n\nexport const unpackPublicKeys = (cs: Slice): Buffer => {\n return cs.loadBuffer(32);\n}\n\nexport const packPublicKeys = (publicKeys: Buffer): Cell => {\n return beginCell().storeBuffer(publicKeys, 32).endCell();\n}\n\nexport const PublicKeysValue: DictionaryValue<Buffer> = {\n serialize: (src: Buffer, builder) => {\n builder.storeBuilder(packPublicKeys(src).asBuilder());\n },\n parse: (src) => {\n return unpackPublicKeys(src);\n },\n};\n","import { Address, beginCell, Cell, contractAddress, Dictionary, toNano, TonClient } from \"@ton/ton\";\nimport { PublicKeysValue } from \"./utils/packers\";\n\ntype StormWalletConfig = {\n smartAccountMasterAddress: string;\n}\n\nexport enum SmartAccountInternalOp {\n deploy_account = 0x764019e5,\n add_new_user_public_key = 0x220c4c19,\n remove_user_public_key = 0x7427ce1f,\n execute_limit_order = 0x1c0af2cb,\n execute_orders_bundle = 0xf38e7e65,\n set_code = 0x9c0f3220,\n add_request_to_add_new_user_public_key = 0x03cc29e8,\n add_request_to_remove_user_public_key = 0x07d25def,\n remove_all_keys_except_current = 0x5f9d0940\n}\n\nexport const DEFAULT_ORDINARY_SMART_ACCOUNT_CODE = \"b5ee9c7241021401000460000114ff00f4a413f4bcf2c80b01020162021004bcd020c700915be001d0d3030171b0915be0fa4030ed44d0d30701f861fa4001f862fa4001f863f40430f86401d31f218210186b2edfba8e843101db3ce02182104fedc82bba8e843101db3ce02182105b0dd9f4bae30201821018a092f7ba03060b0c02f401d33ffa00fa40fa40d152408d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19182105b27f9c5c8cb1f13cb3f01fa02010704011acf16f843cf16c970598040db3c05002c718010c8cb055004cf165004fa0212cb6accc901fb0002da01d33ffa40fa00fa40d430d052528d086000d3cb310c6345907411bee7fd03c8688ae26a620314eb93f4bba111e4cb869b4cc801cf1601cf16c9880120f90022f90002d76503d76582020134c8cb17cb0f13cb0fcbffcbff71f90400c88b1801cf16cbffc9d001c705f2e19104070a0114ff00f4a413f4bcf2c80b080196d36c2220c700f24001d0d3030171b0f240fa403001d31f01821029c102d1ba8ea4ed44d0fa403012c705f2e29afa40d4d43001fb04ed54820898968070fb0270018306db3ce05b840ff2f0090028708010c8cb055003cf165003fa02cb6ac901fb0002b0f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f86422d70b01c0008e85328042db3c8e8c300181010bd719018042db3ce2f844f841c8cb07f842cf16f843cf16f400c9ed540f0f01d2310101d33ff8425230c705f2e1915801d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02f84301810082db3c0f01168e8301db3ce05b840ff2f00d017af8425210c705f2e19101d33ffa40fa00fa405023f844521081010bf40a6fa1c8019a01fa00305003a012fa02943158fa02e2f8441281010bf441f864030e01ae01d317d4d307d4d1fb046d6d58f823500503c8f40012f400cb3fcb17c970f843f844102655226d0107c8cb075006cf165004cf1612f400cb07ccf400ccc9ed548102e58203dbea8209e1338070f83774fb02810082db3c0f003e8210d53276db708010c8cb055005cf1624fa0214cb6a13cb1fcb3fc901fb0002012011120043bc82ff6a268698380fc30fd2000fc317d2000fc31fa02187c327c20fc217c21fc224014fbc7e7f6a268698380fc30fd2000fc317d2000fc31fa02187c327c147d2218e445997981d4678b10c1300f620c0008e1830c8709320c14097803058cb0701a4e801c9d001aa02d7198e4770800fc89322c1408e1a5331b020c20995a63701cb0795a63001cb07e203ab0302a44013e86c21c832c9d080409320c2009da520aa02522078d72413cf1602e85bc9d08308d719e2cf168b52e6a736f6e8cf16c970f842f843410403d563745f\"\nconst ORDINARY_SMART_ACCOUNT_HEADER = 0;\n\nexport function calculateSmartAccountAddressFromStateInit(owner: Address, factory: Address, ordinarySmartAccountCode: string): Address {\n const code = Cell.fromHex(ordinarySmartAccountCode);\n\n const data = beginCell()\n .storeUint(ORDINARY_SMART_ACCOUNT_HEADER, 8)\n .storeAddress(factory)\n .storeAddress(owner)\n .storeDict(null)\n .endCell()\n\n return contractAddress(0, {code, data});\n}\n\nexport class StormWallet {\n constructor(private readonly tonClient: TonClient, private readonly config: StormWalletConfig, private readonly ordinarySmartAccountCode = DEFAULT_ORDINARY_SMART_ACCOUNT_CODE) {\n }\n\n calculateSmartAccountAddressFromStateInit(owner: Address): Address {\n return calculateSmartAccountAddressFromStateInit(owner, Address.parse(this.config.smartAccountMasterAddress), this.ordinarySmartAccountCode);\n }\n\n async getSmartAccountAddress(walletAddress: string): Promise<Address> {\n const result = await this.tonClient.runMethod(Address.parse(this.config.smartAccountMasterAddress), 'get_nft_address_by_index', [\n {\n type: 'int',\n value: BigInt(`0x${Address.parse(walletAddress).hash.toString('hex')}`)\n }\n ])\n return result.stack.readAddress()\n }\n\n async getSmartAccountData(smartAccountAddress: string) {\n const address = Address.parse(smartAccountAddress)\n try {\n const result = await this.tonClient.runMethod(address, 'get_storage_data')\n const stack = result.stack\n\n const index = stack.readBigNumber();\n const collectionAddress = stack.readAddress();\n const masterWalletAddress = stack.readAddress();\n\n\n const pksCell = stack.readCellOpt()\n let publicKeys: bigint[] = []\n\n if (pksCell) {\n publicKeys = Dictionary.loadDirect(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell(), pksCell).keys();\n }\n\n const adminAddress = stack.readAddress();\n const backendPublicKeys = Dictionary.loadDirect(\n Dictionary.Keys.Uint(8),\n PublicKeysValue,\n stack.readCell()\n ).values();\n\n const seqno = stack.readNumber();\n\n return {\n index,\n collectionAddress,\n masterWalletAddress,\n publicKeys,\n adminAddress,\n backendPublicKeys,\n seqno,\n }\n } catch (e) {\n if ((e as Error).message.endsWith('-13')) {\n return null\n }\n throw e\n }\n }\n\n createDeploySmartAccountTx(publicKey: Buffer, transferAmount: bigint) {\n const publicKeys: Dictionary<bigint, Cell> = Dictionary.empty(Dictionary.Keys.BigUint(256), Dictionary.Values.Cell());\n publicKeys.set(bufferToBigInt(publicKey), beginCell().endCell());\n\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.deploy_account, 32)\n .storeUint(0, 64)\n .storeDict(publicKeys)\n .endCell();\n\n return {\n address: this.config.smartAccountMasterAddress,\n payload: payload.toBoc().toString('base64'),\n amount: transferAmount,\n }\n }\n\n createAddPublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.add_new_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemovePublicKeyTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_user_public_key, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05')\n }\n }\n\n createRemoveAllKeysExceptCurrentTx(smartAccountAddress: string, publicKey: Buffer) {\n const payload = beginCell()\n .storeUint(SmartAccountInternalOp.remove_all_keys_except_current, 32)\n .storeUint(0, 64)\n .storeBuffer(publicKey)\n .endCell();\n\n return {\n address: smartAccountAddress,\n payload: payload.toBoc().toString('base64'),\n amount: toNano('0.05'), // при необходимости настрой сумму\n }\n }\n}\n\nexport function bufferToBigInt(buffer: Buffer): bigint {\n return BigInt('0x' + buffer.toString('hex'));\n}\n","const BIT_NUMBER_SIZE = 10n; // 10 bit\n// const SHIFT_SIZE = 13n; // 13 bit\nconst MAX_BIT_NUMBER = 1022n;\nconst MAX_SHIFT = 8191n; // 2^13 = 8192\n\nexport class HighloadQueryId {\n private shift: bigint; // [0 .. 8191]\n private bitnumber: bigint; // [0 .. 1022]\n\n constructor() {\n this.shift = 0n;\n this.bitnumber = 0n;\n }\n\n static fromShiftAndBitNumber(shift: bigint, bitnumber: bigint): HighloadQueryId {\n const q = new HighloadQueryId();\n q.shift = shift;\n if (q.shift < 0) throw new Error('invalid shift');\n if (q.shift > MAX_SHIFT) throw new Error('invalid shift');\n q.bitnumber = bitnumber;\n if (q.bitnumber < 0) throw new Error('invalid bitnumber');\n if (q.bitnumber > MAX_BIT_NUMBER) throw new Error('invalid bitnumber');\n return q;\n }\n\n\n getNext() {\n let newBitnumber = this.bitnumber + 1n;\n let newShift = this.shift;\n\n if (newShift === MAX_SHIFT && newBitnumber > (MAX_BIT_NUMBER - 1n)) {\n throw new Error('Overload'); // NOTE: we left one queryId for emergency withdraw\n }\n\n if (newBitnumber > MAX_BIT_NUMBER) {\n newBitnumber = 0n;\n newShift += 1n;\n if (newShift > MAX_SHIFT) {\n throw new Error('Overload')\n }\n }\n\n return HighloadQueryId.fromShiftAndBitNumber(newShift, newBitnumber);\n }\n\n hasNext() {\n const isEnd = this.bitnumber >= (MAX_BIT_NUMBER - 1n) && this.shift === MAX_SHIFT; // NOTE: we left one queryId for emergency withdraw;\n return !isEnd;\n }\n\n getShift(): bigint {\n return this.shift;\n }\n\n getBitNumber(): bigint {\n return this.bitnumber;\n }\n\n getQueryId(): bigint {\n return (this.shift << BIT_NUMBER_SIZE) + this.bitnumber;\n }\n\n static fromQueryId(queryId: bigint): HighloadQueryId {\n const shift = queryId >> BIT_NUMBER_SIZE;\n const bitnumber = queryId & 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n static fromSeqno(i: bigint): HighloadQueryId {\n const shift = i / 1023n;\n const bitnumber = i % 1023n;\n return this.fromShiftAndBitNumber(shift, bitnumber);\n }\n\n /**\n * @return {bigint} [0 .. 8380415]\n */\n toSeqno(): bigint {\n return this.bitnumber + this.shift * 1023n;\n }\n}\n\nexport function queryId(): bigint {\n const ts = Math.floor(Date.now() / 1000) - 30;\n\n return BigInt(ts % (1 << 23))\n}","export class NoActiveSessionError extends Error {\n public readonly address: string;\n\n constructor(address: string) {\n super(`No active session found for ${address}`);\n this.name = 'NoActiveSessionError';\n this.address = address;\n }\n}\n\n\nexport const SessionExpiredOrNotProvided = new Error('Session is expired or never provided')"],"names":["LOG_PREFIX","IframeAdapter","props","__publicField","waiter","resolve","reject","payload","timeout","messageId","response","_","_b","_a","root","iframe","loadPromise","e","timeoutPromise","lastError","attempt","masterAddress","address","message","messages","unpackPublicKeys","cs","packPublicKeys","publicKeys","beginCell","PublicKeysValue","src","builder","DEFAULT_ORDINARY_SMART_ACCOUNT_CODE","ORDINARY_SMART_ACCOUNT_HEADER","calculateSmartAccountAddressFromStateInit","owner","factory","ordinarySmartAccountCode","code","Cell","data","contractAddress","StormWallet","tonClient","config","Address","walletAddress","smartAccountAddress","stack","index","collectionAddress","masterWalletAddress","pksCell","Dictionary","adminAddress","backendPublicKeys","seqno","publicKey","transferAmount","bufferToBigInt","toNano","buffer","BIT_NUMBER_SIZE","MAX_BIT_NUMBER","MAX_SHIFT","HighloadQueryId","shift","bitnumber","q","newBitnumber","newShift","queryId","i","ts","SessionExpiredOrNotProvided"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storm-trade/wallet-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.27",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -10,12 +10,6 @@
|
|
|
10
10
|
"module": "./dist/wallet-core",
|
|
11
11
|
"types": "./dist/wallet-core",
|
|
12
12
|
"description": "",
|
|
13
|
-
"scripts": {
|
|
14
|
-
"dev": "vite",
|
|
15
|
-
"build": "tsc && vite build",
|
|
16
|
-
"test": "vitest",
|
|
17
|
-
"prepublishOnly": "npm run build"
|
|
18
|
-
},
|
|
19
13
|
"keywords": [],
|
|
20
14
|
"author": "",
|
|
21
15
|
"license": "ISC",
|
|
@@ -30,5 +24,10 @@
|
|
|
30
24
|
"@ton/core": ">=0.60.0",
|
|
31
25
|
"@ton/crypto": ">=3.3.0",
|
|
32
26
|
"@ton/ton": ">=15.2.1"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"dev": "vite",
|
|
30
|
+
"build": "tsc && vite build",
|
|
31
|
+
"test": "vitest"
|
|
33
32
|
}
|
|
34
|
-
}
|
|
33
|
+
}
|