@cartridge/controller 0.7.8 → 0.7.9-alpha.1
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/.turbo/turbo-build$colon$deps.log +49 -59
- package/.turbo/turbo-build.log +45 -63
- package/dist/account.d.ts +35 -0
- package/dist/constants.d.ts +3 -0
- package/dist/controller.d.ts +3 -6
- package/dist/errors.d.ts +3 -0
- package/dist/icon.d.ts +1 -0
- package/dist/iframe/base.d.ts +26 -0
- package/dist/iframe/index.d.ts +3 -0
- package/dist/iframe/keychain.d.ts +10 -0
- package/dist/iframe/profile.d.ts +12 -0
- package/dist/index.d.ts +6 -67
- package/dist/index.js +1088 -1063
- package/dist/index.js.map +1 -1
- package/dist/lookup.d.ts +2 -4
- package/dist/mutex.d.ts +12 -0
- package/dist/node/index.cjs +1 -12
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +93 -8
- package/dist/node/index.d.ts +93 -8
- package/dist/node/index.js +2 -12
- package/dist/node/index.js.map +1 -1
- package/dist/policies.d.ts +15 -0
- package/dist/provider-qJi60GEX.js +286 -0
- package/dist/provider-qJi60GEX.js.map +1 -0
- package/dist/provider.d.ts +21 -0
- package/dist/session/account.d.ts +31 -0
- package/dist/session/backend.d.ts +58 -0
- package/dist/session/index.d.ts +4 -38
- package/dist/session/{index.d.cts → provider.d.ts} +4 -10
- package/dist/session.d.ts +6 -0
- package/dist/session.js +354 -0
- package/dist/session.js.map +1 -0
- package/dist/stats.html +4949 -0
- package/dist/telegram/backend.d.ts +30 -0
- package/dist/telegram/provider.d.ts +24 -0
- package/dist/types.d.ts +146 -0
- package/dist/utils.d.ts +15 -0
- package/dist/wallets/argent/index.d.ts +14 -0
- package/dist/wallets/bridge.d.ts +29 -0
- package/dist/wallets/index.d.ts +5 -0
- package/dist/wallets/metamask/index.d.ts +16 -0
- package/dist/wallets/phantom/index.d.ts +13 -0
- package/dist/wallets/types.d.ts +27 -0
- package/package.json +17 -40
- package/src/iframe/profile.ts +9 -7
- package/src/node/index.ts +1 -1
- package/tsup.node.config.ts +15 -0
- package/vite.config.js +83 -0
- package/dist/controller.cjs +0 -1272
- package/dist/controller.cjs.map +0 -1
- package/dist/controller.d.cts +0 -34
- package/dist/controller.js +0 -1270
- package/dist/controller.js.map +0 -1
- package/dist/index.cjs +0 -3389
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -68
- package/dist/lookup.cjs +0 -59
- package/dist/lookup.cjs.map +0 -1
- package/dist/lookup.d.cts +0 -4
- package/dist/lookup.js +0 -56
- package/dist/lookup.js.map +0 -1
- package/dist/policies-DD1aPjQ4.d.cts +0 -21
- package/dist/policies-DD1aPjQ4.d.ts +0 -21
- package/dist/provider-BeCgS86X.d.cts +0 -266
- package/dist/provider-BeCgS86X.d.ts +0 -266
- package/dist/session/index.cjs +0 -484
- package/dist/session/index.cjs.map +0 -1
- package/dist/session/index.js +0 -478
- package/dist/session/index.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,162 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
// src/account.ts
|
|
9
|
-
|
|
10
|
-
// src/types.ts
|
|
11
|
-
var ResponseCodes = /* @__PURE__ */ ((ResponseCodes2) => {
|
|
12
|
-
ResponseCodes2["SUCCESS"] = "SUCCESS";
|
|
13
|
-
ResponseCodes2["NOT_CONNECTED"] = "NOT_CONNECTED";
|
|
14
|
-
ResponseCodes2["ERROR"] = "ERROR";
|
|
15
|
-
ResponseCodes2["CANCELED"] = "CANCELED";
|
|
16
|
-
ResponseCodes2["USER_INTERACTION_REQUIRED"] = "USER_INTERACTION_REQUIRED";
|
|
17
|
-
return ResponseCodes2;
|
|
18
|
-
})(ResponseCodes || {});
|
|
19
|
-
var ALLOWED_PROPERTIES = /* @__PURE__ */ new Set([
|
|
20
|
-
"contracts",
|
|
21
|
-
"messages",
|
|
22
|
-
"target",
|
|
23
|
-
"method",
|
|
24
|
-
"name",
|
|
25
|
-
"description",
|
|
26
|
-
"types",
|
|
27
|
-
"domain",
|
|
28
|
-
"primaryType"
|
|
29
|
-
]);
|
|
30
|
-
var LOCAL_HOSTNAMES = ["localhost", "127.0.0.1", "0.0.0.0"];
|
|
31
|
-
function validatePropertyName(prop) {
|
|
32
|
-
if (!ALLOWED_PROPERTIES.has(prop)) {
|
|
33
|
-
throw new Error(`Invalid property name: ${prop}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function safeObjectAccess(obj, prop) {
|
|
37
|
-
validatePropertyName(prop);
|
|
38
|
-
return obj[prop];
|
|
39
|
-
}
|
|
40
|
-
function normalizeCalls(calls) {
|
|
41
|
-
return toArray(calls).map((call) => {
|
|
42
|
-
return {
|
|
43
|
-
entrypoint: call.entrypoint,
|
|
44
|
-
contractAddress: addAddressPadding(call.contractAddress),
|
|
45
|
-
calldata: CallData.toHex(call.calldata)
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
function toSessionPolicies(policies) {
|
|
50
|
-
return Array.isArray(policies) ? policies.reduce(
|
|
51
|
-
(prev, p) => {
|
|
52
|
-
if (safeObjectAccess(p, "target")) {
|
|
53
|
-
const target = getChecksumAddress(
|
|
54
|
-
safeObjectAccess(p, "target")
|
|
55
|
-
);
|
|
56
|
-
const entrypoint = safeObjectAccess(p, "method");
|
|
57
|
-
const contracts = safeObjectAccess(
|
|
58
|
-
prev,
|
|
59
|
-
"contracts"
|
|
60
|
-
);
|
|
61
|
-
const item = {
|
|
62
|
-
name: humanizeString(entrypoint),
|
|
63
|
-
entrypoint,
|
|
64
|
-
description: safeObjectAccess(p, "description")
|
|
65
|
-
};
|
|
66
|
-
if (target in contracts) {
|
|
67
|
-
const methods = toArray(contracts[target].methods);
|
|
68
|
-
contracts[target] = {
|
|
69
|
-
methods: [...methods, item]
|
|
70
|
-
};
|
|
71
|
-
} else {
|
|
72
|
-
contracts[target] = {
|
|
73
|
-
methods: [item]
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
} else {
|
|
77
|
-
const messages = safeObjectAccess(prev, "messages");
|
|
78
|
-
messages.push(p);
|
|
79
|
-
}
|
|
80
|
-
return prev;
|
|
81
|
-
},
|
|
82
|
-
{ contracts: {}, messages: [] }
|
|
83
|
-
) : policies;
|
|
84
|
-
}
|
|
85
|
-
function toWasmPolicies(policies) {
|
|
86
|
-
return [
|
|
87
|
-
...Object.entries(policies.contracts ?? {}).flatMap(
|
|
88
|
-
([target, { methods }]) => toArray(methods).map((m) => ({
|
|
89
|
-
target,
|
|
90
|
-
method: m.entrypoint,
|
|
91
|
-
authorized: m.authorized
|
|
92
|
-
}))
|
|
93
|
-
),
|
|
94
|
-
...(policies.messages ?? []).map((p) => {
|
|
95
|
-
const domainHash = typedData.getStructHash(
|
|
96
|
-
p.types,
|
|
97
|
-
"StarknetDomain",
|
|
98
|
-
p.domain,
|
|
99
|
-
TypedDataRevision.ACTIVE
|
|
100
|
-
);
|
|
101
|
-
const typeHash = typedData.getTypeHash(
|
|
102
|
-
p.types,
|
|
103
|
-
p.primaryType,
|
|
104
|
-
TypedDataRevision.ACTIVE
|
|
105
|
-
);
|
|
106
|
-
return {
|
|
107
|
-
scope_hash: hash.computePoseidonHash(domainHash, typeHash),
|
|
108
|
-
authorized: p.authorized
|
|
109
|
-
};
|
|
110
|
-
})
|
|
111
|
-
];
|
|
112
|
-
}
|
|
113
|
-
function toArray(val) {
|
|
114
|
-
return Array.isArray(val) ? val : [val];
|
|
115
|
-
}
|
|
116
|
-
function humanizeString(str) {
|
|
117
|
-
return str.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/_/g, " ").toLowerCase().replace(/^\w/, (c) => c.toUpperCase());
|
|
118
|
-
}
|
|
119
|
-
async function parseChainId(url) {
|
|
120
|
-
const parts = url.pathname.split("/");
|
|
121
|
-
if (parts.includes("starknet")) {
|
|
122
|
-
if (parts.includes("mainnet")) {
|
|
123
|
-
return constants.StarknetChainId.SN_MAIN;
|
|
124
|
-
} else if (parts.includes("sepolia")) {
|
|
125
|
-
return constants.StarknetChainId.SN_SEPOLIA;
|
|
126
|
-
}
|
|
127
|
-
} else if (parts.length >= 3) {
|
|
128
|
-
const projectName = parts[2];
|
|
129
|
-
if (parts.includes("katana")) {
|
|
130
|
-
return shortString.encodeShortString(
|
|
131
|
-
`WP_${projectName.toUpperCase().replace(/-/g, "_")}`
|
|
132
|
-
);
|
|
133
|
-
} else if (parts.includes("mainnet")) {
|
|
134
|
-
return shortString.encodeShortString(
|
|
135
|
-
`GG_${projectName.toUpperCase().replace(/-/g, "_")}`
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
if (LOCAL_HOSTNAMES.includes(url.hostname)) {
|
|
140
|
-
const provider = new Provider({
|
|
141
|
-
nodeUrl: url.toString()
|
|
142
|
-
});
|
|
143
|
-
return await provider.getChainId();
|
|
144
|
-
}
|
|
145
|
-
throw new Error(`Chain ${url.toString()} not supported`);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// src/account.ts
|
|
149
|
-
var ControllerAccount = class extends WalletAccount {
|
|
1
|
+
import { WalletAccount as O, shortString as M, num as Y } from "starknet";
|
|
2
|
+
import { R as A, t as $, K as W, P as H, B as j, N as g, p as K, A as q } from "./provider-qJi60GEX.js";
|
|
3
|
+
import { h as Le, n as Oe, a as Ye, b as $e } from "./provider-qJi60GEX.js";
|
|
4
|
+
import { MetaMaskSDK as G } from "@metamask/sdk";
|
|
5
|
+
import { connect as V } from "starknetkit";
|
|
6
|
+
import { InjectedConnector as J } from "starknetkit/injected";
|
|
7
|
+
class N extends O {
|
|
150
8
|
address;
|
|
151
9
|
keychain;
|
|
152
10
|
modal;
|
|
153
11
|
options;
|
|
154
|
-
constructor(
|
|
155
|
-
super({ nodeUrl:
|
|
156
|
-
this.address = address;
|
|
157
|
-
this.keychain = keychain;
|
|
158
|
-
this.options = options;
|
|
159
|
-
this.modal = modal;
|
|
12
|
+
constructor(e, t, a, n, o, c) {
|
|
13
|
+
super({ nodeUrl: t }, e), this.address = a, this.keychain = n, this.options = o, this.modal = c;
|
|
160
14
|
}
|
|
161
15
|
/**
|
|
162
16
|
* Invoke execute function in account contract
|
|
@@ -170,38 +24,35 @@ var ControllerAccount = class extends WalletAccount {
|
|
|
170
24
|
*
|
|
171
25
|
* @returns response from addTransaction
|
|
172
26
|
*/
|
|
173
|
-
async execute(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
calls,
|
|
27
|
+
async execute(e) {
|
|
28
|
+
return e = $(e), new Promise(async (t, a) => {
|
|
29
|
+
const n = await this.keychain.execute(
|
|
30
|
+
e,
|
|
178
31
|
void 0,
|
|
179
32
|
void 0,
|
|
180
|
-
|
|
33
|
+
!1
|
|
181
34
|
);
|
|
182
|
-
if (
|
|
183
|
-
|
|
35
|
+
if (n.code === A.SUCCESS) {
|
|
36
|
+
t(n);
|
|
184
37
|
return;
|
|
185
38
|
}
|
|
186
|
-
if (this.options?.propagateSessionErrors &&
|
|
187
|
-
|
|
39
|
+
if (this.options?.propagateSessionErrors && n.code !== A.USER_INTERACTION_REQUIRED) {
|
|
40
|
+
a(n.error);
|
|
188
41
|
return;
|
|
189
42
|
}
|
|
190
43
|
this.modal.open();
|
|
191
|
-
const
|
|
192
|
-
|
|
44
|
+
const o = await this.keychain.execute(
|
|
45
|
+
e,
|
|
193
46
|
void 0,
|
|
194
47
|
void 0,
|
|
195
|
-
|
|
196
|
-
|
|
48
|
+
!0,
|
|
49
|
+
n.error
|
|
197
50
|
);
|
|
198
|
-
if (
|
|
199
|
-
|
|
200
|
-
this.modal.close();
|
|
51
|
+
if (o.code === A.SUCCESS) {
|
|
52
|
+
t(o), this.modal.close();
|
|
201
53
|
return;
|
|
202
54
|
}
|
|
203
|
-
|
|
204
|
-
return;
|
|
55
|
+
a(o.error);
|
|
205
56
|
});
|
|
206
57
|
}
|
|
207
58
|
/**
|
|
@@ -212,149 +63,326 @@ var ControllerAccount = class extends WalletAccount {
|
|
|
212
63
|
* @returns the signature of the JSON object
|
|
213
64
|
* @throws {Error} if the JSON object is not a valid JSON
|
|
214
65
|
*/
|
|
215
|
-
async signMessage(
|
|
216
|
-
return new Promise(async (
|
|
217
|
-
const
|
|
218
|
-
if (!("code" in
|
|
219
|
-
|
|
66
|
+
async signMessage(e) {
|
|
67
|
+
return new Promise(async (t, a) => {
|
|
68
|
+
const n = await this.keychain.signMessage(e, "", !0);
|
|
69
|
+
if (!("code" in n)) {
|
|
70
|
+
t(n);
|
|
220
71
|
return;
|
|
221
72
|
}
|
|
222
73
|
this.modal.open();
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
resolve(manualSign);
|
|
226
|
-
} else {
|
|
227
|
-
reject(manualSign.error);
|
|
228
|
-
}
|
|
229
|
-
this.modal.close();
|
|
74
|
+
const o = await this.keychain.signMessage(e, "", !1);
|
|
75
|
+
"code" in o ? a(o.error) : t(o), this.modal.close();
|
|
230
76
|
});
|
|
231
77
|
}
|
|
78
|
+
}
|
|
79
|
+
var y;
|
|
80
|
+
(function(r) {
|
|
81
|
+
r.Call = "call", r.Reply = "reply", r.Syn = "syn", r.SynAck = "synAck", r.Ack = "ack";
|
|
82
|
+
})(y || (y = {}));
|
|
83
|
+
var x;
|
|
84
|
+
(function(r) {
|
|
85
|
+
r.Fulfilled = "fulfilled", r.Rejected = "rejected";
|
|
86
|
+
})(x || (x = {}));
|
|
87
|
+
var S;
|
|
88
|
+
(function(r) {
|
|
89
|
+
r.ConnectionDestroyed = "ConnectionDestroyed", r.ConnectionTimeout = "ConnectionTimeout", r.NoIframeSrc = "NoIframeSrc";
|
|
90
|
+
})(S || (S = {}));
|
|
91
|
+
var P;
|
|
92
|
+
(function(r) {
|
|
93
|
+
r.DataCloneError = "DataCloneError";
|
|
94
|
+
})(P || (P = {}));
|
|
95
|
+
var v;
|
|
96
|
+
(function(r) {
|
|
97
|
+
r.Message = "message";
|
|
98
|
+
})(v || (v = {}));
|
|
99
|
+
const X = (r, e) => {
|
|
100
|
+
const t = [];
|
|
101
|
+
let a = !1;
|
|
102
|
+
return {
|
|
103
|
+
destroy(n) {
|
|
104
|
+
a || (a = !0, e(`${r}: Destroying connection`), t.forEach((o) => {
|
|
105
|
+
o(n);
|
|
106
|
+
}));
|
|
107
|
+
},
|
|
108
|
+
onDestroy(n) {
|
|
109
|
+
a ? n() : t.push(n);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}, Z = (r) => (...e) => {
|
|
113
|
+
r && console.log("[Penpal]", ...e);
|
|
114
|
+
}, ee = {
|
|
115
|
+
"http:": "80",
|
|
116
|
+
"https:": "443"
|
|
117
|
+
}, te = /^(https?:)?\/\/([^/:]+)?(:(\d+))?/, ae = ["file:", "data:"], re = (r) => {
|
|
118
|
+
if (r && ae.find((s) => r.startsWith(s)))
|
|
119
|
+
return "null";
|
|
120
|
+
const e = document.location, t = te.exec(r);
|
|
121
|
+
let a, n, o;
|
|
122
|
+
t ? (a = t[1] ? t[1] : e.protocol, n = t[2], o = t[4]) : (a = e.protocol, n = e.hostname, o = e.port);
|
|
123
|
+
const c = o && o !== ee[a] ? `:${o}` : "";
|
|
124
|
+
return `${a}//${n}${c}`;
|
|
125
|
+
}, B = ({ name: r, message: e, stack: t }) => ({
|
|
126
|
+
name: r,
|
|
127
|
+
message: e,
|
|
128
|
+
stack: t
|
|
129
|
+
}), ne = (r) => {
|
|
130
|
+
const e = new Error();
|
|
131
|
+
return Object.keys(r).forEach((t) => e[t] = r[t]), e;
|
|
132
|
+
}, oe = (r, e, t) => {
|
|
133
|
+
const { localName: a, local: n, remote: o, originForSending: c, originForReceiving: s } = r;
|
|
134
|
+
let i = !1;
|
|
135
|
+
const p = (d) => {
|
|
136
|
+
if (d.source !== o || d.data.penpal !== y.Call)
|
|
137
|
+
return;
|
|
138
|
+
if (s !== "*" && d.origin !== s) {
|
|
139
|
+
t(`${a} received message from origin ${d.origin} which did not match expected origin ${s}`);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const l = d.data, { methodName: f, args: h, id: _ } = l;
|
|
143
|
+
t(`${a}: Received ${f}() call`);
|
|
144
|
+
const w = (u) => (k) => {
|
|
145
|
+
if (t(`${a}: Sending ${f}() reply`), i) {
|
|
146
|
+
t(`${a}: Unable to send ${f}() reply due to destroyed connection`);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const b = {
|
|
150
|
+
penpal: y.Reply,
|
|
151
|
+
id: _,
|
|
152
|
+
resolution: u,
|
|
153
|
+
returnValue: k
|
|
154
|
+
};
|
|
155
|
+
u === x.Rejected && k instanceof Error && (b.returnValue = B(k), b.returnValueIsError = !0);
|
|
156
|
+
try {
|
|
157
|
+
o.postMessage(b, c);
|
|
158
|
+
} catch (m) {
|
|
159
|
+
if (m.name === P.DataCloneError) {
|
|
160
|
+
const C = {
|
|
161
|
+
penpal: y.Reply,
|
|
162
|
+
id: _,
|
|
163
|
+
resolution: x.Rejected,
|
|
164
|
+
returnValue: B(m),
|
|
165
|
+
returnValueIsError: !0
|
|
166
|
+
};
|
|
167
|
+
o.postMessage(C, c);
|
|
168
|
+
}
|
|
169
|
+
throw m;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
new Promise((u) => u(e[f].call(e, d.origin).apply(e, h))).then(w(x.Fulfilled), w(x.Rejected));
|
|
173
|
+
};
|
|
174
|
+
return n.addEventListener(v.Message, p), () => {
|
|
175
|
+
i = !0, n.removeEventListener(v.Message, p);
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
let se = 0;
|
|
179
|
+
const ie = () => ++se, Q = ".", T = (r) => r ? r.split(Q) : [], ce = (r) => r.join(Q), de = (r, e) => {
|
|
180
|
+
const t = T(e || "");
|
|
181
|
+
return t.push(r), ce(t);
|
|
182
|
+
}, le = (r, e, t) => {
|
|
183
|
+
const a = T(e);
|
|
184
|
+
return a.reduce((n, o, c) => (typeof n[o] > "u" && (n[o] = {}), c === a.length - 1 && (n[o] = t), n[o]), r), r;
|
|
185
|
+
}, z = (r, e) => {
|
|
186
|
+
const t = {};
|
|
187
|
+
return Object.keys(r).forEach((a) => {
|
|
188
|
+
const n = r[a], o = de(a, e);
|
|
189
|
+
typeof n == "object" && Object.assign(t, z(n, o)), typeof n == "function" && (t[o] = n);
|
|
190
|
+
}), t;
|
|
191
|
+
}, pe = (r) => {
|
|
192
|
+
const e = {};
|
|
193
|
+
for (const t in r)
|
|
194
|
+
le(e, t, r[t]);
|
|
195
|
+
return e;
|
|
196
|
+
}, me = (r, e, t, a, n) => {
|
|
197
|
+
const { localName: o, local: c, remote: s, originForSending: i, originForReceiving: p } = e;
|
|
198
|
+
let d = !1;
|
|
199
|
+
n(`${o}: Connecting call sender`);
|
|
200
|
+
const l = (h) => (..._) => {
|
|
201
|
+
n(`${o}: Sending ${h}() call`);
|
|
202
|
+
let w;
|
|
203
|
+
try {
|
|
204
|
+
s.closed && (w = !0);
|
|
205
|
+
} catch {
|
|
206
|
+
w = !0;
|
|
207
|
+
}
|
|
208
|
+
if (w && a(), d) {
|
|
209
|
+
const u = new Error(`Unable to send ${h}() call due to destroyed connection`);
|
|
210
|
+
throw u.code = S.ConnectionDestroyed, u;
|
|
211
|
+
}
|
|
212
|
+
return new Promise((u, k) => {
|
|
213
|
+
const b = ie(), m = (I) => {
|
|
214
|
+
if (I.source !== s || I.data.penpal !== y.Reply || I.data.id !== b)
|
|
215
|
+
return;
|
|
216
|
+
if (p !== "*" && I.origin !== p) {
|
|
217
|
+
n(`${o} received message from origin ${I.origin} which did not match expected origin ${p}`);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const E = I.data;
|
|
221
|
+
n(`${o}: Received ${h}() reply`), c.removeEventListener(v.Message, m);
|
|
222
|
+
let D = E.returnValue;
|
|
223
|
+
E.returnValueIsError && (D = ne(D)), (E.resolution === x.Fulfilled ? u : k)(D);
|
|
224
|
+
};
|
|
225
|
+
c.addEventListener(v.Message, m);
|
|
226
|
+
const C = {
|
|
227
|
+
penpal: y.Call,
|
|
228
|
+
id: b,
|
|
229
|
+
methodName: h,
|
|
230
|
+
args: _
|
|
231
|
+
};
|
|
232
|
+
s.postMessage(C, i);
|
|
233
|
+
});
|
|
234
|
+
}, f = t.reduce((h, _) => (h[_] = l(_), h), {});
|
|
235
|
+
return Object.assign(r, pe(f)), () => {
|
|
236
|
+
d = !0;
|
|
237
|
+
};
|
|
238
|
+
}, he = (r, e, t, a, n) => {
|
|
239
|
+
const { destroy: o, onDestroy: c } = a;
|
|
240
|
+
let s, i;
|
|
241
|
+
const p = {};
|
|
242
|
+
return (d) => {
|
|
243
|
+
if (e !== "*" && d.origin !== e) {
|
|
244
|
+
n(`Parent: Handshake - Received ACK message from origin ${d.origin} which did not match expected origin ${e}`);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
n("Parent: Handshake - Received ACK");
|
|
248
|
+
const l = {
|
|
249
|
+
localName: "Parent",
|
|
250
|
+
local: window,
|
|
251
|
+
remote: d.source,
|
|
252
|
+
originForSending: t,
|
|
253
|
+
originForReceiving: e
|
|
254
|
+
};
|
|
255
|
+
s && s(), s = oe(l, r, n), c(s), i && i.forEach((h) => {
|
|
256
|
+
delete p[h];
|
|
257
|
+
}), i = d.data.methodNames;
|
|
258
|
+
const f = me(p, l, i, o, n);
|
|
259
|
+
return c(f), p;
|
|
260
|
+
};
|
|
261
|
+
}, fe = (r, e, t, a) => (n) => {
|
|
262
|
+
if (!n.source)
|
|
263
|
+
return;
|
|
264
|
+
if (t !== "*" && n.origin !== t) {
|
|
265
|
+
r(`Parent: Handshake - Received SYN message from origin ${n.origin} which did not match expected origin ${t}`);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
r("Parent: Handshake - Received SYN, responding with SYN-ACK");
|
|
269
|
+
const o = {
|
|
270
|
+
penpal: y.SynAck,
|
|
271
|
+
methodNames: Object.keys(e)
|
|
272
|
+
};
|
|
273
|
+
n.source.postMessage(o, a);
|
|
274
|
+
}, ue = 6e4, ge = (r, e) => {
|
|
275
|
+
const { destroy: t, onDestroy: a } = e, n = setInterval(() => {
|
|
276
|
+
r.isConnected || (clearInterval(n), t());
|
|
277
|
+
}, ue);
|
|
278
|
+
a(() => {
|
|
279
|
+
clearInterval(n);
|
|
280
|
+
});
|
|
281
|
+
}, ye = (r, e) => {
|
|
282
|
+
let t;
|
|
283
|
+
return r !== void 0 && (t = window.setTimeout(() => {
|
|
284
|
+
const a = new Error(`Connection timed out after ${r}ms`);
|
|
285
|
+
a.code = S.ConnectionTimeout, e(a);
|
|
286
|
+
}, r)), () => {
|
|
287
|
+
clearTimeout(t);
|
|
288
|
+
};
|
|
289
|
+
}, be = (r) => {
|
|
290
|
+
if (!r.src && !r.srcdoc) {
|
|
291
|
+
const e = new Error("Iframe must have src or srcdoc property defined.");
|
|
292
|
+
throw e.code = S.NoIframeSrc, e;
|
|
293
|
+
}
|
|
294
|
+
}, _e = (r) => {
|
|
295
|
+
let { iframe: e, methods: t = {}, childOrigin: a, timeout: n, debug: o = !1 } = r;
|
|
296
|
+
const c = Z(o), s = X("Parent", c), { onDestroy: i, destroy: p } = s;
|
|
297
|
+
a || (be(e), a = re(e.src));
|
|
298
|
+
const d = a === "null" ? "*" : a, l = z(t), f = fe(c, l, a, d), h = he(l, a, d, s, c);
|
|
299
|
+
return {
|
|
300
|
+
promise: new Promise((w, u) => {
|
|
301
|
+
const k = ye(n, p), b = (m) => {
|
|
302
|
+
if (!(m.source !== e.contentWindow || !m.data)) {
|
|
303
|
+
if (m.data.penpal === y.Syn) {
|
|
304
|
+
f(m);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
if (m.data.penpal === y.Ack) {
|
|
308
|
+
const C = h(m);
|
|
309
|
+
C && (k(), w(C));
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
window.addEventListener(v.Message, b), c("Parent: Awaiting handshake"), ge(e, s), i((m) => {
|
|
315
|
+
window.removeEventListener(v.Message, b), m && u(m);
|
|
316
|
+
});
|
|
317
|
+
}),
|
|
318
|
+
destroy() {
|
|
319
|
+
p();
|
|
320
|
+
}
|
|
321
|
+
};
|
|
232
322
|
};
|
|
233
|
-
|
|
234
|
-
var IFrame = class {
|
|
323
|
+
class F {
|
|
235
324
|
url;
|
|
236
325
|
iframe;
|
|
237
326
|
container;
|
|
238
327
|
onClose;
|
|
239
328
|
constructor({
|
|
240
|
-
id,
|
|
241
|
-
url,
|
|
242
|
-
preset,
|
|
243
|
-
onClose,
|
|
244
|
-
onConnect,
|
|
245
|
-
methods = {}
|
|
329
|
+
id: e,
|
|
330
|
+
url: t,
|
|
331
|
+
preset: a,
|
|
332
|
+
onClose: n,
|
|
333
|
+
onConnect: o,
|
|
334
|
+
methods: c = {}
|
|
246
335
|
}) {
|
|
247
|
-
if (typeof document
|
|
336
|
+
if (typeof document > "u")
|
|
248
337
|
return;
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
this.
|
|
254
|
-
const iframe = document.createElement("iframe");
|
|
255
|
-
iframe.src = url.toString();
|
|
256
|
-
iframe.id = id;
|
|
257
|
-
iframe.style.border = "none";
|
|
258
|
-
iframe.sandbox.add("allow-forms");
|
|
259
|
-
iframe.sandbox.add("allow-popups");
|
|
260
|
-
iframe.sandbox.add("allow-scripts");
|
|
261
|
-
iframe.sandbox.add("allow-same-origin");
|
|
262
|
-
iframe.allow = "publickey-credentials-create *; publickey-credentials-get *; clipboard-write";
|
|
263
|
-
if (!!document.hasStorageAccess) {
|
|
264
|
-
iframe.sandbox.add("allow-storage-access-by-user-activation");
|
|
265
|
-
}
|
|
266
|
-
const container = document.createElement("div");
|
|
267
|
-
container.id = "controller";
|
|
268
|
-
container.style.position = "fixed";
|
|
269
|
-
container.style.height = "100%";
|
|
270
|
-
container.style.width = "100%";
|
|
271
|
-
container.style.top = "0";
|
|
272
|
-
container.style.left = "0";
|
|
273
|
-
container.style.zIndex = "10000";
|
|
274
|
-
container.style.backgroundColor = "rgba(0,0,0,0.6)";
|
|
275
|
-
container.style.display = "flex";
|
|
276
|
-
container.style.alignItems = "center";
|
|
277
|
-
container.style.justifyContent = "center";
|
|
278
|
-
container.style.visibility = "hidden";
|
|
279
|
-
container.style.opacity = "0";
|
|
280
|
-
container.style.transition = "opacity 0.2s ease";
|
|
281
|
-
container.appendChild(iframe);
|
|
282
|
-
this.iframe = iframe;
|
|
283
|
-
this.container = container;
|
|
284
|
-
connectToChild({
|
|
338
|
+
a && t.searchParams.set("preset", a), this.url = t;
|
|
339
|
+
const s = document.createElement("iframe");
|
|
340
|
+
s.src = t.toString(), s.id = e, s.style.border = "none", s.sandbox.add("allow-forms"), s.sandbox.add("allow-popups"), s.sandbox.add("allow-scripts"), s.sandbox.add("allow-same-origin"), s.allow = "publickey-credentials-create *; publickey-credentials-get *; clipboard-write", document.hasStorageAccess && s.sandbox.add("allow-storage-access-by-user-activation");
|
|
341
|
+
const i = document.createElement("div");
|
|
342
|
+
i.id = "controller", i.style.position = "fixed", i.style.height = "100%", i.style.width = "100%", i.style.top = "0", i.style.left = "0", i.style.zIndex = "10000", i.style.backgroundColor = "rgba(0,0,0,0.6)", i.style.display = "flex", i.style.alignItems = "center", i.style.justifyContent = "center", i.style.visibility = "hidden", i.style.opacity = "0", i.style.transition = "opacity 0.2s ease", i.appendChild(s), this.iframe = s, this.container = i, _e({
|
|
285
343
|
iframe: this.iframe,
|
|
286
|
-
methods: { close: (
|
|
287
|
-
}).promise.then(
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
const existingController2 = document.getElementById("controller");
|
|
292
|
-
if (document.body) {
|
|
293
|
-
if (id === "controller-keychain" && !existingController2 || id === "controller-profile") {
|
|
294
|
-
document.body.appendChild(container);
|
|
295
|
-
observer.disconnect();
|
|
296
|
-
}
|
|
297
|
-
}
|
|
344
|
+
methods: { close: (l) => () => this.close(), ...c }
|
|
345
|
+
}).promise.then(o), this.resize(), window.addEventListener("resize", () => this.resize());
|
|
346
|
+
const p = new MutationObserver(() => {
|
|
347
|
+
const l = document.getElementById("controller");
|
|
348
|
+
document.body && (e === "controller-keychain" && !l || e === "controller-profile") && (document.body.appendChild(i), p.disconnect());
|
|
298
349
|
});
|
|
299
|
-
|
|
300
|
-
childList:
|
|
301
|
-
subtree:
|
|
350
|
+
p.observe(document.documentElement, {
|
|
351
|
+
childList: !0,
|
|
352
|
+
subtree: !0
|
|
302
353
|
});
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
if (id === "controller-keychain" && !existingController || id === "controller-profile") {
|
|
306
|
-
document.body.appendChild(container);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
this.onClose = onClose;
|
|
354
|
+
const d = document.getElementById("controller");
|
|
355
|
+
document.body && (e === "controller-keychain" && !d || e === "controller-profile") && document.body.appendChild(i), this.onClose = n;
|
|
310
356
|
}
|
|
311
357
|
open() {
|
|
312
|
-
|
|
313
|
-
document.body.style.overflow = "hidden";
|
|
314
|
-
this.container.style.visibility = "visible";
|
|
315
|
-
this.container.style.opacity = "1";
|
|
358
|
+
this.container && (document.body.style.overflow = "hidden", this.container.style.visibility = "visible", this.container.style.opacity = "1");
|
|
316
359
|
}
|
|
317
360
|
close() {
|
|
318
|
-
|
|
319
|
-
this.onClose?.();
|
|
320
|
-
document.body.style.overflow = "auto";
|
|
321
|
-
this.container.style.visibility = "hidden";
|
|
322
|
-
this.container.style.opacity = "0";
|
|
361
|
+
this.container && (this.onClose?.(), document.body.style.overflow = "auto", this.container.style.visibility = "hidden", this.container.style.opacity = "0");
|
|
323
362
|
}
|
|
324
363
|
sendBackward() {
|
|
325
|
-
|
|
326
|
-
this.container.style.zIndex = "9999";
|
|
364
|
+
this.container && (this.container.style.zIndex = "9999");
|
|
327
365
|
}
|
|
328
366
|
sendForward() {
|
|
329
|
-
|
|
330
|
-
this.container.style.zIndex = "10000";
|
|
367
|
+
this.container && (this.container.style.zIndex = "10000");
|
|
331
368
|
}
|
|
332
369
|
resize() {
|
|
333
|
-
if (
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
this.iframe.style.borderRadius = "
|
|
339
|
-
return;
|
|
370
|
+
if (this.iframe) {
|
|
371
|
+
if (this.iframe.style.userSelect = "none", window.innerWidth < 768) {
|
|
372
|
+
this.iframe.style.height = "100%", this.iframe.style.width = "100%", this.iframe.style.borderRadius = "0";
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
this.iframe.style.height = "600px", this.iframe.style.width = "432px", this.iframe.style.borderRadius = "8px";
|
|
340
376
|
}
|
|
341
|
-
this.iframe.style.height = "600px";
|
|
342
|
-
this.iframe.style.width = "432px";
|
|
343
|
-
this.iframe.style.borderRadius = "8px";
|
|
344
377
|
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// src/constants.ts
|
|
348
|
-
var KEYCHAIN_URL = "https://x.cartridge.gg";
|
|
349
|
-
var PROFILE_URL = "https://profile.cartridge.gg";
|
|
350
|
-
var API_URL = "https://api.cartridge.gg";
|
|
351
|
-
var MetaMaskWallet = class {
|
|
378
|
+
}
|
|
379
|
+
class we {
|
|
352
380
|
type = "metamask";
|
|
353
381
|
platform = "ethereum";
|
|
354
382
|
MMSDK;
|
|
355
383
|
account = void 0;
|
|
356
384
|
constructor() {
|
|
357
|
-
this.MMSDK = new
|
|
385
|
+
this.MMSDK = new G({
|
|
358
386
|
dappMetadata: {
|
|
359
387
|
name: "Cartridge Controller",
|
|
360
388
|
url: window.location.href
|
|
@@ -362,751 +390,464 @@ var MetaMaskWallet = class {
|
|
|
362
390
|
});
|
|
363
391
|
}
|
|
364
392
|
isAvailable() {
|
|
365
|
-
return typeof window
|
|
393
|
+
return typeof window < "u" && !!window.ethereum?.isMetaMask;
|
|
366
394
|
}
|
|
367
395
|
getInfo() {
|
|
368
|
-
const
|
|
396
|
+
const e = this.isAvailable();
|
|
369
397
|
return {
|
|
370
398
|
type: this.type,
|
|
371
|
-
available,
|
|
372
|
-
version:
|
|
373
|
-
chainId:
|
|
399
|
+
available: e,
|
|
400
|
+
version: e ? window.ethereum?.version || "Unknown" : void 0,
|
|
401
|
+
chainId: e ? window.ethereum?.chainId : void 0,
|
|
374
402
|
name: "MetaMask",
|
|
375
403
|
platform: this.platform
|
|
376
404
|
};
|
|
377
405
|
}
|
|
378
406
|
async connect() {
|
|
379
|
-
if (this.account)
|
|
380
|
-
return { success:
|
|
381
|
-
}
|
|
407
|
+
if (this.account)
|
|
408
|
+
return { success: !0, wallet: this.type, account: this.account };
|
|
382
409
|
try {
|
|
383
|
-
if (!this.isAvailable())
|
|
410
|
+
if (!this.isAvailable())
|
|
384
411
|
throw new Error("MetaMask is not available");
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
this.account = accounts[0];
|
|
389
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
390
|
-
}
|
|
412
|
+
const e = await this.MMSDK.connect();
|
|
413
|
+
if (e && e.length > 0)
|
|
414
|
+
return this.account = e[0], { success: !0, wallet: this.type, account: this.account };
|
|
391
415
|
throw new Error("No accounts found");
|
|
392
|
-
} catch (
|
|
393
|
-
console.error(
|
|
394
|
-
|
|
395
|
-
success: false,
|
|
416
|
+
} catch (e) {
|
|
417
|
+
return console.error("Error connecting to MetaMask:", e), {
|
|
418
|
+
success: !1,
|
|
396
419
|
wallet: this.type,
|
|
397
|
-
error:
|
|
420
|
+
error: e.message || "Unknown error"
|
|
398
421
|
};
|
|
399
422
|
}
|
|
400
423
|
}
|
|
401
|
-
async signTransaction(
|
|
424
|
+
async signTransaction(e) {
|
|
402
425
|
try {
|
|
403
|
-
if (!this.isAvailable() || !this.account)
|
|
426
|
+
if (!this.isAvailable() || !this.account)
|
|
404
427
|
throw new Error("MetaMask is not connected");
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
if (!ethereum) {
|
|
428
|
+
const t = this.MMSDK.getProvider();
|
|
429
|
+
if (!t)
|
|
408
430
|
throw new Error("MetaMask is not connected");
|
|
409
|
-
|
|
410
|
-
const result = await ethereum.request({
|
|
431
|
+
const a = await t.request({
|
|
411
432
|
method: "eth_sendTransaction",
|
|
412
|
-
params: [
|
|
433
|
+
params: [e]
|
|
413
434
|
});
|
|
414
|
-
return { success:
|
|
415
|
-
} catch (
|
|
416
|
-
console.error(
|
|
417
|
-
|
|
418
|
-
success: false,
|
|
435
|
+
return { success: !0, wallet: this.type, result: a };
|
|
436
|
+
} catch (t) {
|
|
437
|
+
return console.error("Error signing transaction with MetaMask:", t), {
|
|
438
|
+
success: !1,
|
|
419
439
|
wallet: this.type,
|
|
420
|
-
error:
|
|
440
|
+
error: t.message || "Unknown error"
|
|
421
441
|
};
|
|
422
442
|
}
|
|
423
443
|
}
|
|
424
|
-
async signMessage(
|
|
444
|
+
async signMessage(e) {
|
|
425
445
|
try {
|
|
426
|
-
if (!this.isAvailable() || !this.account)
|
|
446
|
+
if (!this.isAvailable() || !this.account)
|
|
427
447
|
throw new Error("MetaMask is not connected");
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
msg: message
|
|
448
|
+
const t = await this.MMSDK.connectAndSign({
|
|
449
|
+
msg: e
|
|
431
450
|
});
|
|
432
|
-
return { success:
|
|
433
|
-
} catch (
|
|
434
|
-
console.error(
|
|
435
|
-
|
|
436
|
-
success: false,
|
|
451
|
+
return { success: !0, wallet: this.type, result: t };
|
|
452
|
+
} catch (t) {
|
|
453
|
+
return console.error("Error signing message with MetaMask:", t), {
|
|
454
|
+
success: !1,
|
|
437
455
|
wallet: this.type,
|
|
438
|
-
error:
|
|
456
|
+
error: t.message || "Unknown error"
|
|
439
457
|
};
|
|
440
458
|
}
|
|
441
459
|
}
|
|
442
|
-
async signTypedData(
|
|
460
|
+
async signTypedData(e) {
|
|
443
461
|
try {
|
|
444
|
-
if (!this.isAvailable() || !this.account)
|
|
462
|
+
if (!this.isAvailable() || !this.account)
|
|
445
463
|
throw new Error("MetaMask is not connected");
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
if (!ethereum) {
|
|
464
|
+
const t = this.MMSDK.getProvider();
|
|
465
|
+
if (!t)
|
|
449
466
|
throw new Error("MetaMask is not connected");
|
|
450
|
-
|
|
451
|
-
const result = await ethereum.request({
|
|
467
|
+
const a = await t.request({
|
|
452
468
|
method: "eth_signTypedData_v4",
|
|
453
|
-
params: [this.account, JSON.stringify(
|
|
469
|
+
params: [this.account, JSON.stringify(e)]
|
|
454
470
|
});
|
|
455
|
-
return { success:
|
|
456
|
-
} catch (
|
|
457
|
-
console.error(
|
|
458
|
-
|
|
459
|
-
success: false,
|
|
471
|
+
return { success: !0, wallet: this.type, result: a };
|
|
472
|
+
} catch (t) {
|
|
473
|
+
return console.error("Error signing typed data with MetaMask:", t), {
|
|
474
|
+
success: !1,
|
|
460
475
|
wallet: this.type,
|
|
461
|
-
error:
|
|
476
|
+
error: t.message || "Unknown error"
|
|
462
477
|
};
|
|
463
478
|
}
|
|
464
479
|
}
|
|
465
|
-
async switchChain(
|
|
480
|
+
async switchChain(e) {
|
|
466
481
|
try {
|
|
467
|
-
if (!this.isAvailable())
|
|
482
|
+
if (!this.isAvailable())
|
|
468
483
|
throw new Error("MetaMask is not available");
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
if (!ethereum) {
|
|
484
|
+
const t = this.MMSDK.getProvider();
|
|
485
|
+
if (!t)
|
|
472
486
|
throw new Error("MetaMask is not connected");
|
|
473
|
-
}
|
|
474
487
|
try {
|
|
475
|
-
await
|
|
488
|
+
return await t.request({
|
|
476
489
|
method: "wallet_switchEthereumChain",
|
|
477
|
-
params: [{ chainId }]
|
|
478
|
-
});
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
if (error.code === 4902) {
|
|
482
|
-
console.warn("Chain not added to MetaMask");
|
|
483
|
-
}
|
|
484
|
-
throw error;
|
|
490
|
+
params: [{ chainId: e }]
|
|
491
|
+
}), !0;
|
|
492
|
+
} catch (a) {
|
|
493
|
+
throw a.code === 4902 && console.warn("Chain not added to MetaMask"), a;
|
|
485
494
|
}
|
|
486
|
-
} catch (
|
|
487
|
-
console.error(
|
|
488
|
-
return false;
|
|
495
|
+
} catch (t) {
|
|
496
|
+
return console.error("Error switching chain for MetaMask:", t), !1;
|
|
489
497
|
}
|
|
490
498
|
}
|
|
491
|
-
async getBalance(
|
|
499
|
+
async getBalance(e) {
|
|
492
500
|
try {
|
|
493
|
-
if (!this.isAvailable() || !this.account)
|
|
501
|
+
if (!this.isAvailable() || !this.account)
|
|
494
502
|
throw new Error("MetaMask is not connected");
|
|
495
|
-
|
|
496
|
-
if (tokenAddress) {
|
|
503
|
+
if (e)
|
|
497
504
|
return {
|
|
498
|
-
success:
|
|
505
|
+
success: !1,
|
|
499
506
|
wallet: this.type,
|
|
500
507
|
error: "Not implemented for ERC20"
|
|
501
508
|
};
|
|
502
|
-
|
|
503
|
-
const
|
|
504
|
-
if (!
|
|
509
|
+
{
|
|
510
|
+
const t = this.MMSDK.getProvider();
|
|
511
|
+
if (!t)
|
|
505
512
|
throw new Error("MetaMask is not connected");
|
|
506
|
-
|
|
507
|
-
const balance = await ethereum.request({
|
|
513
|
+
const a = await t.request({
|
|
508
514
|
method: "eth_getBalance",
|
|
509
515
|
params: [this.account, "latest"]
|
|
510
516
|
});
|
|
511
|
-
return { success:
|
|
517
|
+
return { success: !0, wallet: this.type, result: a };
|
|
512
518
|
}
|
|
513
|
-
} catch (
|
|
514
|
-
console.error(
|
|
515
|
-
|
|
516
|
-
success: false,
|
|
519
|
+
} catch (t) {
|
|
520
|
+
return console.error("Error getting balance from MetaMask:", t), {
|
|
521
|
+
success: !1,
|
|
517
522
|
wallet: this.type,
|
|
518
|
-
error:
|
|
523
|
+
error: t.message || "Unknown error"
|
|
519
524
|
};
|
|
520
525
|
}
|
|
521
526
|
}
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
// src/wallets/phantom/index.ts
|
|
525
|
-
var PhantomWallet = class {
|
|
527
|
+
}
|
|
528
|
+
class ve {
|
|
526
529
|
type = "phantom";
|
|
527
530
|
platform = "solana";
|
|
528
531
|
account = void 0;
|
|
529
532
|
isAvailable() {
|
|
530
|
-
return typeof window
|
|
533
|
+
return typeof window < "u" && !!window.solana?.isPhantom;
|
|
531
534
|
}
|
|
532
535
|
getInfo() {
|
|
533
|
-
const
|
|
536
|
+
const e = this.isAvailable();
|
|
534
537
|
return {
|
|
535
538
|
type: this.type,
|
|
536
|
-
available,
|
|
539
|
+
available: e,
|
|
537
540
|
version: "Unknown",
|
|
538
541
|
name: "Phantom",
|
|
539
542
|
platform: this.platform
|
|
540
543
|
};
|
|
541
544
|
}
|
|
542
545
|
async connect() {
|
|
543
|
-
if (this.account)
|
|
544
|
-
return { success:
|
|
545
|
-
}
|
|
546
|
+
if (this.account)
|
|
547
|
+
return { success: !0, wallet: this.type, account: this.account };
|
|
546
548
|
try {
|
|
547
|
-
if (!this.isAvailable())
|
|
549
|
+
if (!this.isAvailable())
|
|
548
550
|
throw new Error("Phantom is not available");
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
this.account = response.publicKey.toString();
|
|
553
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
554
|
-
}
|
|
551
|
+
const e = await window.solana.connect();
|
|
552
|
+
if (e.publicKey)
|
|
553
|
+
return this.account = e.publicKey.toString(), { success: !0, wallet: this.type, account: this.account };
|
|
555
554
|
throw new Error("No accounts found");
|
|
556
|
-
} catch (
|
|
557
|
-
console.error(
|
|
558
|
-
|
|
559
|
-
success: false,
|
|
555
|
+
} catch (e) {
|
|
556
|
+
return console.error("Error connecting to Phantom:", e), {
|
|
557
|
+
success: !1,
|
|
560
558
|
wallet: this.type,
|
|
561
|
-
error:
|
|
559
|
+
error: e.message || "Unknown error"
|
|
562
560
|
};
|
|
563
561
|
}
|
|
564
562
|
}
|
|
565
|
-
async signTransaction(
|
|
563
|
+
async signTransaction(e) {
|
|
566
564
|
try {
|
|
567
|
-
if (!this.isAvailable() || !this.account)
|
|
565
|
+
if (!this.isAvailable() || !this.account)
|
|
568
566
|
throw new Error("Phantom is not connected");
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
return {
|
|
575
|
-
success: false,
|
|
567
|
+
const t = await window.solana.signTransaction(e);
|
|
568
|
+
return { success: !0, wallet: this.type, result: t };
|
|
569
|
+
} catch (t) {
|
|
570
|
+
return console.error("Error signing transaction with Phantom:", t), {
|
|
571
|
+
success: !1,
|
|
576
572
|
wallet: this.type,
|
|
577
|
-
error:
|
|
573
|
+
error: t.message || "Unknown error"
|
|
578
574
|
};
|
|
579
575
|
}
|
|
580
576
|
}
|
|
581
|
-
async signMessage(
|
|
577
|
+
async signMessage(e) {
|
|
582
578
|
try {
|
|
583
|
-
if (!this.isAvailable() || !this.account)
|
|
579
|
+
if (!this.isAvailable() || !this.account)
|
|
584
580
|
throw new Error("Phantom is not connected");
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
return
|
|
589
|
-
|
|
590
|
-
console.error(`Error signing message with Phantom:`, error);
|
|
591
|
-
return {
|
|
592
|
-
success: false,
|
|
581
|
+
const t = new TextEncoder().encode(e), a = await window.solana.signMessage(t, "utf8");
|
|
582
|
+
return { success: !0, wallet: this.type, result: a };
|
|
583
|
+
} catch (t) {
|
|
584
|
+
return console.error("Error signing message with Phantom:", t), {
|
|
585
|
+
success: !1,
|
|
593
586
|
wallet: this.type,
|
|
594
|
-
error:
|
|
587
|
+
error: t.message || "Unknown error"
|
|
595
588
|
};
|
|
596
589
|
}
|
|
597
590
|
}
|
|
598
|
-
async switchChain(
|
|
599
|
-
console.warn("Chain switching not supported for Phantom");
|
|
600
|
-
return false;
|
|
591
|
+
async switchChain(e) {
|
|
592
|
+
return console.warn("Chain switching not supported for Phantom"), !1;
|
|
601
593
|
}
|
|
602
|
-
async getBalance(
|
|
594
|
+
async getBalance(e) {
|
|
603
595
|
try {
|
|
604
|
-
if (!this.isAvailable() || !this.account)
|
|
596
|
+
if (!this.isAvailable() || !this.account)
|
|
605
597
|
throw new Error("Phantom is not connected");
|
|
606
|
-
}
|
|
607
598
|
return {
|
|
608
|
-
success:
|
|
599
|
+
success: !0,
|
|
609
600
|
wallet: this.type,
|
|
610
601
|
result: "Implement based on Phantom API"
|
|
611
602
|
};
|
|
612
|
-
} catch (
|
|
613
|
-
console.error(
|
|
614
|
-
|
|
615
|
-
success: false,
|
|
603
|
+
} catch (t) {
|
|
604
|
+
return console.error("Error getting balance from Phantom:", t), {
|
|
605
|
+
success: !1,
|
|
616
606
|
wallet: this.type,
|
|
617
|
-
error:
|
|
607
|
+
error: t.message || "Unknown error"
|
|
618
608
|
};
|
|
619
609
|
}
|
|
620
610
|
}
|
|
621
|
-
}
|
|
622
|
-
|
|
611
|
+
}
|
|
612
|
+
class ke {
|
|
623
613
|
type = "argent";
|
|
624
614
|
platform = "starknet";
|
|
625
615
|
wallet = void 0;
|
|
626
616
|
account = void 0;
|
|
627
617
|
isAvailable() {
|
|
628
|
-
return typeof window
|
|
618
|
+
return typeof window < "u" && !!window.starknet_argentX;
|
|
629
619
|
}
|
|
630
620
|
getInfo() {
|
|
631
|
-
const
|
|
621
|
+
const e = this.isAvailable();
|
|
632
622
|
return {
|
|
633
623
|
type: this.type,
|
|
634
|
-
available,
|
|
635
|
-
version:
|
|
636
|
-
chainId:
|
|
624
|
+
available: e,
|
|
625
|
+
version: e ? window.starknet_argentX?.version || "Unknown" : void 0,
|
|
626
|
+
chainId: e ? window.starknet_argentX?.chainId : void 0,
|
|
637
627
|
name: "Argent",
|
|
638
628
|
platform: this.platform
|
|
639
629
|
};
|
|
640
630
|
}
|
|
641
631
|
async connect() {
|
|
642
|
-
if (this.account)
|
|
643
|
-
return { success:
|
|
644
|
-
}
|
|
632
|
+
if (this.account)
|
|
633
|
+
return { success: !0, wallet: this.type, account: this.account };
|
|
645
634
|
try {
|
|
646
|
-
if (!this.isAvailable())
|
|
635
|
+
if (!this.isAvailable())
|
|
647
636
|
throw new Error("Argent is not available");
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
connectors: [new InjectedConnector({ options: { id: "argentX" } })]
|
|
637
|
+
const { wallet: e, connectorData: t } = await V({
|
|
638
|
+
connectors: [new J({ options: { id: "argentX" } })]
|
|
651
639
|
});
|
|
652
|
-
if (!
|
|
640
|
+
if (!e)
|
|
653
641
|
throw new Error("No wallet found");
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
} catch (error) {
|
|
659
|
-
console.error(`Error connecting to Argent:`, error);
|
|
660
|
-
return {
|
|
661
|
-
success: false,
|
|
642
|
+
return this.wallet = e, this.account = t?.account, { success: !0, wallet: this.type, account: this.account };
|
|
643
|
+
} catch (e) {
|
|
644
|
+
return console.error("Error connecting to Argent:", e), {
|
|
645
|
+
success: !1,
|
|
662
646
|
wallet: this.type,
|
|
663
|
-
error:
|
|
647
|
+
error: e.message || "Unknown error"
|
|
664
648
|
};
|
|
665
649
|
}
|
|
666
650
|
}
|
|
667
|
-
async signTypedData(
|
|
651
|
+
async signTypedData(e) {
|
|
668
652
|
try {
|
|
669
|
-
if (!this.isAvailable() || !this.wallet)
|
|
653
|
+
if (!this.isAvailable() || !this.wallet)
|
|
670
654
|
throw new Error("Argent is not connected");
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
const sig = await this.wallet.request({
|
|
655
|
+
console.log("signTypedData", e);
|
|
656
|
+
const t = await this.wallet.request({
|
|
674
657
|
type: "wallet_signTypedData",
|
|
675
|
-
params:
|
|
658
|
+
params: e
|
|
676
659
|
});
|
|
677
|
-
return { success:
|
|
678
|
-
} catch (
|
|
679
|
-
console.error(
|
|
680
|
-
|
|
681
|
-
success: false,
|
|
660
|
+
return { success: !0, wallet: this.type, result: t };
|
|
661
|
+
} catch (t) {
|
|
662
|
+
return console.error("Error signing typed data with Argent:", t), {
|
|
663
|
+
success: !1,
|
|
682
664
|
wallet: this.type,
|
|
683
|
-
error:
|
|
665
|
+
error: t.message || "Unknown error"
|
|
684
666
|
};
|
|
685
667
|
}
|
|
686
668
|
}
|
|
687
|
-
async switchChain(
|
|
688
|
-
console.warn(
|
|
669
|
+
async switchChain(e) {
|
|
670
|
+
return console.warn(
|
|
689
671
|
"Chain switching for Argent may require custom implementation"
|
|
690
|
-
);
|
|
691
|
-
return false;
|
|
672
|
+
), !1;
|
|
692
673
|
}
|
|
693
|
-
async getBalance(
|
|
674
|
+
async getBalance(e) {
|
|
694
675
|
try {
|
|
695
|
-
if (!this.isAvailable() || !this.wallet)
|
|
676
|
+
if (!this.isAvailable() || !this.wallet)
|
|
696
677
|
throw new Error("Argent is not connected");
|
|
697
|
-
}
|
|
698
678
|
return {
|
|
699
|
-
success:
|
|
679
|
+
success: !0,
|
|
700
680
|
wallet: this.type,
|
|
701
681
|
result: "Implement based on Argent API"
|
|
702
682
|
};
|
|
703
|
-
} catch (
|
|
704
|
-
console.error(
|
|
705
|
-
|
|
706
|
-
success: false,
|
|
683
|
+
} catch (t) {
|
|
684
|
+
return console.error("Error getting balance from Argent:", t), {
|
|
685
|
+
success: !1,
|
|
707
686
|
wallet: this.type,
|
|
708
|
-
error:
|
|
687
|
+
error: t.message || "Unknown error"
|
|
709
688
|
};
|
|
710
689
|
}
|
|
711
690
|
}
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
// src/wallets/bridge.ts
|
|
715
|
-
var WalletBridge = class {
|
|
691
|
+
}
|
|
692
|
+
class Ae {
|
|
716
693
|
walletAdapters;
|
|
717
694
|
connectedWallets = /* @__PURE__ */ new Map();
|
|
718
695
|
constructor() {
|
|
719
|
-
this.walletAdapters = /* @__PURE__ */ new Map();
|
|
720
|
-
this.walletAdapters.set("metamask", new MetaMaskWallet());
|
|
721
|
-
this.walletAdapters.set("phantom", new PhantomWallet());
|
|
722
|
-
this.walletAdapters.set("argent", new ArgentWallet());
|
|
723
|
-
if (typeof window !== "undefined") {
|
|
724
|
-
window.wallet_bridge = this;
|
|
725
|
-
}
|
|
696
|
+
this.walletAdapters = /* @__PURE__ */ new Map(), this.walletAdapters.set("metamask", new we()), this.walletAdapters.set("phantom", new ve()), this.walletAdapters.set("argent", new ke()), typeof window < "u" && (window.wallet_bridge = this);
|
|
726
697
|
}
|
|
727
698
|
getIFrameMethods() {
|
|
728
699
|
return {
|
|
729
|
-
externalDetectWallets: (
|
|
730
|
-
externalConnectWallet: (
|
|
731
|
-
externalSignMessage: (
|
|
732
|
-
externalSignTypedData: (
|
|
733
|
-
externalGetBalance: (
|
|
700
|
+
externalDetectWallets: (e) => () => this.detectWallets(),
|
|
701
|
+
externalConnectWallet: (e) => (t) => this.connectWallet(t),
|
|
702
|
+
externalSignMessage: (e) => (t, a) => this.signMessage(t, a),
|
|
703
|
+
externalSignTypedData: (e) => (t, a) => this.signTypedData(t, a),
|
|
704
|
+
externalGetBalance: (e) => (t, a) => this.getBalance(t, a)
|
|
734
705
|
};
|
|
735
706
|
}
|
|
736
707
|
async detectWallets() {
|
|
737
|
-
|
|
738
|
-
(
|
|
708
|
+
return Array.from(this.walletAdapters.values()).map(
|
|
709
|
+
(t) => t.getInfo()
|
|
739
710
|
);
|
|
740
|
-
return wallets;
|
|
741
711
|
}
|
|
742
|
-
getWalletAdapter(
|
|
743
|
-
const
|
|
744
|
-
if (!
|
|
745
|
-
throw new Error(`Unsupported wallet type: ${
|
|
746
|
-
|
|
747
|
-
return adapter;
|
|
712
|
+
getWalletAdapter(e) {
|
|
713
|
+
const t = this.walletAdapters.get(e);
|
|
714
|
+
if (!t)
|
|
715
|
+
throw new Error(`Unsupported wallet type: ${e}`);
|
|
716
|
+
return t;
|
|
748
717
|
}
|
|
749
|
-
handleError(
|
|
750
|
-
const
|
|
751
|
-
console.error(`Error ${
|
|
752
|
-
return { success: false, wallet: type, error: errorMessage };
|
|
718
|
+
handleError(e, t, a) {
|
|
719
|
+
const n = t instanceof Error ? t.message : "Unknown error";
|
|
720
|
+
return console.error(`Error ${a} with ${e} wallet:`, t), { success: !1, wallet: e, error: n };
|
|
753
721
|
}
|
|
754
|
-
async connectWallet(
|
|
722
|
+
async connectWallet(e) {
|
|
755
723
|
try {
|
|
756
|
-
if (this.connectedWallets.has(
|
|
757
|
-
const
|
|
758
|
-
return { success:
|
|
759
|
-
}
|
|
760
|
-
const wallet = this.getWalletAdapter(type);
|
|
761
|
-
const response = await wallet.connect();
|
|
762
|
-
if (response.success) {
|
|
763
|
-
this.connectedWallets.set(type, wallet);
|
|
724
|
+
if (this.connectedWallets.has(e)) {
|
|
725
|
+
const n = this.connectedWallets.get(e);
|
|
726
|
+
return { success: !0, wallet: e, account: n.type };
|
|
764
727
|
}
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
728
|
+
const t = this.getWalletAdapter(e), a = await t.connect();
|
|
729
|
+
return a.success && this.connectedWallets.set(e, t), a;
|
|
730
|
+
} catch (t) {
|
|
731
|
+
return this.handleError(e, t, "connecting to");
|
|
768
732
|
}
|
|
769
733
|
}
|
|
770
|
-
async signMessage(
|
|
734
|
+
async signMessage(e, t) {
|
|
771
735
|
try {
|
|
772
|
-
if (!this.connectedWallets.has(
|
|
773
|
-
throw new Error(`Wallet ${
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
return
|
|
780
|
-
} catch (error) {
|
|
781
|
-
return this.handleError(type, error, "signing message with");
|
|
736
|
+
if (!this.connectedWallets.has(e))
|
|
737
|
+
throw new Error(`Wallet ${e} is not connected`);
|
|
738
|
+
const a = this.connectedWallets.get(e);
|
|
739
|
+
if (!a.signMessage)
|
|
740
|
+
throw new Error(`Wallet ${e} does not support signing messages`);
|
|
741
|
+
return await a.signMessage(t);
|
|
742
|
+
} catch (a) {
|
|
743
|
+
return this.handleError(e, a, "signing message with");
|
|
782
744
|
}
|
|
783
745
|
}
|
|
784
|
-
async signTypedData(
|
|
746
|
+
async signTypedData(e, t) {
|
|
785
747
|
try {
|
|
786
|
-
if (!this.connectedWallets.has(
|
|
787
|
-
throw new Error(`Wallet ${
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
return
|
|
794
|
-
} catch (error) {
|
|
795
|
-
return this.handleError(type, error, "signing typed data with");
|
|
748
|
+
if (!this.connectedWallets.has(e))
|
|
749
|
+
throw new Error(`Wallet ${e} is not connected`);
|
|
750
|
+
const a = this.connectedWallets.get(e);
|
|
751
|
+
if (!a.signTypedData)
|
|
752
|
+
throw new Error(`Wallet ${e} does not support signing typed data`);
|
|
753
|
+
return await a.signTypedData(t);
|
|
754
|
+
} catch (a) {
|
|
755
|
+
return this.handleError(e, a, "signing typed data with");
|
|
796
756
|
}
|
|
797
757
|
}
|
|
798
|
-
async getBalance(
|
|
758
|
+
async getBalance(e, t) {
|
|
799
759
|
try {
|
|
800
|
-
if (!this.connectedWallets.has(
|
|
801
|
-
throw new Error(`Wallet ${
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
return
|
|
805
|
-
} catch (error) {
|
|
806
|
-
return this.handleError(type, error, "getting balance from");
|
|
760
|
+
if (!this.connectedWallets.has(e))
|
|
761
|
+
throw new Error(`Wallet ${e} is not connected`);
|
|
762
|
+
return await this.connectedWallets.get(e).getBalance(t);
|
|
763
|
+
} catch (a) {
|
|
764
|
+
return this.handleError(e, a, "getting balance from");
|
|
807
765
|
}
|
|
808
766
|
}
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
// src/iframe/keychain.ts
|
|
812
|
-
var KeychainIFrame = class extends IFrame {
|
|
767
|
+
}
|
|
768
|
+
class xe extends F {
|
|
813
769
|
walletBridge;
|
|
814
|
-
constructor({ url, policies, ...
|
|
815
|
-
const
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
);
|
|
822
|
-
}
|
|
823
|
-
super({
|
|
824
|
-
...iframeOptions,
|
|
770
|
+
constructor({ url: e, policies: t, ...a }) {
|
|
771
|
+
const n = new URL(e ?? W), o = new Ae();
|
|
772
|
+
t && n.searchParams.set(
|
|
773
|
+
"policies",
|
|
774
|
+
encodeURIComponent(JSON.stringify(t))
|
|
775
|
+
), super({
|
|
776
|
+
...a,
|
|
825
777
|
id: "controller-keychain",
|
|
826
|
-
url:
|
|
827
|
-
methods:
|
|
828
|
-
});
|
|
829
|
-
this.walletBridge = walletBridge;
|
|
778
|
+
url: n,
|
|
779
|
+
methods: o.getIFrameMethods()
|
|
780
|
+
}), this.walletBridge = o;
|
|
830
781
|
}
|
|
831
782
|
getWalletBridge() {
|
|
832
783
|
return this.walletBridge;
|
|
833
784
|
}
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
// src/iframe/profile.ts
|
|
837
|
-
var ProfileIFrame = class extends IFrame {
|
|
785
|
+
}
|
|
786
|
+
class Ce extends F {
|
|
838
787
|
constructor({
|
|
839
|
-
profileUrl,
|
|
840
|
-
rpcUrl,
|
|
841
|
-
version,
|
|
842
|
-
username,
|
|
843
|
-
slot,
|
|
844
|
-
namespace,
|
|
845
|
-
tokens,
|
|
846
|
-
policies,
|
|
847
|
-
...
|
|
788
|
+
profileUrl: e,
|
|
789
|
+
rpcUrl: t,
|
|
790
|
+
version: a,
|
|
791
|
+
username: n,
|
|
792
|
+
slot: o,
|
|
793
|
+
namespace: c,
|
|
794
|
+
tokens: s,
|
|
795
|
+
policies: i,
|
|
796
|
+
...p
|
|
848
797
|
}) {
|
|
849
|
-
const
|
|
850
|
-
let
|
|
851
|
-
|
|
852
|
-
slot
|
|
853
|
-
)}&ns=${encodeURIComponent(namespace)}` : `${_profileUrl}/account/${username}/slot/${slot}?ps=${encodeURIComponent(
|
|
854
|
-
slot
|
|
855
|
-
)}` : `${_profileUrl}/account/${username}`
|
|
798
|
+
const d = (e || H).replace(/\/$/, "");
|
|
799
|
+
let l = new URL(
|
|
800
|
+
o ? `${d}/account/${n}/slot/${o}` : `${d}/account/${n}`
|
|
856
801
|
);
|
|
857
|
-
if (
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
"erc20",
|
|
864
|
-
encodeURIComponent(tokens.erc20.toString())
|
|
802
|
+
if (o && l.searchParams.set("ps", encodeURIComponent(o)), c && l.searchParams.set("ns", encodeURIComponent(c)), a && l.searchParams.set("v", encodeURIComponent(a)), l.searchParams.set("rpcUrl", encodeURIComponent(t)), s?.erc20 && l.searchParams.set(
|
|
803
|
+
"erc20",
|
|
804
|
+
encodeURIComponent(s.erc20.toString())
|
|
805
|
+
), i?.contracts) {
|
|
806
|
+
const f = Object.values(i.contracts).flatMap(
|
|
807
|
+
(h) => h.methods
|
|
865
808
|
);
|
|
866
|
-
|
|
867
|
-
if (policies?.contracts) {
|
|
868
|
-
const methods = Object.values(policies.contracts).flatMap(
|
|
869
|
-
(contract) => contract.methods
|
|
870
|
-
);
|
|
871
|
-
_url.searchParams.set(
|
|
809
|
+
l.searchParams.set(
|
|
872
810
|
"methods",
|
|
873
|
-
encodeURIComponent(JSON.stringify(
|
|
811
|
+
encodeURIComponent(JSON.stringify(f))
|
|
874
812
|
);
|
|
875
813
|
}
|
|
876
814
|
super({
|
|
877
|
-
...
|
|
815
|
+
...p,
|
|
878
816
|
id: "controller-profile",
|
|
879
|
-
url:
|
|
817
|
+
url: l
|
|
880
818
|
});
|
|
881
819
|
}
|
|
882
|
-
};
|
|
883
|
-
|
|
884
|
-
// src/errors.ts
|
|
885
|
-
var NotReadyToConnect = class _NotReadyToConnect extends Error {
|
|
886
|
-
constructor() {
|
|
887
|
-
super("Not ready to connect");
|
|
888
|
-
Object.setPrototypeOf(this, _NotReadyToConnect.prototype);
|
|
889
|
-
}
|
|
890
|
-
};
|
|
891
|
-
|
|
892
|
-
// package.json
|
|
893
|
-
var package_default = {
|
|
894
|
-
version: "0.7.8"};
|
|
895
|
-
|
|
896
|
-
// src/icon.ts
|
|
897
|
-
var icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABkyAAAZMgGvFqWRAAAAB3RJTUUH6AkEFwsj7EvbJQAAAAZiS0dEAP8A/wD/oL2nkwAAK45JREFUeNrt3XmUXVWBqPE42+3Qj5hQ995zb1WlUqkkVZlIAhnJPIKAIogICEGGtlugFVBaxAbsVgw+FWlooEFtRFAmZRbClDAlICAg4MTQDY4MAiIy6X5nX8JrQQippKruOef+vrW+Zf9hr2XOsPd3T52z96BBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCWhpaRlWqVT2LFcq/5m6MvW+1EdTn08N3CCfX3sM7ysnydXpf56UHuNlpVKp3RUHAGjkpP+2dEL6aDox3WSyHljT4766lCQfSf/zb12JAIABobOz8y3pxHNIOhE9ZDJuuL8tVSoH9/T0vNmVCQDoN9KJf2Y66fzExJs570qSZJorFADQH5P/J9OJ5jmTbWb/LPBsKUkOdKUCAPqKN5TL5f8wyeYmBI5Lz9nrXbYAgI3hdemkcrKJNXee5NIFAGww6a/JI0ymGbFc7tV/v5Qkh7mCAQC9Jp1wFqcTyZ9Mvrn1T2nALXAlAwDWm8GDB7+zVKn8wiSaex8cMmTIO1zRAID1+/WfJF82eRbmpcCjXdEAgNekVqtV0onjaZNnYXxq6NChJVc2AGCdpL8Yl5s0C+fnXdkAgHXxxnSy+JUJs1jG9znSc/sGlzcA4NV+/S80YRbTliSZ5woHALwi6S/FL5gsC2qSfM4VDgB4RdKJ4jqTZWFd5QoHALxaADxqoiysD7nCAQB/RWtr6yYmyWIbF3hypQMAXkKpVGo3SRZ+UaBWVzoA4OUB0GOSLPjngKVStysdAPASWqrVsSbJgn8K2NIyxpUOABAAAgAAIAAEgAAAAAgACgAAgACgAAAACAAKAACAAKAAAAAIAAoAAIAAoAAAAAgACgAAgACgAAAACAAKAACAAKAAAAAIAAoAAIAAoAAAAAgACgAAgACgAAAACAABIAAAAAJAAAAAIAAEAABAAGTTreZ0hudu2iqTLp3dKQAAAAJAAAgAAIAAEAACAADQX7S2tm5SKpU2r1Qq25bL5X1Llcpn0oH/W6krXsv0/+cGAVDsAFh7jl/rWrg0vXZOqF875fI+a6+lye3t7f/HHQYADaZarQ5OB+YF6SB9cDlJTk3/79XpwP1w0V9iEwAN96F6RKTXXLz24jUYr0V3JAD0D69PkmR8+ivsn9IB+NzU+5v1LXYBkFnvr1+b5fIBaRCMS6/Z17ltAWDDfuF3pr+w/jH9pXV2/NXlEzYBkLcnBWkMnJVew/+waa023B0NAOugUqmMTCf8Q9PB81YTiAAomLemQfCpJEm63OkAsHbSjy9bpf95u0lCADSD6fV+WylJDovXvhEAQFPR3t7+1vTX0G7pYLjKhCAAmtyV6b2wa7wnjAwACkutVquUk+Rz6aD3iIFfAPAlPpzeG/82pK2tbKQAUKTH/BNTv5EOcs8Y6AUA1+kz8V6J94yRA0Au6enpeXMpSXZcu7CKgV0AsPf+IC5EVK1W/8aIAiAPv/Zr8VFmOnj9xgAuANgn/ibeU/HeMsIAyBqvS5JkfjpInZMOVs8ZsAUA+8Xn4j0W77VBFhoC0EgGDx78zvpiPZXKXQZnASAABtS74r0X70EjEYABo1QqdVcqlePSQegJA7EAEAAN9Yl4L8Z70sgEoL94Y7lcfl862FyZDjp/NvAKAAGQKf9cvzfTezTeq4YrABtNS0vLpunA8slm3oBHAAiAPJner78sVSpHJUlSNYIB6DXpL4lJ5SQ5MR1QnjKoCgABkNs1Bc6MWxYb0QCsk87OzrfEb/fTXw/XGzwFgAAolLfENQVaWlreZqQD8P+J25XGR4b15UgNlAJAABT5zwOP1Z/slcujjXxA8/L6+GgwPiJMB4bnDY4CQAA0lX+Kq3TGJ37pWPAGwyHQBGzS0fF38VGgb/cFgABg3SS5J77omzrECAkUkPTm3mztS31PGvQEgADgK/h0fCKYJMk0IyaQc2zIIwAEAG1EBDQRcU/xtd/uP2AgEwACgBuzEVH9BeFyuc3ICmT7Mf/Mtd/9PmvgEgACgH390mA6tmwzyEZEQEZ+7Q8Z8o74qC69MW83SAkAAcAB8CfxCWNra+smRmCgASRJ0rX22/1HDUgCQACwERsRxReLW6rVsUZkoP958dv9C2zIIwAEADPktfU1BSZNepNhGuhDbMhDAUAbEQFNhA15KABoIyKgSbAhDwUAbUQENNdj/o61L/U9ZMCgAKCNiIDmeKnPhjwUALQREVB0bMhDAUDWnwr8PL7gnCTJu8wMKDQ25KEAIG1EhCbBhjwUAKSNiNBE2JCHAoC0ERGaiLXf7p9qQx4KALJvXhqMq5+uXVPARkTI2K99G/JQAAgA2ogIzUO1Wh1hQx4KAAFAGxGhObAhDwWAAGDWNiIaNOiNpif0CzbkyZ8Tx7aFHZZ0hf13GxOWHzgxnP6FqeGKk7YMN5w6O9xyxpxc+uPvzstsAMT/bXk9rvGaiNdGvEbitRKvmXjtxGvIvZSvjYiq1WpixkJfvtRnQ56MW6slYZv5I8JRH9usPpD/+vJFmZ0omS/jtXT5iTPr19a7542oX2vuORsRoaC8uCFPeiFd52bKrh3DqmGfHbvDecdMD79btdhkxQExXmvfO2ZG2GuH0WFYe9W9mG1vXvuC9t+a2fBaj/ltyJMDt57bGc784rTw+DVLTEhsqI+tWhK+c/TU+rsZ7k0bESG/L/XZkCfjj/j3eX93WHPaHBMPM+ma02bXn0j5E4GNiJBx2tvb35pO+h9Nf/H/zE2RXcd1t4Uj99ss3H/xApMMc+EvLlsYvnrIJC8QZtw49sc5IM4FZsTm4Q3pSV9mid5su2hWZ/ivf90iPHn9UpMKc+lTNywN3/3K9LDj0pHu6Wz7QJwTPBEoOPFRf3qyf+iCz6ZtbUnYb5eecNuZc00gLJR3nzsvHLrv+DC8w0uDGfautX8aQJGoVqvjyuXyVS7wbDp1Ynv9kelvr/TpHovtIyuX1J9szZrS4d7PqulcYYXBgnzOl/7qP9LGPNkzqSb1R6PxEenTazzmZ3P5THrNX3XylmHvHbtDteqlwQx+NfBs6hFxDjGT5pAkSaalJ/JOF3O2HNlZDQcuG1d/JGoiILcK91wwv/6ia8+oVmNE9ryzJUmmmlHzwxvTclu+9nMPF3BGXDBzeP3Rp2/3yVf2D9e/8NLg1nNHGDMy9ulgXB9mkL0GMv+3/iQ9Wde4YLNha2tSf8QZH3Ua4Mn1N+5PEJ+UWWkwU66q1WoVM20GKVWrc9IT9CsXaeOd0NNaf6T5wKULDebkRvirFYvqL8huPqHd2JINHyqXy4vNuNn6vO8TVvFrvNsuGFF/hPnH1V7qI/vjpcHdthsVKomxpsE+X6pUDjbzNp7XpZP/0S7IxjlieK3+qPKOs73URw6EPz3vhZcGR3XVjEGNXUnw2HQOer1puAHE5RvLSXK2C7ExTp88rP5o8uGr7MJHNmpXwvhi7dxp1hRomOkcZCnhAWbw4MHvjC9kuAAH/tv9+AgyPop89kYDMJmllwbjKpqtNeNUI14OjHOSmXlg/t7/t2l1Xe2iGzjHdr/wUt99F9mQh8yyD162yEZEjflzwPVDhw59uxm6fz/z+5s0AK5wwQ3shjy/v863+6SNiPgaEXB5nKPM1P1AT0/Pm9PJ/0IXWv9vyBO/3Y97mxtIyfz7w+/Mrb+oayOiAfFSywf3w9v+6YH9lour/5wy8YWX+n5zhQ15yCJvRLSljYj6+8XAb8Y5y7TdR6QH9FAXlg15SNqIKCc7Cv6zmbsvJv9y+b3W9bchD0kbEeXIP5eS5P1m8I176W9ceiCfdDHZkIekjYhy5pNxDjOTb+jnfpXK3S4iG/KQtBFRTr0rzmVm9N4++q9UTnLxbPyGPP/zfRvykLQRUQPfBzjBjN77v/u7cDbw2/1vL58anlptACPZNy8NXnL8zPoLwzYi2sA1ArwPsH4MaWsrpwfsEReNDXlI2ogoJ7/yX+u/88jQoUNLZvjXoFSpnOGCWj+nTbIhD0kbEeXEb5nh1/3i3wIXyfp9ux8fydmQh2SjveHU2fUXjWs1awq8lnGOM9O/ylK/3vq3IQ/JfG9EtNkYGxGtY7+An9k++JVf/PuUC8SGPCRtRFTwpYIPNeP/Ba2trZukB+ZRF8dLN+RZ/U0b8pDMr7d+e46NiP76zwCPJUnyLjP///7tf7kLw4Y8JG1E1CR/CjjKzJ9Sq9Uq6QF5yoY8NuQhaSOiJvEPce7z679S+fdmvAC6Ol/4dv8uG/KQbEJ/fsGC+ovN3SNbm/UpwFebfbOfwc222U98BHbSZza3IQ9Jrt2IKK5eOn/G8KZ7CtDU7wI0y5v/cUOev/9AT/172Q29SX5w+pyw5/u6w+Tx7fbwJpm5P2VOGtcWdn/v6LDmtA0f5+IYGcfKOGY2yQuBn2zO2X/SpDelB+CBIp/c+D3sFw+aFH5x2cZtyHPpCVs2zQ1BMuc/eGqVcMGx0zdqzItjZhw7m2BNgf+Jc2Ez/u3/A0U9qdsv6grfO2ZG+OPqjX+pL35TO8HCGiRzZM+o1vDEtRv/Z844hsaxNI6pBX4KsFMzbvd7WdE25PnEh8eGO8/p25f64q9/AwrJvHneMdP7dCyMY2scY+NYW7BjdUkzfvr3fFG+3T/58C3Coyv7Z0Oe4w7d3GBCMncefdDEfhkT41gbx9w49hbkWD0fd8Ftph3/Dsr7SesYVg3LD5wYnry+f7/d//InJhlMSObOzx2wWf8uObx6q/oXVZ3DC7DKYJJ8vJkC4LY8n6xl23eH/75k4YB8IiMASAqAV/f+ixfUvz7I+fG6tSkm/5aWlo7cvqyRVOq/+gdyG14BQFIArNs4Jsdl1JMcfyK9aa02vBm+/T8gjycnPma68NgZA75IhgAgKQDWz8tOmBlGdubzTwKVSmU/b/9ndPKPC/E0YpUsAUBSAKy/N6VjdU53H/x+0R//vy39Rz6dt0UtVpw4s2HLZAoAkgKgd159yqw8Lp729NChQ99e3Jf/SqWlebuIz/zitIauky0ASAqA3nvG8mn5O27l8pIir/53ZJ5Oxj/tPrbhG2UIAJICYMPcf9cxeXsP4IgiB8AVeTkRcfndh69aLABIMqcB8MjKJfVNinJ03C4r6vz/hvQf90ReTkR8mzQLW2UKAJICYOO+DMjRcXs8zpXFewGwWh2bl5PwvsVdmdkrWwCQFAAbZ542EyqVSj12/2ug8Q1SAUCSxQiAq07Oz6ZqpSTZsYgBcMQ63nzMzMHfeu6IzFy0AoCkAOgbt57bmZcAOKyIAfCdPBz8+OmIACDJYgXA6UdNzcuxO90GQA1a9CcLb/4LAJICoI+/CLh6cV4WByrexkDpP+rRrB/4XbYZmakLVgCQFAB95wfePSoPx+7hQk3+7e3tb83DBXvKkVsIAJIsaACcfPgWeTh2f+7p6XlzkZYAbs/DBXtTgzb8EQAkBUD/u+a02XlZEbBWnDUAkmRq1g94tZqEJ65dIgBIsqABEMf4ONbnYC2AzYvz9/9yeUnWD/isKR2Zu1gFAEkB0LfO3KIj+8evXF5cpAB4b9YP+E5bjxQAJFnwANhhSfZXBaxUKtsWaQ2AnbN+wPfesVsAkGTBA+DDO3TnIQB2KlIALMv6Af/4HmMFAEkWPADiNu85WA1w9yL9CWCfrB/wT//9eAFAkgUPgDjW5+AdgH2KFAD7Zv2AHyYAuJ6O7qqF2VM7wtSJ7WFYe9UxIXMUAIflIwD2FQACQABkxOEd1fBv6YB25znzXnJ+nrphabj8xJnhQ+8Z7TiRAkAACAABUCS3XTAiPHDpwtc8V1ectGUY1VVzzEgBIAAEgADIux/cZlT4/XXrv0DUXefOC+N72hw7CgABIAAEgADIq0tnd4bHr+n96pB3nD3PkwAKAAEgAASAAMijUye1h1+tWLRRa453DPOCIAWAABAAAkAA5MYJY9rCvRct2Ohzd8nxM0OtljimFAACQAAIAAGQdbs6a+G2M+f22fn79vKpoZI4rhQAAkAACAABkFlbW5Nw5X9u2efn8JhPOocUAAJAAAgAAZBJk2oSvvuV6f12Hv/lH8Y7zhQAAkAACAABkDVPOGxyv57HZ2/cKuy/2xjHmgJAAAgAASAAsuJn9x+YgerpNUvDsu27HXMKAAEgAASAAGi0H9m5p/7rfKDOZ1xUaLuFXY49BYAAEAACQAA0yh2WdNXX8h/oc/rIyiVh/ozhzgEFgAAQAAJAAAy0i2d1hsdWLWnYeX3w0oVh8wntzgUFgAAQAAJAAAzYKn8T28MvVyxs+Ln9+fkLwrhu+wZQAAgAASAABEC/O2Z0a/jZ+fMzc35vP2tuGDnCvgEUAAJAAAgAAdBvjhheC7d+e07mzvHKr80KbW2WDKYAEAACQAAIgL5f5a9WCZefODOT5zh64bEzQrUqAigABIAAEAACoM+Ma/GfsXxaZif/F/3GZ7dwvigABIAAEAACoK88/tObZ37yf9GjD5ronFEACAABIAAEwMZ6yF7jcjP5v+g/7T7WuWugc6d1hC+l992lJ2wZbjp9TrjljMZ4c+qKE2fWA3bruSMEgAAQAAKA6+u86cPDU6u3yl0A/OH6pWHmFh3OYQNeEo3bNw/kypC9MQZJnj4bFQACQAAIgIb5/f+YmbvJ/0XjzoTO4QC+JNqahOu+MSvz18Xd587LzWejAkAACAAB0BDH97TVN9/JawDEJYqtDzBwHvHRCbm5Nk4+YgsBIAAEgADgq7n7e0fndvJ/0fdvNdK5HCB/et783FwXv1u1uP7EQgAIAAEgAPgKHrzn2NwHwEd3GeNcDtAaEc/k7GlRXM5aAAgAASAA+Aruv9uY3AfA3jt2O5cD4PCOau6ujTnThgsAASAABABfyW3mj8h9AMSvGJxLASAABIAAEADs5VvdD121OLeT/4OXLbI0sAAQAAJAAAgAg/SG+NVDJuU2AL7wMSsCCgABIAAEgAAwSG+Q8TO6+y9ekLvBPW5XHCcl51AACAABIAAEADfQRbM6wyMrl+RmYP/tlYtyMbgLAAEgAASAABAAmTcOlneeMy/zg/ptZ84N0ycPc84EgAAQAAJAAAiAvrJWS8L+u44JV58yKzxxbXaeCDy2akm44qQtw0d27vHSnwAQAAJAAAgAAdDv7wd0VsOorlpD7eq01K8AEAACQAAIAAFACgABIAAEgAAQAKQAEAACQAAIAJICQAAIAAEgAEgKAAEgAASAACApAASAABAAAoCkABAAAkAACIDcOntqRzj6oInhkuNnhjWnzQkrTpwZjv3nyeHd80aYuFKTahJ2WNIVTjhscn0tgXiMLvr3GfWBNw/7xQsAASAABIAAEAAvcVx3W/jeMTPWeVxWf3N2mDu9o2knrW0XjAh3nPXqqxs+s2Zp+Nbnp9bXOzDJCwABIAAEgADIvPNnDA8PXLpwvY7Nk9cvDcu27266Cevje4wNT6cT/Poco5+eNz9MneRpgAAQAAJAAAiADLv9oq5eb9zz1A1Lw9ZzO5vmGO227aj6r/veHKNfrlgYFm7ZabIXAAJAAAgAAZA94y/5+It+Q47RXefOq6/1X/Rj1Dm8Gh5cz6cjL/fRlYvr7wuY8AWAABAAAkAAZMYDl41b70far+Ye248u/HE6eM+xG3WM/pAG1l47jDbpCwABIAAEgABovEfut1l49saNP06nHzW18BNV/ApiY49TDK0YEiZ+ASAABIAAEAAN+4Tt5MO36LPjdMsZcwo/UT2wgY//X8nlH59o8hcAAkAACAABMLC2tibh3C9P79PjdO+F8ws/UT1+zZI+PWZfO3JKPcSsp5DUXybNUwBMGNMmAASAABAA+fu11RePsl/ufRctKPxE9fvrlvT5cbvw2BmhvU0E3HDq7NxM/vem13olqQgAASAABEB+HN1VC2tO65+BVgBsuKu+Pit0ddaaOgB2f+/o3ATAJz6cj3c4BIAAEAACoO7mE9rDT743v9+OkwDYOO84e14uHiv3p8d8clLmJ//TvzA1N3+2EQACQAAIgPqa/v/z/YX9epwEQN+8R9Hsqwbuu1NP/ThkbRx48LJF9a838vDoXwAIAAEgAOpuNacz/PbKRf1+nARA3/iLyxbWl2Nu5giopr+wt547ov6oPX6m2kgP2XtcfYXM+OJs3o6jABAAAqCJA2C37UYNyKQlAPrWx1YtCTsuHekTQQoAASAABEDv3W+XnvDU6oE7TgKgb42rBu69Y7eJjAJAAAgAAbD+Hrrv+D5Z3U8ANC4AXlw18KBlVg2kABAAAkAAvIbxBaVjPzW5IcdJAPSfXz1kkgmNAkAACAAB8OovTn3n6KkNO04CoH894bDJJjUKAAEgAATAX3vKkVs09DgJgP73qI9tZmKjABAAAkAA/MXb/tuOavhxEgD9b3yvY8nsTpMbBYAAEAAC4AVvP2uuAGiCAIhefuJMkxsFgAAQAAKgEqZPHpaJ4yQABu7LgJ5RrSY4CgABIACaPQD233WMAGiiAIju/O5RJjgKAAEgAJo9AOJypQKguQIgRp8JjgJAAAiAJg+AQ/YaJwCaLAD2fJ8VAikABIAAaPoA+MC7RwmAJguAudM7THAUAAJAADR7ALS1JeHRlYsFQJMEwL3pcc7TlrQUAAJAAAiAfvTYf54sAJokAOI+DyY3CgABIAAEQN2uzlq498L5AqDgAfDD78wNrTUTGwWAABAAAuBl6wH8+vJFAqCgARAf/U8Y02ZiowAQAAJAAPy1Uye2h5+fv0AAFCwA7jp3Xpg8vt2kRgEgAASAAHh1x/e0hVu/PUcAFCQA1pw2O3SPtPIfBYAAEAACYD3sHF4NK06cKQByHgAXHjsjDGuvmswoAASAABAA629raxLO/OI0AZDTADj58C1CUk1MZBQAAkAACIDeG78XX37gRAGQowCIW/7Gc2YCowAQAAJAAGy0n9p3fHhmzVIBkPEA+OPqpeFje4w1eVEACAABIAD6zmXbd4cnr18qADIaAI9fsyR8cBu7/FEACAABIAD6we0XdYVHrl4sADIWAL9csTAsmtVp0voLR3XVwnsWdtU3Ptp7x8a41w6j6/fMuO42ASAABIAAyL+zp3aE/75koQDISADcc8H8MG3SMJP+WhfMHB4uPWHL8HQ//8mqt+9lXPeNWfUYEAACQAAIgFwbF5WJi8v09Up1RZ+cnri2bwPgptPnhDGjfeP/ov/4wTHhqRuWZnIciMb3aI7cbzMBIAAEgADIt6O7auGGU2f32XG67cy5hZ+gHrys75Zajr9yh3f4xv9FF8/qrL8EmdXJ/y/d/b2jBYAAEAACIN/GrYTP/cr0PjlOZ31xWuEnqZVfm9Unx+r0L0y1qc/LvOT4mbmY/KN3nD1PAAgAASAA8m+1moSvHTllo49TfHxb9Enq8H+YsNHH6f8ePKm+PoNJ/6XGryDyEgDRPPzpRgAIAAEgANZ7sIgvO23IMbr/4gWhva34q9bFNfk39CuK+FLbwXv6xv+V7BhWzdXkH40v0woAASAABEBh3H/XMb3+O2x8MWrXbZvn+/UDPjSm19dQ/Hpgj+1Hm+xfxfguRN4CYM604QJAAAgAAVAs42I0j61ast6fRx2y17imm7C+eNCk9b5+fnvlorDN/BEmegEgAASAABAA2XfLKR31T9Re67O/D7y7eVeu22fH7vCLy9a9nsLVp8yqf3JpkhcAAkAACAABkKuNhHbZZmT9jfUfnT23vtDP3efOC+d8aVr4yM499d0GTVzV+p8ELjh2evjxd+fVj9HtZ80N//WvW+Ru0RgBIAAEgAAQAAKAFAACQAAIAAEgAEgBIAAEgAAQACQFgAAQAAJAAJAUAAJAAAgAAUBSAAgAASAABABJASAABIAAEAD8iyV141oDi2Z1NtT4v2FUV805EQACQAAIAAEgAPrLrs5afUCK38tn6fzG1QzvPGdeOOKjE2zPKwAEgAAQAAJAAPSlcVGcBy9blPlB/b8vWRi2nmvZXgEgAASAABAAAmCjff9WI8Mfrl+am4E9btyz3UKr+AkAASAABIAAEAAb7ISe1vpmOHkb3OPTiviegnMoAASAABAAAoAb4NeOnJK7gf1Fjzt0c+dQAAgAASAABIBBurd2DKuu97bCWfShqxbb8EgACAABIAAEgEG6t75vcVduJ/8XXTq707kUAAJAAAgAAcDe+PE9xuY+APbdqce5FAACQAAIAAHA3njQsvwHwD9+cIxzKQAEgAAQAAKAvXGXbUbmPgDi+gXOpQAQAAJAAAgA9sLRXbXw1A1Lczv5P3HtEisDCgABIAAEgAAwSG+I53xpWm4D4Fufn+ocDpBtbUnuro8Zmw8TAAJAAAgAvppTJ7aHx6/J36eAj65cHCaNa3MOB9AHL12Ym+sjPtmKn7kKAAEgAAQA12F8kz5uuJOXwf2ZNUvDsu27nbsB9vhPb56ba+TcL0/PxTEVAAJAAAiAhht32svL4P7pPAxOBXTkiFq454L5mb8+fn35ojB5fLsAEAACQABwff2Pw7L/C2/5gROdqwa6+YT28IPT52T2+ohbWc+d1pGb4ykABIAAEACZsJJUwreXT83s4P71z05xnjJgtZqEfd7fHS44dnq496IF4eGrFjfUuEX0pSdsGQ740JjcLQ0tAASAABAAmbG1VglX/ueWmTvHFx47oz7xOEcskgJAAAgAAZApuzpr4YffmZuZ87vya7Pqn6E5NxQAAkAACAAB0M+O7W4NPz9/QcPP7c1nzAkjhtecEwoAASAABIAAGLA1Aia1h1+tWNSw8xoDZFy3b/0pAASAABAAAmDAXTK7Mzy2auAXCoqLzsQ3zp0DCgABIAAEgABo4KZBf1w9cHsGPLJySZg3fbhjTwEgAASAABAAjTZuuzsQqwX+/rolYdsFIxxzCgABIAAEgABolsHqqdVb1Z82ONZ0TwkAASAABEDGPPEz/bNaYHy6sP+uYxxjCgABIAAEgADIokk1Cd/9yvQ+P4ef+Yj1/SkABIAAEAACINurBbYm4aqTt3T+SAEgAASAAGjG1QJvP2vjVws8Y/m0+h4EjikFgAAQAAJAAOTECWPawn0XbfhqgRcfNyPUapb4pQAQAAJAAAiA3DlrSkd46KrFvT5nq74+K7Rb358CQAAIAAEgAPLr1nM7exUBN5w6O4zsrDp2FAACQAAIAAFQhCcBr/VOQPzU7/SjpvrlTwoAASAABECRrFaTsN8uPWHFiTPD49csecm6/qd9bkp9XwHHiRQAAkAACICCG7fxbfNrnxQAAkAACACSFAACQAAIAJICQAAIAAEgAEgKAAEgAASAACApAASAABAAAoCkABAAAkAACACSAkAACAABIABICgABIAAEAEkKAAEgAAQASQoAASAABABJCgABIAAEAEkKAAEgAAQASQoAASAABABJCgABIAAEAEkKAAEgAAQASQoAASAABABJCgABIAAEAEkKAAFQiAD4tAAgycIHwKcFwIAHwD5ZP+CH7D1OAJBkwQPgkL3G5SEA9ilSAOyd9QN+0LKxAoAkCx4ABy7LfgBUKpW9ChMA6T/mw1k/4Ad8aIwAIMmCB8D+u43JQwDsWaQnALtl/YDvvWO3ACDJggfAXjuMzsOfAHYp0hOA92T9gG+3sCuTF+u/HzrZYEIydy4/cGImx9Rt5o/IwxOAbQoTAC1JMi/rB3zM6NZMXqwXHzfDYEIyd5775emZHFN7RrVm/tiVSqXZRfoTwOQ8XLD3X7wgcxfr769bkosLliRftKuzFn63anHmxtP7LlqQi+NXqVQmFulPAK15OOhf/+yUTBbrOV+aFpJqYmAhmf3JK6mE078wNZNjaRzj83AMkySpDioQb0gj4NmsH/T3Lc7mewDRFSfODFvPHRFaW4UAyewZx6alszvDJcfPzOw4uv2irjwcy2fSOfP1RQqAQek/6t48XMQ3nzEnsxdv9Jk1S8PDVy0myUz5dDo2ZXnsjGN7HuagUqXys0FFo1KpXJmHg//+rUaGZ2/cKtMXMkly/Y1j+k5bj8xLAFxexAD4el4eZZ32uSluGpIsiN/8tym5+VNKGgCnFC4AyknysbycgI5h1bDmtDluHJLMubecMSd0Dq/m532KcvmAIj4BmJ6nF1rG97SFey+c7wYiyZwax/A4ludp7mlJkqmFC4D29va3xrcb83QiJo9vD/dcIAJIMm/GdV2mTByWt68pnuns7HzLoCJSTpIb8/ZpS4yAn1+wwA1Fkjma/LfYbFj+PqdM58hBRaVUqRybx+9bJ41rEwEkmQPjan+5nPxfeAHwq4UNgEqlsnNeF7kQASRp8u/nJYB3LmwAJEnyrvQf+bwIIEma/F/i83GOHFRk0n/ktXle7rIeAeeLAJLM0uS/+YT2vC+nvHJQ0alUKp/I+5rXE8eKAJLMxKd+xZj849//D2qGAKil/9g/iQCSpMm/7p+KtgPgq/8ZoFy+qgi7X8UFJu4+d54bkSQH2J+dP7/+Q6wQWyhXKlcMahZKSbJHUbbAFAEkOfCT/2ZjijH51x//p3Ni0wRAXOko/Uf/pkgRcJcIIEmTf+99qFqt/s2gZiL9R3++QCcwjOsWASRp8u/15j//OqjZqFQqranPigCS5Gv50/MKOPlXKs+kv/6TQc1I+o8/qWAnUwSQZD9M/hOKN/nHX/8nDGpW4lOA9CA8XcQIuPMcEUCSG+tPvlfQyT/99V8qldoHNTNpBBxXwBMrAkjS5L+uT/+OG9TstLS0bJoejN8V8QSP7W4VASRp8n+5jw9paysPQv0pwP4FPcn1CPjR2XPd0CTZm8m/p7Wok3/89f9RM///8sb0gNwuAkiyuf3xd+cVevJP/WGc80z7f/mngGp1SnpgnhMBJGnyL6jPxbnOjP/Kfwo4ssAnvh4Bd5ztnQCSbMLJPz76P9xM/2pMmvSm9CDdVOQLYMxoEUCSL5/845LqRR7749wW5zgT/bqfAoyMb0iKAJIsvnEztSaY/J+Ic5sZfv0iYNu4P7IIIEmTf879czqnbWdm782WwZXKvxT8onghAs4SASSbzzj29YxqLfrkH+JcZkbvPa8rl8tnFf3iGNVVC7ecMceAQLJpvP2suU0x+ZeT5Jw4l5nON4ChQ4e+PT2Id4kAkjT55+yN/yvb29vfaibf2KWCk+SOZoiAm0UASZN/EX753zhkyJB3mMH7gE033bSlGZ4EdI9sDWtOEwEki+ea02aH0ekPncJP/pXKnemv/yFmbk8Ceu3wjmq45PiZBgyShfHi42aEjmHVZpj8f1yr1Spm7P57EnBn4f92lFTCYX8/Pjx5/VKDB8nc+vvrloRP7Tu+PqY1wy//OEeZqfs/An7UBBdTmDi2LXz9s1PC71YtNpiQzI2PrlwcTjlyi7DZmLZmmPijPzL5D9QaAaXS0CLvHvhyh7VXw4feMzp86ROTwgXHTq//LS0uInTPBfNJsqHGsWj1N2eH8786vT5GxbEqjlnNMj6n3j2kra1sZhYBJEmTPwYiAkqVym0uQpLkAHvX0KFDS2ZiEUCSNPljoGltbd0kPSE/cFGSJE3+zRkBN7k4SZL95A8t8iMCSJImf2SJ9vb2/yMCSJIm/2aNgCS50UVLktxIbzX5iwCSZJNN/kmSvMuMKgJIkiZ/5CoCyuU1LmaSpMlfBJAk+UreYvIvGJt0dPydCCBJmvybNAIqlcpqFzlJ8uWTf7VaHWymFAEkyebxZpO/CCBJmvzRBBFwg4ufJE3+EAEkyebwByZ/ESACSLKJjGN+HPvNgBg0ePDgd5YqlevdGCRp8kcTRkB6cVznBiHJYhp/6MWx3oyHv2LIkCHvEAEkWUivM/ljnbS0tLytXC5f5WYhSZM/mvNJwDVuGpLMvdfGMd3MhvVm6NChb08vnMvcPCSZU8vlNSZ/bBCdnZ1vKVUq57uRSDJ3b/tfEH/Imcmw4Uya9Kb0YjrdDUWSufG0OHabwNAXvC6tySPSi+rPbiySzKx/LlUq/xLHbNMW+pRyubxLeoH90U1GkpnzqfSH2s5mKvQbpVKpO73Q7nSzkWRm/EmSJOPNUBiQzwRLlcoZbjqSbLBJ8k0v+2HAqVQqO6UX4G/dhCQ54P66lCQ7mInQyD8JDPWVAEkO7Fv+SZK8ywyErITA7PSivNmNSZL95g/K5fIsMw6yyOsrlcqy9CK9341Kkn3mfaUk+VAcY00zyDaTJr0pvVj3SC/au924JLnB3lWf+C3qg5w+EXhPOUkuTi/k593MJPmaPl8uly9Kx87t/OJHIUiSpFqqVD7jqQBJvqJ3p7/2D4tjpRkDRY6BrjQGDi6/sOXwc258kk1oHPuuiWNhHBPNDGg6Wlpa3pZe/PMrlcrh6Y1wXnzZxcBAsoDeG8e4uFZ/HPPi2GcGAF5GfaXBUqmnVK1uVS6X90n9bOp/pTfQuakr4h7X6X/+qJwk95BkQ41j0Qtj0or6GJWOVekPmiPj2BXHsDiWxTHNyA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATcP/A/VYuD9l6UjwAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI0LTA5LTA0VDIzOjExOjM1KzAwOjAw9BAQcQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNC0wOS0wNFQyMzoxMTozNSswMDowMIVNqM0AAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAV3pUWHRSYXcgcHJvZmlsZSB0eXBlIGlwdGMAAHic4/IMCHFWKCjKT8vMSeVSAAMjCy5jCxMjE0uTFAMTIESANMNkAyOzVCDL2NTIxMzEHMQHy4BIoEouAOoXEXTyQjWVAAAAAElFTkSuQmCC";
|
|
898
|
-
|
|
899
|
-
// src/mutex.ts
|
|
900
|
-
function releaseStub() {
|
|
901
820
|
}
|
|
902
|
-
|
|
903
|
-
m_lastPromise = Promise.resolve();
|
|
904
|
-
/**
|
|
905
|
-
* Acquire lock
|
|
906
|
-
* @param [bypass=false] option to skip lock acquisition
|
|
907
|
-
*/
|
|
908
|
-
async obtain(bypass = false) {
|
|
909
|
-
let release = releaseStub;
|
|
910
|
-
if (bypass) return release;
|
|
911
|
-
const lastPromise = this.m_lastPromise;
|
|
912
|
-
this.m_lastPromise = new Promise((resolve) => release = resolve);
|
|
913
|
-
await lastPromise;
|
|
914
|
-
return release;
|
|
915
|
-
}
|
|
916
|
-
};
|
|
917
|
-
|
|
918
|
-
// src/provider.ts
|
|
919
|
-
var mutex = new Mutex();
|
|
920
|
-
var BaseProvider = class {
|
|
921
|
-
id = "controller";
|
|
922
|
-
name = "Controller";
|
|
923
|
-
version = package_default.version;
|
|
924
|
-
icon = icon;
|
|
925
|
-
account;
|
|
926
|
-
subscriptions = [];
|
|
927
|
-
_probePromise = null;
|
|
928
|
-
async safeProbe() {
|
|
929
|
-
if (this.account) {
|
|
930
|
-
return this.account;
|
|
931
|
-
}
|
|
932
|
-
if (this._probePromise) {
|
|
933
|
-
return this._probePromise;
|
|
934
|
-
}
|
|
935
|
-
const release = await mutex.obtain();
|
|
936
|
-
return await new Promise(async (resolve) => {
|
|
937
|
-
try {
|
|
938
|
-
this._probePromise = this.probe();
|
|
939
|
-
const result = await this._probePromise;
|
|
940
|
-
resolve(result);
|
|
941
|
-
} finally {
|
|
942
|
-
this._probePromise = null;
|
|
943
|
-
}
|
|
944
|
-
}).finally(() => {
|
|
945
|
-
release();
|
|
946
|
-
});
|
|
947
|
-
}
|
|
948
|
-
request = async (call) => {
|
|
949
|
-
switch (call.type) {
|
|
950
|
-
case "wallet_getPermissions":
|
|
951
|
-
await this.safeProbe();
|
|
952
|
-
if (this.account) {
|
|
953
|
-
return [Permission.ACCOUNTS];
|
|
954
|
-
}
|
|
955
|
-
return [];
|
|
956
|
-
case "wallet_requestAccounts": {
|
|
957
|
-
if (this.account) {
|
|
958
|
-
return [this.account.address];
|
|
959
|
-
}
|
|
960
|
-
const silentMode = call.params && call.params.silent_mode;
|
|
961
|
-
this.account = await this.safeProbe();
|
|
962
|
-
if (!this.account && !silentMode) {
|
|
963
|
-
this.account = await this.connect();
|
|
964
|
-
}
|
|
965
|
-
if (this.account) {
|
|
966
|
-
return [this.account.address];
|
|
967
|
-
}
|
|
968
|
-
return [];
|
|
969
|
-
}
|
|
970
|
-
case "wallet_watchAsset":
|
|
971
|
-
throw {
|
|
972
|
-
code: 63,
|
|
973
|
-
message: "An unexpected error occurred",
|
|
974
|
-
data: "wallet_watchAsset not implemented"
|
|
975
|
-
};
|
|
976
|
-
case "wallet_addStarknetChain": {
|
|
977
|
-
let params2 = call.params;
|
|
978
|
-
return this.addStarknetChain(params2);
|
|
979
|
-
}
|
|
980
|
-
case "wallet_switchStarknetChain": {
|
|
981
|
-
let params2 = call.params;
|
|
982
|
-
return this.switchStarknetChain(params2.chainId);
|
|
983
|
-
}
|
|
984
|
-
case "wallet_requestChainId":
|
|
985
|
-
if (!this.account) {
|
|
986
|
-
throw {
|
|
987
|
-
code: 63,
|
|
988
|
-
message: "An unexpected error occurred",
|
|
989
|
-
data: "Account not initialized"
|
|
990
|
-
};
|
|
991
|
-
}
|
|
992
|
-
return await this.account.getChainId();
|
|
993
|
-
case "wallet_deploymentData":
|
|
994
|
-
throw {
|
|
995
|
-
code: 63,
|
|
996
|
-
message: "An unexpected error occurred",
|
|
997
|
-
data: "wallet_deploymentData not implemented"
|
|
998
|
-
};
|
|
999
|
-
case "wallet_addInvokeTransaction":
|
|
1000
|
-
if (!this.account) {
|
|
1001
|
-
throw {
|
|
1002
|
-
code: 63,
|
|
1003
|
-
message: "An unexpected error occurred",
|
|
1004
|
-
data: "Account not initialized"
|
|
1005
|
-
};
|
|
1006
|
-
}
|
|
1007
|
-
let params = call.params;
|
|
1008
|
-
return await this.account.execute(
|
|
1009
|
-
params.calls.map((call2) => ({
|
|
1010
|
-
contractAddress: call2.contract_address,
|
|
1011
|
-
entrypoint: call2.entry_point,
|
|
1012
|
-
calldata: call2.calldata
|
|
1013
|
-
}))
|
|
1014
|
-
);
|
|
1015
|
-
case "wallet_addDeclareTransaction":
|
|
1016
|
-
throw {
|
|
1017
|
-
code: 63,
|
|
1018
|
-
message: "An unexpected error occurred",
|
|
1019
|
-
data: "wallet_addDeclareTransaction not implemented"
|
|
1020
|
-
};
|
|
1021
|
-
case "wallet_signTypedData": {
|
|
1022
|
-
if (!this.account) {
|
|
1023
|
-
throw {
|
|
1024
|
-
code: 63,
|
|
1025
|
-
message: "An unexpected error occurred",
|
|
1026
|
-
data: "Account not initialized"
|
|
1027
|
-
};
|
|
1028
|
-
}
|
|
1029
|
-
return await this.account.signMessage(call.params);
|
|
1030
|
-
}
|
|
1031
|
-
case "wallet_supportedSpecs":
|
|
1032
|
-
return [];
|
|
1033
|
-
case "wallet_supportedWalletApi":
|
|
1034
|
-
return [];
|
|
1035
|
-
default:
|
|
1036
|
-
throw {
|
|
1037
|
-
code: 63,
|
|
1038
|
-
message: "An unexpected error occurred",
|
|
1039
|
-
data: `Unknown RPC call type: ${call.type}`
|
|
1040
|
-
};
|
|
1041
|
-
}
|
|
1042
|
-
};
|
|
1043
|
-
on = (event, handler) => {
|
|
1044
|
-
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
1045
|
-
throw new Error(`Unknown event: ${event}`);
|
|
1046
|
-
}
|
|
1047
|
-
this.subscriptions.push({ type: event, handler });
|
|
1048
|
-
};
|
|
1049
|
-
off = (event, handler) => {
|
|
1050
|
-
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
1051
|
-
throw new Error(`Unknown event: ${event}`);
|
|
1052
|
-
}
|
|
1053
|
-
const idx = this.subscriptions.findIndex(
|
|
1054
|
-
(sub) => sub.type === event && sub.handler === handler
|
|
1055
|
-
);
|
|
1056
|
-
if (idx >= 0) {
|
|
1057
|
-
this.subscriptions.splice(idx, 1);
|
|
1058
|
-
}
|
|
1059
|
-
};
|
|
1060
|
-
emitNetworkChanged(chainId) {
|
|
1061
|
-
this.subscriptions.filter((sub) => sub.type === "networkChanged").forEach((sub) => {
|
|
1062
|
-
sub.handler(chainId);
|
|
1063
|
-
});
|
|
1064
|
-
}
|
|
1065
|
-
emitAccountsChanged(accounts) {
|
|
1066
|
-
this.subscriptions.filter((sub) => sub.type === "accountsChanged").forEach((sub) => {
|
|
1067
|
-
sub.handler(accounts);
|
|
1068
|
-
});
|
|
1069
|
-
}
|
|
1070
|
-
};
|
|
1071
|
-
var ControllerProvider = class extends BaseProvider {
|
|
821
|
+
class Me extends j {
|
|
1072
822
|
keychain;
|
|
1073
823
|
profile;
|
|
1074
824
|
options;
|
|
1075
825
|
iframes;
|
|
1076
826
|
selectedChain;
|
|
1077
827
|
chains;
|
|
1078
|
-
constructor(
|
|
1079
|
-
super()
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
this.iframes = {
|
|
1083
|
-
keychain: new KeychainIFrame({
|
|
1084
|
-
...options,
|
|
828
|
+
constructor(e) {
|
|
829
|
+
super(), this.selectedChain = e.defaultChainId, this.chains = /* @__PURE__ */ new Map(), this.iframes = {
|
|
830
|
+
keychain: new xe({
|
|
831
|
+
...e,
|
|
1085
832
|
onClose: this.keychain?.reset,
|
|
1086
|
-
onConnect: (
|
|
1087
|
-
this.keychain =
|
|
833
|
+
onConnect: (t) => {
|
|
834
|
+
this.keychain = t;
|
|
1088
835
|
}
|
|
1089
836
|
})
|
|
1090
|
-
};
|
|
1091
|
-
this.options = options;
|
|
1092
|
-
this.validateChains(options.chains);
|
|
1093
|
-
if (typeof window !== "undefined") {
|
|
1094
|
-
window.starknet_controller = this;
|
|
1095
|
-
}
|
|
837
|
+
}, this.options = e, this.validateChains(e.chains), typeof window < "u" && (window.starknet_controller = this);
|
|
1096
838
|
}
|
|
1097
839
|
async probe() {
|
|
1098
840
|
try {
|
|
1099
|
-
await this.waitForKeychain()
|
|
1100
|
-
|
|
1101
|
-
console.error(new NotReadyToConnect().message);
|
|
841
|
+
if (await this.waitForKeychain(), !this.keychain) {
|
|
842
|
+
console.error(new g().message);
|
|
1102
843
|
return;
|
|
1103
844
|
}
|
|
1104
|
-
const
|
|
1105
|
-
let
|
|
1106
|
-
this.account = new
|
|
845
|
+
const e = await this.keychain.probe(this.rpcUrl());
|
|
846
|
+
let t = e?.rpcUrl || this.rpcUrl();
|
|
847
|
+
this.account = new N(
|
|
1107
848
|
this,
|
|
1108
|
-
|
|
1109
|
-
|
|
849
|
+
t,
|
|
850
|
+
e.address,
|
|
1110
851
|
this.keychain,
|
|
1111
852
|
this.options,
|
|
1112
853
|
this.iframes.keychain
|
|
@@ -1116,11 +857,11 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
1116
857
|
return;
|
|
1117
858
|
}
|
|
1118
859
|
if (!this.iframes.profile) {
|
|
1119
|
-
const
|
|
1120
|
-
this.iframes.profile = new
|
|
860
|
+
const e = await this.keychain.username();
|
|
861
|
+
this.iframes.profile = new Ce({
|
|
1121
862
|
...this.options,
|
|
1122
|
-
onConnect: (
|
|
1123
|
-
this.profile =
|
|
863
|
+
onConnect: (t) => {
|
|
864
|
+
this.profile = t;
|
|
1124
865
|
},
|
|
1125
866
|
methods: {
|
|
1126
867
|
openSettings: () => this.openSettings.bind(this),
|
|
@@ -1128,89 +869,64 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
1128
869
|
openExecute: () => this.openExecute.bind(this)
|
|
1129
870
|
},
|
|
1130
871
|
rpcUrl: this.rpcUrl(),
|
|
1131
|
-
username,
|
|
872
|
+
username: e,
|
|
1132
873
|
version: this.version
|
|
1133
874
|
});
|
|
1134
875
|
}
|
|
1135
876
|
return this.account;
|
|
1136
877
|
}
|
|
1137
878
|
async connect() {
|
|
1138
|
-
if (this.account)
|
|
879
|
+
if (this.account)
|
|
1139
880
|
return this.account;
|
|
1140
|
-
}
|
|
1141
881
|
if (!this.keychain || !this.iframes.keychain) {
|
|
1142
|
-
console.error(new
|
|
882
|
+
console.error(new g().message);
|
|
1143
883
|
return;
|
|
1144
884
|
}
|
|
1145
|
-
|
|
1146
|
-
const ok = await document.hasStorageAccess();
|
|
1147
|
-
if (!ok) {
|
|
1148
|
-
await document.requestStorageAccess();
|
|
1149
|
-
}
|
|
1150
|
-
}
|
|
1151
|
-
this.iframes.keychain.open();
|
|
885
|
+
document.hasStorageAccess && (await document.hasStorageAccess() || await document.requestStorageAccess()), this.iframes.keychain.open();
|
|
1152
886
|
try {
|
|
1153
|
-
let
|
|
887
|
+
let e = await this.keychain.connect(
|
|
1154
888
|
this.options.policies || {},
|
|
1155
889
|
this.rpcUrl()
|
|
1156
890
|
);
|
|
1157
|
-
if (
|
|
1158
|
-
throw new Error(
|
|
1159
|
-
|
|
1160
|
-
response = response;
|
|
1161
|
-
this.account = new account_default(
|
|
891
|
+
if (e.code !== A.SUCCESS)
|
|
892
|
+
throw new Error(e.message);
|
|
893
|
+
return e = e, this.account = new N(
|
|
1162
894
|
this,
|
|
1163
895
|
this.rpcUrl(),
|
|
1164
|
-
|
|
896
|
+
e.address,
|
|
1165
897
|
this.keychain,
|
|
1166
898
|
this.options,
|
|
1167
899
|
this.iframes.keychain
|
|
1168
|
-
);
|
|
1169
|
-
return this.account;
|
|
900
|
+
), this.account;
|
|
1170
901
|
} catch (e) {
|
|
1171
902
|
console.log(e);
|
|
1172
903
|
} finally {
|
|
1173
904
|
this.iframes.keychain.close();
|
|
1174
905
|
}
|
|
1175
906
|
}
|
|
1176
|
-
async switchStarknetChain(
|
|
1177
|
-
if (!this.keychain || !this.iframes.keychain)
|
|
1178
|
-
console.error(new
|
|
1179
|
-
return false;
|
|
1180
|
-
}
|
|
907
|
+
async switchStarknetChain(e) {
|
|
908
|
+
if (!this.keychain || !this.iframes.keychain)
|
|
909
|
+
return console.error(new g().message), !1;
|
|
1181
910
|
try {
|
|
1182
|
-
this.selectedChain =
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
await this.keychain.switchChain(this.rpcUrl());
|
|
1188
|
-
await this.profile?.switchChain(this.rpcUrl());
|
|
1189
|
-
} catch (e) {
|
|
1190
|
-
console.error(e);
|
|
1191
|
-
return false;
|
|
911
|
+
if (this.selectedChain = e, (await this.keychain.probe(this.rpcUrl())).rpcUrl === this.rpcUrl())
|
|
912
|
+
return !0;
|
|
913
|
+
await this.keychain.switchChain(this.rpcUrl()), await this.profile?.switchChain(this.rpcUrl());
|
|
914
|
+
} catch (t) {
|
|
915
|
+
return console.error(t), !1;
|
|
1192
916
|
}
|
|
1193
|
-
this.emitNetworkChanged(
|
|
1194
|
-
return true;
|
|
917
|
+
return this.emitNetworkChanged(e), !0;
|
|
1195
918
|
}
|
|
1196
|
-
addStarknetChain(
|
|
1197
|
-
return Promise.resolve(
|
|
919
|
+
addStarknetChain(e) {
|
|
920
|
+
return Promise.resolve(!0);
|
|
1198
921
|
}
|
|
1199
922
|
async disconnect() {
|
|
1200
923
|
if (!this.keychain) {
|
|
1201
|
-
console.error(new
|
|
924
|
+
console.error(new g().message);
|
|
1202
925
|
return;
|
|
1203
926
|
}
|
|
1204
|
-
|
|
1205
|
-
const ok = await document.hasStorageAccess();
|
|
1206
|
-
if (!ok) {
|
|
1207
|
-
await document.requestStorageAccess();
|
|
1208
|
-
}
|
|
1209
|
-
}
|
|
1210
|
-
this.account = void 0;
|
|
1211
|
-
return this.keychain.disconnect();
|
|
927
|
+
return document.hasStorageAccess && (await document.hasStorageAccess() || await document.requestStorageAccess()), this.account = void 0, this.keychain.disconnect();
|
|
1212
928
|
}
|
|
1213
|
-
async openProfile(
|
|
929
|
+
async openProfile(e = "inventory") {
|
|
1214
930
|
if (!this.profile || !this.iframes.profile?.url) {
|
|
1215
931
|
console.error("Profile is not ready");
|
|
1216
932
|
return;
|
|
@@ -1219,10 +935,9 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
1219
935
|
console.error("Account is not ready");
|
|
1220
936
|
return;
|
|
1221
937
|
}
|
|
1222
|
-
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${
|
|
1223
|
-
this.iframes.profile.open();
|
|
938
|
+
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${e}`), this.iframes.profile.open();
|
|
1224
939
|
}
|
|
1225
|
-
async openProfileTo(
|
|
940
|
+
async openProfileTo(e) {
|
|
1226
941
|
if (!this.profile || !this.iframes.profile?.url) {
|
|
1227
942
|
console.error("Profile is not ready");
|
|
1228
943
|
return;
|
|
@@ -1231,10 +946,9 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
1231
946
|
console.error("Account is not ready");
|
|
1232
947
|
return;
|
|
1233
948
|
}
|
|
1234
|
-
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${
|
|
1235
|
-
this.iframes.profile.open();
|
|
949
|
+
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${e}`), this.iframes.profile.open();
|
|
1236
950
|
}
|
|
1237
|
-
async openProfileAt(
|
|
951
|
+
async openProfileAt(e) {
|
|
1238
952
|
if (!this.profile || !this.iframes.profile?.url) {
|
|
1239
953
|
console.error("Profile is not ready");
|
|
1240
954
|
return;
|
|
@@ -1243,181 +957,127 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
1243
957
|
console.error("Account is not ready");
|
|
1244
958
|
return;
|
|
1245
959
|
}
|
|
1246
|
-
this.profile.navigate(
|
|
1247
|
-
this.iframes.profile.open();
|
|
960
|
+
this.profile.navigate(e), this.iframes.profile.open();
|
|
1248
961
|
}
|
|
1249
962
|
async openSettings() {
|
|
1250
|
-
if (!this.keychain || !this.iframes.keychain)
|
|
1251
|
-
console.error(new
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
this.iframes.profile?.sendBackward();
|
|
1256
|
-
} else {
|
|
1257
|
-
this.iframes.profile?.close();
|
|
1258
|
-
}
|
|
1259
|
-
this.iframes.keychain.open();
|
|
1260
|
-
const res = await this.keychain.openSettings();
|
|
1261
|
-
this.iframes.keychain.close();
|
|
1262
|
-
this.iframes.profile?.sendForward?.();
|
|
1263
|
-
if (res && res.code === "NOT_CONNECTED" /* NOT_CONNECTED */) {
|
|
1264
|
-
return false;
|
|
1265
|
-
}
|
|
1266
|
-
return true;
|
|
963
|
+
if (!this.keychain || !this.iframes.keychain)
|
|
964
|
+
return console.error(new g().message), null;
|
|
965
|
+
this.iframes.profile?.sendBackward ? this.iframes.profile?.sendBackward() : this.iframes.profile?.close(), this.iframes.keychain.open();
|
|
966
|
+
const e = await this.keychain.openSettings();
|
|
967
|
+
return this.iframes.keychain.close(), this.iframes.profile?.sendForward?.(), !(e && e.code === A.NOT_CONNECTED);
|
|
1267
968
|
}
|
|
1268
|
-
revoke(
|
|
1269
|
-
|
|
1270
|
-
console.error(new NotReadyToConnect().message);
|
|
1271
|
-
return null;
|
|
1272
|
-
}
|
|
1273
|
-
return this.keychain.revoke(origin);
|
|
969
|
+
revoke(e, t) {
|
|
970
|
+
return this.keychain ? this.keychain.revoke(e) : (console.error(new g().message), null);
|
|
1274
971
|
}
|
|
1275
972
|
rpcUrl() {
|
|
1276
|
-
const
|
|
1277
|
-
if (!
|
|
1278
|
-
const
|
|
1279
|
-
(
|
|
973
|
+
const e = this.chains.get(this.selectedChain);
|
|
974
|
+
if (!e) {
|
|
975
|
+
const t = Array.from(this.chains.keys()).map(
|
|
976
|
+
(a) => M.decodeShortString(a)
|
|
1280
977
|
);
|
|
1281
978
|
throw new Error(
|
|
1282
|
-
`Chain not found: ${
|
|
979
|
+
`Chain not found: ${M.decodeShortString(this.selectedChain)}. Available chains: ${t.join(", ")}`
|
|
1283
980
|
);
|
|
1284
981
|
}
|
|
1285
|
-
return
|
|
982
|
+
return e.rpcUrl;
|
|
1286
983
|
}
|
|
1287
984
|
username() {
|
|
1288
985
|
if (!this.keychain) {
|
|
1289
|
-
console.error(new
|
|
986
|
+
console.error(new g().message);
|
|
1290
987
|
return;
|
|
1291
988
|
}
|
|
1292
989
|
return this.keychain.username();
|
|
1293
990
|
}
|
|
1294
991
|
openPurchaseCredits() {
|
|
1295
992
|
if (!this.keychain || !this.iframes.keychain) {
|
|
1296
|
-
console.error(new
|
|
993
|
+
console.error(new g().message);
|
|
1297
994
|
return;
|
|
1298
995
|
}
|
|
1299
996
|
if (!this.iframes.profile) {
|
|
1300
997
|
console.error("Profile is not ready");
|
|
1301
998
|
return;
|
|
1302
999
|
}
|
|
1303
|
-
this.iframes.profile.close();
|
|
1304
|
-
this.iframes.keychain.open();
|
|
1305
|
-
this.keychain.openPurchaseCredits();
|
|
1000
|
+
this.iframes.profile.close(), this.iframes.keychain.open(), this.keychain.openPurchaseCredits();
|
|
1306
1001
|
}
|
|
1307
|
-
async openExecute(
|
|
1002
|
+
async openExecute(e, t) {
|
|
1308
1003
|
if (!this.keychain || !this.iframes.keychain) {
|
|
1309
|
-
console.error(new
|
|
1004
|
+
console.error(new g().message);
|
|
1310
1005
|
return;
|
|
1311
1006
|
}
|
|
1312
1007
|
if (!this.iframes.profile) {
|
|
1313
1008
|
console.error("Profile is not ready");
|
|
1314
1009
|
return;
|
|
1315
1010
|
}
|
|
1316
|
-
let
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
this.iframes.profile?.sendBackward();
|
|
1321
|
-
this.iframes.keychain.open();
|
|
1322
|
-
this.iframes.profile?.close();
|
|
1323
|
-
const res = await this.keychain.execute(calls, void 0, void 0, true);
|
|
1324
|
-
this.iframes.profile?.open();
|
|
1325
|
-
this.iframes.keychain.close();
|
|
1326
|
-
this.iframes.profile?.sendForward();
|
|
1327
|
-
if (chainId) {
|
|
1328
|
-
this.switchStarknetChain(currentChainId);
|
|
1329
|
-
}
|
|
1330
|
-
return !(res && (res.code === "NOT_CONNECTED" /* NOT_CONNECTED */ || res.code === "CANCELED" /* CANCELED */));
|
|
1011
|
+
let a = this.selectedChain;
|
|
1012
|
+
t && this.switchStarknetChain(t), this.iframes.profile?.sendBackward(), this.iframes.keychain.open(), this.iframes.profile?.close();
|
|
1013
|
+
const n = await this.keychain.execute(e, void 0, void 0, !0);
|
|
1014
|
+
return this.iframes.profile?.open(), this.iframes.keychain.close(), this.iframes.profile?.sendForward(), t && this.switchStarknetChain(a), !(n && (n.code === A.NOT_CONNECTED || n.code === A.CANCELED));
|
|
1331
1015
|
}
|
|
1332
1016
|
async delegateAccount() {
|
|
1333
|
-
|
|
1334
|
-
console.error(new NotReadyToConnect().message);
|
|
1335
|
-
return null;
|
|
1336
|
-
}
|
|
1337
|
-
return await this.keychain.delegateAccount();
|
|
1017
|
+
return this.keychain ? await this.keychain.delegateAccount() : (console.error(new g().message), null);
|
|
1338
1018
|
}
|
|
1339
|
-
async validateChains(
|
|
1340
|
-
for (const
|
|
1019
|
+
async validateChains(e) {
|
|
1020
|
+
for (const t of e)
|
|
1341
1021
|
try {
|
|
1342
|
-
const
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
console.error(`Failed to parse chainId for ${chain.rpcUrl}:`, error);
|
|
1022
|
+
const a = new URL(t.rpcUrl), n = await K(a);
|
|
1023
|
+
this.chains.set(n, t);
|
|
1024
|
+
} catch (a) {
|
|
1025
|
+
console.error(`Failed to parse chainId for ${t.rpcUrl}:`, a);
|
|
1347
1026
|
}
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
`Selected chain ${this.selectedChain} not found in configured chains. Available chains: ${Array.from(this.chains.keys()).join(", ")}`
|
|
1352
|
-
);
|
|
1353
|
-
}
|
|
1027
|
+
this.chains.has(this.selectedChain) || console.warn(
|
|
1028
|
+
`Selected chain ${this.selectedChain} not found in configured chains. Available chains: ${Array.from(this.chains.keys()).join(", ")}`
|
|
1029
|
+
);
|
|
1354
1030
|
}
|
|
1355
1031
|
waitForKeychain({
|
|
1356
|
-
timeout = 5e4,
|
|
1357
|
-
interval = 100
|
|
1032
|
+
timeout: e = 5e4,
|
|
1033
|
+
interval: t = 100
|
|
1358
1034
|
} = {}) {
|
|
1359
|
-
return new Promise((
|
|
1360
|
-
const
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
clearInterval(id);
|
|
1364
|
-
reject(new Error("Timeout waiting for keychain"));
|
|
1035
|
+
return new Promise((a, n) => {
|
|
1036
|
+
const o = Date.now(), c = setInterval(() => {
|
|
1037
|
+
if (Date.now() - o > e) {
|
|
1038
|
+
clearInterval(c), n(new Error("Timeout waiting for keychain"));
|
|
1365
1039
|
return;
|
|
1366
1040
|
}
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
resolve();
|
|
1370
|
-
}, interval);
|
|
1041
|
+
this.keychain && (clearInterval(c), a());
|
|
1042
|
+
}, t);
|
|
1371
1043
|
});
|
|
1372
1044
|
}
|
|
1373
|
-
}
|
|
1374
|
-
|
|
1375
|
-
async function
|
|
1376
|
-
if (!
|
|
1045
|
+
}
|
|
1046
|
+
const R = /* @__PURE__ */ new Map();
|
|
1047
|
+
async function U(r) {
|
|
1048
|
+
if (!r.addresses?.length && !r.usernames?.length)
|
|
1377
1049
|
return { results: [] };
|
|
1378
|
-
}
|
|
1379
|
-
const response = await fetch(`${API_URL}/lookup`, {
|
|
1050
|
+
const e = await fetch(`${q}/lookup`, {
|
|
1380
1051
|
method: "POST",
|
|
1381
1052
|
headers: {
|
|
1382
1053
|
"Content-Type": "application/json"
|
|
1383
1054
|
},
|
|
1384
|
-
body: JSON.stringify(
|
|
1055
|
+
body: JSON.stringify(r)
|
|
1385
1056
|
});
|
|
1386
|
-
if (!
|
|
1387
|
-
throw new Error(`HTTP error! status: ${
|
|
1388
|
-
|
|
1389
|
-
return response.json();
|
|
1057
|
+
if (!e.ok)
|
|
1058
|
+
throw new Error(`HTTP error! status: ${e.status}`);
|
|
1059
|
+
return e.json();
|
|
1390
1060
|
}
|
|
1391
|
-
async function
|
|
1392
|
-
const
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
});
|
|
1398
|
-
}
|
|
1399
|
-
return new Map(
|
|
1400
|
-
usernames.map((name) => [name, cache.get(name)]).filter((entry) => entry[1] !== void 0)
|
|
1061
|
+
async function Ne(r) {
|
|
1062
|
+
const e = r.filter((t) => !R.has(t));
|
|
1063
|
+
return e.length > 0 && (await U({ usernames: e })).results.forEach((a) => {
|
|
1064
|
+
R.set(a.username, a.addresses[0]);
|
|
1065
|
+
}), new Map(
|
|
1066
|
+
r.map((t) => [t, R.get(t)]).filter((t) => t[1] !== void 0)
|
|
1401
1067
|
);
|
|
1402
1068
|
}
|
|
1403
|
-
async function
|
|
1404
|
-
|
|
1405
|
-
const
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
});
|
|
1413
|
-
}
|
|
1414
|
-
return new Map(
|
|
1415
|
-
addresses.map((addr) => [addr, cache.get(addr)]).filter((entry) => entry[1] !== void 0)
|
|
1069
|
+
async function Be(r) {
|
|
1070
|
+
r = r.map(Y.toHex);
|
|
1071
|
+
const e = r.filter((t) => !R.has(t));
|
|
1072
|
+
return e.length > 0 && (await U({
|
|
1073
|
+
addresses: e
|
|
1074
|
+
})).results.forEach((a) => {
|
|
1075
|
+
R.set(a.addresses[0], a.username);
|
|
1076
|
+
}), new Map(
|
|
1077
|
+
r.map((t) => [t, R.get(t)]).filter((t) => t[1] !== void 0)
|
|
1416
1078
|
);
|
|
1417
1079
|
}
|
|
1418
|
-
|
|
1419
|
-
// ../../node_modules/.pnpm/@cartridge+presets@https+++codeload.github.com+cartridge-gg+presets+tar.gz+b7d379e/node_modules/@cartridge/presets/dist/index.js
|
|
1420
|
-
var configs = {
|
|
1080
|
+
var L = {
|
|
1421
1081
|
"blob-arena": {
|
|
1422
1082
|
origin: "blobarena.xyz",
|
|
1423
1083
|
theme: {
|
|
@@ -1427,6 +1087,249 @@ var configs = {
|
|
|
1427
1087
|
cover: "https://static.cartridge.gg/presets/blob-arena/cover.png",
|
|
1428
1088
|
icon: "https://static.cartridge.gg/presets/blob-arena/icon.png",
|
|
1429
1089
|
name: "Blob Arena"
|
|
1090
|
+
},
|
|
1091
|
+
chains: {
|
|
1092
|
+
SN_MAIN: {
|
|
1093
|
+
policies: {
|
|
1094
|
+
contracts: {
|
|
1095
|
+
"0x0170d4eb49bf626342a15cf77b0809baebee30cafbf7884b2d89bbb27e689f6d": {
|
|
1096
|
+
name: "Lobby Contract",
|
|
1097
|
+
description: "Game invites and responses",
|
|
1098
|
+
methods: [
|
|
1099
|
+
{
|
|
1100
|
+
name: "Send Invite",
|
|
1101
|
+
entrypoint: "send_invite",
|
|
1102
|
+
description: "Send users an invite"
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
name: "Rescind Invite",
|
|
1106
|
+
entrypoint: "rescind_invite",
|
|
1107
|
+
description: "Rescind a previously sent invite"
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
name: "Respond Invite",
|
|
1111
|
+
entrypoint: "respond_invite",
|
|
1112
|
+
description: "Respond to a received invite"
|
|
1113
|
+
},
|
|
1114
|
+
{
|
|
1115
|
+
name: "Rescind Response",
|
|
1116
|
+
entrypoint: "rescind_response",
|
|
1117
|
+
description: "Rescind a previous response to an invite"
|
|
1118
|
+
},
|
|
1119
|
+
{
|
|
1120
|
+
name: "Reject Invite",
|
|
1121
|
+
entrypoint: "reject_invite",
|
|
1122
|
+
description: "Reject a received invite"
|
|
1123
|
+
},
|
|
1124
|
+
{
|
|
1125
|
+
name: "Reject Response",
|
|
1126
|
+
entrypoint: "reject_response",
|
|
1127
|
+
description: "Reject a response to an invite"
|
|
1128
|
+
},
|
|
1129
|
+
{
|
|
1130
|
+
name: "Accept Response",
|
|
1131
|
+
entrypoint: "accept_response",
|
|
1132
|
+
description: "Accept a response to an invite"
|
|
1133
|
+
}
|
|
1134
|
+
]
|
|
1135
|
+
},
|
|
1136
|
+
"0x02e4769ec3ac16456e6c6f806efc90f49d46df2a07b431a5a5d8b62e4fb21633": {
|
|
1137
|
+
name: "Game Contract",
|
|
1138
|
+
description: "Manages core gameplay interactions",
|
|
1139
|
+
methods: [
|
|
1140
|
+
{
|
|
1141
|
+
name: "Start Game",
|
|
1142
|
+
entrypoint: "start",
|
|
1143
|
+
description: "Start the game"
|
|
1144
|
+
},
|
|
1145
|
+
{
|
|
1146
|
+
name: "Commit Attack",
|
|
1147
|
+
entrypoint: "commit",
|
|
1148
|
+
description: "Commit an attack in the game"
|
|
1149
|
+
},
|
|
1150
|
+
{
|
|
1151
|
+
name: "Reveal Attack",
|
|
1152
|
+
entrypoint: "reveal",
|
|
1153
|
+
description: "Reveal the committed attack in the game"
|
|
1154
|
+
},
|
|
1155
|
+
{
|
|
1156
|
+
name: "Run Round",
|
|
1157
|
+
entrypoint: "run",
|
|
1158
|
+
description: "Run the next round of the game"
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
name: "Forfeit",
|
|
1162
|
+
entrypoint: "forfeit",
|
|
1163
|
+
description: "Forfeit the game"
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
name: "Kick Player",
|
|
1167
|
+
entrypoint: "kick_player",
|
|
1168
|
+
description: "Kick an inactive player from the game"
|
|
1169
|
+
}
|
|
1170
|
+
]
|
|
1171
|
+
},
|
|
1172
|
+
"0x220896431692627f8d0caf9ac45e71c3b3d88c7c009acff756ff2081030a2b1": {
|
|
1173
|
+
name: "Betsy Contract",
|
|
1174
|
+
description: "Wager operations",
|
|
1175
|
+
methods: [
|
|
1176
|
+
{
|
|
1177
|
+
name: "Set Owner's Fee",
|
|
1178
|
+
entrypoint: "set_owners_fee",
|
|
1179
|
+
description: "Set the owner's fee"
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
name: "Create Bet",
|
|
1183
|
+
entrypoint: "create",
|
|
1184
|
+
description: "Create a bet"
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
name: "Accept Bet",
|
|
1188
|
+
entrypoint: "accept",
|
|
1189
|
+
description: "Accept a bet"
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
name: "Reject Bet",
|
|
1193
|
+
entrypoint: "reject",
|
|
1194
|
+
description: "Reject a bet"
|
|
1195
|
+
},
|
|
1196
|
+
{
|
|
1197
|
+
name: "Revoke Bet",
|
|
1198
|
+
entrypoint: "revoke",
|
|
1199
|
+
description: "Revoke a bet"
|
|
1200
|
+
},
|
|
1201
|
+
{
|
|
1202
|
+
name: "Claim Win",
|
|
1203
|
+
entrypoint: "claim_win",
|
|
1204
|
+
description: "Claim the win"
|
|
1205
|
+
},
|
|
1206
|
+
{
|
|
1207
|
+
name: "Approve Release",
|
|
1208
|
+
entrypoint: "approve_release",
|
|
1209
|
+
description: "Approve fund release"
|
|
1210
|
+
},
|
|
1211
|
+
{
|
|
1212
|
+
name: "Revoke Release",
|
|
1213
|
+
entrypoint: "revoke_release",
|
|
1214
|
+
description: "Revoke fund release"
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
name: "Release Funds",
|
|
1218
|
+
entrypoint: "release_funds",
|
|
1219
|
+
description: "Release funds"
|
|
1220
|
+
}
|
|
1221
|
+
]
|
|
1222
|
+
},
|
|
1223
|
+
"0x56e5ae9af38c6eb85c226fbadaa31e37b5ee1a5401a9c371f4e7f154b76dce3": {
|
|
1224
|
+
name: "Arcade Contract",
|
|
1225
|
+
description: "Minting of arcade Bloberts",
|
|
1226
|
+
methods: [
|
|
1227
|
+
{
|
|
1228
|
+
name: "Mint Arcade Blobert",
|
|
1229
|
+
entrypoint: "mint",
|
|
1230
|
+
description: "Mint arcade blobert"
|
|
1231
|
+
}
|
|
1232
|
+
]
|
|
1233
|
+
},
|
|
1234
|
+
"0x05a929a543e55877c58973a677fbd3b145f5057b39b87c89d879c87715878d52": {
|
|
1235
|
+
name: "AMMA Contract",
|
|
1236
|
+
description: "Minting of AMMA Bloberts",
|
|
1237
|
+
methods: [
|
|
1238
|
+
{
|
|
1239
|
+
name: "Mint AMMA Blobert",
|
|
1240
|
+
entrypoint: "mint",
|
|
1241
|
+
description: "Mint AMMA blobert"
|
|
1242
|
+
}
|
|
1243
|
+
]
|
|
1244
|
+
},
|
|
1245
|
+
"0x14aefc8245c5f2c17204857372944aba413ec639547359b629682c542eca555": {
|
|
1246
|
+
name: "PVE Contract",
|
|
1247
|
+
description: "Arcade mode contract",
|
|
1248
|
+
methods: [
|
|
1249
|
+
{
|
|
1250
|
+
name: "Start Game",
|
|
1251
|
+
entrypoint: "start_game",
|
|
1252
|
+
description: "Start the game"
|
|
1253
|
+
},
|
|
1254
|
+
{
|
|
1255
|
+
name: "Attack",
|
|
1256
|
+
entrypoint: "attack",
|
|
1257
|
+
description: "Submit an attack"
|
|
1258
|
+
},
|
|
1259
|
+
{
|
|
1260
|
+
name: "Start Challenge",
|
|
1261
|
+
entrypoint: "start_challenge",
|
|
1262
|
+
description: "Start a challenge"
|
|
1263
|
+
},
|
|
1264
|
+
{
|
|
1265
|
+
name: "Next Challenge Round",
|
|
1266
|
+
entrypoint: "next_challenge_round",
|
|
1267
|
+
description: "Go forward"
|
|
1268
|
+
},
|
|
1269
|
+
{
|
|
1270
|
+
name: "Respawn Challenge",
|
|
1271
|
+
entrypoint: "respawn_challenge",
|
|
1272
|
+
description: "Restart a challenge"
|
|
1273
|
+
},
|
|
1274
|
+
{
|
|
1275
|
+
name: "End Challenge",
|
|
1276
|
+
entrypoint: "end_challenge",
|
|
1277
|
+
description: "End a challenge"
|
|
1278
|
+
},
|
|
1279
|
+
{
|
|
1280
|
+
name: "Claim Free Game",
|
|
1281
|
+
entrypoint: "claim_free_game",
|
|
1282
|
+
description: "Claim an arcade game"
|
|
1283
|
+
}
|
|
1284
|
+
]
|
|
1285
|
+
},
|
|
1286
|
+
"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7": {
|
|
1287
|
+
name: "ETH Token",
|
|
1288
|
+
description: "ETH ERC20 approval",
|
|
1289
|
+
methods: [
|
|
1290
|
+
{
|
|
1291
|
+
name: "Approve",
|
|
1292
|
+
entrypoint: "approve",
|
|
1293
|
+
description: "ETH allowance"
|
|
1294
|
+
}
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
1297
|
+
"0x072599086bffce6593a2e08169c21d23564f08be1e1d0b8e05a9768f20469a3f": {
|
|
1298
|
+
name: "LORDS Token",
|
|
1299
|
+
description: "LORDS ERC20 approval",
|
|
1300
|
+
methods: [
|
|
1301
|
+
{
|
|
1302
|
+
name: "Approve",
|
|
1303
|
+
entrypoint: "approve",
|
|
1304
|
+
description: "LORDS allowance"
|
|
1305
|
+
}
|
|
1306
|
+
]
|
|
1307
|
+
},
|
|
1308
|
+
"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d": {
|
|
1309
|
+
name: "STRK Token",
|
|
1310
|
+
description: "STRK ERC20 approval",
|
|
1311
|
+
methods: [
|
|
1312
|
+
{
|
|
1313
|
+
name: "Approve",
|
|
1314
|
+
entrypoint: "approve",
|
|
1315
|
+
description: "STRK allowance"
|
|
1316
|
+
}
|
|
1317
|
+
]
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
},
|
|
1324
|
+
"blob-arena-amma": {
|
|
1325
|
+
origin: "blobarena.xyz",
|
|
1326
|
+
theme: {
|
|
1327
|
+
colors: {
|
|
1328
|
+
primary: "#D7B000"
|
|
1329
|
+
},
|
|
1330
|
+
cover: "https://static.cartridge.gg/presets/blob-arena-amma/cover.png",
|
|
1331
|
+
icon: "https://static.cartridge.gg/presets/blob-arena-amma/icon.png",
|
|
1332
|
+
name: "Blob Arena AMMA"
|
|
1430
1333
|
}
|
|
1431
1334
|
},
|
|
1432
1335
|
budokan: {
|
|
@@ -1435,7 +1338,7 @@ var configs = {
|
|
|
1435
1338
|
SN_MAIN: {
|
|
1436
1339
|
policies: {
|
|
1437
1340
|
contracts: {
|
|
1438
|
-
"
|
|
1341
|
+
"0x05fb427962210ac4b3be5e23419b0d9e91ca6a9c57b0665d2ca7783092506f6e": {
|
|
1439
1342
|
name: "Budokan",
|
|
1440
1343
|
methods: [
|
|
1441
1344
|
{
|
|
@@ -1471,6 +1374,17 @@ var configs = {
|
|
|
1471
1374
|
name: "Budokan"
|
|
1472
1375
|
}
|
|
1473
1376
|
},
|
|
1377
|
+
"bytebeasts-tamagotchi": {
|
|
1378
|
+
origin: "bytebeasts.games",
|
|
1379
|
+
theme: {
|
|
1380
|
+
colors: {
|
|
1381
|
+
primary: "#ECECDA"
|
|
1382
|
+
},
|
|
1383
|
+
cover: "https://static.cartridge.gg/presets/bytebeasts-tamagotchi/cover.png",
|
|
1384
|
+
icon: "https://static.cartridge.gg/presets/bytebeasts-tamagotchi/icon.png",
|
|
1385
|
+
name: "ByteBeasts-Tamagotchi"
|
|
1386
|
+
}
|
|
1387
|
+
},
|
|
1474
1388
|
cartridge: {
|
|
1475
1389
|
origin: "*",
|
|
1476
1390
|
theme: {
|
|
@@ -1482,6 +1396,112 @@ var configs = {
|
|
|
1482
1396
|
}
|
|
1483
1397
|
}
|
|
1484
1398
|
},
|
|
1399
|
+
coloniz: {
|
|
1400
|
+
origin: ["coloniz.xyz"],
|
|
1401
|
+
chains: {
|
|
1402
|
+
SN_MAIN: {
|
|
1403
|
+
policies: {
|
|
1404
|
+
contracts: {
|
|
1405
|
+
"0x430d7262fb9ad2c830d793471c3a07e08afe54f9a5f0d28db48712bc918f5f": {
|
|
1406
|
+
name: "Tokenbound Sessions",
|
|
1407
|
+
methods: [
|
|
1408
|
+
{
|
|
1409
|
+
name: "Execute",
|
|
1410
|
+
entrypoint: "execute",
|
|
1411
|
+
description: "Session proxy"
|
|
1412
|
+
}
|
|
1413
|
+
]
|
|
1414
|
+
},
|
|
1415
|
+
"0x56977e22ad4751ea5b3df958da3080971c7f26036127452b98c154fbea86d06": {
|
|
1416
|
+
name: "Profile Creation",
|
|
1417
|
+
methods: [
|
|
1418
|
+
{
|
|
1419
|
+
name: "Create A Coloniz Profile",
|
|
1420
|
+
entrypoint: "create_profile",
|
|
1421
|
+
description: "Create a profile on Coloniz"
|
|
1422
|
+
}
|
|
1423
|
+
]
|
|
1424
|
+
},
|
|
1425
|
+
"0x5cc4644374e3f91b52cfe64937dacaec91b2d81fe2f146a860ab5b3bb751ce8": {
|
|
1426
|
+
name: "Handles Minting",
|
|
1427
|
+
methods: [
|
|
1428
|
+
{
|
|
1429
|
+
name: "Mint Handle",
|
|
1430
|
+
entrypoint: "mint_handle",
|
|
1431
|
+
description: "Mint Coloniz Profile Handle"
|
|
1432
|
+
}
|
|
1433
|
+
]
|
|
1434
|
+
},
|
|
1435
|
+
"0x79914426e3cc5336c479ee87770380ceeda4b60496657e70c3ee7d57a992226": {
|
|
1436
|
+
name: "Handle Registry",
|
|
1437
|
+
methods: [
|
|
1438
|
+
{
|
|
1439
|
+
name: "Link Handle",
|
|
1440
|
+
entrypoint: "link",
|
|
1441
|
+
description: "Link handle to Coloniz Profile"
|
|
1442
|
+
}
|
|
1443
|
+
]
|
|
1444
|
+
}
|
|
1445
|
+
},
|
|
1446
|
+
messages: [
|
|
1447
|
+
{
|
|
1448
|
+
name: "Sign in to Coloniz",
|
|
1449
|
+
description: "Sign the message to login to Coloniz",
|
|
1450
|
+
types: {
|
|
1451
|
+
StarknetDomain: [
|
|
1452
|
+
{
|
|
1453
|
+
name: "name",
|
|
1454
|
+
type: "shortstring"
|
|
1455
|
+
},
|
|
1456
|
+
{
|
|
1457
|
+
name: "version",
|
|
1458
|
+
type: "shortstring"
|
|
1459
|
+
},
|
|
1460
|
+
{
|
|
1461
|
+
name: "chainId",
|
|
1462
|
+
type: "shortstring"
|
|
1463
|
+
},
|
|
1464
|
+
{
|
|
1465
|
+
name: "revision",
|
|
1466
|
+
type: "shortstring"
|
|
1467
|
+
}
|
|
1468
|
+
],
|
|
1469
|
+
Signin: [
|
|
1470
|
+
{
|
|
1471
|
+
name: "content",
|
|
1472
|
+
type: "string"
|
|
1473
|
+
},
|
|
1474
|
+
{
|
|
1475
|
+
name: "nonce",
|
|
1476
|
+
type: "string"
|
|
1477
|
+
},
|
|
1478
|
+
{
|
|
1479
|
+
name: "timestamp",
|
|
1480
|
+
type: "string"
|
|
1481
|
+
}
|
|
1482
|
+
]
|
|
1483
|
+
},
|
|
1484
|
+
primaryType: "Signin",
|
|
1485
|
+
domain: {
|
|
1486
|
+
name: "Coloniz",
|
|
1487
|
+
version: "1",
|
|
1488
|
+
revision: "1",
|
|
1489
|
+
chainId: "SN_MAIN"
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
]
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1495
|
+
},
|
|
1496
|
+
theme: {
|
|
1497
|
+
colors: {
|
|
1498
|
+
primary: "#4285F4"
|
|
1499
|
+
},
|
|
1500
|
+
cover: "https://static.cartridge.gg/presets/coloniz/cover.png",
|
|
1501
|
+
icon: "https://static.cartridge.gg/presets/coloniz/icon.png",
|
|
1502
|
+
name: "Coloniz"
|
|
1503
|
+
}
|
|
1504
|
+
},
|
|
1485
1505
|
credit: {
|
|
1486
1506
|
origin: "*",
|
|
1487
1507
|
theme: {
|
|
@@ -1504,7 +1524,7 @@ var configs = {
|
|
|
1504
1524
|
SN_MAIN: {
|
|
1505
1525
|
policies: {
|
|
1506
1526
|
contracts: {
|
|
1507
|
-
"
|
|
1527
|
+
"0x0320f977f47f0885e376b781d9e244d9f59f10154ce844ae1815c919f0374726": {
|
|
1508
1528
|
name: "game_systems",
|
|
1509
1529
|
methods: [
|
|
1510
1530
|
{
|
|
@@ -1515,7 +1535,7 @@ var configs = {
|
|
|
1515
1535
|
}
|
|
1516
1536
|
]
|
|
1517
1537
|
},
|
|
1518
|
-
"
|
|
1538
|
+
"0x0062cfee20a5be4b305f610a23291aa27f3fca7a5fd14bd8e2d0389556003e12": {
|
|
1519
1539
|
name: "battle_systems",
|
|
1520
1540
|
methods: [
|
|
1521
1541
|
{
|
|
@@ -1523,7 +1543,7 @@ var configs = {
|
|
|
1523
1543
|
}
|
|
1524
1544
|
]
|
|
1525
1545
|
},
|
|
1526
|
-
"
|
|
1546
|
+
"0x00ae7393b60ad9fd5c26851341b9a4afe61c6ae34326dee79cf5d096e9f55a36": {
|
|
1527
1547
|
name: "draft_systems",
|
|
1528
1548
|
methods: [
|
|
1529
1549
|
{
|
|
@@ -1531,7 +1551,7 @@ var configs = {
|
|
|
1531
1551
|
}
|
|
1532
1552
|
]
|
|
1533
1553
|
},
|
|
1534
|
-
"
|
|
1554
|
+
"0x07c9a684813410b39c776c49544d8ecb2d39f0b91bd83ffec31ebc938e053e25": {
|
|
1535
1555
|
name: "map_systems",
|
|
1536
1556
|
methods: [
|
|
1537
1557
|
{
|
|
@@ -1541,14 +1561,6 @@ var configs = {
|
|
|
1541
1561
|
entrypoint: "select_node"
|
|
1542
1562
|
}
|
|
1543
1563
|
]
|
|
1544
|
-
},
|
|
1545
|
-
"0x0530d9693304c79b5b506aa2fa09c27681373d71b69a839378ff5fd108aa5fc6": {
|
|
1546
|
-
name: "tournament_component",
|
|
1547
|
-
methods: [
|
|
1548
|
-
{
|
|
1549
|
-
entrypoint: "enter_tournament"
|
|
1550
|
-
}
|
|
1551
|
-
]
|
|
1552
1564
|
}
|
|
1553
1565
|
}
|
|
1554
1566
|
}
|
|
@@ -2811,8 +2823,7 @@ var configs = {
|
|
|
2811
2823
|
name: "zKube"
|
|
2812
2824
|
}
|
|
2813
2825
|
}
|
|
2814
|
-
}
|
|
2815
|
-
var metadata = [
|
|
2826
|
+
}, Ie = [
|
|
2816
2827
|
{
|
|
2817
2828
|
name: "Wrapped BTC",
|
|
2818
2829
|
symbol: "WBTC",
|
|
@@ -2838,7 +2849,7 @@ var metadata = [
|
|
|
2838
2849
|
l2_token_address: "0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac",
|
|
2839
2850
|
sort_order: 3,
|
|
2840
2851
|
total_supply: null,
|
|
2841
|
-
hidden:
|
|
2852
|
+
hidden: !0,
|
|
2842
2853
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dc0ae733-5498-4afa-f475-48dba677aa00/logo"
|
|
2843
2854
|
},
|
|
2844
2855
|
{
|
|
@@ -2866,7 +2877,7 @@ var metadata = [
|
|
|
2866
2877
|
l2_token_address: "0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3",
|
|
2867
2878
|
sort_order: 4,
|
|
2868
2879
|
total_supply: null,
|
|
2869
|
-
hidden:
|
|
2880
|
+
hidden: !0,
|
|
2870
2881
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo"
|
|
2871
2882
|
},
|
|
2872
2883
|
{
|
|
@@ -2921,7 +2932,7 @@ var metadata = [
|
|
|
2921
2932
|
l2_token_address: "0x01fa2fb85f624600112040e1f3a848f53a37ed5a7385810063d5fe6887280333",
|
|
2922
2933
|
sort_order: 3,
|
|
2923
2934
|
total_supply: null,
|
|
2924
|
-
hidden:
|
|
2935
|
+
hidden: !0,
|
|
2925
2936
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/77612e4e-f7ee-4dba-2066-af321843ef00/logo"
|
|
2926
2937
|
},
|
|
2927
2938
|
{
|
|
@@ -2931,7 +2942,7 @@ var metadata = [
|
|
|
2931
2942
|
l2_token_address: "0x009c6b4fb13dfaa025c1383ed6190af8ed8cbb09d9588a3bb020feb152442406",
|
|
2932
2943
|
sort_order: 1,
|
|
2933
2944
|
total_supply: 649462235,
|
|
2934
|
-
hidden:
|
|
2945
|
+
hidden: !0,
|
|
2935
2946
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/eeaf0779-e492-474c-ef19-b27843525600/logo"
|
|
2936
2947
|
},
|
|
2937
2948
|
{
|
|
@@ -2941,7 +2952,7 @@ var metadata = [
|
|
|
2941
2952
|
l2_token_address: "0x0058efd0e73c33a848ffaa88738d128ebf0af98ea78cf3c14dc757bb02d39ffb",
|
|
2942
2953
|
sort_order: 1,
|
|
2943
2954
|
total_supply: null,
|
|
2944
|
-
hidden:
|
|
2955
|
+
hidden: !0,
|
|
2945
2956
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/98bea621-1e4f-4d63-9689-bdaef0d56500/logo"
|
|
2946
2957
|
},
|
|
2947
2958
|
{
|
|
@@ -2951,7 +2962,7 @@ var metadata = [
|
|
|
2951
2962
|
l2_token_address: "0x04578fffc279e61b5cb0267a5f8e24b6089d40f93158fbbad2cb23b8622c9233",
|
|
2952
2963
|
sort_order: 1,
|
|
2953
2964
|
total_supply: null,
|
|
2954
|
-
hidden:
|
|
2965
|
+
hidden: !0,
|
|
2955
2966
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cd6fe18a-25db-4de9-758a-daf3b364ea00/logo"
|
|
2956
2967
|
},
|
|
2957
2968
|
{
|
|
@@ -2970,7 +2981,7 @@ var metadata = [
|
|
|
2970
2981
|
l2_token_address: "0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113",
|
|
2971
2982
|
sort_order: 1,
|
|
2972
2983
|
total_supply: null,
|
|
2973
|
-
hidden:
|
|
2984
|
+
hidden: !0,
|
|
2974
2985
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/811f019a-0461-4cff-6c1e-442102863f00/logo"
|
|
2975
2986
|
},
|
|
2976
2987
|
{
|
|
@@ -2980,8 +2991,8 @@ var metadata = [
|
|
|
2980
2991
|
l2_token_address: "0x06f15ec4b6ff0b7f7a216c4b2ccdefc96cbf114d6242292ca82971592f62273b",
|
|
2981
2992
|
sort_order: 1,
|
|
2982
2993
|
total_supply: null,
|
|
2983
|
-
hidden:
|
|
2984
|
-
disabled:
|
|
2994
|
+
hidden: !0,
|
|
2995
|
+
disabled: !0
|
|
2985
2996
|
},
|
|
2986
2997
|
{
|
|
2987
2998
|
name: "StarkNet Token",
|
|
@@ -3017,7 +3028,7 @@ var metadata = [
|
|
|
3017
3028
|
l2_token_address: "0x023ed2ba4fb5709302c5dfd739fa7613359042f143286c115b6c7f7dc2601015",
|
|
3018
3029
|
sort_order: 1,
|
|
3019
3030
|
total_supply: 1e11,
|
|
3020
|
-
hidden:
|
|
3031
|
+
hidden: !0,
|
|
3021
3032
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2db5a2a6-c98e-4b80-35e0-31b489132100/logo"
|
|
3022
3033
|
},
|
|
3023
3034
|
{
|
|
@@ -3045,7 +3056,7 @@ var metadata = [
|
|
|
3045
3056
|
l2_token_address: "0x498edfaf50ca5855666a700c25dd629d577eb9afccdf3b5977aec79aee55ada",
|
|
3046
3057
|
sort_order: 3,
|
|
3047
3058
|
total_supply: null,
|
|
3048
|
-
hidden:
|
|
3059
|
+
hidden: !1,
|
|
3049
3060
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bd6d156-f509-4b51-5dfc-3ee566143600/logo"
|
|
3050
3061
|
},
|
|
3051
3062
|
{
|
|
@@ -3055,7 +3066,7 @@ var metadata = [
|
|
|
3055
3066
|
l2_token_address: "0xe5f10eddc01699dc899a30dbc3c9858148fa4aa0a47c0ffd85f887ffc4653e",
|
|
3056
3067
|
sort_order: 1,
|
|
3057
3068
|
total_supply: 1,
|
|
3058
|
-
hidden:
|
|
3069
|
+
hidden: !0,
|
|
3059
3070
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/90868d05-cb75-4c42-278c-5a540db2cf00/logo"
|
|
3060
3071
|
},
|
|
3061
3072
|
{
|
|
@@ -3065,7 +3076,7 @@ var metadata = [
|
|
|
3065
3076
|
l2_token_address: "0x01bfe97d729138fc7c2d93c77d6d1d8a24708d5060608017d9b384adf38f04c7",
|
|
3066
3077
|
sort_order: 1,
|
|
3067
3078
|
total_supply: null,
|
|
3068
|
-
hidden:
|
|
3079
|
+
hidden: !0,
|
|
3069
3080
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/275f0fa8-a691-471c-ace6-0eb0315dde00/logo"
|
|
3070
3081
|
},
|
|
3071
3082
|
{
|
|
@@ -3075,7 +3086,7 @@ var metadata = [
|
|
|
3075
3086
|
l2_token_address: "0x439a1c010e3e1bb2d43d43411000893c0042bd88f6c701611a0ea914d426da4",
|
|
3076
3087
|
sort_order: 1,
|
|
3077
3088
|
total_supply: null,
|
|
3078
|
-
hidden:
|
|
3089
|
+
hidden: !0,
|
|
3079
3090
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/932e7f83-a4c2-40f0-3048-35af3b194100/logo"
|
|
3080
3091
|
},
|
|
3081
3092
|
{
|
|
@@ -3085,7 +3096,7 @@ var metadata = [
|
|
|
3085
3096
|
l2_token_address: "0xce635e3f241b0ae78c46a929d84a9101910188f9c4024eaa7559556503c31a",
|
|
3086
3097
|
sort_order: 1,
|
|
3087
3098
|
total_supply: null,
|
|
3088
|
-
hidden:
|
|
3099
|
+
hidden: !0,
|
|
3089
3100
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cf2ee180-06bf-4443-e3aa-724d7c28e800/logo"
|
|
3090
3101
|
},
|
|
3091
3102
|
{
|
|
@@ -3095,7 +3106,7 @@ var metadata = [
|
|
|
3095
3106
|
l2_token_address: "0x40d8907cec0f7ae9c364dfb12485a1314d84c129bf1898d2f3d4b7fcc7d44f4",
|
|
3096
3107
|
sort_order: 1,
|
|
3097
3108
|
total_supply: null,
|
|
3098
|
-
hidden:
|
|
3109
|
+
hidden: !0,
|
|
3099
3110
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1db5f954-c1ef-447e-9f8f-05bd9f3b2b00/logo"
|
|
3100
3111
|
},
|
|
3101
3112
|
{
|
|
@@ -3105,7 +3116,7 @@ var metadata = [
|
|
|
3105
3116
|
l2_token_address: "0x66ed5c928ee027a9419ace1cbea8389885161db5572a7c5c4fef2310e9bf494",
|
|
3106
3117
|
sort_order: 1,
|
|
3107
3118
|
total_supply: null,
|
|
3108
|
-
hidden:
|
|
3119
|
+
hidden: !0,
|
|
3109
3120
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bbcdcc9-6146-404d-9501-92a664cf3100/logo"
|
|
3110
3121
|
},
|
|
3111
3122
|
{
|
|
@@ -3115,7 +3126,7 @@ var metadata = [
|
|
|
3115
3126
|
l2_token_address: "0x1720cf6318bff45e62acc588680ae3cd4d5f8465b1d52cb710533c9299b031a",
|
|
3116
3127
|
sort_order: 1,
|
|
3117
3128
|
total_supply: null,
|
|
3118
|
-
hidden:
|
|
3129
|
+
hidden: !0,
|
|
3119
3130
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/5af7c03b-e4ae-4aee-eba4-a4e2160a1d00/logo"
|
|
3120
3131
|
},
|
|
3121
3132
|
{
|
|
@@ -3125,7 +3136,7 @@ var metadata = [
|
|
|
3125
3136
|
l2_token_address: "0x3b6448d09dcd023507376402686261f5d6739455fa02f804907b066e488da66",
|
|
3126
3137
|
sort_order: 1,
|
|
3127
3138
|
total_supply: null,
|
|
3128
|
-
hidden:
|
|
3139
|
+
hidden: !0,
|
|
3129
3140
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8be9bc66-486b-4181-6804-725a1db8ad00/logo"
|
|
3130
3141
|
},
|
|
3131
3142
|
{
|
|
@@ -3135,7 +3146,7 @@ var metadata = [
|
|
|
3135
3146
|
l2_token_address: "0xdff9dca192609c4e86ab3be22c7ec1e968876c992d21986f3c542be97fa2f",
|
|
3136
3147
|
sort_order: 1,
|
|
3137
3148
|
total_supply: null,
|
|
3138
|
-
hidden:
|
|
3149
|
+
hidden: !0,
|
|
3139
3150
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fb9e90f7-3c2f-4c64-7e43-c3f694f35e00/logo"
|
|
3140
3151
|
},
|
|
3141
3152
|
{
|
|
@@ -3145,7 +3156,7 @@ var metadata = [
|
|
|
3145
3156
|
l2_token_address: "0x6fe21d2d4a8a05bdb70f09c9250af9870020d5dcc35f410b4a39d6605c3e353",
|
|
3146
3157
|
sort_order: 1,
|
|
3147
3158
|
total_supply: null,
|
|
3148
|
-
hidden:
|
|
3159
|
+
hidden: !0,
|
|
3149
3160
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e443afeb-850b-46a0-a7ba-a473306d6b00/logo"
|
|
3150
3161
|
},
|
|
3151
3162
|
{
|
|
@@ -3155,7 +3166,7 @@ var metadata = [
|
|
|
3155
3166
|
l2_token_address: "0x67ba235c569c23877064b2ac6ebd4d79f32d3c00f5fab8e28a3b5700b957f6",
|
|
3156
3167
|
sort_order: 1,
|
|
3157
3168
|
total_supply: null,
|
|
3158
|
-
hidden:
|
|
3169
|
+
hidden: !0,
|
|
3159
3170
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/33dc517f-8a66-45eb-f2c5-de5388e47500/logo"
|
|
3160
3171
|
},
|
|
3161
3172
|
{
|
|
@@ -3165,7 +3176,7 @@ var metadata = [
|
|
|
3165
3176
|
l2_token_address: "0x3956a5301e99522038a2e7dcb9c2a89bf087ffa79310ee0a508b5538efd8ddd",
|
|
3166
3177
|
sort_order: 1,
|
|
3167
3178
|
total_supply: null,
|
|
3168
|
-
hidden:
|
|
3179
|
+
hidden: !0,
|
|
3169
3180
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3d2e0fd8-4af8-49a0-4bdb-691a4d6ef800/logo"
|
|
3170
3181
|
},
|
|
3171
3182
|
{
|
|
@@ -3175,7 +3186,7 @@ var metadata = [
|
|
|
3175
3186
|
l2_token_address: "0x555d713e59d4ff96b7960447e9bc9e79bfdeab5b0eea74e3df81bce61cfbc77",
|
|
3176
3187
|
sort_order: 1,
|
|
3177
3188
|
total_supply: null,
|
|
3178
|
-
hidden:
|
|
3189
|
+
hidden: !0,
|
|
3179
3190
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/878c0d8a-8e2c-4281-0896-9cbbb2ef9400/logo"
|
|
3180
3191
|
},
|
|
3181
3192
|
{
|
|
@@ -3185,7 +3196,7 @@ var metadata = [
|
|
|
3185
3196
|
l2_token_address: "0x1d655ac834d38df7921074fc1588411e202b1af83307cbd996983aff52db3a8",
|
|
3186
3197
|
sort_order: 1,
|
|
3187
3198
|
total_supply: null,
|
|
3188
|
-
hidden:
|
|
3199
|
+
hidden: !0,
|
|
3189
3200
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1c2c954f-448c-476b-a4a6-19b52efe3e00/logo"
|
|
3190
3201
|
},
|
|
3191
3202
|
{
|
|
@@ -3195,7 +3206,7 @@ var metadata = [
|
|
|
3195
3206
|
l2_token_address: "0x3d9b66720959d0e7687b898292c10e62e78626f2dba5e1909961a2ce3f86612",
|
|
3196
3207
|
sort_order: 1,
|
|
3197
3208
|
total_supply: null,
|
|
3198
|
-
hidden:
|
|
3209
|
+
hidden: !0,
|
|
3199
3210
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6a45b34d-3bfe-4994-45b0-f2bee8abac00/logo"
|
|
3200
3211
|
},
|
|
3201
3212
|
{
|
|
@@ -3205,7 +3216,7 @@ var metadata = [
|
|
|
3205
3216
|
l2_token_address: "0xe03ea8ae385f64754820af5c01c36abf1b8130dd6797d3fd9d430e4114e876",
|
|
3206
3217
|
sort_order: 1,
|
|
3207
3218
|
total_supply: null,
|
|
3208
|
-
hidden:
|
|
3219
|
+
hidden: !0,
|
|
3209
3220
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/b1fa609d-8799-4754-cdea-ab69514ca700/logo"
|
|
3210
3221
|
},
|
|
3211
3222
|
{
|
|
@@ -3215,7 +3226,7 @@ var metadata = [
|
|
|
3215
3226
|
l2_token_address: "0x5620aa7170cd66dbcbc37d03087bfe4633ffef91d3e4d97b501de906004f79b",
|
|
3216
3227
|
sort_order: 1,
|
|
3217
3228
|
total_supply: null,
|
|
3218
|
-
hidden:
|
|
3229
|
+
hidden: !0,
|
|
3219
3230
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/27e37e85-91bd-4ee1-0552-1e0795077400/logo"
|
|
3220
3231
|
},
|
|
3221
3232
|
{
|
|
@@ -3225,7 +3236,7 @@ var metadata = [
|
|
|
3225
3236
|
l2_token_address: "0x625c1f789b03ebebc7a9322366f38ebad1f693b84b2abd8cb8f5b2748b0cdd5",
|
|
3226
3237
|
sort_order: 1,
|
|
3227
3238
|
total_supply: null,
|
|
3228
|
-
hidden:
|
|
3239
|
+
hidden: !0,
|
|
3229
3240
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/58591e20-24fb-4353-417a-81d877a5a200/logo"
|
|
3230
3241
|
},
|
|
3231
3242
|
{
|
|
@@ -3235,7 +3246,7 @@ var metadata = [
|
|
|
3235
3246
|
l2_token_address: "0x35e24c02409c3cfe8d5646399a62c4d102bb782938d5f5180e92c9c62d3faf7",
|
|
3236
3247
|
sort_order: 1,
|
|
3237
3248
|
total_supply: null,
|
|
3238
|
-
hidden:
|
|
3249
|
+
hidden: !0,
|
|
3239
3250
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2f8cb892-e82a-4af3-bd09-316061faec00/logo"
|
|
3240
3251
|
},
|
|
3241
3252
|
{
|
|
@@ -3245,7 +3256,7 @@ var metadata = [
|
|
|
3245
3256
|
l2_token_address: "0x4485f5a6e16562e1c761cd348e63256d00389e3ddf4f5d98afe7ab44c57c481",
|
|
3246
3257
|
sort_order: 1,
|
|
3247
3258
|
total_supply: null,
|
|
3248
|
-
hidden:
|
|
3259
|
+
hidden: !0,
|
|
3249
3260
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fe4bfc17-6553-4dc5-58d2-f452b4aa8a00/logo"
|
|
3250
3261
|
},
|
|
3251
3262
|
{
|
|
@@ -3255,7 +3266,7 @@ var metadata = [
|
|
|
3255
3266
|
l2_token_address: "0x367f838f85a2f5e1580d6f011e4476f581083314cff8721ba3dda9706076eed",
|
|
3256
3267
|
sort_order: 1,
|
|
3257
3268
|
total_supply: null,
|
|
3258
|
-
hidden:
|
|
3269
|
+
hidden: !0,
|
|
3259
3270
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/13bd026b-3612-480e-0119-04cf4c505a00/logo"
|
|
3260
3271
|
},
|
|
3261
3272
|
{
|
|
@@ -3265,7 +3276,7 @@ var metadata = [
|
|
|
3265
3276
|
l2_token_address: "0x2f8dd022568af8f9f718aa37707a9b858529db56910633a160456838b6cbcbc",
|
|
3266
3277
|
sort_order: 1,
|
|
3267
3278
|
total_supply: null,
|
|
3268
|
-
hidden:
|
|
3279
|
+
hidden: !0,
|
|
3269
3280
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/0ebf555f-e732-4054-f8e5-55b2ed49ba00/logo"
|
|
3270
3281
|
},
|
|
3271
3282
|
{
|
|
@@ -3275,7 +3286,7 @@ var metadata = [
|
|
|
3275
3286
|
l2_token_address: "0x68b6e23cbbd58a644700f55e96c83580921e9f521b6e5175396b53ba7910e7d",
|
|
3276
3287
|
sort_order: 1,
|
|
3277
3288
|
total_supply: null,
|
|
3278
|
-
hidden:
|
|
3289
|
+
hidden: !0,
|
|
3279
3290
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f02a5b43-bfcf-408c-7d1b-fcfe68b02d00/logo"
|
|
3280
3291
|
},
|
|
3281
3292
|
{
|
|
@@ -3285,7 +3296,7 @@ var metadata = [
|
|
|
3285
3296
|
l2_token_address: "0x3bf856515bece3c93f5061b7941b8645f817a0acab93c758b8c7b4bc0afa3c6",
|
|
3286
3297
|
sort_order: 1,
|
|
3287
3298
|
total_supply: null,
|
|
3288
|
-
hidden:
|
|
3299
|
+
hidden: !0,
|
|
3289
3300
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e74955fc-5c8a-4dff-4882-a49a46a5a800/logo"
|
|
3290
3301
|
},
|
|
3291
3302
|
{
|
|
@@ -3295,7 +3306,7 @@ var metadata = [
|
|
|
3295
3306
|
l2_token_address: "0x0695b08ecdfdd828c2e6267da62f59e6d7543e690ef56a484df25c8566b332a5",
|
|
3296
3307
|
sort_order: 1,
|
|
3297
3308
|
total_supply: null,
|
|
3298
|
-
hidden:
|
|
3309
|
+
hidden: !0,
|
|
3299
3310
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/9af855b7-4790-4390-9466-6bed4481ab00/logo"
|
|
3300
3311
|
},
|
|
3301
3312
|
{
|
|
@@ -3305,7 +3316,7 @@ var metadata = [
|
|
|
3305
3316
|
l2_token_address: "0x264be95a4a2ace20add68cb321acdccd2f9f8440ee1c7abd85da44ddab01085",
|
|
3306
3317
|
sort_order: 1,
|
|
3307
3318
|
total_supply: null,
|
|
3308
|
-
hidden:
|
|
3319
|
+
hidden: !0,
|
|
3309
3320
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/20817378-a45e-4521-f464-10f6dd13c500/logo"
|
|
3310
3321
|
},
|
|
3311
3322
|
{
|
|
@@ -3315,7 +3326,7 @@ var metadata = [
|
|
|
3315
3326
|
l2_token_address: "0xac965f9e67164723c16735a9da8dbc9eb8e43b1bd0323591e87c056badf606",
|
|
3316
3327
|
sort_order: 1,
|
|
3317
3328
|
total_supply: null,
|
|
3318
|
-
hidden:
|
|
3329
|
+
hidden: !0,
|
|
3319
3330
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8787ed1f-af5c-4873-c01a-55f05e999a00/logo"
|
|
3320
3331
|
},
|
|
3321
3332
|
{
|
|
@@ -3325,7 +3336,7 @@ var metadata = [
|
|
|
3325
3336
|
l2_token_address: "0x67e4ac00a241be06ba6afc11fa2715ec7da0c42c05a67ef6ecfcfeda725aaa8",
|
|
3326
3337
|
sort_order: 1,
|
|
3327
3338
|
total_supply: null,
|
|
3328
|
-
hidden:
|
|
3339
|
+
hidden: !0,
|
|
3329
3340
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dec7f31b-4b1d-46bb-4fca-c0253cf55a00/logo"
|
|
3330
3341
|
},
|
|
3331
3342
|
{
|
|
@@ -3335,7 +3346,7 @@ var metadata = [
|
|
|
3335
3346
|
l2_token_address: "0x3bc86299bee061c7c8d7546ccb62b9daf9bffc653b1508facb722c6593874bc",
|
|
3336
3347
|
sort_order: 1,
|
|
3337
3348
|
total_supply: null,
|
|
3338
|
-
hidden:
|
|
3349
|
+
hidden: !0,
|
|
3339
3350
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7d2cd5a5-f38a-49f6-11f8-ba3b59a59e00/logo"
|
|
3340
3351
|
},
|
|
3341
3352
|
{
|
|
@@ -3345,7 +3356,7 @@ var metadata = [
|
|
|
3345
3356
|
l2_token_address: "0x57a3f1ee475e072ce3be41785c0e889b7295d7a0dcc22b992c5b9408dbeb280",
|
|
3346
3357
|
sort_order: 1,
|
|
3347
3358
|
total_supply: null,
|
|
3348
|
-
hidden:
|
|
3359
|
+
hidden: !0,
|
|
3349
3360
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c338b6a8-77c4-4dd6-34f5-1af0d3fb1e00/logo"
|
|
3350
3361
|
},
|
|
3351
3362
|
{
|
|
@@ -3355,14 +3366,28 @@ var metadata = [
|
|
|
3355
3366
|
l2_token_address: "0x27719173cfe10f1aa38d2aaed0a075b6077290f1e817aa3485d2b828394f4d9",
|
|
3356
3367
|
sort_order: 1,
|
|
3357
3368
|
total_supply: null,
|
|
3358
|
-
hidden:
|
|
3369
|
+
hidden: !0,
|
|
3359
3370
|
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6deef27f-df40-4248-4e1b-ed1d79a3f000/logo"
|
|
3360
3371
|
}
|
|
3361
|
-
];
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3366
|
-
|
|
3372
|
+
], Qe = L, Te = Ie, ze = L.cartridge.theme;
|
|
3373
|
+
export {
|
|
3374
|
+
ke as ArgentWallet,
|
|
3375
|
+
we as MetaMaskWallet,
|
|
3376
|
+
g as NotReadyToConnect,
|
|
3377
|
+
ve as PhantomWallet,
|
|
3378
|
+
A as ResponseCodes,
|
|
3379
|
+
Ae as WalletBridge,
|
|
3380
|
+
Qe as controllerConfigs,
|
|
3381
|
+
Me as default,
|
|
3382
|
+
ze as defaultTheme,
|
|
3383
|
+
Te as erc20Metadata,
|
|
3384
|
+
Le as humanizeString,
|
|
3385
|
+
Be as lookupAddresses,
|
|
3386
|
+
Ne as lookupUsernames,
|
|
3387
|
+
Oe as normalizeCalls,
|
|
3388
|
+
K as parseChainId,
|
|
3389
|
+
$ as toArray,
|
|
3390
|
+
Ye as toSessionPolicies,
|
|
3391
|
+
$e as toWasmPolicies
|
|
3392
|
+
};
|
|
3367
3393
|
//# sourceMappingURL=index.js.map
|
|
3368
|
-
//# sourceMappingURL=index.js.map
|