@cartridge/controller 0.7.7 → 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.
Files changed (80) hide show
  1. package/.turbo/turbo-build$colon$deps.log +49 -59
  2. package/.turbo/turbo-build.log +45 -63
  3. package/dist/account.d.ts +35 -0
  4. package/dist/constants.d.ts +3 -0
  5. package/dist/controller.d.ts +3 -6
  6. package/dist/errors.d.ts +3 -0
  7. package/dist/icon.d.ts +1 -0
  8. package/dist/iframe/base.d.ts +26 -0
  9. package/dist/iframe/index.d.ts +3 -0
  10. package/dist/iframe/keychain.d.ts +10 -0
  11. package/dist/iframe/profile.d.ts +12 -0
  12. package/dist/index.d.ts +6 -24
  13. package/dist/index.js +2649 -1934
  14. package/dist/index.js.map +1 -1
  15. package/dist/lookup.d.ts +2 -4
  16. package/dist/mutex.d.ts +12 -0
  17. package/dist/node/index.cjs +1 -12
  18. package/dist/node/index.cjs.map +1 -1
  19. package/dist/node/index.d.cts +93 -8
  20. package/dist/node/index.d.ts +93 -8
  21. package/dist/node/index.js +2 -12
  22. package/dist/node/index.js.map +1 -1
  23. package/dist/policies.d.ts +15 -0
  24. package/dist/provider-qJi60GEX.js +286 -0
  25. package/dist/provider-qJi60GEX.js.map +1 -0
  26. package/dist/provider.d.ts +21 -0
  27. package/dist/session/account.d.ts +31 -0
  28. package/dist/session/backend.d.ts +58 -0
  29. package/dist/session/index.d.ts +4 -38
  30. package/dist/session/{index.d.cts → provider.d.ts} +4 -10
  31. package/dist/session.d.ts +6 -0
  32. package/dist/session.js +354 -0
  33. package/dist/session.js.map +1 -0
  34. package/dist/stats.html +4949 -0
  35. package/dist/telegram/backend.d.ts +30 -0
  36. package/dist/telegram/provider.d.ts +24 -0
  37. package/dist/types.d.ts +146 -0
  38. package/dist/utils.d.ts +15 -0
  39. package/dist/wallets/argent/index.d.ts +14 -0
  40. package/dist/wallets/bridge.d.ts +29 -0
  41. package/dist/wallets/index.d.ts +5 -0
  42. package/dist/wallets/metamask/index.d.ts +16 -0
  43. package/dist/wallets/phantom/index.d.ts +13 -0
  44. package/dist/wallets/types.d.ts +27 -0
  45. package/package.json +21 -41
  46. package/src/iframe/base.ts +1 -1
  47. package/src/iframe/keychain.ts +11 -0
  48. package/src/iframe/profile.ts +9 -7
  49. package/src/index.ts +1 -0
  50. package/src/node/index.ts +1 -1
  51. package/src/types.ts +24 -0
  52. package/src/wallets/argent/index.ts +122 -0
  53. package/src/wallets/bridge.ts +165 -0
  54. package/src/wallets/index.ts +5 -0
  55. package/src/wallets/metamask/index.ts +210 -0
  56. package/src/wallets/phantom/index.ts +124 -0
  57. package/src/wallets/types.ts +32 -0
  58. package/tsup.node.config.ts +15 -0
  59. package/vite.config.js +83 -0
  60. package/dist/controller.cjs +0 -803
  61. package/dist/controller.cjs.map +0 -1
  62. package/dist/controller.d.cts +0 -34
  63. package/dist/controller.js +0 -801
  64. package/dist/controller.js.map +0 -1
  65. package/dist/index.cjs +0 -2695
  66. package/dist/index.cjs.map +0 -1
  67. package/dist/index.d.cts +0 -25
  68. package/dist/lookup.cjs +0 -59
  69. package/dist/lookup.cjs.map +0 -1
  70. package/dist/lookup.d.cts +0 -4
  71. package/dist/lookup.js +0 -56
  72. package/dist/lookup.js.map +0 -1
  73. package/dist/policies-DD1aPjQ4.d.cts +0 -21
  74. package/dist/policies-DD1aPjQ4.d.ts +0 -21
  75. package/dist/provider-CTDncg8U.d.cts +0 -203
  76. package/dist/provider-CTDncg8U.d.ts +0 -203
  77. package/dist/session/index.cjs +0 -484
  78. package/dist/session/index.cjs.map +0 -1
  79. package/dist/session/index.js +0 -478
  80. package/dist/session/index.js.map +0 -1
package/dist/index.cjs DELETED
@@ -1,2695 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var starknet = require('starknet');
6
- var penpal = require('@cartridge/penpal');
7
- var typesJs = require('@starknet-io/types-js');
8
-
9
- // src/account.ts
10
-
11
- // src/types.ts
12
- var ResponseCodes = /* @__PURE__ */ ((ResponseCodes2) => {
13
- ResponseCodes2["SUCCESS"] = "SUCCESS";
14
- ResponseCodes2["NOT_CONNECTED"] = "NOT_CONNECTED";
15
- ResponseCodes2["ERROR"] = "ERROR";
16
- ResponseCodes2["CANCELED"] = "CANCELED";
17
- ResponseCodes2["USER_INTERACTION_REQUIRED"] = "USER_INTERACTION_REQUIRED";
18
- return ResponseCodes2;
19
- })(ResponseCodes || {});
20
- var ALLOWED_PROPERTIES = /* @__PURE__ */ new Set([
21
- "contracts",
22
- "messages",
23
- "target",
24
- "method",
25
- "name",
26
- "description",
27
- "types",
28
- "domain",
29
- "primaryType"
30
- ]);
31
- var LOCAL_HOSTNAMES = ["localhost", "127.0.0.1", "0.0.0.0"];
32
- function validatePropertyName(prop) {
33
- if (!ALLOWED_PROPERTIES.has(prop)) {
34
- throw new Error(`Invalid property name: ${prop}`);
35
- }
36
- }
37
- function safeObjectAccess(obj, prop) {
38
- validatePropertyName(prop);
39
- return obj[prop];
40
- }
41
- function normalizeCalls(calls) {
42
- return toArray(calls).map((call) => {
43
- return {
44
- entrypoint: call.entrypoint,
45
- contractAddress: starknet.addAddressPadding(call.contractAddress),
46
- calldata: starknet.CallData.toHex(call.calldata)
47
- };
48
- });
49
- }
50
- function toSessionPolicies(policies) {
51
- return Array.isArray(policies) ? policies.reduce(
52
- (prev, p) => {
53
- if (safeObjectAccess(p, "target")) {
54
- const target = starknet.getChecksumAddress(
55
- safeObjectAccess(p, "target")
56
- );
57
- const entrypoint = safeObjectAccess(p, "method");
58
- const contracts = safeObjectAccess(
59
- prev,
60
- "contracts"
61
- );
62
- const item = {
63
- name: humanizeString(entrypoint),
64
- entrypoint,
65
- description: safeObjectAccess(p, "description")
66
- };
67
- if (target in contracts) {
68
- const methods = toArray(contracts[target].methods);
69
- contracts[target] = {
70
- methods: [...methods, item]
71
- };
72
- } else {
73
- contracts[target] = {
74
- methods: [item]
75
- };
76
- }
77
- } else {
78
- const messages = safeObjectAccess(prev, "messages");
79
- messages.push(p);
80
- }
81
- return prev;
82
- },
83
- { contracts: {}, messages: [] }
84
- ) : policies;
85
- }
86
- function toWasmPolicies(policies) {
87
- return [
88
- ...Object.entries(policies.contracts ?? {}).flatMap(
89
- ([target, { methods }]) => toArray(methods).map((m) => ({
90
- target,
91
- method: m.entrypoint,
92
- authorized: m.authorized
93
- }))
94
- ),
95
- ...(policies.messages ?? []).map((p) => {
96
- const domainHash = starknet.typedData.getStructHash(
97
- p.types,
98
- "StarknetDomain",
99
- p.domain,
100
- starknet.TypedDataRevision.ACTIVE
101
- );
102
- const typeHash = starknet.typedData.getTypeHash(
103
- p.types,
104
- p.primaryType,
105
- starknet.TypedDataRevision.ACTIVE
106
- );
107
- return {
108
- scope_hash: starknet.hash.computePoseidonHash(domainHash, typeHash),
109
- authorized: p.authorized
110
- };
111
- })
112
- ];
113
- }
114
- function toArray(val) {
115
- return Array.isArray(val) ? val : [val];
116
- }
117
- function humanizeString(str) {
118
- return str.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/_/g, " ").toLowerCase().replace(/^\w/, (c) => c.toUpperCase());
119
- }
120
- async function parseChainId(url) {
121
- const parts = url.pathname.split("/");
122
- if (parts.includes("starknet")) {
123
- if (parts.includes("mainnet")) {
124
- return starknet.constants.StarknetChainId.SN_MAIN;
125
- } else if (parts.includes("sepolia")) {
126
- return starknet.constants.StarknetChainId.SN_SEPOLIA;
127
- }
128
- } else if (parts.length >= 3) {
129
- const projectName = parts[2];
130
- if (parts.includes("katana")) {
131
- return starknet.shortString.encodeShortString(
132
- `WP_${projectName.toUpperCase().replace(/-/g, "_")}`
133
- );
134
- } else if (parts.includes("mainnet")) {
135
- return starknet.shortString.encodeShortString(
136
- `GG_${projectName.toUpperCase().replace(/-/g, "_")}`
137
- );
138
- }
139
- }
140
- if (LOCAL_HOSTNAMES.includes(url.hostname)) {
141
- const provider = new starknet.Provider({
142
- nodeUrl: url.toString()
143
- });
144
- return await provider.getChainId();
145
- }
146
- throw new Error(`Chain ${url.toString()} not supported`);
147
- }
148
-
149
- // src/account.ts
150
- var ControllerAccount = class extends starknet.WalletAccount {
151
- address;
152
- keychain;
153
- modal;
154
- options;
155
- constructor(provider, rpcUrl, address, keychain, options, modal) {
156
- super({ nodeUrl: rpcUrl }, provider);
157
- this.address = address;
158
- this.keychain = keychain;
159
- this.options = options;
160
- this.modal = modal;
161
- }
162
- /**
163
- * Invoke execute function in account contract
164
- *
165
- * @param calls the invocation object or an array of them, containing:
166
- * - contractAddress - the address of the contract
167
- * - entrypoint - the entrypoint of the contract
168
- * - calldata - (defaults to []) the calldata
169
- * - signature - (defaults to []) the signature
170
- * @param abis (optional) the abi of the contract for better displaying
171
- *
172
- * @returns response from addTransaction
173
- */
174
- async execute(calls) {
175
- calls = toArray(calls);
176
- return new Promise(async (resolve, reject) => {
177
- const sessionExecute = await this.keychain.execute(
178
- calls,
179
- void 0,
180
- void 0,
181
- false
182
- );
183
- if (sessionExecute.code === "SUCCESS" /* SUCCESS */) {
184
- resolve(sessionExecute);
185
- return;
186
- }
187
- if (this.options?.propagateSessionErrors && sessionExecute.code !== "USER_INTERACTION_REQUIRED" /* USER_INTERACTION_REQUIRED */) {
188
- reject(sessionExecute.error);
189
- return;
190
- }
191
- this.modal.open();
192
- const manualExecute = await this.keychain.execute(
193
- calls,
194
- void 0,
195
- void 0,
196
- true,
197
- sessionExecute.error
198
- );
199
- if (manualExecute.code === "SUCCESS" /* SUCCESS */) {
200
- resolve(manualExecute);
201
- this.modal.close();
202
- return;
203
- }
204
- reject(manualExecute.error);
205
- return;
206
- });
207
- }
208
- /**
209
- * Sign an JSON object for off-chain usage with the starknet private key and return the signature
210
- * This adds a message prefix so it cant be interchanged with transactions
211
- *
212
- * @param json - JSON object to be signed
213
- * @returns the signature of the JSON object
214
- * @throws {Error} if the JSON object is not a valid JSON
215
- */
216
- async signMessage(typedData2) {
217
- return new Promise(async (resolve, reject) => {
218
- const sessionSign = await this.keychain.signMessage(typedData2, "", true);
219
- if (!("code" in sessionSign)) {
220
- resolve(sessionSign);
221
- return;
222
- }
223
- this.modal.open();
224
- const manualSign = await this.keychain.signMessage(typedData2, "", false);
225
- if (!("code" in manualSign)) {
226
- resolve(manualSign);
227
- } else {
228
- reject(manualSign.error);
229
- }
230
- this.modal.close();
231
- });
232
- }
233
- };
234
- var account_default = ControllerAccount;
235
- var IFrame = class {
236
- url;
237
- iframe;
238
- container;
239
- onClose;
240
- constructor({
241
- id,
242
- url,
243
- preset,
244
- onClose,
245
- onConnect,
246
- methods = {}
247
- }) {
248
- if (typeof document === "undefined") {
249
- return;
250
- }
251
- if (preset) {
252
- url.searchParams.set("preset", preset);
253
- }
254
- this.url = url;
255
- const iframe = document.createElement("iframe");
256
- iframe.src = url.toString();
257
- iframe.id = id;
258
- iframe.style.border = "none";
259
- iframe.sandbox.add("allow-forms");
260
- iframe.sandbox.add("allow-popups");
261
- iframe.sandbox.add("allow-scripts");
262
- iframe.sandbox.add("allow-same-origin");
263
- iframe.allow = "publickey-credentials-create *; publickey-credentials-get *; clipboard-write";
264
- if (!!document.hasStorageAccess) {
265
- iframe.sandbox.add("allow-storage-access-by-user-activation");
266
- }
267
- const container = document.createElement("div");
268
- container.id = "controller";
269
- container.style.position = "fixed";
270
- container.style.height = "100%";
271
- container.style.width = "100%";
272
- container.style.top = "0";
273
- container.style.left = "0";
274
- container.style.zIndex = "10000";
275
- container.style.backgroundColor = "rgba(0,0,0,0.6)";
276
- container.style.display = "flex";
277
- container.style.alignItems = "center";
278
- container.style.justifyContent = "center";
279
- container.style.visibility = "hidden";
280
- container.style.opacity = "0";
281
- container.style.transition = "opacity 0.2s ease";
282
- container.appendChild(iframe);
283
- this.iframe = iframe;
284
- this.container = container;
285
- penpal.connectToChild({
286
- iframe: this.iframe,
287
- methods: { close: () => this.close(), ...methods }
288
- }).promise.then(onConnect);
289
- this.resize();
290
- window.addEventListener("resize", () => this.resize());
291
- const observer = new MutationObserver(() => {
292
- const existingController2 = document.getElementById("controller");
293
- if (document.body) {
294
- if (id === "controller-keychain" && !existingController2 || id === "controller-profile") {
295
- document.body.appendChild(container);
296
- observer.disconnect();
297
- }
298
- }
299
- });
300
- observer.observe(document.documentElement, {
301
- childList: true,
302
- subtree: true
303
- });
304
- const existingController = document.getElementById("controller");
305
- if (document.body) {
306
- if (id === "controller-keychain" && !existingController || id === "controller-profile") {
307
- document.body.appendChild(container);
308
- }
309
- }
310
- this.onClose = onClose;
311
- }
312
- open() {
313
- if (!this.container) return;
314
- document.body.style.overflow = "hidden";
315
- this.container.style.visibility = "visible";
316
- this.container.style.opacity = "1";
317
- }
318
- close() {
319
- if (!this.container) return;
320
- this.onClose?.();
321
- document.body.style.overflow = "auto";
322
- this.container.style.visibility = "hidden";
323
- this.container.style.opacity = "0";
324
- }
325
- sendBackward() {
326
- if (!this.container) return;
327
- this.container.style.zIndex = "9999";
328
- }
329
- sendForward() {
330
- if (!this.container) return;
331
- this.container.style.zIndex = "10000";
332
- }
333
- resize() {
334
- if (!this.iframe) return;
335
- this.iframe.style.userSelect = "none";
336
- if (window.innerWidth < 768) {
337
- this.iframe.style.height = "100%";
338
- this.iframe.style.width = "100%";
339
- this.iframe.style.borderRadius = "0";
340
- return;
341
- }
342
- this.iframe.style.height = "600px";
343
- this.iframe.style.width = "432px";
344
- this.iframe.style.borderRadius = "8px";
345
- }
346
- };
347
-
348
- // src/constants.ts
349
- var KEYCHAIN_URL = "https://x.cartridge.gg";
350
- var PROFILE_URL = "https://profile.cartridge.gg";
351
- var API_URL = "https://api.cartridge.gg";
352
-
353
- // src/iframe/keychain.ts
354
- var KeychainIFrame = class extends IFrame {
355
- constructor({ url, policies, ...iframeOptions }) {
356
- const _url = new URL(url ?? KEYCHAIN_URL);
357
- if (policies) {
358
- _url.searchParams.set(
359
- "policies",
360
- encodeURIComponent(JSON.stringify(policies))
361
- );
362
- }
363
- super({
364
- ...iframeOptions,
365
- id: "controller-keychain",
366
- url: _url
367
- });
368
- }
369
- };
370
-
371
- // src/iframe/profile.ts
372
- var ProfileIFrame = class extends IFrame {
373
- constructor({
374
- profileUrl,
375
- rpcUrl,
376
- version,
377
- username,
378
- slot,
379
- namespace,
380
- tokens,
381
- policies,
382
- ...iframeOptions
383
- }) {
384
- const _profileUrl = (profileUrl || PROFILE_URL).replace(/\/$/, "");
385
- let _url = new URL(
386
- slot ? namespace ? `${_profileUrl}/account/${username}/slot/${slot}?ps=${encodeURIComponent(
387
- slot
388
- )}&ns=${encodeURIComponent(namespace)}` : `${_profileUrl}/account/${username}/slot/${slot}?ps=${encodeURIComponent(
389
- slot
390
- )}` : `${_profileUrl}/account/${username}`
391
- );
392
- if (version) {
393
- _url.searchParams.set("v", encodeURIComponent(version));
394
- }
395
- _url.searchParams.set("rpcUrl", encodeURIComponent(rpcUrl));
396
- if (tokens?.erc20) {
397
- _url.searchParams.set(
398
- "erc20",
399
- encodeURIComponent(tokens.erc20.toString())
400
- );
401
- }
402
- if (policies?.contracts) {
403
- const methods = Object.values(policies.contracts).flatMap(
404
- (contract) => contract.methods
405
- );
406
- _url.searchParams.set(
407
- "methods",
408
- encodeURIComponent(JSON.stringify(methods))
409
- );
410
- }
411
- super({
412
- ...iframeOptions,
413
- id: "controller-profile",
414
- url: _url
415
- });
416
- }
417
- };
418
-
419
- // src/errors.ts
420
- var NotReadyToConnect = class _NotReadyToConnect extends Error {
421
- constructor() {
422
- super("Not ready to connect");
423
- Object.setPrototypeOf(this, _NotReadyToConnect.prototype);
424
- }
425
- };
426
-
427
- // package.json
428
- var package_default = {
429
- version: "0.7.7"};
430
-
431
- // src/icon.ts
432
- var icon = "data:image/png;base64,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";
433
-
434
- // src/mutex.ts
435
- function releaseStub() {
436
- }
437
- var Mutex = class {
438
- m_lastPromise = Promise.resolve();
439
- /**
440
- * Acquire lock
441
- * @param [bypass=false] option to skip lock acquisition
442
- */
443
- async obtain(bypass = false) {
444
- let release = releaseStub;
445
- if (bypass) return release;
446
- const lastPromise = this.m_lastPromise;
447
- this.m_lastPromise = new Promise((resolve) => release = resolve);
448
- await lastPromise;
449
- return release;
450
- }
451
- };
452
-
453
- // src/provider.ts
454
- var mutex = new Mutex();
455
- var BaseProvider = class {
456
- id = "controller";
457
- name = "Controller";
458
- version = package_default.version;
459
- icon = icon;
460
- account;
461
- subscriptions = [];
462
- _probePromise = null;
463
- async safeProbe() {
464
- if (this.account) {
465
- return this.account;
466
- }
467
- if (this._probePromise) {
468
- return this._probePromise;
469
- }
470
- const release = await mutex.obtain();
471
- return await new Promise(async (resolve) => {
472
- try {
473
- this._probePromise = this.probe();
474
- const result = await this._probePromise;
475
- resolve(result);
476
- } finally {
477
- this._probePromise = null;
478
- }
479
- }).finally(() => {
480
- release();
481
- });
482
- }
483
- request = async (call) => {
484
- switch (call.type) {
485
- case "wallet_getPermissions":
486
- await this.safeProbe();
487
- if (this.account) {
488
- return [typesJs.Permission.ACCOUNTS];
489
- }
490
- return [];
491
- case "wallet_requestAccounts": {
492
- if (this.account) {
493
- return [this.account.address];
494
- }
495
- const silentMode = call.params && call.params.silent_mode;
496
- this.account = await this.safeProbe();
497
- if (!this.account && !silentMode) {
498
- this.account = await this.connect();
499
- }
500
- if (this.account) {
501
- return [this.account.address];
502
- }
503
- return [];
504
- }
505
- case "wallet_watchAsset":
506
- throw {
507
- code: 63,
508
- message: "An unexpected error occurred",
509
- data: "wallet_watchAsset not implemented"
510
- };
511
- case "wallet_addStarknetChain": {
512
- let params2 = call.params;
513
- return this.addStarknetChain(params2);
514
- }
515
- case "wallet_switchStarknetChain": {
516
- let params2 = call.params;
517
- return this.switchStarknetChain(params2.chainId);
518
- }
519
- case "wallet_requestChainId":
520
- if (!this.account) {
521
- throw {
522
- code: 63,
523
- message: "An unexpected error occurred",
524
- data: "Account not initialized"
525
- };
526
- }
527
- return await this.account.getChainId();
528
- case "wallet_deploymentData":
529
- throw {
530
- code: 63,
531
- message: "An unexpected error occurred",
532
- data: "wallet_deploymentData not implemented"
533
- };
534
- case "wallet_addInvokeTransaction":
535
- if (!this.account) {
536
- throw {
537
- code: 63,
538
- message: "An unexpected error occurred",
539
- data: "Account not initialized"
540
- };
541
- }
542
- let params = call.params;
543
- return await this.account.execute(
544
- params.calls.map((call2) => ({
545
- contractAddress: call2.contract_address,
546
- entrypoint: call2.entry_point,
547
- calldata: call2.calldata
548
- }))
549
- );
550
- case "wallet_addDeclareTransaction":
551
- throw {
552
- code: 63,
553
- message: "An unexpected error occurred",
554
- data: "wallet_addDeclareTransaction not implemented"
555
- };
556
- case "wallet_signTypedData": {
557
- if (!this.account) {
558
- throw {
559
- code: 63,
560
- message: "An unexpected error occurred",
561
- data: "Account not initialized"
562
- };
563
- }
564
- return await this.account.signMessage(call.params);
565
- }
566
- case "wallet_supportedSpecs":
567
- return [];
568
- case "wallet_supportedWalletApi":
569
- return [];
570
- default:
571
- throw {
572
- code: 63,
573
- message: "An unexpected error occurred",
574
- data: `Unknown RPC call type: ${call.type}`
575
- };
576
- }
577
- };
578
- on = (event, handler) => {
579
- if (event !== "accountsChanged" && event !== "networkChanged") {
580
- throw new Error(`Unknown event: ${event}`);
581
- }
582
- this.subscriptions.push({ type: event, handler });
583
- };
584
- off = (event, handler) => {
585
- if (event !== "accountsChanged" && event !== "networkChanged") {
586
- throw new Error(`Unknown event: ${event}`);
587
- }
588
- const idx = this.subscriptions.findIndex(
589
- (sub) => sub.type === event && sub.handler === handler
590
- );
591
- if (idx >= 0) {
592
- this.subscriptions.splice(idx, 1);
593
- }
594
- };
595
- emitNetworkChanged(chainId) {
596
- this.subscriptions.filter((sub) => sub.type === "networkChanged").forEach((sub) => {
597
- sub.handler(chainId);
598
- });
599
- }
600
- emitAccountsChanged(accounts) {
601
- this.subscriptions.filter((sub) => sub.type === "accountsChanged").forEach((sub) => {
602
- sub.handler(accounts);
603
- });
604
- }
605
- };
606
- var ControllerProvider = class extends BaseProvider {
607
- keychain;
608
- profile;
609
- options;
610
- iframes;
611
- selectedChain;
612
- chains;
613
- constructor(options) {
614
- super();
615
- this.selectedChain = options.defaultChainId;
616
- this.chains = /* @__PURE__ */ new Map();
617
- this.iframes = {
618
- keychain: new KeychainIFrame({
619
- ...options,
620
- onClose: this.keychain?.reset,
621
- onConnect: (keychain) => {
622
- this.keychain = keychain;
623
- }
624
- })
625
- };
626
- this.options = options;
627
- this.validateChains(options.chains);
628
- if (typeof window !== "undefined") {
629
- window.starknet_controller = this;
630
- }
631
- }
632
- async probe() {
633
- try {
634
- await this.waitForKeychain();
635
- if (!this.keychain) {
636
- console.error(new NotReadyToConnect().message);
637
- return;
638
- }
639
- const response = await this.keychain.probe(this.rpcUrl());
640
- let rpcUrl = response?.rpcUrl || this.rpcUrl();
641
- this.account = new account_default(
642
- this,
643
- rpcUrl,
644
- response.address,
645
- this.keychain,
646
- this.options,
647
- this.iframes.keychain
648
- );
649
- } catch (e) {
650
- console.error(e);
651
- return;
652
- }
653
- if (!this.iframes.profile) {
654
- const username = await this.keychain.username();
655
- this.iframes.profile = new ProfileIFrame({
656
- ...this.options,
657
- onConnect: (profile) => {
658
- this.profile = profile;
659
- },
660
- methods: {
661
- openSettings: () => this.openSettings.bind(this),
662
- openPurchaseCredits: () => this.openPurchaseCredits.bind(this),
663
- openExecute: () => this.openExecute.bind(this)
664
- },
665
- rpcUrl: this.rpcUrl(),
666
- username,
667
- version: this.version
668
- });
669
- }
670
- return this.account;
671
- }
672
- async connect() {
673
- if (this.account) {
674
- return this.account;
675
- }
676
- if (!this.keychain || !this.iframes.keychain) {
677
- console.error(new NotReadyToConnect().message);
678
- return;
679
- }
680
- if (!!document.hasStorageAccess) {
681
- const ok = await document.hasStorageAccess();
682
- if (!ok) {
683
- await document.requestStorageAccess();
684
- }
685
- }
686
- this.iframes.keychain.open();
687
- try {
688
- let response = await this.keychain.connect(
689
- this.options.policies || {},
690
- this.rpcUrl()
691
- );
692
- if (response.code !== "SUCCESS" /* SUCCESS */) {
693
- throw new Error(response.message);
694
- }
695
- response = response;
696
- this.account = new account_default(
697
- this,
698
- this.rpcUrl(),
699
- response.address,
700
- this.keychain,
701
- this.options,
702
- this.iframes.keychain
703
- );
704
- return this.account;
705
- } catch (e) {
706
- console.log(e);
707
- } finally {
708
- this.iframes.keychain.close();
709
- }
710
- }
711
- async switchStarknetChain(chainId) {
712
- if (!this.keychain || !this.iframes.keychain) {
713
- console.error(new NotReadyToConnect().message);
714
- return false;
715
- }
716
- try {
717
- this.selectedChain = chainId;
718
- const response = await this.keychain.probe(this.rpcUrl());
719
- if (response.rpcUrl === this.rpcUrl()) {
720
- return true;
721
- }
722
- await this.keychain.switchChain(this.rpcUrl());
723
- await this.profile?.switchChain(this.rpcUrl());
724
- } catch (e) {
725
- console.error(e);
726
- return false;
727
- }
728
- this.emitNetworkChanged(chainId);
729
- return true;
730
- }
731
- addStarknetChain(_chain) {
732
- return Promise.resolve(true);
733
- }
734
- async disconnect() {
735
- if (!this.keychain) {
736
- console.error(new NotReadyToConnect().message);
737
- return;
738
- }
739
- if (!!document.hasStorageAccess) {
740
- const ok = await document.hasStorageAccess();
741
- if (!ok) {
742
- await document.requestStorageAccess();
743
- }
744
- }
745
- this.account = void 0;
746
- return this.keychain.disconnect();
747
- }
748
- async openProfile(tab = "inventory") {
749
- if (!this.profile || !this.iframes.profile?.url) {
750
- console.error("Profile is not ready");
751
- return;
752
- }
753
- if (!this.account) {
754
- console.error("Account is not ready");
755
- return;
756
- }
757
- this.profile.navigate(`${this.iframes.profile.url?.pathname}/${tab}`);
758
- this.iframes.profile.open();
759
- }
760
- async openProfileTo(to) {
761
- if (!this.profile || !this.iframes.profile?.url) {
762
- console.error("Profile is not ready");
763
- return;
764
- }
765
- if (!this.account) {
766
- console.error("Account is not ready");
767
- return;
768
- }
769
- this.profile.navigate(`${this.iframes.profile.url?.pathname}/${to}`);
770
- this.iframes.profile.open();
771
- }
772
- async openProfileAt(at) {
773
- if (!this.profile || !this.iframes.profile?.url) {
774
- console.error("Profile is not ready");
775
- return;
776
- }
777
- if (!this.account) {
778
- console.error("Account is not ready");
779
- return;
780
- }
781
- this.profile.navigate(at);
782
- this.iframes.profile.open();
783
- }
784
- async openSettings() {
785
- if (!this.keychain || !this.iframes.keychain) {
786
- console.error(new NotReadyToConnect().message);
787
- return null;
788
- }
789
- if (this.iframes.profile?.sendBackward) {
790
- this.iframes.profile?.sendBackward();
791
- } else {
792
- this.iframes.profile?.close();
793
- }
794
- this.iframes.keychain.open();
795
- const res = await this.keychain.openSettings();
796
- this.iframes.keychain.close();
797
- this.iframes.profile?.sendForward?.();
798
- if (res && res.code === "NOT_CONNECTED" /* NOT_CONNECTED */) {
799
- return false;
800
- }
801
- return true;
802
- }
803
- revoke(origin, _policy) {
804
- if (!this.keychain) {
805
- console.error(new NotReadyToConnect().message);
806
- return null;
807
- }
808
- return this.keychain.revoke(origin);
809
- }
810
- rpcUrl() {
811
- const chain = this.chains.get(this.selectedChain);
812
- if (!chain) {
813
- const availableChains = Array.from(this.chains.keys()).map(
814
- (chain2) => starknet.shortString.decodeShortString(chain2)
815
- );
816
- throw new Error(
817
- `Chain not found: ${starknet.shortString.decodeShortString(this.selectedChain)}. Available chains: ${availableChains.join(", ")}`
818
- );
819
- }
820
- return chain.rpcUrl;
821
- }
822
- username() {
823
- if (!this.keychain) {
824
- console.error(new NotReadyToConnect().message);
825
- return;
826
- }
827
- return this.keychain.username();
828
- }
829
- openPurchaseCredits() {
830
- if (!this.keychain || !this.iframes.keychain) {
831
- console.error(new NotReadyToConnect().message);
832
- return;
833
- }
834
- if (!this.iframes.profile) {
835
- console.error("Profile is not ready");
836
- return;
837
- }
838
- this.iframes.profile.close();
839
- this.iframes.keychain.open();
840
- this.keychain.openPurchaseCredits();
841
- }
842
- async openExecute(calls, chainId) {
843
- if (!this.keychain || !this.iframes.keychain) {
844
- console.error(new NotReadyToConnect().message);
845
- return;
846
- }
847
- if (!this.iframes.profile) {
848
- console.error("Profile is not ready");
849
- return;
850
- }
851
- let currentChainId = this.selectedChain;
852
- if (chainId) {
853
- this.switchStarknetChain(chainId);
854
- }
855
- this.iframes.profile?.sendBackward();
856
- this.iframes.keychain.open();
857
- this.iframes.profile?.close();
858
- const res = await this.keychain.execute(calls, void 0, void 0, true);
859
- this.iframes.profile?.open();
860
- this.iframes.keychain.close();
861
- this.iframes.profile?.sendForward();
862
- if (chainId) {
863
- this.switchStarknetChain(currentChainId);
864
- }
865
- return !(res && (res.code === "NOT_CONNECTED" /* NOT_CONNECTED */ || res.code === "CANCELED" /* CANCELED */));
866
- }
867
- async delegateAccount() {
868
- if (!this.keychain) {
869
- console.error(new NotReadyToConnect().message);
870
- return null;
871
- }
872
- return await this.keychain.delegateAccount();
873
- }
874
- async validateChains(chains) {
875
- for (const chain of chains) {
876
- try {
877
- const url = new URL(chain.rpcUrl);
878
- const chainId = await parseChainId(url);
879
- this.chains.set(chainId, chain);
880
- } catch (error) {
881
- console.error(`Failed to parse chainId for ${chain.rpcUrl}:`, error);
882
- }
883
- }
884
- if (!this.chains.has(this.selectedChain)) {
885
- console.warn(
886
- `Selected chain ${this.selectedChain} not found in configured chains. Available chains: ${Array.from(this.chains.keys()).join(", ")}`
887
- );
888
- }
889
- }
890
- waitForKeychain({
891
- timeout = 5e4,
892
- interval = 100
893
- } = {}) {
894
- return new Promise((resolve, reject) => {
895
- const startTime = Date.now();
896
- const id = setInterval(() => {
897
- if (Date.now() - startTime > timeout) {
898
- clearInterval(id);
899
- reject(new Error("Timeout waiting for keychain"));
900
- return;
901
- }
902
- if (!this.keychain) return;
903
- clearInterval(id);
904
- resolve();
905
- }, interval);
906
- });
907
- }
908
- };
909
- var cache = /* @__PURE__ */ new Map();
910
- async function lookup(request) {
911
- if (!request.addresses?.length && !request.usernames?.length) {
912
- return { results: [] };
913
- }
914
- const response = await fetch(`${API_URL}/lookup`, {
915
- method: "POST",
916
- headers: {
917
- "Content-Type": "application/json"
918
- },
919
- body: JSON.stringify(request)
920
- });
921
- if (!response.ok) {
922
- throw new Error(`HTTP error! status: ${response.status}`);
923
- }
924
- return response.json();
925
- }
926
- async function lookupUsernames(usernames) {
927
- const uncachedUsernames = usernames.filter((name) => !cache.has(name));
928
- if (uncachedUsernames.length > 0) {
929
- const response = await lookup({ usernames: uncachedUsernames });
930
- response.results.forEach((result) => {
931
- cache.set(result.username, result.addresses[0]);
932
- });
933
- }
934
- return new Map(
935
- usernames.map((name) => [name, cache.get(name)]).filter((entry) => entry[1] !== void 0)
936
- );
937
- }
938
- async function lookupAddresses(addresses) {
939
- addresses = addresses.map(starknet.num.toHex);
940
- const uncachedAddresses = addresses.filter((addr) => !cache.has(addr));
941
- if (uncachedAddresses.length > 0) {
942
- const response = await lookup({
943
- addresses: uncachedAddresses
944
- });
945
- response.results.forEach((result) => {
946
- cache.set(result.addresses[0], result.username);
947
- });
948
- }
949
- return new Map(
950
- addresses.map((addr) => [addr, cache.get(addr)]).filter((entry) => entry[1] !== void 0)
951
- );
952
- }
953
-
954
- // ../../node_modules/.pnpm/@cartridge+presets@https+++codeload.github.com+cartridge-gg+presets+tar.gz+420887d/node_modules/@cartridge/presets/dist/index.js
955
- var configs = {
956
- "blob-arena": {
957
- origin: "blobarena.xyz",
958
- theme: {
959
- colors: {
960
- primary: "#980f06"
961
- },
962
- cover: "https://static.cartridge.gg/presets/blob-arena/cover.png",
963
- icon: "https://static.cartridge.gg/presets/blob-arena/icon.png",
964
- name: "Blob Arena"
965
- }
966
- },
967
- budokan: {
968
- origin: "budokan.gg",
969
- policies: {
970
- contracts: {
971
- "0x0530d9693304c79b5b506aa2fa09c27681373d71b69a839378ff5fd108aa5fc6": {
972
- name: "Budokan",
973
- methods: [
974
- {
975
- entrypoint: "create_tournament"
976
- },
977
- {
978
- entrypoint: "enter_tournament"
979
- },
980
- {
981
- entrypoint: "submit_score"
982
- },
983
- {
984
- entrypoint: "claim_prize"
985
- },
986
- {
987
- entrypoint: "add_prize"
988
- },
989
- {
990
- entrypoint: "register_token"
991
- }
992
- ]
993
- }
994
- }
995
- },
996
- theme: {
997
- colors: {
998
- primary: "#B1B97A"
999
- },
1000
- cover: "https://static.cartridge.gg/presets/budokan/cover.png",
1001
- icon: "https://static.cartridge.gg/presets/budokan/icon.png",
1002
- name: "Budokan"
1003
- }
1004
- },
1005
- cartridge: {
1006
- origin: "*",
1007
- theme: {
1008
- name: "Cartridge",
1009
- icon: "https://static.cartridge.gg/presets/cartridge/icon.svg",
1010
- cover: {
1011
- light: "https://static.cartridge.gg/presets/cartridge/cover-light.png",
1012
- dark: "https://static.cartridge.gg/presets/cartridge/cover-dark.png"
1013
- }
1014
- }
1015
- },
1016
- "dark-shuffle": {
1017
- origin: ["darkshuffle.io", "darkshuffle.dev"],
1018
- theme: {
1019
- colors: {
1020
- primary: "#F59100"
1021
- },
1022
- cover: "https://static.cartridge.gg/presets/dark-shuffle/cover.png",
1023
- icon: "https://static.cartridge.gg/presets/dark-shuffle/icon.svg",
1024
- name: "Dark Shuffle"
1025
- },
1026
- policies: {
1027
- contracts: {
1028
- "0x020fc3c9efd0dde5f53642dac7f53638aeaae98ff9af5f1642546f389ce9dec5": {
1029
- name: "game_systems",
1030
- methods: [
1031
- {
1032
- entrypoint: "mint"
1033
- },
1034
- {
1035
- entrypoint: "start_game"
1036
- }
1037
- ]
1038
- },
1039
- "0x036d27fb8604302b7e4f747a73a84b7c9ae9106f3c5f65e51e934fac9f7c753f": {
1040
- name: "battle_systems",
1041
- methods: [
1042
- {
1043
- entrypoint: "battle_actions"
1044
- }
1045
- ]
1046
- },
1047
- "0x046f9c2f2f3144059f7332bd989151f782f462f4ea6e3755c2f7b3eac49be73d": {
1048
- name: "draft_systems",
1049
- methods: [
1050
- {
1051
- entrypoint: "pick_card"
1052
- }
1053
- ]
1054
- },
1055
- "0x045543452215a2b416d8c52e5a475e7e0eed2e7cbaf5a699ae5fc0599f4afae9": {
1056
- name: "map_systems",
1057
- methods: [
1058
- {
1059
- entrypoint: "generate_tree"
1060
- },
1061
- {
1062
- entrypoint: "select_node"
1063
- }
1064
- ]
1065
- },
1066
- "0x0530d9693304c79b5b506aa2fa09c27681373d71b69a839378ff5fd108aa5fc6": {
1067
- name: "tournament_component",
1068
- methods: [
1069
- {
1070
- entrypoint: "enter_tournament"
1071
- }
1072
- ]
1073
- }
1074
- }
1075
- }
1076
- },
1077
- dominion: {
1078
- origin: "https://dominion.fun",
1079
- theme: {
1080
- colors: {
1081
- primary: "#19cfff"
1082
- },
1083
- cover: "https://static.cartridge.gg/presets/dominion/cover.png",
1084
- icon: "https://static.cartridge.gg/presets/dominion/icon.svg",
1085
- name: "Dominion"
1086
- }
1087
- },
1088
- "dope-wars": {
1089
- origin: "dopewars.game",
1090
- policies: {
1091
- contracts: {
1092
- "0x051Fea4450Da9D6aeE758BDEbA88B2f665bCbf549D2C61421AA724E9AC0Ced8F": {
1093
- name: "VRF Provider",
1094
- description: "Provides verifiable random functions",
1095
- methods: [
1096
- {
1097
- name: "Request Random",
1098
- description: "Request a random number",
1099
- entrypoint: "request_random"
1100
- }
1101
- ]
1102
- },
1103
- "0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113": {
1104
- name: "Paper Token",
1105
- description: "Manages paper approvals",
1106
- methods: [
1107
- {
1108
- name: "Approve",
1109
- description: "Approve paper usage",
1110
- entrypoint: "approve"
1111
- }
1112
- ]
1113
- },
1114
- "0x044a23BbfE03FFe90D3C23Fb6e5A8AD0341036C039363DfA6F3513278Aa51fCA": {
1115
- name: "Game Contract",
1116
- description: "Core game mechanics",
1117
- methods: [
1118
- {
1119
- name: "Create Game",
1120
- description: "Start a new game",
1121
- entrypoint: "create_game"
1122
- },
1123
- {
1124
- name: "Travel",
1125
- description: "Travel to a new location",
1126
- entrypoint: "travel"
1127
- },
1128
- {
1129
- name: "Decide",
1130
- description: "Make a game decision",
1131
- entrypoint: "decide"
1132
- },
1133
- {
1134
- name: "End Game",
1135
- description: "End the current game",
1136
- entrypoint: "end_game"
1137
- }
1138
- ]
1139
- },
1140
- "0x0412445e644070C69fEa16b964cC81Cd6dEBF6A4DBf683E2E9686a45ad088de8": {
1141
- name: "Laundromat Contract",
1142
- description: "Manages game scoring and laundering",
1143
- methods: [
1144
- {
1145
- name: "Register Score",
1146
- description: "Register a game score",
1147
- entrypoint: "register_score"
1148
- },
1149
- {
1150
- name: "Claim",
1151
- description: "Claim rewards",
1152
- entrypoint: "claim"
1153
- },
1154
- {
1155
- name: "Launder",
1156
- description: "Launder resources",
1157
- entrypoint: "launder"
1158
- }
1159
- ]
1160
- }
1161
- }
1162
- },
1163
- theme: {
1164
- colors: {
1165
- primary: "#11ED83"
1166
- },
1167
- cover: "https://static.cartridge.gg/presets/dope-wars/cover.png",
1168
- icon: "https://static.cartridge.gg/presets/dope-wars/icon.png",
1169
- name: "Dope Wars"
1170
- }
1171
- },
1172
- dragark: {
1173
- origin: "dragark.net",
1174
- policies: {
1175
- contracts: {
1176
- "0x62525c1337037a6a50a61f12045630a271758a350e57616e79a6ed14004ce74": {
1177
- name: "Achievement Systems",
1178
- description: "Allows you to interact with achievement features.",
1179
- methods: [
1180
- {
1181
- name: "Claim Achievement Reward",
1182
- description: "A method to claim your achievement reward.",
1183
- entrypoint: "claim_achievement_reward"
1184
- }
1185
- ]
1186
- },
1187
- "0xa5a3284a1e3ce9887b50876acee14a1af9705659b3ad053deff80d84c5555a": {
1188
- name: "Dragon Systems",
1189
- description: "Allows you to interact with dragon features.",
1190
- methods: [
1191
- {
1192
- name: "Activate Dragon",
1193
- description: "A method to activate the Dragark NFT into the game.",
1194
- entrypoint: "activate_dragon"
1195
- },
1196
- {
1197
- name: "Deactivate Dragon",
1198
- description: "A method to deactivate Dragark NFT out of the game.",
1199
- entrypoint: "deactivate_dragon"
1200
- },
1201
- {
1202
- name: "Claim Default Dragon",
1203
- description: "A method to claim the default Dragark.",
1204
- entrypoint: "claim_default_dragon"
1205
- },
1206
- {
1207
- name: "Upgrade Dragon",
1208
- description: "A method to upgrade the Dragark's level.",
1209
- entrypoint: "upgrade_dragon"
1210
- }
1211
- ]
1212
- },
1213
- "0x456e9a70c1a8ce2e340592d1a885f2ac152349d785a6aef4d640d9a09f9a1bd": {
1214
- name: "Island Systems",
1215
- description: "Allows you to interact with island features.",
1216
- methods: [
1217
- {
1218
- name: "Claim Resources",
1219
- description: "A method to claim the island's rescources.",
1220
- entrypoint: "claim_resources"
1221
- },
1222
- {
1223
- name: "Claim Resources Islands",
1224
- description: "A method to claim rescources on multiple islands.",
1225
- entrypoint: "claim_resources_islands"
1226
- }
1227
- ]
1228
- },
1229
- "0x2f77a88ac64fd1473ea067ea176ae3805224a2ba5173c63c77d0f214c01ac5d": {
1230
- name: "Journey Systems",
1231
- description: "Allows you to interact with journey features.",
1232
- methods: [
1233
- {
1234
- name: "Start Journey",
1235
- description: "A method to start a new journey to other island.",
1236
- entrypoint: "start_journey"
1237
- },
1238
- {
1239
- name: "Finish Journey",
1240
- description: "A method to finish a started journey.",
1241
- entrypoint: "finish_journey"
1242
- }
1243
- ]
1244
- },
1245
- "0x1ca130b614f063a24dafad53db11cbb914fa7cff2eac23df1c32f5ff71a8ec2": {
1246
- name: "Map Systems",
1247
- description: "Allows you to interact with map features.",
1248
- methods: [
1249
- {
1250
- name: "Join Map",
1251
- description: "A method to join the map.",
1252
- entrypoint: "join_map"
1253
- },
1254
- {
1255
- name: "Rejoin Map",
1256
- description: "A method to rejoin the map.",
1257
- entrypoint: "re_join_map"
1258
- }
1259
- ]
1260
- },
1261
- "0x272741bbe4abc02c8be4b094ca642e1df573e99e06f85f649bc35dd26ae4543": {
1262
- name: "Mission Systems",
1263
- description: "Allows you to interact with mission features.",
1264
- methods: [
1265
- {
1266
- name: "Claim Mission Reward",
1267
- description: "A method to claim your mission reward.",
1268
- entrypoint: "claim_mission_reward"
1269
- }
1270
- ]
1271
- },
1272
- "0x54ad7af1fc62a786c9023d9f3ef8e8abf8cf332649b784188c1b25d2cb384b2": {
1273
- name: "Player Systems",
1274
- description: "Allows you to interact with player features.",
1275
- methods: [
1276
- {
1277
- name: "Buy Energy",
1278
- description: "A method to buy energy used in scouting the map.",
1279
- entrypoint: "buy_energy"
1280
- },
1281
- {
1282
- name: "Claim Reward",
1283
- description: "A method to claim your reward.",
1284
- entrypoint: "claim_reward"
1285
- },
1286
- {
1287
- name: "Upgrade Account Level",
1288
- description: "A method to upgrade your account level.",
1289
- entrypoint: "upgrade_account_level"
1290
- },
1291
- {
1292
- name: "Upgrade Invitation Level",
1293
- description: "A method to upgrade your invitation level.",
1294
- entrypoint: "upgrade_invitation_level"
1295
- },
1296
- {
1297
- name: "Redeem Invite Code",
1298
- description: "A method to redeem invite code.",
1299
- entrypoint: "redeem_invite_code"
1300
- },
1301
- {
1302
- name: "Buy Resources Pack",
1303
- description: "A method to buy resources pack.",
1304
- entrypoint: "buy_resources_pack"
1305
- },
1306
- {
1307
- name: "Activate Element NFT",
1308
- description: "A method to activate the Element NFT into the game.",
1309
- entrypoint: "activate_element_nft"
1310
- },
1311
- {
1312
- name: "Claim Pool Share Reward",
1313
- description: "A method to claim your Pool Share reward.",
1314
- entrypoint: "claim_pool_share_reward"
1315
- }
1316
- ]
1317
- },
1318
- "0x68717880bd76fda6790e895e937e2c638213e7b9aa07385231bbf17dfe8a78c": {
1319
- name: "Scout Systems",
1320
- description: "Allows you to interact with scout features.",
1321
- methods: [
1322
- {
1323
- name: "Scout",
1324
- description: "A method to scout the map.",
1325
- entrypoint: "scout"
1326
- }
1327
- ]
1328
- },
1329
- "0x14705481d28fab7bb37d6cb19d3392d39f838a1d5572b8c8f18e85e0c4b8918": {
1330
- name: "Shield Systems",
1331
- description: "Allows you to interact with shield features.",
1332
- methods: [
1333
- {
1334
- name: "Activate Shield",
1335
- description: "A method to activate a shield to protect your island.",
1336
- entrypoint: "activate_shield"
1337
- },
1338
- {
1339
- name: "Deactivate Shield",
1340
- description: "A method to deactivate a shield from your island.",
1341
- entrypoint: "deactivate_shield"
1342
- },
1343
- {
1344
- name: "Buy Shield",
1345
- description: "A method to buy a shield.",
1346
- entrypoint: "buy_shield"
1347
- }
1348
- ]
1349
- },
1350
- "0x23d6a41c06e2d7b60437ba4da3eca857cf9a0b94f3548396829365a0a299c63": {
1351
- name: "Star Shop Systems",
1352
- description: "Allows you to interact with star shop features.",
1353
- methods: [
1354
- {
1355
- name: "Buy Item Star Shop",
1356
- description: "A method to buy item from the Star Shop.",
1357
- entrypoint: "buy_item_star_shop"
1358
- }
1359
- ]
1360
- },
1361
- "0x511a78a1c4b33bedc4ff7d9b37eb7481bcdff77c5c2cb6f67390d43657749d0": {
1362
- name: "Treasure Hunt Systems",
1363
- description: "Allows you to interact with treasure hunt features.",
1364
- methods: [
1365
- {
1366
- name: "Insert Dragon Treasure Hunt",
1367
- description: "A method to insert your Dragarks to start a new treasure hunt.",
1368
- entrypoint: "insert_dragon_treasure_hunt"
1369
- },
1370
- {
1371
- name: "End Treasure Hunt",
1372
- description: "A method to end an existing treasure hunt and claim rewards.",
1373
- entrypoint: "end_treasure_hunt"
1374
- }
1375
- ]
1376
- }
1377
- }
1378
- },
1379
- theme: {
1380
- colors: {
1381
- primary: "#71EB34"
1382
- },
1383
- cover: "https://static.cartridge.gg/presets/dragark/cover.png",
1384
- icon: "https://static.cartridge.gg/presets/dragark/icon.png",
1385
- name: "Dragark"
1386
- }
1387
- },
1388
- eternum: {
1389
- origin: ["eternum.realms.world", "empire.realms.world"],
1390
- policies: {
1391
- contracts: {
1392
- "0x4ed3a7c5f53c6e96186eaf1b670bd2e2a3699c08e070aedf4e5fc6ac246ddc1": {
1393
- name: "Pillage",
1394
- description: "Allows you to raid a structure and pillage resources",
1395
- methods: [
1396
- {
1397
- name: "Battle Pillage",
1398
- description: "Pillage a structure",
1399
- entrypoint: "battle_pillage"
1400
- }
1401
- ]
1402
- },
1403
- "0x2620f65aa2fd72d705306ada1ee7410023a3df03da9291f1ccb744fabfebc0": {
1404
- name: "Battle contract",
1405
- description: "Required to engage in battles",
1406
- methods: [
1407
- {
1408
- name: "Battle Start",
1409
- description: "Start a battle",
1410
- entrypoint: "battle_start"
1411
- },
1412
- {
1413
- name: "Battle Force Start",
1414
- description: "Force start a battle",
1415
- entrypoint: "battle_force_start"
1416
- },
1417
- {
1418
- name: "Battle Join",
1419
- description: "Join a battle",
1420
- entrypoint: "battle_join"
1421
- },
1422
- {
1423
- name: "Battle Leave",
1424
- description: "Leave a battle",
1425
- entrypoint: "battle_leave"
1426
- },
1427
- {
1428
- name: "Battle Claim",
1429
- description: "Claim a structure after a battle",
1430
- entrypoint: "battle_claim"
1431
- },
1432
- {
1433
- name: "Battle Resolve",
1434
- description: "Reopens the bank after battle",
1435
- entrypoint: "battle_resolve"
1436
- }
1437
- ]
1438
- },
1439
- "0x6bf57710571fd159e71b1ed155bb0759027e416c88a06556f321c94c214e768": {
1440
- name: "Leave battle contract",
1441
- description: "Allows armies to leave a battle",
1442
- methods: [
1443
- {
1444
- name: "Leave Battle",
1445
- description: "Leave a battle",
1446
- entrypoint: "leave_battle"
1447
- },
1448
- {
1449
- name: "Leave Battle If Ended",
1450
- description: "Leave a battle if its ended",
1451
- entrypoint: "leave_battle_if_ended"
1452
- }
1453
- ]
1454
- },
1455
- "0x4b6a35c0c541467674ebb9640113a6d79c6f5a468796e9299b8e484a770032a": {
1456
- name: "Building contract",
1457
- description: "Allows to manage buildings",
1458
- methods: [
1459
- {
1460
- name: "Create",
1461
- description: "Create a building",
1462
- entrypoint: "create"
1463
- },
1464
- {
1465
- name: "Pause Production",
1466
- description: "Pause the production of a building",
1467
- entrypoint: "pause_production"
1468
- },
1469
- {
1470
- name: "Resume Production",
1471
- description: "Resume production of a building",
1472
- entrypoint: "resume_production"
1473
- },
1474
- {
1475
- name: "Destroy a building",
1476
- description: "Destroy a building",
1477
- entrypoint: "destroy"
1478
- }
1479
- ]
1480
- },
1481
- "0x57d514154bb4dc319539d4e338312a41c248fb6a5122f82b2f2e11ddd3e67e4": {
1482
- name: "Guild contract",
1483
- description: "Allows guild utilities",
1484
- methods: [
1485
- {
1486
- name: "Create Guild",
1487
- description: "Creates a new guild",
1488
- entrypoint: "create_guild"
1489
- },
1490
- {
1491
- name: "Join Guild",
1492
- description: "Join an existing guild",
1493
- entrypoint: "join_guild"
1494
- },
1495
- {
1496
- name: "Whitelist Player",
1497
- description: "Add a player to the guild's whitelist",
1498
- entrypoint: "whitelist_player"
1499
- },
1500
- {
1501
- name: "Transfer Guild Ownership",
1502
- description: "Transfer ownership of the guild to another player",
1503
- entrypoint: "transfer_guild_ownership"
1504
- },
1505
- {
1506
- name: "Remove Guild Member",
1507
- description: "Remove a member from the guild",
1508
- entrypoint: "remove_guild_member"
1509
- },
1510
- {
1511
- name: "Remove Player From Whitelist",
1512
- description: "Remove a player from the guild's whitelist",
1513
- entrypoint: "remove_player_from_whitelist"
1514
- }
1515
- ]
1516
- },
1517
- "0x2fcc3c1691387321c2f4d6310eda7a14365bd274c1a37ed3948d2e93a56f821": {
1518
- name: "Hyperstructure contract",
1519
- description: "Handles the creation and management of hyperstructures",
1520
- methods: [
1521
- {
1522
- name: "Get Points",
1523
- description: "Gets your total number of points",
1524
- entrypoint: "get_points"
1525
- },
1526
- {
1527
- name: "Create",
1528
- description: "Create a new hyperstructure",
1529
- entrypoint: "create"
1530
- },
1531
- {
1532
- name: "Contribute To Construction",
1533
- description: "Contribute resources to hyperstructure construction",
1534
- entrypoint: "contribute_to_construction"
1535
- },
1536
- {
1537
- name: "Set Co Owners",
1538
- description: "Set additional owners for the hyperstructure",
1539
- entrypoint: "set_co_owners"
1540
- },
1541
- {
1542
- name: "End Game",
1543
- description: "Terminates the current game season once you've reached enough points",
1544
- entrypoint: "end_game"
1545
- },
1546
- {
1547
- name: "Set Access",
1548
- description: "Configure access permissions for contributions to the hyperstructure",
1549
- entrypoint: "set_access"
1550
- }
1551
- ]
1552
- },
1553
- "0xa052c5ca082356bcc8457f0f805eaf18f97d0fdddde3f90f5b238923859ed4": {
1554
- name: "AMM liquidity contract",
1555
- description: "Manages liquidity for the Automated Market Maker",
1556
- methods: [
1557
- {
1558
- name: "Add",
1559
- description: "Add liquidity to the pool",
1560
- entrypoint: "add"
1561
- },
1562
- {
1563
- name: "Remove",
1564
- description: "Remove liquidity from the pool",
1565
- entrypoint: "remove"
1566
- }
1567
- ]
1568
- },
1569
- "0x4a212c52c4035bc9bd170125216604f406dcd75b41be11d3b4d89047366d84d": {
1570
- name: "Exploration contract",
1571
- description: "Allows you to move to unexplored hexes on the map",
1572
- methods: [
1573
- {
1574
- name: "Explore",
1575
- description: "Explore an uncharted hex on the game map",
1576
- entrypoint: "explore"
1577
- }
1578
- ]
1579
- },
1580
- "0x7e3bae0e253a0131063b63ee4d7b27b50329c617ae88b82d529a70f1a11c63": {
1581
- name: "Naming contract",
1582
- description: "Manages entity naming in the game",
1583
- methods: [
1584
- {
1585
- name: "Set Entity Name",
1586
- description: "Assign a custom name to a game entity",
1587
- entrypoint: "set_entity_name"
1588
- },
1589
- {
1590
- name: "Set Address Name",
1591
- description: "Assign a custom name to a user's address",
1592
- entrypoint: "set_address_name"
1593
- }
1594
- ]
1595
- },
1596
- "0x1b480f620ea35431ab43dba634795b14f547ef3e77370db6f0a31f2fdc21d86": {
1597
- name: "Realms contract",
1598
- description: "Manages realm-related actions",
1599
- methods: [
1600
- {
1601
- name: "Create a realm",
1602
- description: "Create a new realm",
1603
- entrypoint: "create"
1604
- },
1605
- {
1606
- name: "Upgrade Level",
1607
- description: "Upgrade the level of a realm",
1608
- entrypoint: "upgrade_level"
1609
- },
1610
- {
1611
- name: "Quest Claim",
1612
- description: "Claim rewards from completed quests",
1613
- entrypoint: "quest_claim"
1614
- }
1615
- ]
1616
- },
1617
- "0x691a60b709ca5c1c5ff86824831f84deb26f0f5d07d70c0f807eab48110d2f6": {
1618
- name: "Resource bridge contract",
1619
- description: "Manages bridge transfers between L2 and Eternum",
1620
- methods: [
1621
- {
1622
- name: "Deposit Initial",
1623
- description: "Initial deposit of resources for bridge transfer",
1624
- entrypoint: "deposit_initial"
1625
- },
1626
- {
1627
- name: "Deposit",
1628
- description: "Deposit additional resources for bridge transfer",
1629
- entrypoint: "deposit"
1630
- },
1631
- {
1632
- name: "Start Withdraw",
1633
- description: "Initiate a withdrawal process",
1634
- entrypoint: "start_withdraw"
1635
- },
1636
- {
1637
- name: "Finish Withdraw",
1638
- description: "Finalize a withdrawal process",
1639
- entrypoint: "finish_withdraw"
1640
- }
1641
- ]
1642
- },
1643
- "0x42c0303a2119a9e20daa60e83c48221cdf1bb2a4c009bab031d1cd3555a127e": {
1644
- name: "Resource contract",
1645
- description: "In-game resource management",
1646
- methods: [
1647
- {
1648
- name: "Approve",
1649
- description: "Approve resource transfer",
1650
- entrypoint: "approve"
1651
- },
1652
- {
1653
- name: "Send",
1654
- description: "Send resources to another entity",
1655
- entrypoint: "send"
1656
- },
1657
- {
1658
- name: "Pickup",
1659
- description: "Collect available resources after approval",
1660
- entrypoint: "pickup"
1661
- }
1662
- ]
1663
- },
1664
- "0x4f92a1d00d3aec8cece60fc2d0fc236fe1d95c54ff0ceb2f393fbc7e0863d8e": {
1665
- name: "AMM swap contract",
1666
- description: "Handles token swaps in the Automated Market Maker",
1667
- methods: [
1668
- {
1669
- name: "Buy",
1670
- description: "Purchase tokens from the liquidity pool",
1671
- entrypoint: "buy"
1672
- },
1673
- {
1674
- name: "Sell",
1675
- description: "Sell tokens to the liquidity pool",
1676
- entrypoint: "sell"
1677
- }
1678
- ]
1679
- },
1680
- "0x7e2b1334398fafbe640f34bacae99b649d633417960ee397b6a8fb117fec819": {
1681
- name: "Market contract",
1682
- description: "Manages trading orders in the in-game market",
1683
- methods: [
1684
- {
1685
- name: "Create Order",
1686
- description: "Create a new trading order",
1687
- entrypoint: "create_order"
1688
- },
1689
- {
1690
- name: "Accept Order",
1691
- description: "Accept a trading order",
1692
- entrypoint: "accept_order"
1693
- },
1694
- {
1695
- name: "Accept Partial Order",
1696
- description: "Accept a partial trading order",
1697
- entrypoint: "accept_partial_order"
1698
- },
1699
- {
1700
- name: "Cancel Order",
1701
- description: "Cancel a trading order",
1702
- entrypoint: "cancel_order"
1703
- }
1704
- ]
1705
- },
1706
- "0x4069c2be57f08fef9f31afc85a5b4c03c208ebdb278b9d853606caa7a9cbee6": {
1707
- name: "Map travel contract",
1708
- description: "Manages player movement across the game map",
1709
- methods: [
1710
- {
1711
- name: "Travel Hex",
1712
- description: "Move to a specific hex on the map",
1713
- entrypoint: "travel_hex"
1714
- }
1715
- ]
1716
- },
1717
- "0x26be0ed574aa9ee6f73b53b12f0a199ddbf4ac697470316cdb3d9d1f5680cab": {
1718
- name: "Army contract",
1719
- description: "Manages army-related actions",
1720
- methods: [
1721
- {
1722
- name: "Army Create",
1723
- description: "Create a new army",
1724
- entrypoint: "army_create"
1725
- },
1726
- {
1727
- name: "Army Delete",
1728
- description: "Delete an existing army",
1729
- entrypoint: "army_delete"
1730
- },
1731
- {
1732
- name: "Army Buy Troops",
1733
- description: "Buy troops for an army",
1734
- entrypoint: "army_buy_troops"
1735
- },
1736
- {
1737
- name: "Army Merge Troops",
1738
- description: "Merge troops from multiple armies",
1739
- entrypoint: "army_merge_troops"
1740
- }
1741
- ]
1742
- },
1743
- "0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f": {
1744
- name: "VRF Provider",
1745
- description: "Verifiable Random Function contract, allows randomness in the game",
1746
- methods: [
1747
- {
1748
- name: "Request Random",
1749
- description: "Allows requesting random numbers from the VRF provider",
1750
- entrypoint: "request_random"
1751
- }
1752
- ]
1753
- },
1754
- "0x057675b9c0bd62b096a2e15502a37b290fa766ead21c33eda42993e48a714b80": {
1755
- name: "Season pass ERC20 contract",
1756
- description: "Manages the season passes",
1757
- methods: [
1758
- {
1759
- name: "Approve for all",
1760
- description: "Approves transfer of season pass",
1761
- entrypoint: "set_approval_for_all"
1762
- }
1763
- ]
1764
- },
1765
- "0x4b5e65a9617c7ba3c7ea64324ff4338a400adb1a3cfe903b3f8b647cbb59fb7": {
1766
- name: "Season Systems",
1767
- description: "Register and claim",
1768
- methods: [
1769
- {
1770
- name: "Register",
1771
- description: "Registers to leaderboard",
1772
- entrypoint: "register_to_leaderboard"
1773
- },
1774
- {
1775
- name: "Claim",
1776
- description: "Claim",
1777
- entrypoint: "claim_leaderboard_rewards"
1778
- }
1779
- ]
1780
- }
1781
- },
1782
- messages: [
1783
- {
1784
- types: {
1785
- StarknetDomain: [
1786
- {
1787
- name: "name",
1788
- type: "shortstring"
1789
- },
1790
- {
1791
- name: "version",
1792
- type: "shortstring"
1793
- },
1794
- {
1795
- name: "chainId",
1796
- type: "shortstring"
1797
- },
1798
- {
1799
- name: "revision",
1800
- type: "shortstring"
1801
- }
1802
- ],
1803
- "s0_eternum-Message": [
1804
- {
1805
- name: "identity",
1806
- type: "ContractAddress"
1807
- },
1808
- {
1809
- name: "channel",
1810
- type: "shortstring"
1811
- },
1812
- {
1813
- name: "content",
1814
- type: "string"
1815
- },
1816
- {
1817
- name: "timestamp",
1818
- type: "felt"
1819
- },
1820
- {
1821
- name: "salt",
1822
- type: "felt"
1823
- }
1824
- ]
1825
- },
1826
- primaryType: "s0_eternum-Message",
1827
- domain: {
1828
- name: "Eternum",
1829
- version: "1",
1830
- chainId: "SN_MAIN",
1831
- revision: "1"
1832
- }
1833
- }
1834
- ]
1835
- },
1836
- theme: {
1837
- name: "Eternum",
1838
- icon: "https://static.cartridge.gg/presets/eternum/icon.svg",
1839
- cover: "https://static.cartridge.gg/presets/eternum/cover.png",
1840
- colors: {
1841
- primary: "#dc8b07"
1842
- }
1843
- }
1844
- },
1845
- flippyflop: {
1846
- origin: "flippyflop.gg",
1847
- theme: {
1848
- colors: {
1849
- primary: "#F38332"
1850
- },
1851
- cover: "https://static.cartridge.gg/presets/flippyflop/cover.png",
1852
- icon: "https://static.cartridge.gg/presets/flippyflop/icon.png",
1853
- name: "FlippyFlop"
1854
- }
1855
- },
1856
- "force-prime": {
1857
- origin: "forceprime.io",
1858
- theme: {
1859
- colors: {
1860
- primary: "#E1CC89"
1861
- },
1862
- cover: "https://static.cartridge.gg/presets/force-prime/cover.png",
1863
- icon: "https://static.cartridge.gg/presets/force-prime/icon.png",
1864
- name: "Force Prime"
1865
- }
1866
- },
1867
- "jokers-of-neon": {
1868
- origin: "jokersofneon.com",
1869
- theme: {
1870
- colors: {
1871
- primary: "#A144B2"
1872
- },
1873
- cover: "https://static.cartridge.gg/presets/jokers-of-neon/cover.png",
1874
- icon: "https://static.cartridge.gg/presets/jokers-of-neon/icon.png",
1875
- name: "Jokers of Neon"
1876
- }
1877
- },
1878
- "loot-survivor": {
1879
- origin: "lootsurvivor.io",
1880
- policies: {
1881
- contracts: {
1882
- "0x0305f26ad19e0a10715d9f3137573d3a543de7b707967cd85d11234d6ec0fb7e": {
1883
- methods: [
1884
- {
1885
- entrypoint: "attack"
1886
- },
1887
- {
1888
- entrypoint: "drop"
1889
- },
1890
- {
1891
- entrypoint: "equip"
1892
- },
1893
- {
1894
- entrypoint: "explore"
1895
- },
1896
- {
1897
- entrypoint: "flee"
1898
- },
1899
- {
1900
- entrypoint: "new_game"
1901
- },
1902
- {
1903
- entrypoint: "transfer_from"
1904
- },
1905
- {
1906
- entrypoint: "upgrade"
1907
- }
1908
- ]
1909
- },
1910
- "0x3347382d530ff6acb9283ac1d78471187aae8a4690e9316bb4e3c3365ff7a86": {
1911
- methods: [
1912
- {
1913
- entrypoint: "enter_tournament"
1914
- },
1915
- {
1916
- entrypoint: "start_tournament"
1917
- }
1918
- ]
1919
- }
1920
- }
1921
- },
1922
- theme: {
1923
- colors: {
1924
- primary: "#33FF33"
1925
- },
1926
- cover: "https://static.cartridge.gg/presets/loot-survivor/cover.png",
1927
- icon: "https://static.cartridge.gg/presets/loot-survivor/icon.png",
1928
- name: "Loot Survivor"
1929
- }
1930
- },
1931
- nums: {
1932
- origin: ["nums.gg", "www.nums.gg"],
1933
- policies: {
1934
- contracts: {
1935
- "0x07ccfbc43c109efd466638defa52702382ace922051d35a0554b5ccd02a8f155": {
1936
- name: "Game Actions",
1937
- methods: [
1938
- {
1939
- name: "Create Game",
1940
- entrypoint: "create_game",
1941
- description: "Creates a new game"
1942
- },
1943
- {
1944
- name: "Set Slot",
1945
- entrypoint: "set_slot",
1946
- description: "Sets one slot for the game"
1947
- }
1948
- ]
1949
- },
1950
- "0x00ea44dd8e971d3af9f99568577bf14b0a80a7f7763fa6281840ab68a8a53ba9": {
1951
- name: "Claim Actions",
1952
- methods: [
1953
- {
1954
- name: "Claim Appchain Reward",
1955
- entrypoint: "claim_reward",
1956
- description: "Claims token rewards on Appchain"
1957
- }
1958
- ]
1959
- },
1960
- "0x03ee42961dc151d740df95c44b929abe85cf66e8444e0279252dd99b055c64b0": {
1961
- name: "Rewards Claim",
1962
- methods: [
1963
- {
1964
- name: "Consume Reward on Starknet",
1965
- entrypoint: "consume_claim_reward",
1966
- description: "Consumes a claim reward message on Starknet"
1967
- }
1968
- ]
1969
- },
1970
- "0x7ed472bdde3b19a5cf2334ad0f368426272f477938270b1b04259f159bdc0e2": {
1971
- name: "VRF Provider",
1972
- methods: [
1973
- {
1974
- name: "Request Random",
1975
- entrypoint: "request_random",
1976
- description: "Requests a random number from the VRF contract"
1977
- }
1978
- ]
1979
- },
1980
- "0x4d776373427434a22f7d60d0f7fe0e336fd830edf4294acec33d9f2e1275327": {
1981
- name: "Social",
1982
- description: "Social contract to manage your social activities",
1983
- methods: [
1984
- {
1985
- name: "pin",
1986
- entrypoint: "pin",
1987
- description: "Pin an achievement."
1988
- },
1989
- {
1990
- name: "unpin",
1991
- entrypoint: "unpin",
1992
- description: "Unpin an achievement."
1993
- }
1994
- ]
1995
- }
1996
- }
1997
- },
1998
- theme: {
1999
- colors: {
2000
- primary: "#9E84E9"
2001
- },
2002
- cover: "https://static.cartridge.gg/presets/nums/cover.png",
2003
- icon: "https://static.cartridge.gg/presets/nums/icon.png",
2004
- name: "Nums"
2005
- }
2006
- },
2007
- paved: {
2008
- origin: "paved.gg",
2009
- theme: {
2010
- colors: {
2011
- primary: "#B0CAF8"
2012
- },
2013
- cover: "https://static.cartridge.gg/presets/paved/cover.png",
2014
- icon: "https://static.cartridge.gg/presets/paved/icon.svg",
2015
- name: "Paved"
2016
- }
2017
- },
2018
- pistols: {
2019
- origin: [
2020
- "pistols.underware.gg",
2021
- "pistols.stage.underware.gg",
2022
- "play.pistols.gg"
2023
- ],
2024
- theme: {
2025
- colors: {
2026
- primary: "#EF9758"
2027
- },
2028
- cover: "https://static.cartridge.gg/presets/pistols/cover.png",
2029
- icon: "https://static.cartridge.gg/presets/pistols/icon.png",
2030
- name: "Pistols at Dawn"
2031
- },
2032
- policies: {
2033
- contracts: {
2034
- "0x01445d46f1ba32c4f91eb61e161ffcb7ce70598649ad72e5405eaee5a2afba71": {
2035
- name: "Game",
2036
- description: "Game loop contract",
2037
- methods: [
2038
- {
2039
- entrypoint: "commit_moves"
2040
- },
2041
- {
2042
- entrypoint: "reveal_moves"
2043
- },
2044
- {
2045
- entrypoint: "collect"
2046
- }
2047
- ]
2048
- },
2049
- "0x042b5966ef49614c78ca1577f617634ff3dbfee1cb811f1386cd9518b2cedd9e": {
2050
- name: "Tutorial",
2051
- description: "Tutorial game contract",
2052
- methods: [
2053
- {
2054
- entrypoint: "create_tutorial"
2055
- },
2056
- {
2057
- entrypoint: "commit_moves"
2058
- },
2059
- {
2060
- entrypoint: "reveal_moves"
2061
- }
2062
- ]
2063
- },
2064
- "0x05f3df8d2895ab76f21f13114ee33292356a009900ed32e2ab5f280ac932546a": {
2065
- name: "Pack token",
2066
- description: "Packs ERC721 contract",
2067
- methods: [
2068
- {
2069
- entrypoint: "claim_welcome_pack"
2070
- },
2071
- {
2072
- entrypoint: "purchase"
2073
- },
2074
- {
2075
- entrypoint: "open"
2076
- }
2077
- ]
2078
- },
2079
- "0x06afa7f3d4ddce0426572b0c2a91df17399997e2f44cc3586535ae9639939e67": {
2080
- name: "Duel token",
2081
- description: "Duel ERC721 contract",
2082
- methods: [
2083
- {
2084
- entrypoint: "create_duel"
2085
- },
2086
- {
2087
- entrypoint: "reply_duel"
2088
- },
2089
- {
2090
- entrypoint: "transfer_to_winner"
2091
- }
2092
- ]
2093
- }
2094
- },
2095
- messages: [
2096
- {
2097
- types: {
2098
- StarknetDomain: [
2099
- {
2100
- name: "name",
2101
- type: "shortstring"
2102
- },
2103
- {
2104
- name: "version",
2105
- type: "shortstring"
2106
- },
2107
- {
2108
- name: "chainId",
2109
- type: "shortstring"
2110
- },
2111
- {
2112
- name: "revision",
2113
- type: "shortstring"
2114
- }
2115
- ],
2116
- "pistols-PlayerOnline": [
2117
- {
2118
- name: "identity",
2119
- type: "ContractAddress"
2120
- },
2121
- {
2122
- name: "timestamp",
2123
- type: "felt"
2124
- }
2125
- ]
2126
- },
2127
- primaryType: "pistols-PlayerOnline",
2128
- domain: {
2129
- name: "Underware_gg",
2130
- version: "1.0.0",
2131
- chainId: "SN_MAIN",
2132
- revision: "1"
2133
- },
2134
- name: "PlayerOnline",
2135
- description: "Notify the server that a player is online"
2136
- },
2137
- {
2138
- types: {
2139
- StarknetDomain: [
2140
- {
2141
- name: "name",
2142
- type: "shortstring"
2143
- },
2144
- {
2145
- name: "version",
2146
- type: "shortstring"
2147
- },
2148
- {
2149
- name: "chainId",
2150
- type: "shortstring"
2151
- },
2152
- {
2153
- name: "revision",
2154
- type: "shortstring"
2155
- }
2156
- ],
2157
- "pistols-PlayerBookmark": [
2158
- {
2159
- name: "identity",
2160
- type: "ContractAddress"
2161
- },
2162
- {
2163
- name: "target_address",
2164
- type: "ContractAddress"
2165
- },
2166
- {
2167
- name: "target_id",
2168
- type: "u128"
2169
- },
2170
- {
2171
- name: "enabled",
2172
- type: "bool"
2173
- }
2174
- ]
2175
- },
2176
- primaryType: "pistols-PlayerBookmark",
2177
- domain: {
2178
- name: "Underware_gg",
2179
- version: "1.0.0",
2180
- chainId: "SN_MAIN",
2181
- revision: "1"
2182
- },
2183
- name: "PlayerBookmark",
2184
- description: "Notify the server that a player follows another player or token"
2185
- }
2186
- ]
2187
- }
2188
- },
2189
- pixelaw: {
2190
- origin: "dojo.pixelaw.xyz",
2191
- theme: {
2192
- colors: {
2193
- primary: "#7C00B1",
2194
- primaryForeground: "white"
2195
- },
2196
- cover: "https://static.cartridge.gg/presets/pixelaw/cover.png",
2197
- icon: "https://static.cartridge.gg/presets/pixelaw/icon.svg",
2198
- name: "Pixelaw"
2199
- }
2200
- },
2201
- "realm-of-ra": {
2202
- origin: "mancala.realmofra.com",
2203
- theme: {
2204
- colors: {
2205
- primary: "#de9534"
2206
- },
2207
- cover: "https://static.cartridge.gg/presets/realm-of-ra/cover.png",
2208
- icon: "https://static.cartridge.gg/presets/realm-of-ra/icon.png",
2209
- name: "Realm of Ra"
2210
- }
2211
- },
2212
- "savage-summit": {
2213
- origin: "savagesummit.io",
2214
- theme: {
2215
- colors: {
2216
- primary: "#fbf7da"
2217
- },
2218
- cover: "https://static.cartridge.gg/presets/savage-summit/cover.png",
2219
- icon: "https://static.cartridge.gg/presets/savage-summit/icon.png",
2220
- name: "Savage Summit"
2221
- }
2222
- },
2223
- "tale-weaver": {
2224
- origin: "",
2225
- theme: {
2226
- colors: {
2227
- primary: "#fce377"
2228
- },
2229
- cover: "https://static.cartridge.gg/presets/tale-weaver/cover.png",
2230
- icon: "https://static.cartridge.gg/presets/tale-weaver/icon.png",
2231
- name: "Tale Weaver"
2232
- }
2233
- },
2234
- zkastle: {
2235
- origin: "zkastle.vercel.app",
2236
- theme: {
2237
- colors: {
2238
- primary: "#E50D2C"
2239
- },
2240
- cover: "https://static.cartridge.gg/presets/zkastle/cover.png",
2241
- icon: "https://static.cartridge.gg/presets/zkastle/icon.svg",
2242
- name: "zKastle"
2243
- }
2244
- },
2245
- zktt: {
2246
- origin: "zktable.top",
2247
- theme: {
2248
- colors: {
2249
- primary: "#FFFFFF"
2250
- },
2251
- cover: "https://static.cartridge.gg/presets/zktt/cover.png",
2252
- icon: "https://static.cartridge.gg/presets/zktt/icon.png",
2253
- name: "zKTT"
2254
- }
2255
- },
2256
- zkube: {
2257
- origin: "app.zkube.xyz",
2258
- theme: {
2259
- colors: {
2260
- primary: "#5bc3e6"
2261
- },
2262
- cover: "https://static.cartridge.gg/presets/zkube/cover.png",
2263
- icon: "https://static.cartridge.gg/presets/zkube/icon.png",
2264
- name: "zKube"
2265
- }
2266
- }
2267
- };
2268
- var metadata = [
2269
- {
2270
- name: "Wrapped BTC",
2271
- symbol: "WBTC",
2272
- decimals: 8,
2273
- l2_token_address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
2274
- sort_order: 0,
2275
- total_supply: null,
2276
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7dcb2db2-a7a7-44af-660b-8262e057a100/logo"
2277
- },
2278
- {
2279
- name: "USD Coin",
2280
- symbol: "USDC",
2281
- decimals: 6,
2282
- l2_token_address: "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8",
2283
- sort_order: 5,
2284
- total_supply: null,
2285
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e5aaa970-a998-47e8-bd43-4a3b56b87200/logo"
2286
- },
2287
- {
2288
- name: "Tether USD",
2289
- symbol: "USDT",
2290
- decimals: 6,
2291
- l2_token_address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8",
2292
- sort_order: 4,
2293
- total_supply: null,
2294
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c8a721d1-07c3-46e4-ab4e-523977c30b00/logo"
2295
- },
2296
- {
2297
- name: "Ether",
2298
- symbol: "ETH",
2299
- decimals: 18,
2300
- l2_token_address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
2301
- sort_order: 3,
2302
- total_supply: null,
2303
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e07829b7-0382-4e03-7ecd-a478c5aa9f00/logo"
2304
- },
2305
- {
2306
- name: "Dai Stablecoin",
2307
- symbol: "DAI",
2308
- decimals: 18,
2309
- l2_token_address: "0x05574eb6b8789a91466f902c380d978e472db68170ff82a5b650b95a58ddf4ad",
2310
- sort_order: 4,
2311
- total_supply: null,
2312
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo"
2313
- },
2314
- {
2315
- name: "Wrapped liquid staked Ether 2.0",
2316
- symbol: "wstETH",
2317
- decimals: 18,
2318
- l2_token_address: "0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2",
2319
- sort_order: 1,
2320
- total_supply: null,
2321
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dbbcbdea-1a92-437d-3701-4a5ee129d000/logo"
2322
- },
2323
- {
2324
- name: "Rocket Pool ETH",
2325
- symbol: "rETH",
2326
- decimals: 18,
2327
- l2_token_address: "0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610",
2328
- sort_order: 1,
2329
- total_supply: null,
2330
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c9f2d6fe-fbc6-4384-0990-923dfcb7a200/logo"
2331
- },
2332
- {
2333
- name: "Paper",
2334
- symbol: "PAPER",
2335
- decimals: 18,
2336
- l2_token_address: "0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113",
2337
- sort_order: 1,
2338
- total_supply: null,
2339
- hidden: true,
2340
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/811f019a-0461-4cff-6c1e-442102863f00/logo"
2341
- },
2342
- {
2343
- name: "Uniswap",
2344
- symbol: "UNI",
2345
- decimals: 18,
2346
- l2_token_address: "0x049210ffc442172463f3177147c1aeaa36c51d152c1b0630f2364c300d4f48ee",
2347
- sort_order: 1,
2348
- total_supply: 1e9,
2349
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/361b018e-bd53-4019-27c8-7cf8d9031b00/logo"
2350
- },
2351
- {
2352
- name: "Starknet",
2353
- symbol: "STRK",
2354
- decimals: 18,
2355
- l2_token_address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
2356
- sort_order: 2,
2357
- total_supply: 1e10,
2358
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1b126320-367c-48ed-cf5a-ba7580e49600/logo"
2359
- },
2360
- {
2361
- name: "Ekubo Protocol",
2362
- symbol: "EKUBO",
2363
- decimals: 18,
2364
- l2_token_address: "0x075afe6402ad5a5c20dd25e10ec3b3986acaa647b77e4ae24b0cbc9a54a27a87",
2365
- sort_order: 1,
2366
- total_supply: 1e7,
2367
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/634d9c36-2f0b-4781-93e6-72d701b5af00/logo"
2368
- },
2369
- {
2370
- name: "Nostra",
2371
- symbol: "NSTR",
2372
- decimals: 18,
2373
- l2_token_address: "0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007",
2374
- sort_order: 1,
2375
- total_supply: 1e8,
2376
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a45c2224-17a7-4269-ea7e-3924e9755800/logo"
2377
- },
2378
- {
2379
- name: "Carmine",
2380
- symbol: "CRM",
2381
- decimals: 18,
2382
- l2_token_address: "0x51c4b1fe3bf6774b87ad0b15ef5d1472759076e42944fff9b9f641ff13e5bbe",
2383
- sort_order: 1,
2384
- total_supply: 1e8,
2385
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6ab817f1-8075-4a94-6e14-f112f1f89d00/logo"
2386
- },
2387
- {
2388
- name: "Cash",
2389
- symbol: "CASH",
2390
- decimals: 18,
2391
- l2_token_address: "0x498edfaf50ca5855666a700c25dd629d577eb9afccdf3b5977aec79aee55ada",
2392
- sort_order: 3,
2393
- total_supply: null,
2394
- logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bd6d156-f509-4b51-5dfc-3ee566143600/logo"
2395
- },
2396
- {
2397
- name: "Lords",
2398
- symbol: "LORDS",
2399
- decimals: 18,
2400
- l2_token_address: "0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49",
2401
- sort_order: 1,
2402
- total_supply: null,
2403
- logo_url: "https://empire.realms.world/images/resources/coin.png"
2404
- },
2405
- {
2406
- name: "Ancien Fragments",
2407
- symbol: "ANCIENT_FRAGMENT",
2408
- decimals: 18,
2409
- l2_token_address: "0x0695b08ecdfdd828c2e6267da62f59e6d7543e690ef56a484df25c8566b332a5",
2410
- sort_order: 2,
2411
- total_supply: null,
2412
- logo_url: "https://empire.realms.world/images/resources/29.png"
2413
- },
2414
- {
2415
- name: "Knight",
2416
- symbol: "KNIGHT",
2417
- decimals: 18,
2418
- l2_token_address: "0x00ac965f9e67164723c16735a9da8dbc9eb8e43b1bd0323591e87c056badf606",
2419
- sort_order: 3,
2420
- total_supply: null,
2421
- logo_url: "https://empire.realms.world/images/icons/250.png"
2422
- },
2423
- {
2424
- name: "Crossbowman",
2425
- symbol: "CROSSBOWMAN",
2426
- decimals: 18,
2427
- l2_token_address: "0x067e4ac00a241be06ba6afc11fa2715ec7da0c42c05a67ef6ecfcfeda725aaa8",
2428
- sort_order: 4,
2429
- total_supply: null,
2430
- logo_url: "https://empire.realms.world/images/icons/251.png"
2431
- },
2432
- {
2433
- name: "Paladin",
2434
- symbol: "PALADIN",
2435
- decimals: 18,
2436
- l2_token_address: "0x03bc86299bee061c7c8d7546ccb62b9daf9bffc653b1508facb722c6593874bc",
2437
- sort_order: 5,
2438
- total_supply: null,
2439
- logo_url: "https://empire.realms.world/images/icons/252.png"
2440
- },
2441
- {
2442
- name: "Donkey",
2443
- symbol: "DONKEY",
2444
- decimals: 18,
2445
- l2_token_address: "0x0264be95a4a2ace20add68cb321acdccd2f9f8440ee1c7abd85da44ddab01085",
2446
- sort_order: 6,
2447
- total_supply: null,
2448
- logo_url: "https://empire.realms.world/images/buildings/thumb/trade.png"
2449
- },
2450
- {
2451
- name: "Wheat",
2452
- symbol: "WHEAT",
2453
- decimals: 18,
2454
- l2_token_address: "0x057a3f1ee475e072ce3be41785c0e889b7295d7a0dcc22b992c5b9408dbeb280",
2455
- sort_order: 7,
2456
- total_supply: null,
2457
- logo_url: "https://empire.realms.world/images/resources/254.png"
2458
- },
2459
- {
2460
- name: "Fish",
2461
- symbol: "FISH",
2462
- decimals: 18,
2463
- l2_token_address: "0x027719173cfe10f1aa38d2aaed0a075b6077290f1e817aa3485d2b828394f4d9",
2464
- sort_order: 8,
2465
- total_supply: null,
2466
- logo_url: "https://empire.realms.world/images/resources/255.png"
2467
- },
2468
- {
2469
- name: "Wood",
2470
- symbol: "WOOD",
2471
- decimals: 18,
2472
- l2_token_address: "0x040d8907cec0f7ae9c364dfb12485a1314d84c129bf1898d2f3d4b7fcc7d44f4",
2473
- sort_order: 9,
2474
- total_supply: null,
2475
- logo_url: "https://empire.realms.world/images/resources/1.png"
2476
- },
2477
- {
2478
- name: "Stone",
2479
- symbol: "STONE",
2480
- decimals: 18,
2481
- l2_token_address: "0x0439a1c010e3e1bb2d43d43411000893c0042bd88f6c701611a0ea914d426da4",
2482
- sort_order: 10,
2483
- total_supply: null,
2484
- logo_url: "https://empire.realms.world/images/resources/2.png"
2485
- },
2486
- {
2487
- name: "Coal",
2488
- symbol: "COAL",
2489
- decimals: 18,
2490
- l2_token_address: "0x00ce635e3f241b0ae78c46a929d84a9101910188f9c4024eaa7559556503c31a",
2491
- sort_order: 11,
2492
- total_supply: null,
2493
- logo_url: "https://empire.realms.world/images/resources/3.png"
2494
- },
2495
- {
2496
- name: "Copper",
2497
- symbol: "COPPER",
2498
- decimals: 18,
2499
- l2_token_address: "0x066ed5c928ee027a9419ace1cbea8389885161db5572a7c5c4fef2310e9bf494",
2500
- sort_order: 12,
2501
- total_supply: null,
2502
- logo_url: "https://empire.realms.world/images/resources/4.png"
2503
- },
2504
- {
2505
- name: "Obsidian",
2506
- symbol: "OBSIDIAN",
2507
- decimals: 18,
2508
- l2_token_address: "0x03b6448d09dcd023507376402686261f5d6739455fa02f804907b066e488da66",
2509
- sort_order: 13,
2510
- total_supply: null,
2511
- logo_url: "https://empire.realms.world/images/resources/5.png"
2512
- },
2513
- {
2514
- name: "Silver",
2515
- symbol: "SILVER",
2516
- decimals: 18,
2517
- l2_token_address: "0x06fe21d2d4a8a05bdb70f09c9250af9870020d5dcc35f410b4a39d6605c3e353",
2518
- sort_order: 14,
2519
- total_supply: null,
2520
- logo_url: "https://empire.realms.world/images/resources/6.png"
2521
- },
2522
- {
2523
- name: "Ironwood",
2524
- symbol: "IRONWOOD",
2525
- decimals: 18,
2526
- l2_token_address: "0x01720cf6318bff45e62acc588680ae3cd4d5f8465b1d52cb710533c9299b031a",
2527
- sort_order: 15,
2528
- total_supply: null,
2529
- logo_url: "https://empire.realms.world/images/resources/7.png"
2530
- },
2531
- {
2532
- name: "Cold Iron",
2533
- symbol: "COLDIRON",
2534
- decimals: 18,
2535
- l2_token_address: "0x0555d713e59d4ff96b7960447e9bc9e79bfdeab5b0eea74e3df81bce61cfbc77",
2536
- sort_order: 16,
2537
- total_supply: null,
2538
- logo_url: "https://empire.realms.world/images/resources/8.png"
2539
- },
2540
- {
2541
- name: "Gold",
2542
- symbol: "GOLD",
2543
- decimals: 18,
2544
- l2_token_address: "0x000dff9dca192609c4e86ab3be22c7ec1e968876c992d21986f3c542be97fa2f",
2545
- sort_order: 17,
2546
- total_supply: null,
2547
- logo_url: "https://empire.realms.world/images/resources/9.png"
2548
- },
2549
- {
2550
- name: "Hartwood",
2551
- symbol: "HARTWOOD",
2552
- decimals: 18,
2553
- l2_token_address: "0x05620aa7170cd66dbcbc37d03087bfe4633ffef91d3e4d97b501de906004f79b",
2554
- sort_order: 18,
2555
- total_supply: null,
2556
- logo_url: "https://empire.realms.world/images/resources/10.png"
2557
- },
2558
- {
2559
- name: "Diamonds",
2560
- symbol: "DIAMONDS",
2561
- decimals: 18,
2562
- l2_token_address: "0x00e03ea8ae385f64754820af5c01c36abf1b8130dd6797d3fd9d430e4114e876",
2563
- sort_order: 19,
2564
- total_supply: null,
2565
- logo_url: "https://empire.realms.world/images/resources/11.png"
2566
- },
2567
- {
2568
- name: "Sapphire",
2569
- symbol: "SAPPHIRE",
2570
- decimals: 18,
2571
- l2_token_address: "0x02f8dd022568af8f9f718aa37707a9b858529db56910633a160456838b6cbcbc",
2572
- sort_order: 20,
2573
- total_supply: null,
2574
- logo_url: "https://empire.realms.world/images/resources/12.png"
2575
- },
2576
- {
2577
- name: "Ruby",
2578
- symbol: "RUBY",
2579
- decimals: 18,
2580
- l2_token_address: "0x03d9b66720959d0e7687b898292c10e62e78626f2dba5e1909961a2ce3f86612",
2581
- sort_order: 21,
2582
- total_supply: null,
2583
- logo_url: "https://empire.realms.world/images/resources/13.png"
2584
- },
2585
- {
2586
- name: "Deep Crystal",
2587
- symbol: "DEEPCRYSTAL",
2588
- decimals: 18,
2589
- l2_token_address: "0x01d655ac834d38df7921074fc1588411e202b1af83307cbd996983aff52db3a8",
2590
- sort_order: 22,
2591
- total_supply: null,
2592
- logo_url: "https://empire.realms.world/images/resources/14.png"
2593
- },
2594
- {
2595
- name: "Ignium",
2596
- symbol: "IGNIUM",
2597
- decimals: 18,
2598
- l2_token_address: "0x0625c1f789b03ebebc7a9322366f38ebad1f693b84b2abd8cb8f5b2748b0cdd5",
2599
- sort_order: 23,
2600
- total_supply: null,
2601
- logo_url: "https://empire.realms.world/images/resources/15.png"
2602
- },
2603
- {
2604
- name: "Ethereal Silica",
2605
- symbol: "ETHEREALSILICA",
2606
- decimals: 18,
2607
- l2_token_address: "0x068b6e23cbbd58a644700f55e96c83580921e9f521b6e5175396b53ba7910e7d",
2608
- sort_order: 24,
2609
- total_supply: null,
2610
- logo_url: "https://empire.realms.world/images/resources/16.png"
2611
- },
2612
- {
2613
- name: "True Ice",
2614
- symbol: "TRUEICE",
2615
- decimals: 18,
2616
- l2_token_address: "0x04485f5a6e16562e1c761cd348e63256d00389e3ddf4f5d98afe7ab44c57c481",
2617
- sort_order: 25,
2618
- total_supply: null,
2619
- logo_url: "https://empire.realms.world/images/resources/17.png"
2620
- },
2621
- {
2622
- name: "Twilight Quartz",
2623
- symbol: "TWILIGHTQUARTZ",
2624
- decimals: 18,
2625
- l2_token_address: "0x035e24c02409c3cfe8d5646399a62c4d102bb782938d5f5180e92c9c62d3faf7",
2626
- sort_order: 26,
2627
- total_supply: null,
2628
- logo_url: "https://empire.realms.world/images/resources/18.png"
2629
- },
2630
- {
2631
- name: "Alchemical Silver",
2632
- symbol: "ALCHEMICALSILVER",
2633
- decimals: 18,
2634
- l2_token_address: "0x03956a5301e99522038a2e7dcb9c2a89bf087ffa79310ee0a508b5538efd8ddd",
2635
- sort_order: 27,
2636
- total_supply: null,
2637
- logo_url: "https://empire.realms.world/images/resources/19.png"
2638
- },
2639
- {
2640
- name: "Adamantine",
2641
- symbol: "ADAMANTINE",
2642
- decimals: 18,
2643
- l2_token_address: "0x0367f838f85a2f5e1580d6f011e4476f581083314cff8721ba3dda9706076eed",
2644
- sort_order: 28,
2645
- total_supply: null,
2646
- logo_url: "https://empire.realms.world/images/resources/20.png"
2647
- },
2648
- {
2649
- name: "Mithral",
2650
- symbol: "MITHRAL",
2651
- decimals: 18,
2652
- l2_token_address: "0x0067ba235c569c23877064b2ac6ebd4d79f32d3c00f5fab8e28a3b5700b957f6",
2653
- sort_order: 29,
2654
- total_supply: null,
2655
- logo_url: "https://empire.realms.world/images/resources/21.png"
2656
- },
2657
- {
2658
- name: "Dragon Hide",
2659
- symbol: "DRAGONHIDE",
2660
- decimals: 18,
2661
- l2_token_address: "0x03bf856515bece3c93f5061b7941b8645f817a0acab93c758b8c7b4bc0afa3c6",
2662
- sort_order: 30,
2663
- total_supply: null,
2664
- logo_url: "https://empire.realms.world/images/resources/22.png"
2665
- },
2666
- {
2667
- name: "Demon Hide",
2668
- symbol: "DEMONHIDE",
2669
- decimals: 18,
2670
- l2_token_address: "0x03b847fbef9d344ba968edc945100e6ab0258a4b1b91f8665f85a3d814c3e4d4",
2671
- sort_order: 31,
2672
- total_supply: null,
2673
- logo_url: "https://empire.realms.world/images/resources/22.png"
2674
- }
2675
- ];
2676
- var controllerConfigs = configs;
2677
- var erc20Metadata = metadata;
2678
- var defaultTheme = configs["cartridge"].theme;
2679
-
2680
- exports.NotReadyToConnect = NotReadyToConnect;
2681
- exports.ResponseCodes = ResponseCodes;
2682
- exports.controllerConfigs = controllerConfigs;
2683
- exports.default = ControllerProvider;
2684
- exports.defaultTheme = defaultTheme;
2685
- exports.erc20Metadata = erc20Metadata;
2686
- exports.humanizeString = humanizeString;
2687
- exports.lookupAddresses = lookupAddresses;
2688
- exports.lookupUsernames = lookupUsernames;
2689
- exports.normalizeCalls = normalizeCalls;
2690
- exports.parseChainId = parseChainId;
2691
- exports.toArray = toArray;
2692
- exports.toSessionPolicies = toSessionPolicies;
2693
- exports.toWasmPolicies = toWasmPolicies;
2694
- //# sourceMappingURL=index.cjs.map
2695
- //# sourceMappingURL=index.cjs.map