@theoo/sdk 0.4.2 → 0.4.4
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/abi.d.ts +28 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +86 -0
- package/dist/abi.js.map +1 -0
- package/dist/client.d.ts +155 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +153 -25
- package/dist/client.js.map +1 -1
- package/dist/eip712.d.ts +17 -0
- package/dist/eip712.d.ts.map +1 -0
- package/dist/eip712.js +127 -0
- package/dist/eip712.js.map +1 -0
- package/dist/hash.d.ts +27 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +249 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/solana-vault.d.ts +140 -0
- package/dist/solana-vault.d.ts.map +1 -0
- package/dist/solana-vault.js +242 -0
- package/dist/solana-vault.js.map +1 -0
- package/dist/types.d.ts +275 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/vault.d.ts +92 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +165 -0
- package/dist/vault.js.map +1 -0
- package/dist/verify.d.ts +82 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +669 -0
- package/dist/verify.js.map +1 -0
- package/package.json +1 -1
package/dist/hash.js
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The hashing a client needs to check what its passkey is about to sign:
|
|
3
|
+
* keccak-256 (Ethereum), SHA-256 (the Solana program's challenge), and the
|
|
4
|
+
* byte, base58 and base64 helpers around them.
|
|
5
|
+
*
|
|
6
|
+
* Written out here rather than imported: the SDK has no dependencies, and a
|
|
7
|
+
* check that trusted a third party's code would only move the trust. Both
|
|
8
|
+
* hashes are tested against published vectors.
|
|
9
|
+
*/
|
|
10
|
+
export function hexToBytes(hex) {
|
|
11
|
+
const h = hex.startsWith("0x") || hex.startsWith("0X") ? hex.slice(2) : hex;
|
|
12
|
+
if (h.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(h))
|
|
13
|
+
throw new Error(`not hex: ${hex.slice(0, 20)}`);
|
|
14
|
+
const out = new Uint8Array(h.length / 2);
|
|
15
|
+
for (let i = 0; i < out.length; i++)
|
|
16
|
+
out[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16);
|
|
17
|
+
return out;
|
|
18
|
+
}
|
|
19
|
+
export function bytesToHex(b) {
|
|
20
|
+
let s = "0x";
|
|
21
|
+
for (const x of b)
|
|
22
|
+
s += x.toString(16).padStart(2, "0");
|
|
23
|
+
return s;
|
|
24
|
+
}
|
|
25
|
+
export function concatBytes(...parts) {
|
|
26
|
+
const out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));
|
|
27
|
+
let at = 0;
|
|
28
|
+
for (const p of parts) {
|
|
29
|
+
out.set(p, at);
|
|
30
|
+
at += p.length;
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
export function utf8(s) {
|
|
35
|
+
return new TextEncoder().encode(s);
|
|
36
|
+
}
|
|
37
|
+
export function equalBytes(a, b) {
|
|
38
|
+
if (a.length !== b.length)
|
|
39
|
+
return false;
|
|
40
|
+
let d = 0;
|
|
41
|
+
for (let i = 0; i < a.length; i++)
|
|
42
|
+
d |= a[i] ^ b[i];
|
|
43
|
+
return d === 0;
|
|
44
|
+
}
|
|
45
|
+
/* ── keccak-256 ───────────────────────────────────────────────────────── */
|
|
46
|
+
const MASK = (1n << 64n) - 1n;
|
|
47
|
+
const RC = [
|
|
48
|
+
0x0000000000000001n, 0x0000000000008082n, 0x800000000000808an, 0x8000000080008000n, 0x000000000000808bn,
|
|
49
|
+
0x0000000080000001n, 0x8000000080008081n, 0x8000000000008009n, 0x000000000000008an, 0x0000000000000088n,
|
|
50
|
+
0x0000000080008009n, 0x000000008000000an, 0x000000008000808bn, 0x800000000000008bn, 0x8000000000008089n,
|
|
51
|
+
0x8000000000008003n, 0x8000000000008002n, 0x8000000000000080n, 0x000000000000800an, 0x800000008000000an,
|
|
52
|
+
0x8000000080008081n, 0x8000000000008080n, 0x0000000080000001n, 0x8000000080008008n,
|
|
53
|
+
];
|
|
54
|
+
// Rotation offsets r[x][y].
|
|
55
|
+
const ROT = [
|
|
56
|
+
[0, 36, 3, 41, 18],
|
|
57
|
+
[1, 44, 10, 45, 2],
|
|
58
|
+
[62, 6, 43, 15, 61],
|
|
59
|
+
[28, 55, 25, 21, 56],
|
|
60
|
+
[27, 20, 39, 8, 14],
|
|
61
|
+
];
|
|
62
|
+
const rotl = (v, n) => (n === 0 ? v : ((v << BigInt(n)) | (v >> BigInt(64 - n))) & MASK);
|
|
63
|
+
function keccakF(a) {
|
|
64
|
+
const c = new Array(5);
|
|
65
|
+
const b = new Array(25);
|
|
66
|
+
for (let round = 0; round < 24; round++) {
|
|
67
|
+
for (let x = 0; x < 5; x++)
|
|
68
|
+
c[x] = a[x] ^ a[x + 5] ^ a[x + 10] ^ a[x + 15] ^ a[x + 20];
|
|
69
|
+
for (let x = 0; x < 5; x++) {
|
|
70
|
+
const d = c[(x + 4) % 5] ^ rotl(c[(x + 1) % 5], 1);
|
|
71
|
+
for (let y = 0; y < 25; y += 5)
|
|
72
|
+
a[x + y] = a[x + y] ^ d;
|
|
73
|
+
}
|
|
74
|
+
for (let x = 0; x < 5; x++) {
|
|
75
|
+
for (let y = 0; y < 5; y++)
|
|
76
|
+
b[y + 5 * ((2 * x + 3 * y) % 5)] = rotl(a[x + 5 * y], ROT[x][y]);
|
|
77
|
+
}
|
|
78
|
+
for (let x = 0; x < 5; x++) {
|
|
79
|
+
for (let y = 0; y < 5; y++) {
|
|
80
|
+
a[x + 5 * y] = b[x + 5 * y] ^ (~b[((x + 1) % 5) + 5 * y] & MASK & b[((x + 2) % 5) + 5 * y]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
a[0] = a[0] ^ RC[round];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Ethereum's keccak-256 (the original padding, not SHA3-256's). */
|
|
87
|
+
export function keccak256(data) {
|
|
88
|
+
const rate = 136;
|
|
89
|
+
const padded = new Uint8Array(Math.floor(data.length / rate) * rate + rate);
|
|
90
|
+
padded.set(data);
|
|
91
|
+
padded[data.length] = padded[data.length] ^ 0x01;
|
|
92
|
+
padded[padded.length - 1] = padded[padded.length - 1] ^ 0x80;
|
|
93
|
+
const state = new Array(25).fill(0n);
|
|
94
|
+
for (let off = 0; off < padded.length; off += rate) {
|
|
95
|
+
for (let i = 0; i < rate / 8; i++) {
|
|
96
|
+
let lane = 0n;
|
|
97
|
+
for (let j = 7; j >= 0; j--)
|
|
98
|
+
lane = (lane << 8n) | BigInt(padded[off + i * 8 + j]);
|
|
99
|
+
state[i] = state[i] ^ lane;
|
|
100
|
+
}
|
|
101
|
+
keccakF(state);
|
|
102
|
+
}
|
|
103
|
+
const out = new Uint8Array(32);
|
|
104
|
+
for (let i = 0; i < 4; i++) {
|
|
105
|
+
let lane = state[i];
|
|
106
|
+
for (let j = 0; j < 8; j++) {
|
|
107
|
+
out[i * 8 + j] = Number(lane & 0xffn);
|
|
108
|
+
lane >>= 8n;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return out;
|
|
112
|
+
}
|
|
113
|
+
/* ── SHA-256 ──────────────────────────────────────────────────────────── */
|
|
114
|
+
const K = new Uint32Array([
|
|
115
|
+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,
|
|
116
|
+
0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
|
|
117
|
+
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,
|
|
118
|
+
0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
|
119
|
+
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
|
|
120
|
+
0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
|
|
121
|
+
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,
|
|
122
|
+
0xc67178f2,
|
|
123
|
+
]);
|
|
124
|
+
/** SHA-256, synchronous, so React Native needs no WebCrypto. */
|
|
125
|
+
export function sha256(data) {
|
|
126
|
+
const h = new Uint32Array([0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]);
|
|
127
|
+
const bitLen = data.length * 8;
|
|
128
|
+
const padded = new Uint8Array(Math.ceil((data.length + 9) / 64) * 64);
|
|
129
|
+
padded.set(data);
|
|
130
|
+
padded[data.length] = 0x80;
|
|
131
|
+
const view = new DataView(padded.buffer);
|
|
132
|
+
view.setUint32(padded.length - 8, Math.floor(bitLen / 2 ** 32));
|
|
133
|
+
view.setUint32(padded.length - 4, bitLen >>> 0);
|
|
134
|
+
const w = new Uint32Array(64);
|
|
135
|
+
const rotr = (x, n) => (x >>> n) | (x << (32 - n));
|
|
136
|
+
for (let off = 0; off < padded.length; off += 64) {
|
|
137
|
+
for (let i = 0; i < 16; i++)
|
|
138
|
+
w[i] = view.getUint32(off + i * 4);
|
|
139
|
+
for (let i = 16; i < 64; i++) {
|
|
140
|
+
const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);
|
|
141
|
+
const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);
|
|
142
|
+
w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;
|
|
143
|
+
}
|
|
144
|
+
let [a, b, c, d, e, f, g, hh] = [h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7]];
|
|
145
|
+
for (let i = 0; i < 64; i++) {
|
|
146
|
+
const t1 = (hh + (rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)) + ((e & f) ^ (~e & g)) + K[i] + w[i]) >>> 0;
|
|
147
|
+
const t2 = ((rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) + ((a & b) ^ (a & c) ^ (b & c))) >>> 0;
|
|
148
|
+
hh = g;
|
|
149
|
+
g = f;
|
|
150
|
+
f = e;
|
|
151
|
+
e = (d + t1) >>> 0;
|
|
152
|
+
d = c;
|
|
153
|
+
c = b;
|
|
154
|
+
b = a;
|
|
155
|
+
a = (t1 + t2) >>> 0;
|
|
156
|
+
}
|
|
157
|
+
h[0] = (h[0] + a) >>> 0;
|
|
158
|
+
h[1] = (h[1] + b) >>> 0;
|
|
159
|
+
h[2] = (h[2] + c) >>> 0;
|
|
160
|
+
h[3] = (h[3] + d) >>> 0;
|
|
161
|
+
h[4] = (h[4] + e) >>> 0;
|
|
162
|
+
h[5] = (h[5] + f) >>> 0;
|
|
163
|
+
h[6] = (h[6] + g) >>> 0;
|
|
164
|
+
h[7] = (h[7] + hh) >>> 0;
|
|
165
|
+
}
|
|
166
|
+
const out = new Uint8Array(32);
|
|
167
|
+
const ov = new DataView(out.buffer);
|
|
168
|
+
for (let i = 0; i < 8; i++)
|
|
169
|
+
ov.setUint32(i * 4, h[i]);
|
|
170
|
+
return out;
|
|
171
|
+
}
|
|
172
|
+
/* ── base58 (Solana addresses) ────────────────────────────────────────── */
|
|
173
|
+
const B58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
174
|
+
export function base58Decode(s) {
|
|
175
|
+
let n = 0n;
|
|
176
|
+
for (const ch of s) {
|
|
177
|
+
const v = B58.indexOf(ch);
|
|
178
|
+
if (v < 0)
|
|
179
|
+
throw new Error(`not base58: ${s.slice(0, 12)}`);
|
|
180
|
+
n = n * 58n + BigInt(v);
|
|
181
|
+
}
|
|
182
|
+
const bytes = [];
|
|
183
|
+
while (n > 0n) {
|
|
184
|
+
bytes.unshift(Number(n & 0xffn));
|
|
185
|
+
n >>= 8n;
|
|
186
|
+
}
|
|
187
|
+
for (const ch of s) {
|
|
188
|
+
if (ch !== "1")
|
|
189
|
+
break;
|
|
190
|
+
bytes.unshift(0);
|
|
191
|
+
}
|
|
192
|
+
return new Uint8Array(bytes);
|
|
193
|
+
}
|
|
194
|
+
export function base58Encode(b) {
|
|
195
|
+
let n = 0n;
|
|
196
|
+
for (const x of b)
|
|
197
|
+
n = (n << 8n) | BigInt(x);
|
|
198
|
+
let out = "";
|
|
199
|
+
while (n > 0n) {
|
|
200
|
+
out = B58[Number(n % 58n)] + out;
|
|
201
|
+
n /= 58n;
|
|
202
|
+
}
|
|
203
|
+
for (const x of b) {
|
|
204
|
+
if (x !== 0)
|
|
205
|
+
break;
|
|
206
|
+
out = "1" + out;
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
/** A Solana address as its 32 bytes. */
|
|
211
|
+
export function pubkeyBytes(s) {
|
|
212
|
+
const b = base58Decode(s.trim());
|
|
213
|
+
if (b.length !== 32)
|
|
214
|
+
throw new Error(`not a Solana address: ${s}`);
|
|
215
|
+
return b;
|
|
216
|
+
}
|
|
217
|
+
/* ── base64 (Solana instruction data) ─────────────────────────────────── */
|
|
218
|
+
const B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
219
|
+
/** Standard base64, padded: how Solana instruction data travels. */
|
|
220
|
+
export function base64Encode(b) {
|
|
221
|
+
let out = "";
|
|
222
|
+
for (let i = 0; i < b.length; i += 3) {
|
|
223
|
+
const n = (b[i] << 16) | ((b[i + 1] ?? 0) << 8) | (b[i + 2] ?? 0);
|
|
224
|
+
out += B64[(n >> 18) & 63] + B64[(n >> 12) & 63];
|
|
225
|
+
out += i + 1 < b.length ? B64[(n >> 6) & 63] : "=";
|
|
226
|
+
out += i + 2 < b.length ? B64[n & 63] : "=";
|
|
227
|
+
}
|
|
228
|
+
return out;
|
|
229
|
+
}
|
|
230
|
+
/** Standard base64, padded or not. */
|
|
231
|
+
export function base64Decode(s) {
|
|
232
|
+
const clean = s.replace(/=+$/, "");
|
|
233
|
+
const out = [];
|
|
234
|
+
let bits = 0;
|
|
235
|
+
let acc = 0;
|
|
236
|
+
for (const ch of clean) {
|
|
237
|
+
const v = B64.indexOf(ch);
|
|
238
|
+
if (v < 0)
|
|
239
|
+
throw new Error("not base64");
|
|
240
|
+
acc = (acc << 6) | v;
|
|
241
|
+
bits += 6;
|
|
242
|
+
if (bits >= 8) {
|
|
243
|
+
bits -= 8;
|
|
244
|
+
out.push((acc >> bits) & 0xff);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return new Uint8Array(out);
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=hash.js.map
|
package/dist/hash.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { Theoo, type TheooOptions, type WaitOptions } from "./client.js";
|
|
2
2
|
export { TheooError } from "./errors.js";
|
|
3
|
+
export { SigningRefused, checkPrepared, checkPreparedSolana, checkSignBegin, decodeAccountCalls, legacyChallenge, replaySafeHash, solanaChallenge, userOpHash, type Budget, type CheckOptions, type WireUserOp, } from "./verify.js";
|
|
3
4
|
export { effectiveAssurance } from "./assurance.js";
|
|
5
|
+
export { VAULT_FACTORY, VAULT_LIMITS, callsHash, describeCall, newSalt, predictVault, vaultCalls, type DescribedCall, } from "./vault.js";
|
|
6
|
+
export { INSTRUCTIONS_SYSVAR, SOLANA_VAULT_LIMITS, SOLANA_VAULT_PROGRAM, describeSolanaCall, encodeSolanaCalls, predictSolanaVault, solanaCallsHash, solanaProposalAddress, solanaVaultCalls, solanaVaultSigner, type DescribedSolanaCall, } from "./solana-vault.js";
|
|
4
7
|
export { formatUnits, parseUnits } from "./units.js";
|
|
5
8
|
export { MemoryTokenStore, type StoredTokens, type TokenStore } from "./tokens.js";
|
|
6
9
|
export { Transport, type FetchLike, type TransportOptions } from "./transport.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACvH,mBAAmB,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,EACf,UAAU,EACV,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU,EACV,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACvH,mBAAmB,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { Theoo } from "./client.js";
|
|
2
2
|
export { TheooError } from "./errors.js";
|
|
3
|
+
export { SigningRefused, checkPrepared, checkPreparedSolana, checkSignBegin, decodeAccountCalls, legacyChallenge, replaySafeHash, solanaChallenge, userOpHash, } from "./verify.js";
|
|
3
4
|
export { effectiveAssurance } from "./assurance.js";
|
|
5
|
+
export { VAULT_FACTORY, VAULT_LIMITS, callsHash, describeCall, newSalt, predictVault, vaultCalls, } from "./vault.js";
|
|
6
|
+
export { INSTRUCTIONS_SYSVAR, SOLANA_VAULT_LIMITS, SOLANA_VAULT_PROGRAM, describeSolanaCall, encodeSolanaCalls, predictSolanaVault, solanaCallsHash, solanaProposalAddress, solanaVaultCalls, solanaVaultSigner, } from "./solana-vault.js";
|
|
4
7
|
export { formatUnits, parseUnits } from "./units.js";
|
|
5
8
|
export { MemoryTokenStore } from "./tokens.js";
|
|
6
9
|
export { Transport } from "./transport.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAsC,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,SAAS,EAAyC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,EACf,UAAU,GAIX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU,GAEX,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAsC,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,SAAS,EAAyC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { SolanaInstruction } from "./types.js";
|
|
2
|
+
/** The vault program, at one id on every cluster that has it. */
|
|
3
|
+
export declare const SOLANA_VAULT_PROGRAM = "FiDvcBjYHp2gi135wSBhe4eNGoFafNkU3mn8AvYrFmzh";
|
|
4
|
+
/** The system program. */
|
|
5
|
+
export declare const SYSTEM_PROGRAM = "11111111111111111111111111111111";
|
|
6
|
+
/**
|
|
7
|
+
* The instructions sysvar. A member's proposal or vote names it last: it is
|
|
8
|
+
* how the vault sees that the member's seat is being used by their passkey,
|
|
9
|
+
* at the top of the transaction, and not by a session key.
|
|
10
|
+
*/
|
|
11
|
+
export declare const INSTRUCTIONS_SYSVAR = "Sysvar1nstructions1111111111111111111111111";
|
|
12
|
+
export declare const SOLANA_VAULT_LIMITS: {
|
|
13
|
+
readonly owners: 20;
|
|
14
|
+
readonly instructions: 8;
|
|
15
|
+
readonly accounts: 32;
|
|
16
|
+
readonly data: 1024;
|
|
17
|
+
readonly delay: number;
|
|
18
|
+
};
|
|
19
|
+
/** The program's instruction tags. */
|
|
20
|
+
export declare const SOLANA_VAULT_TAG: {
|
|
21
|
+
readonly create: 0;
|
|
22
|
+
readonly propose: 1;
|
|
23
|
+
readonly approve: 2;
|
|
24
|
+
readonly revoke: 3;
|
|
25
|
+
readonly reject: 4;
|
|
26
|
+
readonly cancel: 5;
|
|
27
|
+
readonly execute: 6;
|
|
28
|
+
readonly close: 7;
|
|
29
|
+
readonly addOwner: 16;
|
|
30
|
+
readonly removeOwner: 17;
|
|
31
|
+
readonly replaceOwner: 18;
|
|
32
|
+
readonly setThreshold: 19;
|
|
33
|
+
readonly setDelay: 20;
|
|
34
|
+
};
|
|
35
|
+
export declare function u64le(n: bigint | number): Uint8Array;
|
|
36
|
+
/**
|
|
37
|
+
* The canonical encoding of a proposal's instructions, as the program stores
|
|
38
|
+
* and hashes it: a count, then per instruction its program, its accounts
|
|
39
|
+
* (key, signer, writable) and its data with a two-byte length.
|
|
40
|
+
*/
|
|
41
|
+
export declare function encodeSolanaCalls(calls: SolanaInstruction[]): Uint8Array;
|
|
42
|
+
/** What an approval of these instructions must name: sha256 of their encoding, hex. */
|
|
43
|
+
export declare function solanaCallsHash(calls: SolanaInstruction[]): string;
|
|
44
|
+
/**
|
|
45
|
+
* Whether 32 bytes decode to a point on ed25519, as the runtime decides it:
|
|
46
|
+
* y is the low 255 bits, little-endian; it is a point when x² = (y² − 1) /
|
|
47
|
+
* (d·y² + 1) has a root. A program-derived address must not be one.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isOnCurve(b: Uint8Array): boolean;
|
|
50
|
+
/** `Pubkey::find_program_address`: the address and its bump. */
|
|
51
|
+
export declare function findProgramAddress(seeds: Uint8Array[], programId: string): [string, number];
|
|
52
|
+
/** Where a vault's money is: its signer, derived from its config. */
|
|
53
|
+
export declare function solanaVaultSigner(config: string, program?: string): string;
|
|
54
|
+
/** A proposal's account. */
|
|
55
|
+
export declare function solanaProposalAddress(config: string, id: number | bigint, program?: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Where a vault with these settings is, on every cluster with the program:
|
|
58
|
+
* its `config`, and its `address` — the signer, where it holds its money.
|
|
59
|
+
* The address commits to all of them, so it can be shared, and funded,
|
|
60
|
+
* before the vault is created.
|
|
61
|
+
*/
|
|
62
|
+
export declare function predictSolanaVault(owners: string[], threshold: number, delay: number, salt: string, program?: string): {
|
|
63
|
+
config: string;
|
|
64
|
+
address: string;
|
|
65
|
+
};
|
|
66
|
+
/** Whether `key` is the vault `vault` names, by its config or by its signer. */
|
|
67
|
+
export declare function isSolanaVault(config: Uint8Array, vault: string, program?: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Instructions for the common proposals. `vault` is the vault as the server
|
|
70
|
+
* shows it: what it pays from is its `address`, the signer, which the
|
|
71
|
+
* proposal signs as; settings changes name its `config`.
|
|
72
|
+
*/
|
|
73
|
+
export declare const solanaVaultCalls: {
|
|
74
|
+
/** Send lamports from the vault. */
|
|
75
|
+
send: (vault: {
|
|
76
|
+
address: string;
|
|
77
|
+
}, to: string, lamports: bigint | number | string) => SolanaInstruction[];
|
|
78
|
+
addOwner: (vault: {
|
|
79
|
+
address: string;
|
|
80
|
+
config: string;
|
|
81
|
+
}, owner: string, threshold: number) => SolanaInstruction[];
|
|
82
|
+
removeOwner: (vault: {
|
|
83
|
+
address: string;
|
|
84
|
+
config: string;
|
|
85
|
+
}, owner: string, threshold: number) => SolanaInstruction[];
|
|
86
|
+
replaceOwner: (vault: {
|
|
87
|
+
address: string;
|
|
88
|
+
config: string;
|
|
89
|
+
}, owner: string, next: string) => SolanaInstruction[];
|
|
90
|
+
setThreshold: (vault: {
|
|
91
|
+
address: string;
|
|
92
|
+
config: string;
|
|
93
|
+
}, threshold: number) => SolanaInstruction[];
|
|
94
|
+
setDelay: (vault: {
|
|
95
|
+
address: string;
|
|
96
|
+
config: string;
|
|
97
|
+
}, seconds: number) => SolanaInstruction[];
|
|
98
|
+
};
|
|
99
|
+
/** An instruction, said plainly: what an owner is being asked to approve. */
|
|
100
|
+
export type DescribedSolanaCall = {
|
|
101
|
+
kind: "send";
|
|
102
|
+
to: string;
|
|
103
|
+
lamports: bigint;
|
|
104
|
+
} | {
|
|
105
|
+
kind: "add_owner";
|
|
106
|
+
owner: string;
|
|
107
|
+
threshold: number;
|
|
108
|
+
} | {
|
|
109
|
+
kind: "remove_owner";
|
|
110
|
+
owner: string;
|
|
111
|
+
threshold: number;
|
|
112
|
+
} | {
|
|
113
|
+
kind: "replace_owner";
|
|
114
|
+
owner: string;
|
|
115
|
+
with: string;
|
|
116
|
+
} | {
|
|
117
|
+
kind: "threshold";
|
|
118
|
+
threshold: number;
|
|
119
|
+
} | {
|
|
120
|
+
kind: "delay";
|
|
121
|
+
seconds: number;
|
|
122
|
+
}
|
|
123
|
+
/** This vault using its seat in another one: `vault` is that vault's config; `proposal` is null for a new proposal. */
|
|
124
|
+
| {
|
|
125
|
+
kind: "vote_in";
|
|
126
|
+
vault: string;
|
|
127
|
+
vote: "propose" | "approve" | "revoke" | "reject" | "cancel";
|
|
128
|
+
proposal: number | null;
|
|
129
|
+
} | {
|
|
130
|
+
kind: "call";
|
|
131
|
+
programId: string;
|
|
132
|
+
accounts: number;
|
|
133
|
+
dataBytes: number;
|
|
134
|
+
};
|
|
135
|
+
/** Turn one of a proposal's instructions into what it does, for the vault `vault`. */
|
|
136
|
+
export declare function describeSolanaCall(vault: {
|
|
137
|
+
address: string;
|
|
138
|
+
config: string;
|
|
139
|
+
}, c: SolanaInstruction): DescribedSolanaCall;
|
|
140
|
+
//# sourceMappingURL=solana-vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-vault.d.ts","sourceRoot":"","sources":["../src/solana-vault.ts"],"names":[],"mappings":"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"}
|