@cartridge/controller 0.7.13-alpha.2 → 0.7.13-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$deps.log +16 -16
- package/.turbo/turbo-build.log +13 -13
- package/dist/index.js +297 -174
- package/dist/index.js.map +1 -1
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -0
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/{provider-LFJfEvkl.js → provider-DhfZ5TCx.js} +2 -2
- package/dist/{provider-LFJfEvkl.js.map → provider-DhfZ5TCx.js.map} +1 -1
- package/dist/session.js +2 -2
- package/dist/stats.html +1 -1
- package/dist/wallets/metamask/index.d.ts +1 -0
- package/dist/wallets/rabby/index.d.ts +1 -0
- package/dist/wallets/types.d.ts +1 -0
- package/dist/wallets/wallet-connect/index.d.ts +1 -1
- package/package.json +4 -4
- package/src/wallets/bridge.ts +8 -4
- package/src/wallets/metamask/index.ts +16 -0
- package/src/wallets/rabby/index.ts +10 -8
- package/src/wallets/types.ts +1 -0
- package/src/wallets/wallet-connect/index.ts +6 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/account.ts","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/enums.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createDestructor.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createLogger.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/getOriginFromSrc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/errorSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallReceiver.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/generateId.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/methodSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallSender.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleAckMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleSynMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/monitorIframeRemoval.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/startConnectionTimeout.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/connectToChild.js","../src/iframe/base.ts","../src/wallets/argent/index.ts","../src/wallets/metamask/index.ts","../src/wallets/phantom/index.ts","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/utils.js","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/store.js","../src/wallets/rabby/index.ts","../src/wallets/bridge.ts","../src/iframe/keychain.ts","../src/iframe/profile.ts","../src/controller.ts","../src/lookup.ts","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/_version.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/properties.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/errors.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/data.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/maths.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/utf8.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/_assert.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/sha3.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/crypto/keccak.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/constants/hashes.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/constants/strings.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/crypto/signature.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/hash/message.js","../src/wallets/turnkey/index.ts","../src/wallets/wallet-connect/index.ts","../../../node_modules/.pnpm/@cartridge+presets@https+++codeload.github.com+cartridge-gg+presets+tar.gz+f57e6cc/node_modules/@cartridge/presets/dist/index.js"],"sourcesContent":["import {\n InvokeFunctionResponse,\n TypedData,\n WalletAccount,\n Call,\n AllowArray,\n} from \"starknet\";\n\nimport { SPEC } from \"@starknet-io/types-js\";\n\nimport {\n ConnectError,\n Keychain,\n KeychainOptions,\n Modal,\n ResponseCodes,\n} from \"./types\";\nimport { AsyncMethodReturns } from \"@cartridge/penpal\";\nimport BaseProvider from \"./provider\";\nimport { toArray } from \"./utils\";\n\nclass ControllerAccount extends WalletAccount {\n address: string;\n private keychain: AsyncMethodReturns<Keychain>;\n private modal: Modal;\n private options?: KeychainOptions;\n\n constructor(\n provider: BaseProvider,\n rpcUrl: string,\n address: string,\n keychain: AsyncMethodReturns<Keychain>,\n options: KeychainOptions,\n modal: Modal,\n ) {\n super({ nodeUrl: rpcUrl }, provider);\n\n this.address = address;\n this.keychain = keychain;\n this.options = options;\n this.modal = modal;\n }\n\n /**\n * Invoke execute function in account contract\n *\n * @param calls the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abis (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n async execute(calls: AllowArray<Call>): Promise<InvokeFunctionResponse> {\n calls = toArray(calls);\n\n return new Promise(async (resolve, reject) => {\n const sessionExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n false,\n this.options?.feeSource,\n );\n\n // Session call succeeded\n if (sessionExecute.code === ResponseCodes.SUCCESS) {\n resolve(sessionExecute as InvokeFunctionResponse);\n return;\n }\n\n // Propagates session txn error back to caller\n if (\n this.options?.propagateSessionErrors &&\n sessionExecute.code !== ResponseCodes.USER_INTERACTION_REQUIRED\n ) {\n reject((sessionExecute as ConnectError).error);\n return;\n }\n\n // Session call or Paymaster flow failed.\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n true,\n (sessionExecute as ConnectError).error,\n );\n\n // Manual call succeeded\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n return;\n }\n\n reject((manualExecute as ConnectError).error);\n return;\n });\n }\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n async signMessage(typedData: TypedData): Promise<SPEC.SIGNATURE> {\n return new Promise(async (resolve, reject) => {\n const sessionSign = await this.keychain.signMessage(typedData, \"\", true);\n\n // Session sign succeeded\n if (!(\"code\" in sessionSign)) {\n resolve(sessionSign as SPEC.SIGNATURE);\n return;\n }\n\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualSign = await this.keychain.signMessage(typedData, \"\", false);\n\n if (!(\"code\" in manualSign)) {\n resolve(manualSign as SPEC.SIGNATURE);\n } else {\n reject((manualSign as ConnectError).error);\n }\n this.modal.close();\n });\n }\n}\n\nexport default ControllerAccount;\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","export default (localName, log) => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n if (!destroyed) {\n destroyed = true;\n log(`${localName}: Destroying connection`);\n callbacks.forEach((callback) => {\n callback(error);\n });\n }\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n },\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443',\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find((scheme) => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = regexResult[1] ? regexResult[1] : location.protocol;\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack, }) => ({\n name,\n message,\n stack,\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach((key) => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution, } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, serializedMethods, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (originForReceiving !== '*' && event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue,\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true,\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise((resolve) => resolve(serializedMethods[methodName]\n .call(serializedMethods, event.origin)\n .apply(serializedMethods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","const KEY_PATH_DELIMITER = '.';\nconst keyPathToSegments = (keyPath) => keyPath ? keyPath.split(KEY_PATH_DELIMITER) : [];\nconst segmentsToKeyPath = (segments) => segments.join(KEY_PATH_DELIMITER);\nconst createKeyPath = (key, prefix) => {\n const segments = keyPathToSegments(prefix || '');\n segments.push(key);\n return segmentsToKeyPath(segments);\n};\n/**\n * Given a `keyPath`, set it to be `value` on `subject`, creating any intermediate\n * objects along the way.\n *\n * @param {Object} subject The object on which to set value.\n * @param {string} keyPath The key path at which to set value.\n * @param {Object} value The value to store at the given key path.\n * @returns {Object} Updated subject.\n */\nexport const setAtKeyPath = (subject, keyPath, value) => {\n const segments = keyPathToSegments(keyPath);\n segments.reduce((prevSubject, key, idx) => {\n if (typeof prevSubject[key] === 'undefined') {\n prevSubject[key] = {};\n }\n if (idx === segments.length - 1) {\n prevSubject[key] = value;\n }\n return prevSubject[key];\n }, subject);\n return subject;\n};\n/**\n * Given a dictionary of (nested) keys to function, flatten them to a map\n * from key path to function.\n *\n * @param {Object} methods The (potentially nested) object to serialize.\n * @param {string} prefix A string with which to prefix entries. Typically not intended to be used by consumers.\n * @returns {Object} An map from key path in `methods` to functions.\n */\nexport const serializeMethods = (methods, prefix) => {\n const flattenedMethods = {};\n Object.keys(methods).forEach((key) => {\n const value = methods[key];\n const keyPath = createKeyPath(key, prefix);\n if (typeof value === 'object') {\n // Recurse into any nested children.\n Object.assign(flattenedMethods, serializeMethods(value, keyPath));\n }\n if (typeof value === 'function') {\n // If we've found a method, expose it.\n flattenedMethods[keyPath] = value;\n }\n });\n return flattenedMethods;\n};\n/**\n * Given a map of key paths to functions, unpack the key paths to an object.\n *\n * @param {Object} flattenedMethods A map of key paths to functions to unpack.\n * @returns {Object} A (potentially nested) map of functions.\n */\nexport const deserializeMethods = (flattenedMethods) => {\n const methods = {};\n for (const keyPath in flattenedMethods) {\n setAtKeyPath(methods, keyPath, flattenedMethods[keyPath]);\n }\n return methods;\n};\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { deserializeMethods } from './methodSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodKeyPaths Key paths of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodKeyPaths, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (originForReceiving !== '*' &&\n event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args,\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n // Wrap each method in a proxy which sends it to the corresponding receiver.\n const flattenedMethods = methodKeyPaths.reduce((api, name) => {\n api[name] = createMethodProxy(name);\n return api;\n }, {});\n // Unpack the structure of the provided methods object onto the CallSender, exposing\n // the methods in the same shape they were provided.\n Object.assign(callSender, deserializeMethods(flattenedMethods));\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (serializedMethods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin,\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, serializedMethods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach((receiverMethodName) => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, serializedMethods, childOrigin, originForSending) => {\n return (event) => {\n // Under specific timing circumstances, we can receive an event\n // whose source is null. This seems to happen when the child iframe is\n // removed from the DOM about the same time it has sent the SYN event.\n // https://github.com/Aaronius/penpal/issues/85\n if (!event.source) {\n return;\n }\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(serializedMethods),\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport { serializeMethods } from '../methodSerialization';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor('Parent', log);\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const serializedMethods = serializeMethods(methods);\n const handleSynMessage = handleSynMessageFactory(log, serializedMethods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(serializedMethods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (error) {\n reject(error);\n }\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n },\n };\n};\n","import { AsyncMethodReturns, connectToChild } from \"@cartridge/penpal\";\nimport { ControllerOptions, Modal } from \"../types\";\n\nexport type IFrameOptions<CallSender> = Omit<\n ConstructorParameters<typeof IFrame>[0],\n \"id\" | \"url\" | \"onConnect\"\n> & {\n url?: string;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n};\n\nexport class IFrame<CallSender extends {}> implements Modal {\n url?: URL;\n private iframe?: HTMLIFrameElement;\n private container?: HTMLDivElement;\n private onClose?: () => void;\n\n constructor({\n id,\n url,\n preset,\n onClose,\n onConnect,\n methods = {},\n }: Pick<ControllerOptions, \"preset\"> & {\n id: string;\n url: URL;\n onClose?: () => void;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n methods?: { [key: string]: (...args: any[]) => void };\n }) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (preset) {\n url.searchParams.set(\"preset\", preset);\n }\n\n this.url = url;\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url.toString();\n iframe.id = id;\n iframe.style.border = \"none\";\n iframe.sandbox.add(\"allow-forms\");\n iframe.sandbox.add(\"allow-popups\");\n iframe.sandbox.add(\"allow-popups-to-escape-sandbox\");\n iframe.sandbox.add(\"allow-scripts\");\n iframe.sandbox.add(\"allow-same-origin\");\n iframe.allow =\n \"publickey-credentials-create *; publickey-credentials-get *; clipboard-write\";\n if (!!document.hasStorageAccess) {\n iframe.sandbox.add(\"allow-storage-access-by-user-activation\");\n }\n\n const container = document.createElement(\"div\");\n container.id = \"controller\";\n container.style.position = \"fixed\";\n container.style.height = \"100%\";\n container.style.width = \"100%\";\n container.style.top = \"0\";\n container.style.left = \"0\";\n container.style.zIndex = \"10000\";\n container.style.backgroundColor = \"rgba(0,0,0,0.6)\";\n container.style.display = \"flex\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.visibility = \"hidden\";\n container.style.opacity = \"0\";\n container.style.transition = \"opacity 0.2s ease\";\n container.style.pointerEvents = \"auto\";\n container.appendChild(iframe);\n\n this.iframe = iframe;\n this.container = container;\n\n connectToChild<CallSender>({\n iframe: this.iframe,\n methods: {\n close: (_origin: string) => () => this.close(),\n closeAll: (_origin: string) => () => {\n // Close all iframes\n const iframes = document.querySelectorAll(\n 'iframe[id^=\"controller-\"]',\n );\n iframes.forEach((iframe) => {\n const container = iframe.parentElement;\n if (container) {\n container.style.visibility = \"hidden\";\n container.style.opacity = \"0\";\n }\n });\n document.body.style.overflow = \"auto\";\n },\n reload: (_origin: string) => () => window.location.reload(),\n ...methods,\n },\n }).promise.then(onConnect);\n\n this.resize();\n window.addEventListener(\"resize\", () => this.resize());\n\n const observer = new MutationObserver(() => {\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (\n (id === \"controller-keychain\" && !existingController) ||\n id === \"controller-profile\"\n ) {\n document.body.appendChild(container);\n observer.disconnect();\n }\n }\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (\n (id === \"controller-keychain\" && !existingController) ||\n id === \"controller-profile\"\n ) {\n document.body.appendChild(container);\n }\n }\n\n this.onClose = onClose;\n }\n\n open() {\n if (!this.container) return;\n document.body.style.overflow = \"hidden\";\n\n this.container.style.visibility = \"visible\";\n this.container.style.opacity = \"1\";\n }\n\n close() {\n if (!this.container) return;\n this.onClose?.();\n\n document.body.style.overflow = \"auto\";\n\n this.container.style.visibility = \"hidden\";\n this.container.style.opacity = \"0\";\n }\n\n sendBackward() {\n if (!this.container) return;\n this.container.style.zIndex = \"9999\";\n }\n\n sendForward() {\n if (!this.container) return;\n this.container.style.zIndex = \"10000\";\n }\n\n private resize() {\n if (!this.iframe) return;\n\n this.iframe.style.userSelect = \"none\";\n\n if (window.innerWidth < 768) {\n this.iframe.style.height = \"100%\";\n this.iframe.style.width = \"100%\";\n this.iframe.style.borderRadius = \"0\";\n return;\n }\n\n this.iframe.style.height = \"600px\";\n this.iframe.style.width = \"432px\";\n this.iframe.style.borderRadius = \"8px\";\n }\n}\n","import {\n WalletAdapter,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n ExternalPlatform,\n} from \"../types\";\nimport { connect, StarknetWindowObject } from \"starknetkit\";\nimport { InjectedConnector } from \"starknetkit/injected\";\nimport { TypedData } from \"@starknet-io/types-js\";\n\nexport class ArgentWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"argent\";\n readonly platform: ExternalPlatform = \"starknet\";\n private wallet: StarknetWindowObject | undefined = undefined;\n private account: string | undefined = undefined;\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.starknet_argentX;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available\n ? window.starknet_argentX?.version || \"Unknown\"\n : undefined,\n chainId: available ? window.starknet_argentX?.chainId : undefined,\n name: \"Argent\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Argent is not available\");\n }\n\n const { wallet, connectorData } = await connect({\n connectors: [new InjectedConnector({ options: { id: \"argentX\" } })],\n });\n\n if (!wallet) {\n throw new Error(\"No wallet found\");\n }\n\n this.wallet = wallet;\n this.account = connectorData?.account;\n return { success: true, wallet: this.type, account: this.account };\n } catch (error) {\n console.error(`Error connecting to Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: TypedData): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n const sig = await this.wallet.request({\n type: \"wallet_signTypedData\",\n params: data,\n });\n\n return { success: true, wallet: this.type, result: sig };\n } catch (error) {\n console.error(`Error signing typed data with Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n console.warn(\n \"Chain switching for Argent may require custom implementation\",\n );\n return false;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n // TODO: Implement balance fetching based on Argent's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Argent API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { MetaMaskSDK } from \"@metamask/sdk\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class MetaMaskWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"metamask\";\n readonly platform: ExternalPlatform = \"ethereum\";\n private MMSDK: MetaMaskSDK;\n private account: string | undefined = undefined;\n\n constructor() {\n this.MMSDK = new MetaMaskSDK({\n dappMetadata: {\n name: \"Cartridge Controller\",\n url: window.location.href,\n },\n });\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.ethereum?.isMetaMask;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: \"MetaMask\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"MetaMask is not available\");\n }\n\n const accounts = await this.MMSDK.connect();\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const result = await this.MMSDK.getProvider()?.request({\n method: \"personal_sign\",\n params: [this.account!, message],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const result = await ethereum.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing typed data with MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(\"MetaMask is not available\");\n }\n\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n try {\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(\"Chain not added to MetaMask\");\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for MetaMask:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const balance = await ethereum.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"],\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport {\n WalletAdapter,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n ExternalPlatform,\n} from \"../types\";\n\ninterface PhantomProvider {\n isPhantom: boolean;\n publicKey: PublicKey | null;\n isConnected: boolean;\n connect(opts?: { onlyIfTrusted: boolean }): Promise<{ publicKey: PublicKey }>;\n disconnect(): Promise<void>;\n signTransaction(\n transaction: Transaction | VersionedTransaction,\n ): Promise<Transaction | VersionedTransaction>;\n signAllTransactions(\n transactions: (Transaction | VersionedTransaction)[],\n ): Promise<(Transaction | VersionedTransaction)[]>;\n signAndSendTransaction(\n transaction: Transaction | VersionedTransaction,\n opts?: { skipPreflight?: boolean; maxRetries?: number },\n ): Promise<{ signature: string }>;\n signMessage(\n message: Uint8Array,\n display?: \"utf8\" | \"hex\",\n ): Promise<{ signature: Uint8Array }>;\n on(\n event: \"connect\" | \"disconnect\" | \"accountChanged\",\n handler: (args: unknown) => void,\n ): void;\n request(args: { method: string; params?: unknown }): Promise<unknown>;\n}\n\nexport class PhantomWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"phantom\";\n readonly platform: ExternalPlatform = \"solana\";\n private account: string | undefined = undefined;\n\n private getProvider(): PhantomProvider {\n if (typeof window === \"undefined\") {\n throw new Error(\"Not ready\");\n }\n\n const provider = window.solana;\n\n if (!provider?.isPhantom) {\n throw new Error(\"Phantom is not available\");\n }\n\n return provider;\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.solana?.isPhantom;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: \"Unknown\",\n name: \"Phantom\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Phantom is not available\");\n }\n\n const response = await this.getProvider().connect();\n if (response.publicKey) {\n this.account = response.publicKey.toString();\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n const encodedMessage = new TextEncoder().encode(message);\n const result = await this.getProvider().signMessage(\n encodedMessage,\n \"utf8\",\n );\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(\n serailized_txn: Uint8Array,\n ): Promise<ExternalWalletResponse<any>> {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n try {\n const txn = Transaction.from(serailized_txn);\n const provider = this.getProvider();\n const result = await provider.signAndSendTransaction(txn);\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n console.warn(\"Chain switching not supported for Phantom\");\n return false;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n // TODO: Implement balance fetching based on Phantom's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Phantom API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","/**\n * Announces an EIP-1193 Provider.\n */\nexport function announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\n/**\n * Watches for EIP-1193 Providers to be announced.\n */\nexport function requestProviders(listener) {\n if (typeof window === 'undefined')\n return;\n const handler = (event) => listener(event.detail);\n window.addEventListener('eip6963:announceProvider', handler);\n window.dispatchEvent(new CustomEvent('eip6963:requestProvider'));\n return () => window.removeEventListener('eip6963:announceProvider', handler);\n}\n//# sourceMappingURL=utils.js.map","import { requestProviders } from './utils.js';\nexport function createStore() {\n const listeners = new Set();\n let providerDetails = [];\n const request = () => requestProviders((providerDetail) => {\n if (providerDetails.some(({ info }) => info.uuid === providerDetail.info.uuid))\n return;\n providerDetails = [...providerDetails, providerDetail];\n listeners.forEach((listener) => listener(providerDetails, { added: [providerDetail] }));\n });\n let unwatch = request();\n return {\n _listeners() {\n return listeners;\n },\n clear() {\n listeners.forEach((listener) => listener([], { removed: [...providerDetails] }));\n providerDetails = [];\n },\n destroy() {\n this.clear();\n listeners.clear();\n unwatch?.();\n },\n findProvider({ rdns }) {\n return providerDetails.find((providerDetail) => providerDetail.info.rdns === rdns);\n },\n getProviders() {\n return providerDetails;\n },\n reset() {\n this.clear();\n unwatch?.();\n unwatch = request();\n },\n subscribe(listener, { emitImmediately } = {}) {\n listeners.add(listener);\n if (emitImmediately)\n listener(providerDetails, { added: providerDetails });\n return () => listeners.delete(listener);\n },\n };\n}\n//# sourceMappingURL=store.js.map","import { createStore, EIP6963ProviderDetail } from \"mipd\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nconst RABBY_RDNS = \"io.rabby\";\n\nexport class RabbyWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"rabby\";\n readonly platform: ExternalPlatform = \"ethereum\";\n private account: string | undefined = undefined;\n private store = createStore();\n private provider: EIP6963ProviderDetail | undefined;\n\n constructor() {\n this.provider = this.store\n .getProviders()\n .find((provider) => provider.info.rdns === RABBY_RDNS);\n this.store.subscribe((providerDetails) => {\n const rabbyProvider = providerDetails.find(\n (provider) => provider.info.rdns === RABBY_RDNS,\n );\n if (rabbyProvider) {\n this.provider = rabbyProvider;\n }\n });\n }\n\n isAvailable(): boolean {\n return !!this.provider;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: \"Rabby\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Rabby is not available\");\n }\n\n const accounts = await this.provider?.provider.request({\n method: \"eth_requestAccounts\",\n });\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const ethereum = this.provider?.provider;\n if (!ethereum) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(\n message: `0x${string}`,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const result = await this.provider?.provider.request({\n method: \"personal_sign\",\n params: [this.account!, message] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const provider = this.provider?.provider;\n if (!provider) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const result = await provider.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing typed data with Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Rabby is not available\");\n }\n\n const provider = this.provider?.provider;\n if (!provider) {\n throw new Error(\"Rabby is not connected\");\n }\n\n try {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(\"Chain not added to Rabby\");\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for Rabby:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const provider = this.provider?.provider;\n if (!provider) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const balance = await provider.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"] as any,\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { ArgentWallet } from \"./argent\";\nimport { MetaMaskWallet } from \"./metamask\";\nimport { PhantomWallet } from \"./phantom\";\nimport { RabbyWallet } from \"./rabby\";\nimport {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n\nexport class WalletBridge {\n private readonly walletAdapters: Map<ExternalWalletType, WalletAdapter>;\n private readonly connectedWalletsByType: Map<\n ExternalWalletType,\n WalletAdapter\n > = new Map();\n private readonly connectedWalletsByAddress: Map<string, WalletAdapter> =\n new Map();\n\n constructor() {\n this.walletAdapters = new Map<ExternalWalletType, WalletAdapter>();\n this.walletAdapters.set(\"metamask\", new MetaMaskWallet());\n this.walletAdapters.set(\"phantom\", new PhantomWallet());\n this.walletAdapters.set(\"argent\", new ArgentWallet());\n this.walletAdapters.set(\"rabby\", new RabbyWallet());\n\n if (typeof window !== \"undefined\") {\n window.wallet_bridge = this;\n }\n }\n\n getIFrameMethods() {\n return {\n externalDetectWallets: (_origin: string) => () => this.detectWallets(),\n externalConnectWallet: (_origin: string) => (type: ExternalWalletType) =>\n this.connectWallet(type),\n externalSignMessage:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, message: string) =>\n this.signMessage(identifier, message),\n externalSignTypedData:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, data: any) =>\n this.signTypedData(identifier, data),\n externalSendTransaction:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, txn: any) =>\n this.sendTransaction(identifier, txn),\n externalGetBalance:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, tokenAddress?: string) =>\n this.getBalance(identifier, tokenAddress),\n };\n }\n\n async detectWallets(): Promise<ExternalWallet[]> {\n const wallets = Array.from(this.walletAdapters.values()).map((adapter) =>\n adapter.getInfo(),\n ) as ExternalWallet[];\n\n return wallets;\n }\n\n private getWalletAdapterByType(type: ExternalWalletType): WalletAdapter {\n const adapter = this.walletAdapters.get(type);\n if (!adapter) {\n throw new Error(`Unsupported wallet type: ${type}`);\n }\n return adapter;\n }\n\n private handleError(\n identifier: ExternalWalletType | string,\n error: unknown,\n operation: string,\n responseType?: ExternalWalletType,\n ): ExternalWalletResponse {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n let walletType: ExternalWalletType | string = \"unknown\";\n if (typeof identifier === \"string\") {\n const adapter = this.connectedWalletsByAddress.get(identifier);\n walletType = responseType ?? adapter?.type ?? identifier;\n } else {\n walletType = identifier;\n }\n\n console.error(`Error ${operation} with ${identifier} wallet:`, error);\n return {\n success: false,\n wallet: walletType as ExternalWalletType,\n error: errorMessage,\n };\n }\n\n async connectWallet(\n type: ExternalWalletType,\n ): Promise<ExternalWalletResponse> {\n try {\n const wallet = this.getWalletAdapterByType(type);\n const response = await wallet.connect();\n\n if (response.success && response.account) {\n this.connectedWalletsByType.set(type, wallet);\n this.connectedWalletsByAddress.set(response.account, wallet);\n console.log(\n `Wallet ${type} connected with address ${response.account}`,\n );\n } else if (response.success && !response.account) {\n console.error(\n `Wallet ${type} connected successfully but did not provide an address.`,\n );\n return {\n ...response,\n success: false,\n error: \"Wallet connected but address not found.\",\n };\n }\n\n return response;\n } catch (error) {\n return this.handleError(type, error, \"connecting to\");\n }\n }\n\n private getConnectedWalletAdapter(\n identifier: ExternalWalletType | string,\n ): WalletAdapter {\n let wallet: WalletAdapter | undefined;\n if (typeof identifier === \"string\") {\n wallet = this.connectedWalletsByAddress.get(identifier);\n } else {\n wallet = this.connectedWalletsByType.get(identifier);\n }\n\n if (!wallet && typeof identifier === \"string\") {\n wallet = this.connectedWalletsByType.get(\n identifier as ExternalWalletType,\n );\n }\n\n if (!wallet) {\n throw new Error(\n `Wallet with identifier ${identifier} is not connected or supported`,\n );\n }\n return wallet;\n }\n\n async signMessage(\n identifier: ExternalWalletType | string,\n message: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signMessage) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing messages`,\n );\n }\n return await wallet.signMessage(message);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing message with\",\n wallet?.type,\n );\n }\n }\n\n async signTypedData(\n identifier: ExternalWalletType | string,\n data: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signTypedData) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing typed data`,\n );\n }\n return await wallet.signTypedData(data);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing typed data with\",\n wallet?.type,\n );\n }\n }\n\n async sendTransaction(\n identifier: ExternalWalletType | string,\n txn: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.sendTransaction(txn);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"sending transaction with\",\n wallet?.type,\n );\n }\n }\n\n async getBalance(\n identifier: ExternalWalletType | string,\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.getBalance(tokenAddress);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"getting balance from\",\n wallet?.type,\n );\n }\n }\n}\n\ndeclare global {\n interface Window {\n ethereum?: any;\n solana?: any;\n starknet_argentX?: any;\n wallet_bridge?: WalletBridge;\n }\n}\n\nexport type {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n","import { KEYCHAIN_URL } from \"../constants\";\nimport { Keychain, KeychainOptions } from \"../types\";\nimport { WalletBridge } from \"../wallets/bridge\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\ntype KeychainIframeOptions = IFrameOptions<Keychain> & KeychainOptions;\n\nexport class KeychainIFrame extends IFrame<Keychain> {\n private walletBridge: WalletBridge;\n\n constructor({ url, policies, ...iframeOptions }: KeychainIframeOptions) {\n const _url = new URL(url ?? KEYCHAIN_URL);\n const walletBridge = new WalletBridge();\n\n if (policies) {\n _url.searchParams.set(\n \"policies\",\n encodeURIComponent(JSON.stringify(policies)),\n );\n }\n\n super({\n ...iframeOptions,\n id: \"controller-keychain\",\n url: _url,\n methods: walletBridge.getIFrameMethods(),\n });\n\n this.walletBridge = walletBridge;\n\n // Expose the wallet bridge instance globally for WASM interop\n if (typeof window !== \"undefined\") {\n (window as any).external_wallets = this.walletBridge;\n }\n }\n\n getWalletBridge(): WalletBridge {\n return this.walletBridge;\n }\n}\n","import { PROFILE_URL } from \"../constants\";\nimport { Profile, ProfileOptions } from \"../types\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\nexport type ProfileIFrameOptions = IFrameOptions<Profile> &\n ProfileOptions & {\n rpcUrl: string;\n version?: string;\n username: string;\n slot?: string;\n namespace?: string;\n };\n\nexport class ProfileIFrame extends IFrame<Profile> {\n constructor({\n profileUrl,\n rpcUrl,\n version,\n username,\n slot,\n namespace,\n tokens,\n policies,\n ...iframeOptions\n }: ProfileIFrameOptions) {\n const _profileUrl = (profileUrl || PROFILE_URL).replace(/\\/$/, \"\");\n let _url = new URL(\n slot\n ? `${_profileUrl}/account/${username}/slot/${slot}`\n : `${_profileUrl}/account/${username}`,\n );\n\n if (slot) {\n _url.searchParams.set(\"ps\", encodeURIComponent(slot));\n }\n\n if (namespace) {\n _url.searchParams.set(\"ns\", encodeURIComponent(namespace));\n }\n\n if (version) {\n _url.searchParams.set(\"v\", encodeURIComponent(version));\n }\n\n _url.searchParams.set(\"rpcUrl\", encodeURIComponent(rpcUrl));\n\n if (tokens?.erc20) {\n _url.searchParams.set(\n \"erc20\",\n encodeURIComponent(tokens.erc20.toString()),\n );\n }\n\n if (policies?.contracts) {\n const methods = Object.values(policies.contracts).flatMap(\n (contract) => contract.methods,\n );\n _url.searchParams.set(\n \"methods\",\n encodeURIComponent(JSON.stringify(methods)),\n );\n }\n\n super({\n ...iframeOptions,\n id: \"controller-profile\",\n url: _url,\n });\n }\n}\n","import { AsyncMethodReturns } from \"@cartridge/penpal\";\n\nimport ControllerAccount from \"./account\";\nimport { KeychainIFrame, ProfileIFrame } from \"./iframe\";\nimport { NotReadyToConnect } from \"./errors\";\nimport {\n Keychain,\n ResponseCodes,\n ConnectReply,\n ProbeReply,\n ControllerOptions,\n ConnectError,\n Profile,\n IFrames,\n ProfileContextTypeVariant,\n Chain,\n} from \"./types\";\nimport BaseProvider from \"./provider\";\nimport { shortString, WalletAccount } from \"starknet\";\nimport { Policy } from \"@cartridge/presets\";\nimport {\n AddInvokeTransactionResult,\n AddStarknetChainParameters,\n ChainId,\n} from \"@starknet-io/types-js\";\nimport { parseChainId } from \"./utils\";\n\nexport default class ControllerProvider extends BaseProvider {\n private keychain?: AsyncMethodReturns<Keychain>;\n private profile?: AsyncMethodReturns<Profile>;\n private options: ControllerOptions;\n private iframes: IFrames;\n private selectedChain: ChainId;\n private chains: Map<ChainId, Chain>;\n\n constructor(options: ControllerOptions) {\n super();\n\n this.selectedChain = options.defaultChainId;\n this.chains = new Map<ChainId, Chain>();\n\n this.iframes = {\n keychain: new KeychainIFrame({\n ...options,\n onClose: this.keychain?.reset,\n onConnect: (keychain) => {\n this.keychain = keychain;\n },\n }),\n };\n\n this.options = options;\n\n this.validateChains(options.chains);\n\n if (typeof window !== \"undefined\") {\n (window as any).starknet_controller = this;\n }\n }\n\n async probe(): Promise<WalletAccount | undefined> {\n try {\n await this.waitForKeychain();\n\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n // For backwards compat with controller <=0.6.0\n let rpcUrl = response?.rpcUrl || this.rpcUrl();\n this.account = new ControllerAccount(\n this,\n rpcUrl,\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n } catch (e) {\n console.error(e);\n return;\n }\n\n if (!this.iframes.profile) {\n const username = await this.keychain.username();\n\n this.iframes.profile = new ProfileIFrame({\n ...this.options,\n onConnect: (profile) => {\n this.profile = profile;\n },\n methods: {\n openSettings: () => this.openSettings.bind(this),\n openPurchaseCredits: () => this.openPurchaseCredits.bind(this),\n openExecute: () => this.openExecute.bind(this),\n },\n rpcUrl: this.rpcUrl(),\n username,\n version: this.version,\n });\n }\n\n return this.account;\n }\n\n async connect(): Promise<WalletAccount | undefined> {\n if (this.account) {\n return this.account;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n if (!!document.hasStorageAccess) {\n const ok = await document.hasStorageAccess();\n if (!ok) {\n await document.requestStorageAccess();\n }\n }\n\n this.iframes.keychain.open();\n\n try {\n let response = await this.keychain.connect(\n this.options.policies || {},\n this.rpcUrl(),\n );\n if (response.code !== ResponseCodes.SUCCESS) {\n throw new Error(response.message);\n }\n\n response = response as ConnectReply;\n this.account = new ControllerAccount(\n this,\n this.rpcUrl(),\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n\n return this.account;\n } catch (e) {\n console.log(e);\n } finally {\n this.iframes.keychain.close();\n }\n }\n\n async switchStarknetChain(chainId: string): Promise<boolean> {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return false;\n }\n\n try {\n this.selectedChain = chainId;\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n if (response.rpcUrl === this.rpcUrl()) {\n return true;\n }\n\n await this.keychain.switchChain(this.rpcUrl());\n await this.profile?.switchChain(this.rpcUrl());\n } catch (e) {\n console.error(e);\n return false;\n }\n\n this.emitNetworkChanged(chainId);\n return true;\n }\n\n addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n async disconnect() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n if (!!document.hasStorageAccess) {\n const ok = await document.hasStorageAccess();\n if (!ok) {\n await document.requestStorageAccess();\n }\n }\n\n this.account = undefined;\n return this.keychain.disconnect();\n }\n\n async openProfile(tab: ProfileContextTypeVariant = \"inventory\") {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(`${this.iframes.profile.url?.pathname}/${tab}`);\n this.iframes.profile.open();\n }\n\n async openProfileTo(to: string) {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(`${this.iframes.profile.url?.pathname}/${to}`);\n this.iframes.profile.open();\n }\n\n async openProfileAt(at: string) {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(at);\n this.iframes.profile.open();\n }\n\n async openSettings() {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n if (this.iframes.profile?.sendBackward) {\n this.iframes.profile?.sendBackward();\n } else {\n this.iframes.profile?.close();\n }\n this.iframes.keychain.open();\n const res = await this.keychain.openSettings();\n this.iframes.keychain.close();\n this.iframes.profile?.sendForward?.();\n if (res && (res as ConnectError).code === ResponseCodes.NOT_CONNECTED) {\n return false;\n }\n return true;\n }\n\n revoke(origin: string, _policy: Policy[]) {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return this.keychain.revoke(origin);\n }\n\n rpcUrl(): string {\n const chain = this.chains.get(this.selectedChain);\n if (!chain) {\n const availableChains = Array.from(this.chains.keys()).map((chain) =>\n shortString.decodeShortString(chain),\n );\n throw new Error(\n `Chain not found: ${shortString.decodeShortString(this.selectedChain)}. Available chains: ${availableChains.join(\", \")}`,\n );\n }\n return chain.rpcUrl;\n }\n\n username() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n return this.keychain.username();\n }\n\n openPurchaseCredits() {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n this.iframes.profile.close();\n this.iframes.keychain.open();\n this.keychain.openPurchaseCredits();\n }\n\n openStarterPack(starterpackId: string) {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n this.iframes.profile.close();\n this.iframes.keychain.open();\n this.keychain.openStarterPack(starterpackId);\n }\n\n async openExecute(calls: any, chainId?: string) {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n // Switch to the chain if provided\n let currentChainId = this.selectedChain;\n if (chainId) {\n this.switchStarknetChain(chainId);\n }\n // Switch iframes\n this.iframes.profile?.sendBackward();\n this.iframes.keychain.open();\n this.iframes.profile?.close();\n // Invoke execute\n const res = await this.keychain.execute(calls, undefined, undefined, true);\n // Switch back iframes\n this.iframes.profile?.open();\n this.iframes.keychain.close();\n this.iframes.profile?.sendForward();\n // Switch back to the original chain\n if (chainId) {\n this.switchStarknetChain(currentChainId);\n }\n const status = !(\n res &&\n ((res as ConnectError).code === ResponseCodes.NOT_CONNECTED ||\n (res as ConnectError).code === ResponseCodes.CANCELED)\n );\n return {\n status,\n transactionHash: (res as AddInvokeTransactionResult)?.transaction_hash,\n };\n }\n\n async delegateAccount() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return await this.keychain.delegateAccount();\n }\n\n private async validateChains(chains: Chain[]) {\n for (const chain of chains) {\n try {\n const url = new URL(chain.rpcUrl);\n const chainId = await parseChainId(url);\n this.chains.set(chainId, chain);\n } catch (error) {\n console.error(`Failed to parse chainId for ${chain.rpcUrl}:`, error);\n }\n }\n\n if (!this.chains.has(this.selectedChain)) {\n console.warn(\n `Selected chain ${this.selectedChain} not found in configured chains. ` +\n `Available chains: ${Array.from(this.chains.keys()).join(\", \")}`,\n );\n }\n }\n\n private waitForKeychain({\n timeout = 50000,\n interval = 100,\n }:\n | {\n timeout?: number;\n interval?: number;\n }\n | undefined = {}) {\n return new Promise<void>((resolve, reject) => {\n const startTime = Date.now();\n const id = setInterval(() => {\n if (Date.now() - startTime > timeout) {\n clearInterval(id);\n reject(new Error(\"Timeout waiting for keychain\"));\n return;\n }\n\n if (!this.keychain) return;\n\n clearInterval(id);\n resolve();\n }, interval);\n });\n }\n}\n","import { LookupRequest, LookupResponse } from \"./types\";\nimport { num } from \"starknet\";\nimport { API_URL } from \"./constants\";\n\nconst cache = new Map<string, string>();\n\nasync function lookup(request: LookupRequest): Promise<LookupResponse> {\n if (!request.addresses?.length && !request.usernames?.length) {\n return { results: [] };\n }\n\n const response = await fetch(`${API_URL}/lookup`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return response.json();\n}\n\nexport async function lookupUsernames(\n usernames: string[],\n): Promise<Map<string, string>> {\n const uncachedUsernames = usernames.filter((name) => !cache.has(name));\n\n if (uncachedUsernames.length > 0) {\n const response = await lookup({ usernames: uncachedUsernames });\n\n response.results.forEach((result) => {\n cache.set(result.username, result.addresses[0]); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n usernames\n .map((name) => [name, cache.get(name)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n\nexport async function lookupAddresses(\n addresses: string[],\n): Promise<Map<string, string>> {\n addresses = addresses.map(num.toHex);\n const uncachedAddresses = addresses.filter((addr) => !cache.has(addr));\n\n if (uncachedAddresses.length > 0) {\n const response = await lookup({\n addresses: uncachedAddresses,\n });\n\n response.results.forEach((result) => {\n cache.set(result.addresses[0], result.username); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n addresses\n .map((addr) => [addr, cache.get(addr)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n","/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n/**\n * The current version of Ethers.\n */\nexport const version = \"6.13.7\";\n//# sourceMappingURL=_version.js.map","/**\n * Property helper functions.\n *\n * @_subsection api/utils:Properties [about-properties]\n */\nfunction checkType(value, type, name) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n const error = new Error(`invalid value for type ${type}`);\n error.code = \"INVALID_ARGUMENT\";\n error.argument = `value.${name}`;\n error.value = value;\n throw error;\n}\n/**\n * Resolves to a new object that is a copy of %%value%%, but with all\n * values resolved.\n */\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\n/**\n * Assigns the %%values%% to %%target%% as read-only values.\n *\n * It %%types%% is specified, the values are checked.\n */\nexport function defineProperties(target, values, types) {\n for (let key in values) {\n let value = values[key];\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type, key);\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","/**\n * All errors in ethers include properties to ensure they are both\n * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n * The [[isError]] function can be used to check the error ``code`` and\n * provide a type guard for the properties present on that error interface.\n *\n * @_section: api/utils/errors:Errors [about-errors]\n */\nimport { version } from \"../_version.js\";\nimport { defineProperties } from \"./properties.js\";\nfunction stringify(value) {\n if (value == null) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n }\n if (value instanceof Uint8Array) {\n const HEX = \"0123456789abcdef\";\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n result += HEX[value[i] >> 4];\n result += HEX[value[i] & 0xf];\n }\n return result;\n }\n if (typeof (value) === \"object\" && typeof (value.toJSON) === \"function\") {\n return stringify(value.toJSON());\n }\n switch (typeof (value)) {\n case \"boolean\":\n case \"symbol\":\n return value.toString();\n case \"bigint\":\n return BigInt(value).toString();\n case \"number\":\n return (value).toString();\n case \"string\":\n return JSON.stringify(value);\n case \"object\": {\n const keys = Object.keys(value);\n keys.sort();\n return \"{ \" + keys.map((k) => `${stringify(k)}: ${stringify(value[k])}`).join(\", \") + \" }\";\n }\n }\n return `[ COULD NOT SERIALIZE ]`;\n}\n/**\n * Returns true if the %%error%% matches an error thrown by ethers\n * that matches the error %%code%%.\n *\n * In TypeScript environments, this can be used to check that %%error%%\n * matches an EthersError type, which means the expected properties will\n * be set.\n *\n * @See [ErrorCodes](api:ErrorCode)\n * @example\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, \"CALL_EXCEPTION\")) {\n * // The Type Guard has validated this object\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\n/**\n * Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/**\n * Returns a new Error configured to the format ethers emits errors, with\n * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n * for the corresponding EthersError.\n *\n * Each error in ethers includes the version of ethers, a\n * machine-readable [[ErrorCode]], and depending on %%code%%, additional\n * required properties. The error message will also include the %%message%%,\n * ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError(message, code, info) {\n let shortMessage = message;\n {\n const details = [];\n if (info) {\n if (\"message\" in info || \"code\" in info || \"name\" in info) {\n throw new Error(`value will overwrite populated values: ${stringify(info)}`);\n }\n for (const key in info) {\n if (key === \"shortMessage\") {\n continue;\n }\n const value = (info[key]);\n // try {\n details.push(key + \"=\" + stringify(value));\n // } catch (error: any) {\n // console.log(\"MMM\", error.message);\n // details.push(key + \"=[could not serialize object]\");\n // }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n let error;\n switch (code) {\n case \"INVALID_ARGUMENT\":\n error = new TypeError(message);\n break;\n case \"NUMERIC_FAULT\":\n case \"BUFFER_OVERRUN\":\n error = new RangeError(message);\n break;\n default:\n error = new Error(message);\n }\n defineProperties(error, { code });\n if (info) {\n Object.assign(error, info);\n }\n if (error.shortMessage == null) {\n defineProperties(error, { shortMessage });\n }\n return error;\n}\n/**\n * Throws an EthersError with %%message%%, %%code%% and additional error\n * %%info%% when %%check%% is falsish..\n *\n * @see [[api:makeError]]\n */\nexport function assert(check, message, code, info) {\n if (!check) {\n throw makeError(message, code, info);\n }\n}\n/**\n * A simple helper to simply ensuring provided arguments match expected\n * constraints, throwing if not.\n *\n * In TypeScript environments, the %%check%% has been asserted true, so\n * any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check, message, name, value) {\n assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\nexport function assertArgumentCount(count, expectedCount, message) {\n if (message == null) {\n message = \"\";\n }\n if (message) {\n message = \": \" + message;\n }\n assert(count >= expectedCount, \"missing argument\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n}\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\n/**\n * Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form) {\n assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n}\n/**\n * Many classes use file-scoped values to guard the constructor,\n * making it effectively private. This facilitates that pattern\n * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n * throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard, guard, className) {\n if (className == null) {\n className = \"\";\n }\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n assert(false, `private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n}\n//# sourceMappingURL=errors.js.map","/**\n * Some data helpers.\n *\n *\n * @_subsection api/utils:Data Helpers [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\nfunction _getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n/**\n * Get a typed Uint8Array for %%value%%. If already a Uint8Array\n * the original %%value%% is returned; if a copy is required use\n * [[getBytesCopy]].\n *\n * @see: getBytesCopy\n */\nexport function getBytes(value, name) {\n return _getBytes(value, name, false);\n}\n/**\n * Get a typed Uint8Array for %%value%%, creating a copy if necessary\n * to prevent any modifications of the returned value from being\n * reflected elsewhere.\n *\n * @see: getBytes\n */\nexport function getBytesCopy(value, name) {\n return _getBytes(value, name, true);\n}\n/**\n * Returns true if %%value%% is a valid [[HexString]].\n *\n * If %%length%% is ``true`` or a //number//, it also checks that\n * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n * bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/**\n * Returns true if %%value%% is a valid representation of arbitrary\n * data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\nconst HexCharacters = \"0123456789abcdef\";\n/**\n * Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data) {\n const bytes = getBytes(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\n/**\n * Returns a [[DataHexString]] by concatenating all values\n * within %%data%%.\n */\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n/**\n * Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return getBytes(data).length;\n}\n/**\n * Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n * offset to the %%end%% offset.\n *\n * By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data, start, end) {\n const bytes = getBytes(data);\n if (end != null && end > bytes.length) {\n assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\n/**\n * Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.startsWith(\"00\")) {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\nfunction zeroPad(data, length, left) {\n const bytes = getBytes(data);\n assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **left**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **values** are in Solidity\n * (e.g. ``uint128``).\n */\nexport function zeroPadValue(data, length) {\n return zeroPad(data, length, true);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **right**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **bytes** are in Solidity\n * (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=data.js.map","/**\n * Some mathematic operations.\n *\n * @_subsection: api/utils:Math Helpers [about-maths]\n */\nimport { hexlify, isBytesLike } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1;\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n/**\n * Convert %%value%% from a twos-compliment representation of %%width%%\n * bits to its value.\n *\n * If the highest bit is ``1``, the result will be negative.\n */\nexport function fromTwos(_value, _width) {\n const value = getUint(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n assert((value >> width) === BN_0, \"overflow\", \"NUMERIC_FAULT\", {\n operation: \"fromTwos\", fault: \"overflow\", value: _value\n });\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n/**\n * Convert %%value%% to a twos-compliment representation of\n * %%width%% bits.\n *\n * The result will always be positive.\n */\nexport function toTwos(_value, _width) {\n let value = getBigInt(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n const limit = (BN_1 << (width - BN_1));\n if (value < BN_0) {\n value = -value;\n assert(value <= limit, \"too low\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n const mask = (BN_1 << width) - BN_1;\n return ((~value) & mask) + BN_1;\n }\n else {\n assert(value < limit, \"too high\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n }\n return value;\n}\n/**\n * Mask %%value%% with a bitmask of %%bits%% ones.\n */\nexport function mask(_value, _bits) {\n const value = getUint(_value, \"value\");\n const bits = BigInt(getNumber(_bits, \"bits\"));\n return value & ((BN_1 << bits) - BN_1);\n}\n/**\n * Gets a BigInt from %%value%%. If it is an invalid value for\n * a BigInt, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return BigInt(value);\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n if (value[0] === \"-\" && value[1] !== \"-\") {\n return -BigInt(value.substring(1));\n }\n return BigInt(value);\n }\n catch (e) {\n assertArgument(false, `invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid BigNumberish value\", name || \"value\", value);\n}\n/**\n * Returns %%value%% as a bigint, validating it is valid as a bigint\n * value and that it is positive.\n */\nexport function getUint(value, name) {\n const result = getBigInt(value, name);\n assert(result >= BN_0, \"unsigned value cannot be negative\", \"NUMERIC_FAULT\", {\n fault: \"overflow\", operation: \"getUint\", value\n });\n return result;\n}\nconst Nibbles = \"0123456789abcdef\";\n/*\n * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data.\n */\nexport function toBigInt(value) {\n if (value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of value) {\n result += Nibbles[v >> 4];\n result += Nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return getBigInt(value);\n}\n/**\n * Gets a //number// from %%value%%. If it is an invalid value for\n * a //number//, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return Number(value);\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return value;\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n return getNumber(BigInt(value), name);\n }\n catch (e) {\n assertArgument(false, `invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid numeric value\", name || \"value\", value);\n}\n/**\n * Converts %%value%% to a number. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data. Throws if the value is not safe.\n */\nexport function toNumber(value) {\n return getNumber(toBigInt(value));\n}\n/**\n * Converts %%value%% to a Big Endian hexstring, optionally padded to\n * %%width%% bytes.\n */\nexport function toBeHex(_value, _width) {\n const value = getUint(_value, \"value\");\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = getNumber(_width, \"width\");\n assert(width * 2 >= result.length, `value exceeds width (${width} bytes)`, \"NUMERIC_FAULT\", {\n operation: \"toBeHex\",\n fault: \"overflow\",\n value: _value\n });\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\n/**\n * Converts %%value%% to a Big Endian Uint8Array.\n */\nexport function toBeArray(_value) {\n const value = getUint(_value, \"value\");\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n/**\n * Returns a [[HexString]] for %%value%% safe to use as a //Quantity//.\n *\n * A //Quantity// does not have and leading 0 values unless the value is\n * the literal value `0x0`. This is most commonly used for JSSON-RPC\n * numeric values.\n */\nexport function toQuantity(value) {\n let result = hexlify(isBytesLike(value) ? value : toBeArray(value)).substring(2);\n while (result.startsWith(\"0\")) {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=maths.js.map","/**\n * Using strings in Ethereum (or any security-basd system) requires\n * additional care. These utilities attempt to mitigate some of the\n * safety issues as well as provide the ability to recover and analyse\n * strings.\n *\n * @_subsection api/utils:Strings and UTF-8 [about-strings]\n */\nimport { getBytes } from \"./data.js\";\nimport { assertArgument, assertNormalize } from \"./errors.js\";\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n assertArgument(false, `invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === \"BAD_PREFIX\" || reason === \"UNEXPECTED_CONTINUE\") {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === \"OVERRUN\") {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === \"OVERLONG\") {\n assertArgument(typeof (badCodepoint) === \"number\", \"invalid bad code point for replacement\", \"badCodepoint\", badCodepoint);\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n/**\n * A handful of popular, built-in UTF-8 error handling strategies.\n *\n * **``\"error\"``** - throws on ANY illegal UTF-8 sequence or\n * non-canonical (overlong) codepoints (this is the default)\n *\n * **``\"ignore\"``** - silently drops any illegal UTF-8 sequence\n * and accepts non-canonical (overlong) codepoints\n *\n * **``\"replace\"``** - replace any illegal UTF-8 sequence with the\n * UTF-8 replacement character (i.e. ``\"\\\\ufffd\"``) and accepts\n * non-canonical (overlong) codepoints\n *\n * @returns: Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>\n */\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(\"UNEXPECTED_CONTINUE\", i - 1, bytes, result);\n }\n else {\n i += onError(\"BAD_PREFIX\", i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(\"OVERRUN\", i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(\"MISSING_CONTINUE\", i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(\"OUT_OF_RANGE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(\"UTF16_SURROGATE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(\"OVERLONG\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n/**\n * Returns the UTF-8 byte representation of %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8Bytes(str, form) {\n assertArgument(typeof (str) === \"string\", \"invalid string value\", \"str\", str);\n if (form != null) {\n assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00), \"invalid surrogate pair\", \"str\", str);\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\n//export \nfunction _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\n/**\n * Returns the string represented by the UTF-8 data %%bytes%%.\n *\n * When %%onError%% function is specified, it is called on UTF-8\n * errors allowing recovery using the [[Utf8ErrorFunc]] API.\n * (default: [error](Utf8ErrorFuncs))\n */\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n/**\n * Returns the UTF-8 code-points for %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8CodePoints(str, form) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nfunction bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!u8a(data))\n throw new Error(`expected Uint8Array, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapXOFConstructorWithOpts, } from './utils.js';\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n number(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n exists(this);\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n exists(this, false);\n bytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n number(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n output(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","/**\n * Cryptographic hashing functions\n *\n * @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\n/**\n * Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n * The %%data%% **must** be a data representation, to compute the\n * hash of UTF-8 data use the [[id]] function.\n *\n * @returns DataHexstring\n * @example:\n * keccak256(\"0x\")\n * //_result:\n *\n * keccak256(\"0x1337\")\n * //_result:\n *\n * keccak256(new Uint8Array([ 0x13, 0x37 ]))\n * //_result:\n *\n * // Strings are assumed to be DataHexString, otherwise it will\n * // throw. To hash UTF-8 data, see the note above.\n * keccak256(\"Hello World\")\n * //_error:\n */\nexport function keccak256(_data) {\n const data = getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","/**\n * A constant for the zero hash.\n *\n * (**i.e.** ``\"0x0000000000000000000000000000000000000000000000000000000000000000\"``)\n */\nexport const ZeroHash = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n//# sourceMappingURL=hashes.js.map","// NFKC (composed) // (decomposed)\n/**\n * A constant for the ether symbol (normalized using NFKC).\n *\n * (**i.e.** ``\"\\\\u039e\"``)\n */\nexport const EtherSymbol = \"\\u039e\"; // \"\\uD835\\uDF63\";\n/**\n * A constant for the [[link-eip-191]] personal message prefix.\n *\n * (**i.e.** ``\"\\\\x19Ethereum Signed Message:\\\\n\"``)\n */\nexport const MessagePrefix = \"\\x19Ethereum Signed Message:\\n\";\n//# sourceMappingURL=strings.js.map","import { ZeroHash } from \"../constants/index.js\";\nimport { concat, dataLength, getBigInt, getBytes, getNumber, hexlify, toBeArray, isHexString, zeroPadValue, assertArgument, assertPrivate } from \"../utils/index.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst _guard = {};\nfunction toUint256(value) {\n return zeroPadValue(toBeArray(value), 32);\n}\n/**\n * A Signature @TODO\n *\n *\n * @_docloc: api/crypto:Signing\n */\nexport class Signature {\n #r;\n #s;\n #v;\n #networkV;\n /**\n * The ``r`` value for a signature.\n *\n * This represents the ``x`` coordinate of a \"reference\" or\n * challenge point, from which the ``y`` can be computed.\n */\n get r() { return this.#r; }\n set r(value) {\n assertArgument(dataLength(value) === 32, \"invalid r\", \"value\", value);\n this.#r = hexlify(value);\n }\n /**\n * The ``s`` value for a signature.\n */\n get s() { return this.#s; }\n set s(_value) {\n assertArgument(dataLength(_value) === 32, \"invalid s\", \"value\", _value);\n const value = hexlify(_value);\n assertArgument(parseInt(value.substring(0, 3)) < 8, \"non-canonical s\", \"value\", value);\n this.#s = value;\n }\n /**\n * The ``v`` value for a signature.\n *\n * Since a given ``x`` value for ``r`` has two possible values for\n * its correspondin ``y``, the ``v`` indicates which of the two ``y``\n * values to use.\n *\n * It is normalized to the values ``27`` or ``28`` for legacy\n * purposes.\n */\n get v() { return this.#v; }\n set v(value) {\n const v = getNumber(value, \"value\");\n assertArgument(v === 27 || v === 28, \"invalid v\", \"v\", value);\n this.#v = v;\n }\n /**\n * The EIP-155 ``v`` for legacy transactions. For non-legacy\n * transactions, this value is ``null``.\n */\n get networkV() { return this.#networkV; }\n /**\n * The chain ID for EIP-155 legacy transactions. For non-legacy\n * transactions, this value is ``null``.\n */\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n /**\n * The ``yParity`` for the signature.\n *\n * See ``v`` for more details on how this value is used.\n */\n get yParity() {\n return (this.v === 27) ? 0 : 1;\n }\n /**\n * The [[link-eip-2098]] compact representation of the ``yParity``\n * and ``s`` compacted into a single ``bytes32``.\n */\n get yParityAndS() {\n // The EIP-2098 compact representation\n const yParityAndS = getBytes(this.s);\n if (this.yParity) {\n yParityAndS[0] |= 0x80;\n }\n return hexlify(yParityAndS);\n }\n /**\n * The [[link-eip-2098]] compact representation.\n */\n get compactSerialized() {\n return concat([this.r, this.yParityAndS]);\n }\n /**\n * The serialized representation.\n */\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n /**\n * @private\n */\n constructor(guard, r, s, v) {\n assertPrivate(guard, _guard, \"Signature\");\n this.#r = r;\n this.#s = s;\n this.#v = v;\n this.#networkV = null;\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n /**\n * Returns a new identical [[Signature]].\n */\n clone() {\n const clone = new Signature(_guard, this.r, this.s, this.v);\n if (this.networkV) {\n clone.#networkV = this.networkV;\n }\n return clone;\n }\n /**\n * Returns a representation that is compatible with ``JSON.stringify``.\n */\n toJSON() {\n const networkV = this.networkV;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r: this.r, s: this.s, v: this.v,\n };\n }\n /**\n * Compute the chain ID from the ``v`` in a legacy EIP-155 transactions.\n *\n * @example:\n * Signature.getChainId(45)\n * //_result:\n *\n * Signature.getChainId(46)\n * //_result:\n */\n static getChainId(v) {\n const bv = getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n assertArgument(bv >= BN_35, \"invalid EIP-155 v\", \"v\", v);\n return (bv - BN_35) / BN_2;\n }\n /**\n * Compute the ``v`` for a chain ID for a legacy EIP-155 transactions.\n *\n * Legacy transactions which use [[link-eip-155]] hijack the ``v``\n * property to include the chain ID.\n *\n * @example:\n * Signature.getChainIdV(5, 27)\n * //_result:\n *\n * Signature.getChainIdV(5, 28)\n * //_result:\n *\n */\n static getChainIdV(chainId, v) {\n return (getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n /**\n * Compute the normalized legacy transaction ``v`` from a ``yParirty``,\n * a legacy transaction ``v`` or a legacy [[link-eip-155]] transaction.\n *\n * @example:\n * // The values 0 and 1 imply v is actually yParity\n * Signature.getNormalizedV(0)\n * //_result:\n *\n * // Legacy non-EIP-1559 transaction (i.e. 27 or 28)\n * Signature.getNormalizedV(27)\n * //_result:\n *\n * // Legacy EIP-155 transaction (i.e. >= 35)\n * Signature.getNormalizedV(46)\n * //_result:\n *\n * // Invalid values throw\n * Signature.getNormalizedV(5)\n * //_error:\n */\n static getNormalizedV(v) {\n const bv = getBigInt(v);\n if (bv === BN_0 || bv === BN_27) {\n return 27;\n }\n if (bv === BN_1 || bv === BN_28) {\n return 28;\n }\n assertArgument(bv >= BN_35, \"invalid v\", \"v\", v);\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n /**\n * Creates a new [[Signature]].\n *\n * If no %%sig%% is provided, a new [[Signature]] is created\n * with default values.\n *\n * If %%sig%% is a string, it is parsed.\n */\n static from(sig) {\n function assertError(check, message) {\n assertArgument(check, message, \"signature\", sig);\n }\n ;\n if (sig == null) {\n return new Signature(_guard, ZeroHash, ZeroHash, 27);\n }\n if (typeof (sig) === \"string\") {\n const bytes = getBytes(sig, \"signature\");\n if (bytes.length === 64) {\n const r = hexlify(bytes.slice(0, 32));\n const s = bytes.slice(32, 64);\n const v = (s[0] & 0x80) ? 28 : 27;\n s[0] &= 0x7f;\n return new Signature(_guard, r, hexlify(s), v);\n }\n if (bytes.length === 65) {\n const r = hexlify(bytes.slice(0, 32));\n const s = bytes.slice(32, 64);\n assertError((s[0] & 0x80) === 0, \"non-canonical s\");\n const v = Signature.getNormalizedV(bytes[64]);\n return new Signature(_guard, r, hexlify(s), v);\n }\n assertError(false, \"invalid raw signature length\");\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n // Get r\n const _r = sig.r;\n assertError(_r != null, \"missing r\");\n const r = toUint256(_r);\n // Get s; by any means necessary (we check consistency below)\n const s = (function (s, yParityAndS) {\n if (s != null) {\n return toUint256(s);\n }\n if (yParityAndS != null) {\n assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n const bytes = getBytes(yParityAndS);\n bytes[0] &= 0x7f;\n return hexlify(bytes);\n }\n assertError(false, \"missing s\");\n })(sig.s, sig.yParityAndS);\n assertError((getBytes(s)[0] & 0x80) == 0, \"non-canonical s\");\n // Get v; by any means necessary (we check consistency below)\n const { networkV, v } = (function (_v, yParityAndS, yParity) {\n if (_v != null) {\n const v = getBigInt(_v);\n return {\n networkV: ((v >= BN_35) ? v : undefined),\n v: Signature.getNormalizedV(v)\n };\n }\n if (yParityAndS != null) {\n assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n return { v: ((getBytes(yParityAndS)[0] & 0x80) ? 28 : 27) };\n }\n if (yParity != null) {\n switch (getNumber(yParity, \"sig.yParity\")) {\n case 0: return { v: 27 };\n case 1: return { v: 28 };\n }\n assertError(false, \"invalid yParity\");\n }\n assertError(false, \"missing v\");\n })(sig.v, sig.yParityAndS, sig.yParity);\n const result = new Signature(_guard, r, s, v);\n if (networkV) {\n result.#networkV = networkV;\n }\n // If multiple of v, yParity, yParityAndS we given, check they match\n assertError(sig.yParity == null || getNumber(sig.yParity, \"sig.yParity\") === result.yParity, \"yParity mismatch\");\n assertError(sig.yParityAndS == null || sig.yParityAndS === result.yParityAndS, \"yParityAndS mismatch\");\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { MessagePrefix } from \"../constants/index.js\";\nimport { recoverAddress } from \"../transaction/index.js\";\nimport { concat, toUtf8Bytes } from \"../utils/index.js\";\n/**\n * Computes the [[link-eip-191]] personal-sign message digest to sign.\n *\n * This prefixes the message with [[MessagePrefix]] and the decimal length\n * of %%message%% and computes the [[keccak256]] digest.\n *\n * If %%message%% is a string, it is converted to its UTF-8 bytes\n * first. To compute the digest of a [[DataHexString]], it must be converted\n * to [bytes](getBytes).\n *\n * @example:\n * hashMessage(\"Hello World\")\n * //_result:\n *\n * // Hashes the SIX (6) string characters, i.e.\n * // [ \"0\", \"x\", \"4\", \"2\", \"4\", \"3\" ]\n * hashMessage(\"0x4243\")\n * //_result:\n *\n * // Hashes the TWO (2) bytes [ 0x42, 0x43 ]...\n * hashMessage(getBytes(\"0x4243\"))\n * //_result:\n *\n * // ...which is equal to using data\n * hashMessage(new Uint8Array([ 0x42, 0x43 ]))\n * //_result:\n *\n */\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(MessagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n/**\n * Return the address of the private key that produced\n * the signature %%sig%% during signing for %%message%%.\n */\nexport function verifyMessage(message, sig) {\n const digest = hashMessage(message);\n return recoverAddress(digest, sig);\n}\n//# sourceMappingURL=message.js.map","import { TurnkeyIframeClient } from \"@turnkey/sdk-browser\";\nimport { ethers, getBytes, Signature } from \"ethers\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class TurnkeyWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"turnkey\" as ExternalWalletType;\n readonly platform: ExternalPlatform = \"ethereum\";\n private account: string | undefined = undefined;\n private organizationId: string | undefined = undefined;\n\n constructor(\n private turnkeyIframeClient: TurnkeyIframeClient,\n address?: string,\n organizationId?: string,\n ) {\n this.account = address;\n this.organizationId = organizationId;\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\";\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n name: \"Turnkey\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Turnkey is not available\");\n }\n\n const accounts = await this.turnkeyIframeClient.getWallets();\n if (accounts && accounts.wallets.length > 0) {\n const walletAccount = await this.turnkeyIframeClient.getWalletAccount({\n walletId: accounts.wallets[0].walletId,\n });\n this.account = walletAccount.account.address;\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Turnkey is not connected\");\n }\n\n const result = (\n await this.turnkeyIframeClient.signTransaction({\n organizationId: this.organizationId,\n signWith: this.account,\n unsignedTransaction: transaction,\n type: \"TRANSACTION_TYPE_ETHEREUM\",\n })\n ).signedTransaction;\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Turnkey is not connected\");\n }\n\n const paddedMessage = `0x${message.replace(\"0x\", \"\").padStart(64, \"0\")}`;\n const messageBytes = getBytes(paddedMessage);\n const messageHash = ethers.hashMessage(messageBytes);\n\n const { r, s, v } = await this.turnkeyIframeClient.signRawPayload({\n organizationId: this.organizationId,\n signWith: this.account,\n payload: messageHash,\n encoding: \"PAYLOAD_ENCODING_HEXADECIMAL\",\n hashFunction: \"HASH_FUNCTION_NO_OP\",\n });\n\n const rHex = r.startsWith(\"0x\") ? r : \"0x\" + r;\n const sHex = s.startsWith(\"0x\") ? s : \"0x\" + s;\n\n const vNumber = parseInt(v, 16);\n\n if (isNaN(vNumber)) {\n console.error(`Invalid recovery ID (v) received from Turnkey: ${v}`);\n throw new Error(`Invalid recovery ID (v) received: ${v}`);\n }\n\n const signature = Signature.from({\n r: rHex,\n s: sHex,\n v: vNumber,\n });\n\n return {\n success: true,\n wallet: this.type,\n result: signature.serialized,\n account: this.account,\n };\n } catch (error) {\n console.error(`Error signing message with Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n return this.signMessage(data);\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n return false;\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Turnkey is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n return { success: true, wallet: this.type, result: \"0\" };\n }\n } catch (error) {\n console.error(`Error getting balance from Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import Provider from \"@walletconnect/ethereum-provider\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class WalletConnectWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"walletconnect\" as ExternalWalletType;\n readonly platform: ExternalPlatform = \"ethereum\";\n private account: string | undefined = undefined;\n\n constructor(private provider: Provider) {}\n\n isAvailable(): boolean {\n return !!this.provider;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: \"WalletConnect\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"WalletConnect is not available\");\n }\n\n const accounts = await this.provider.request<string[]>({\n method: \"eth_requestAccounts\",\n });\n\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n const result = await this.provider.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(\n message: `0x${string}`,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n const result = await this.provider.request({\n method: \"personal_sign\",\n params: [this.account!, message] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n const result = await this.provider.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing typed data with WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(\"WalletConnect is not available\");\n }\n\n try {\n await this.provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(\"Chain not added to WalletConnect\");\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for WalletConnect:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const balance = await this.provider.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"] as any,\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","// src/generated/controller-configs.ts\nvar configs = {\n \"blob-arena\": {\n origin: [\"*.blobarena.xyz\", \"blobarena.xyz\", \"development.blobarena.xyz\"],\n theme: {\n colors: {\n primary: \"#980f06\"\n },\n cover: \"https://static.cartridge.gg/presets/blob-arena/cover.png\",\n icon: \"https://static.cartridge.gg/presets/blob-arena/icon.png\",\n name: \"Blob Arena\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n },\n chains: {\n SN_SEPOLIA: {\n policies: {\n contracts: {\n \"0x771a2807aa479dacd207c1f12018d0fa6e92ef1eb994169ff4f8904a8845e3f\": {\n name: \"Lobby Contract\",\n description: \"Game invites and responses\",\n methods: [\n {\n name: \"Send Invite\",\n entrypoint: \"send_invite\",\n description: \"Send users an invite\"\n },\n {\n name: \"Rescind Invite\",\n entrypoint: \"rescind_invite\",\n description: \"Rescind a previously sent invite\"\n },\n {\n name: \"Respond Invite\",\n entrypoint: \"respond_invite\",\n description: \"Respond to a received invite\"\n },\n {\n name: \"Rescind Response\",\n entrypoint: \"rescind_response\",\n description: \"Rescind a previous response to an invite\"\n },\n {\n name: \"Reject Invite\",\n entrypoint: \"reject_invite\",\n description: \"Reject a received invite\"\n },\n {\n name: \"Reject Response\",\n entrypoint: \"reject_response\",\n description: \"Reject a response to an invite\"\n },\n {\n name: \"Accept Response\",\n entrypoint: \"accept_response\",\n description: \"Accept a response to an invite\"\n }\n ]\n },\n \"0x6040ee8b2aee6cbcc482b5cb712d1c206f8ad070e98d7e07a70d4e4a6b5e261\": {\n name: \"PVP Contract\",\n description: \"Manages core gameplay interactions\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start\",\n description: \"Start the game\"\n },\n {\n name: \"Commit Attack\",\n entrypoint: \"commit\",\n description: \"Commit an attack in the game\"\n },\n {\n name: \"Reveal Attack\",\n entrypoint: \"reveal\",\n description: \"Reveal the committed attack in the game\"\n },\n {\n name: \"Run Round\",\n entrypoint: \"run\",\n description: \"Run the next round of the game\"\n },\n {\n name: \"Forfeit\",\n entrypoint: \"forfeit\",\n description: \"Forfeit the game\"\n },\n {\n name: \"Kick Player\",\n entrypoint: \"kick_player\",\n description: \"Kick an inactive player from the game\"\n }\n ]\n },\n \"0x69f9cd86938bae98a413c2b4dddee1ab8005d72202466ef4fd35a625596e619\": {\n name: \"Betsy Contract\",\n description: \"Wager operations\",\n methods: [\n {\n name: \"Set Owner's Fee\",\n entrypoint: \"set_owners_fee\",\n description: \"Set the owner's fee\"\n },\n {\n name: \"Create Wager\",\n entrypoint: \"create\",\n description: \"Create a wager\"\n },\n {\n name: \"Accept Wager\",\n entrypoint: \"accept\",\n description: \"Accept a wager\"\n },\n {\n name: \"Reject Wager\",\n entrypoint: \"reject\",\n description: \"Reject a wager\"\n },\n {\n name: \"Revoke Wager\",\n entrypoint: \"revoke\",\n description: \"Revoke a wager\"\n },\n {\n name: \"Claim Win\",\n entrypoint: \"claim_win\",\n description: \"Claim the win\"\n },\n {\n name: \"Approve Release\",\n entrypoint: \"approve_release\",\n description: \"Approve fund release\"\n },\n {\n name: \"Revoke Release\",\n entrypoint: \"revoke_release\",\n description: \"Revoke fund release\"\n },\n {\n name: \"Release Funds\",\n entrypoint: \"release_funds\",\n description: \"Release funds\"\n }\n ]\n },\n \"0x11088b79a397c2fb9d2570acbf711e6972e75e3a28b6bcf36267501d96c781b\": {\n name: \"Arcade Contract\",\n description: \"Minting of arcade Bloberts\",\n methods: [\n {\n name: \"Mint Arcade Blobert\",\n entrypoint: \"mint\",\n description: \"Mint arcade blobert\"\n }\n ]\n },\n \"0x645aec04e61f286691b91d6589d010890bb66ca0af91bf24d12c8bc4387c868\": {\n name: \"AMMA Contract\",\n description: \"Minting of AMMA Bloberts\",\n methods: [\n {\n name: \"Mint AMMA Blobert\",\n entrypoint: \"mint\",\n description: \"Mint AMMA blobert\"\n }\n ]\n },\n \"0x1ad613db1957a576c1a9bae913f1d22a41add2f1d64d822d9e097f219b34954\": {\n name: \"Arcade Contract\",\n description: \"Arcade mode contract\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start_game\",\n description: \"Start the game\"\n },\n {\n name: \"Attack\",\n entrypoint: \"attack\",\n description: \"Submit an attack\"\n },\n {\n name: \"Start Challenge\",\n entrypoint: \"start_challenge\",\n description: \"Start a challenge\"\n },\n {\n name: \"Next Challenge Round\",\n entrypoint: \"next_challenge_round\",\n description: \"Go forward\"\n },\n {\n name: \"Respawn Challenge\",\n entrypoint: \"respawn_challenge\",\n description: \"Restart a challenge\"\n },\n {\n name: \"End Challenge\",\n entrypoint: \"end_challenge\",\n description: \"End a challenge\"\n },\n {\n name: \"Claim Free Game\",\n entrypoint: \"claim_free_game\",\n description: \"Claim an arcade game\"\n }\n ]\n }\n }\n }\n }\n }\n },\n \"blob-arena-amma\": {\n origin: [\"*.blobarena.xyz\", \"blobarena.xyz\", \"development.blobarena.xyz\"],\n theme: {\n colors: {\n primary: \"#D7B000\"\n },\n cover: \"https://static.cartridge.gg/presets/blob-arena-amma/cover.png\",\n icon: \"https://static.cartridge.gg/presets/blob-arena-amma/icon.png\",\n name: \"Blob Arena AMMA\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n },\n chains: {\n SN_SEPOLIA: {\n policies: {\n contracts: {\n \"0x771a2807aa479dacd207c1f12018d0fa6e92ef1eb994169ff4f8904a8845e3f\": {\n name: \"Lobby Contract\",\n description: \"Game invites and responses\",\n methods: [\n {\n name: \"Send Invite\",\n entrypoint: \"send_invite\",\n description: \"Send users an invite\"\n },\n {\n name: \"Rescind Invite\",\n entrypoint: \"rescind_invite\",\n description: \"Rescind a previously sent invite\"\n },\n {\n name: \"Respond Invite\",\n entrypoint: \"respond_invite\",\n description: \"Respond to a received invite\"\n },\n {\n name: \"Rescind Response\",\n entrypoint: \"rescind_response\",\n description: \"Rescind a previous response to an invite\"\n },\n {\n name: \"Reject Invite\",\n entrypoint: \"reject_invite\",\n description: \"Reject a received invite\"\n },\n {\n name: \"Reject Response\",\n entrypoint: \"reject_response\",\n description: \"Reject a response to an invite\"\n },\n {\n name: \"Accept Response\",\n entrypoint: \"accept_response\",\n description: \"Accept a response to an invite\"\n }\n ]\n },\n \"0x6040ee8b2aee6cbcc482b5cb712d1c206f8ad070e98d7e07a70d4e4a6b5e261\": {\n name: \"PVP Contract\",\n description: \"Manages core gameplay interactions\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start\",\n description: \"Start the game\"\n },\n {\n name: \"Commit Attack\",\n entrypoint: \"commit\",\n description: \"Commit an attack in the game\"\n },\n {\n name: \"Reveal Attack\",\n entrypoint: \"reveal\",\n description: \"Reveal the committed attack in the game\"\n },\n {\n name: \"Run Round\",\n entrypoint: \"run\",\n description: \"Run the next round of the game\"\n },\n {\n name: \"Forfeit\",\n entrypoint: \"forfeit\",\n description: \"Forfeit the game\"\n },\n {\n name: \"Kick Player\",\n entrypoint: \"kick_player\",\n description: \"Kick an inactive player from the game\"\n }\n ]\n },\n \"0x69f9cd86938bae98a413c2b4dddee1ab8005d72202466ef4fd35a625596e619\": {\n name: \"Betsy Contract\",\n description: \"Wager operations\",\n methods: [\n {\n name: \"Set Owner's Fee\",\n entrypoint: \"set_owners_fee\",\n description: \"Set the owner's fee\"\n },\n {\n name: \"Create Wager\",\n entrypoint: \"create\",\n description: \"Create a wager\"\n },\n {\n name: \"Accept Wager\",\n entrypoint: \"accept\",\n description: \"Accept a wager\"\n },\n {\n name: \"Reject Wager\",\n entrypoint: \"reject\",\n description: \"Reject a wager\"\n },\n {\n name: \"Revoke Wager\",\n entrypoint: \"revoke\",\n description: \"Revoke a wager\"\n },\n {\n name: \"Claim Win\",\n entrypoint: \"claim_win\",\n description: \"Claim the win\"\n },\n {\n name: \"Approve Release\",\n entrypoint: \"approve_release\",\n description: \"Approve fund release\"\n },\n {\n name: \"Revoke Release\",\n entrypoint: \"revoke_release\",\n description: \"Revoke fund release\"\n },\n {\n name: \"Release Funds\",\n entrypoint: \"release_funds\",\n description: \"Release funds\"\n }\n ]\n },\n \"0x11088b79a397c2fb9d2570acbf711e6972e75e3a28b6bcf36267501d96c781b\": {\n name: \"Arcade Contract\",\n description: \"Minting of arcade Bloberts\",\n methods: [\n {\n name: \"Mint Arcade Blobert\",\n entrypoint: \"mint\",\n description: \"Mint arcade blobert\"\n }\n ]\n },\n \"0x645aec04e61f286691b91d6589d010890bb66ca0af91bf24d12c8bc4387c868\": {\n name: \"AMMA Contract\",\n description: \"Minting of AMMA Bloberts\",\n methods: [\n {\n name: \"Mint AMMA Blobert\",\n entrypoint: \"mint\",\n description: \"Mint AMMA blobert\"\n }\n ]\n },\n \"0x1ad613db1957a576c1a9bae913f1d22a41add2f1d64d822d9e097f219b34954\": {\n name: \"Arcade Contract\",\n description: \"Arcade mode contract\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start_game\",\n description: \"Start the game\"\n },\n {\n name: \"Attack\",\n entrypoint: \"attack\",\n description: \"Submit an attack\"\n },\n {\n name: \"Start Challenge\",\n entrypoint: \"start_challenge\",\n description: \"Start a challenge\"\n },\n {\n name: \"Next Challenge Round\",\n entrypoint: \"next_challenge_round\",\n description: \"Go forward\"\n },\n {\n name: \"Respawn Challenge\",\n entrypoint: \"respawn_challenge\",\n description: \"Restart a challenge\"\n },\n {\n name: \"End Challenge\",\n entrypoint: \"end_challenge\",\n description: \"End a challenge\"\n },\n {\n name: \"Claim Free Game\",\n entrypoint: \"claim_free_game\",\n description: \"Claim an arcade game\"\n }\n ]\n }\n }\n }\n }\n }\n },\n budokan: {\n origin: \"budokan.gg\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x05fb427962210ac4b3be5e23419b0d9e91ca6a9c57b0665d2ca7783092506f6e\": {\n name: \"Budokan\",\n methods: [\n {\n entrypoint: \"create_tournament\"\n },\n {\n entrypoint: \"enter_tournament\"\n },\n {\n entrypoint: \"submit_score\"\n },\n {\n entrypoint: \"claim_prize\"\n },\n {\n entrypoint: \"add_prize\"\n },\n {\n entrypoint: \"register_token\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#B1B97A\"\n },\n cover: \"https://static.cartridge.gg/presets/budokan/cover.png\",\n icon: \"https://static.cartridge.gg/presets/budokan/icon.png\",\n name: \"Budokan\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"bytebeasts-tamagotchi\": {\n origin: \"bytebeasts.games\",\n theme: {\n colors: {\n primary: \"#ECECDA\"\n },\n cover: \"https://static.cartridge.gg/presets/bytebeasts-tamagotchi/cover.png\",\n icon: \"https://static.cartridge.gg/presets/bytebeasts-tamagotchi/icon.png\",\n name: \"Tamagotchi\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n cartridge: {\n origin: \"*\",\n theme: {\n name: \"Cartridge\",\n icon: \"https://static.cartridge.gg/presets/cartridge/icon.svg\",\n cover: {\n light: \"https://static.cartridge.gg/presets/cartridge/cover-light.png\",\n dark: \"https://static.cartridge.gg/presets/cartridge/cover-dark.png\"\n },\n optimizedCover: {\n light: {\n webp: {\n \"768\": \"cover-light@768.webp\",\n \"1024\": \"cover-light@1024.webp\",\n \"1440\": \"cover-light@1440.webp\"\n },\n jpg: {\n \"768\": \"cover-light@768.jpg\",\n \"1024\": \"cover-light@1024.jpg\",\n \"1440\": \"cover-light@1440.jpg\"\n },\n png: {\n \"768\": \"cover-light@768.png\",\n \"1024\": \"cover-light@1024.png\",\n \"1440\": \"cover-light@1440.png\"\n }\n },\n dark: {\n webp: {\n \"768\": \"cover-dark@768.webp\",\n \"1024\": \"cover-dark@1024.webp\",\n \"1440\": \"cover-dark@1440.webp\"\n },\n jpg: {\n \"768\": \"cover-dark@768.jpg\",\n \"1024\": \"cover-dark@1024.jpg\",\n \"1440\": \"cover-dark@1440.jpg\"\n },\n png: {\n \"768\": \"cover-dark@768.png\",\n \"1024\": \"cover-dark@1024.png\",\n \"1440\": \"cover-dark@1440.png\"\n }\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n coloniz: {\n origin: [\"coloniz.xyz\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x430d7262fb9ad2c830d793471c3a07e08afe54f9a5f0d28db48712bc918f5f\": {\n name: \"Tokenbound Sessions\",\n methods: [\n {\n name: \"Execute\",\n entrypoint: \"execute\",\n description: \"Session proxy\"\n }\n ]\n },\n \"0x56977e22ad4751ea5b3df958da3080971c7f26036127452b98c154fbea86d06\": {\n name: \"Profile Creation\",\n methods: [\n {\n name: \"Create A Coloniz Profile\",\n entrypoint: \"create_profile\",\n description: \"Create a profile on Coloniz\"\n }\n ]\n },\n \"0x5cc4644374e3f91b52cfe64937dacaec91b2d81fe2f146a860ab5b3bb751ce8\": {\n name: \"Handles Minting\",\n methods: [\n {\n name: \"Mint Handle\",\n entrypoint: \"mint_handle\",\n description: \"Mint Coloniz Profile Handle\"\n }\n ]\n },\n \"0x79914426e3cc5336c479ee87770380ceeda4b60496657e70c3ee7d57a992226\": {\n name: \"Handle Registry\",\n methods: [\n {\n name: \"Link Handle\",\n entrypoint: \"link\",\n description: \"Link handle to Coloniz Profile\"\n }\n ]\n }\n },\n messages: [\n {\n name: \"Sign in to Coloniz\",\n description: \"Sign the message to login to Coloniz\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n Signin: [\n {\n name: \"content\",\n type: \"string\"\n },\n {\n name: \"nonce\",\n type: \"string\"\n },\n {\n name: \"timestamp\",\n type: \"string\"\n }\n ]\n },\n primaryType: \"Signin\",\n domain: {\n name: \"Coloniz\",\n version: \"1\",\n revision: \"1\",\n chainId: \"SN_MAIN\"\n }\n }\n ]\n }\n }\n },\n theme: {\n colors: {\n primary: \"#4285F4\"\n },\n cover: \"https://static.cartridge.gg/presets/coloniz/cover.png\",\n icon: \"https://static.cartridge.gg/presets/coloniz/icon.png\",\n name: \"Coloniz\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n credit: {\n origin: \"*\",\n theme: {\n name: \"Credit\",\n icon: \"https://static.cartridge.gg/presets/credit/icon.svg\",\n cover: \"https://static.cartridge.gg/presets/credit/cover.png\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n \"dark-shuffle\": {\n origin: [\"darkshuffle.io\", \"darkshuffle.dev\"],\n theme: {\n colors: {\n primary: \"#F59100\"\n },\n cover: \"https://static.cartridge.gg/presets/dark-shuffle/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dark-shuffle/icon.svg\",\n name: \"Dark Shuffle\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n },\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x051Fea4450Da9D6aeE758BDEbA88B2f665bCbf549D2C61421AA724E9AC0Ced8F\": {\n name: \"VRF Provider\",\n description: \"Provides verifiable random functions\",\n methods: [\n {\n name: \"Request Random\",\n description: \"Request a random number\",\n entrypoint: \"request_random\"\n }\n ]\n },\n \"0x0444834e7b71749832f0db8c64f17ed1c3af8462c1682c10dcd6068b1c57494b\": {\n name: \"game_systems\",\n description: \"Game mechanics\",\n methods: [\n {\n entrypoint: \"mint\"\n },\n {\n entrypoint: \"start_game\"\n },\n {\n entrypoint: \"pick_card\"\n },\n {\n entrypoint: \"generate_tree\"\n },\n {\n entrypoint: \"select_node\"\n }\n ]\n },\n \"0x06633dc0c8e3956fd8d87f68e5a4324cb20270b442a532f4d4179d85c389b324\": {\n name: \"battle_systems\",\n description: \"Battle mechanics\",\n methods: [\n {\n entrypoint: \"battle_actions\"\n }\n ]\n }\n }\n }\n }\n }\n },\n dominion: {\n origin: \"https://dominion.fun\",\n theme: {\n colors: {\n primary: \"#19cfff\"\n },\n cover: \"https://static.cartridge.gg/presets/dominion/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dominion/icon.svg\",\n name: \"Dominion\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n \"dope-wars\": {\n origin: \"dopewars.game\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x051Fea4450Da9D6aeE758BDEbA88B2f665bCbf549D2C61421AA724E9AC0Ced8F\": {\n name: \"VRF Provider\",\n description: \"Provides verifiable random functions\",\n methods: [\n {\n name: \"Request Random\",\n description: \"Request a random number\",\n entrypoint: \"request_random\"\n }\n ]\n },\n \"0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113\": {\n name: \"Paper Token\",\n description: \"Manages paper approvals\",\n methods: [\n {\n name: \"Approve\",\n description: \"Approve paper usage\",\n entrypoint: \"approve\"\n }\n ]\n },\n \"0x044a23BbfE03FFe90D3C23Fb6e5A8AD0341036C039363DfA6F3513278Aa51fCA\": {\n name: \"Game Contract\",\n description: \"Core game mechanics\",\n methods: [\n {\n name: \"Create Game\",\n description: \"Start a new game\",\n entrypoint: \"create_game\"\n },\n {\n name: \"Travel\",\n description: \"Travel to a new location\",\n entrypoint: \"travel\"\n },\n {\n name: \"Decide\",\n description: \"Make a game decision\",\n entrypoint: \"decide\"\n },\n {\n name: \"End Game\",\n description: \"End the current game\",\n entrypoint: \"end_game\"\n }\n ]\n },\n \"0x0412445e644070C69fEa16b964cC81Cd6dEBF6A4DBf683E2E9686a45ad088de8\": {\n name: \"Laundromat Contract\",\n description: \"Manages game scoring and laundering\",\n methods: [\n {\n name: \"Register Score\",\n description: \"Register a game score\",\n entrypoint: \"register_score\"\n },\n {\n name: \"Claim\",\n description: \"Claim rewards\",\n entrypoint: \"claim\"\n },\n {\n name: \"Launder\",\n description: \"Launder resources\",\n entrypoint: \"launder\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#11ED83\"\n },\n cover: \"https://static.cartridge.gg/presets/dope-wars/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dope-wars/icon.png\",\n name: \"Dope Wars\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n dragark: {\n origin: [\"*.dragark.net\", \"dragark.net\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x05553fcb6da57decacce3306d8e0b3bf65b656dceda96c90ba55bde8980253ce\": {\n name: \"Achievement Systems\",\n description: \"Allows you to interact with achievement features.\",\n methods: [\n {\n name: \"Claim Achievement Reward\",\n description: \"A method to claim your achievement reward.\",\n entrypoint: \"claim_achievement_reward\"\n }\n ]\n },\n \"0x059ffaee1d7068332ea8f084a9685b99a5c2a74197ef99e093a10fa25f887402\": {\n name: \"Dragon Systems\",\n description: \"Allows you to interact with dragon features.\",\n methods: [\n {\n name: \"Activate Dragon\",\n description: \"A method to activate the Dragark NFT into the game.\",\n entrypoint: \"activate_dragon\"\n },\n {\n name: \"Deactivate Dragon\",\n description: \"A method to deactivate Dragark NFT out of the game.\",\n entrypoint: \"deactivate_dragon\"\n },\n {\n name: \"Upgrade Dragon\",\n description: \"A method to upgrade the Dragark's level.\",\n entrypoint: \"upgrade_dragon\"\n }\n ]\n },\n \"0x0760d029c7b49069ece425285afb592152da1fff59038e697a5554f1b94150f2\": {\n name: \"Island Systems\",\n description: \"Allows you to interact with island features.\",\n methods: [\n {\n name: \"Claim Resources\",\n description: \"A method to claim the island's rescources.\",\n entrypoint: \"claim_resources\"\n },\n {\n name: \"Claim Resources Islands\",\n description: \"A method to claim rescources on multiple islands.\",\n entrypoint: \"claim_resources_islands\"\n }\n ]\n },\n \"0x000ccb9e596c7d3298b670d91b6c3ed305aeed3eb1335d702265f53f1d0ad68a\": {\n name: \"Journey Systems\",\n description: \"Allows you to interact with journey features.\",\n methods: [\n {\n name: \"Start Journey\",\n description: \"A method to start a new journey to other island.\",\n entrypoint: \"start_journey\"\n },\n {\n name: \"Finish Journey\",\n description: \"A method to finish a started journey.\",\n entrypoint: \"finish_journey\"\n }\n ]\n },\n \"0x0002d12498d7b7f5e4d57a9895f8684fa58f4edb06ba6edb879723d8acb16507\": {\n name: \"Map Systems\",\n description: \"Allows you to interact with map features.\",\n methods: [\n {\n name: \"Join Map\",\n description: \"A method to join the map.\",\n entrypoint: \"join_map\"\n }\n ]\n },\n \"0x01ba78267fd97db89b8ac0316ce0a2d71aaef87ad4f300e5468dc20232a2ff20\": {\n name: \"Mission Systems\",\n description: \"Allows you to interact with mission features.\",\n methods: [\n {\n name: \"Claim Mission Reward\",\n description: \"A method to claim your mission reward.\",\n entrypoint: \"claim_mission_reward\"\n }\n ]\n },\n \"0x063b168f01cbac52b5d2ad82696eeaddde33b38d24364523ad0a3ca400361489\": {\n name: \"Player Systems\",\n description: \"Allows you to interact with player features.\",\n methods: [\n {\n name: \"Buy Energy\",\n description: \"A method to buy energy used in scouting the map.\",\n entrypoint: \"buy_energy\"\n },\n {\n name: \"Claim Reward\",\n description: \"A method to claim your reward.\",\n entrypoint: \"claim_reward\"\n },\n {\n name: \"Upgrade Account Level\",\n description: \"A method to upgrade your account level.\",\n entrypoint: \"upgrade_account_level\"\n },\n {\n name: \"Upgrade Invitation Level\",\n description: \"A method to upgrade your invitation level.\",\n entrypoint: \"upgrade_invitation_level\"\n },\n {\n name: \"Redeem Invite Code\",\n description: \"A method to redeem invite code.\",\n entrypoint: \"redeem_invite_code\"\n },\n {\n name: \"Claim Pool Share Reward\",\n description: \"A method to claim your Pool Share reward.\",\n entrypoint: \"claim_pool_share_reward\"\n }\n ]\n },\n \"0x03284bb4684703a368db8fd538c39b30e51822dbab9ad398e66311e820318444\": {\n name: \"Scout Systems\",\n description: \"Allows you to interact with scout features.\",\n methods: [\n {\n name: \"Scout\",\n description: \"A method to scout the map.\",\n entrypoint: \"scout\"\n }\n ]\n },\n \"0x04a8b7e4106719e75653595c1e55da9ac88fbf1ae29124fca325c0537f00e908\": {\n name: \"Shield Systems\",\n description: \"Allows you to interact with shield features.\",\n methods: [\n {\n name: \"Activate Shield\",\n description: \"A method to activate a shield to protect your island.\",\n entrypoint: \"activate_shield\"\n },\n {\n name: \"Deactivate Shield\",\n description: \"A method to deactivate a shield from your island.\",\n entrypoint: \"deactivate_shield\"\n },\n {\n name: \"Buy Shield\",\n description: \"A method to buy a shield.\",\n entrypoint: \"buy_shield\"\n }\n ]\n },\n \"0x060a67334aed80a5403bd2b727337f29ccdcbf51784cc7ddb73f10ceb92e61f1\": {\n name: \"Star Shop Systems\",\n description: \"Allows you to interact with star shop features.\",\n methods: [\n {\n name: \"Buy Item Star Shop\",\n description: \"A method to buy item from the Star Shop.\",\n entrypoint: \"buy_item_star_shop\"\n }\n ]\n },\n \"0x0655a9a38cb8dd7087a206b7d885528f8994e03dd6449105ef0f068caa502d25\": {\n name: \"Treasure Hunt Systems\",\n description: \"Allows you to interact with treasure hunt features.\",\n methods: [\n {\n name: \"Insert Dragon Treasure Hunt\",\n description: \"A method to insert your Dragarks to start a new treasure hunt.\",\n entrypoint: \"insert_dragon_treasure_hunt\"\n },\n {\n name: \"End Treasure Hunt\",\n description: \"A method to end an existing treasure hunt and claim rewards.\",\n entrypoint: \"end_treasure_hunt\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#71EB34\"\n },\n cover: \"https://static.cartridge.gg/presets/dragark/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dragark/icon.png\",\n name: \"Dragark\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n eternum: {\n origin: [\"eternum.realms.world\", \"empire.realms.world\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x4ed3a7c5f53c6e96186eaf1b670bd2e2a3699c08e070aedf4e5fc6ac246ddc1\": {\n name: \"Pillage\",\n description: \"Allows you to raid a structure and pillage resources\",\n methods: [\n {\n name: \"Battle Pillage\",\n description: \"Pillage a structure\",\n entrypoint: \"battle_pillage\"\n }\n ]\n },\n \"0x2620f65aa2fd72d705306ada1ee7410023a3df03da9291f1ccb744fabfebc0\": {\n name: \"Battle contract\",\n description: \"Required to engage in battles\",\n methods: [\n {\n name: \"Battle Start\",\n description: \"Start a battle\",\n entrypoint: \"battle_start\"\n },\n {\n name: \"Battle Force Start\",\n description: \"Force start a battle\",\n entrypoint: \"battle_force_start\"\n },\n {\n name: \"Battle Join\",\n description: \"Join a battle\",\n entrypoint: \"battle_join\"\n },\n {\n name: \"Battle Leave\",\n description: \"Leave a battle\",\n entrypoint: \"battle_leave\"\n },\n {\n name: \"Battle Claim\",\n description: \"Claim a structure after a battle\",\n entrypoint: \"battle_claim\"\n },\n {\n name: \"Battle Resolve\",\n description: \"Reopens the bank after battle\",\n entrypoint: \"battle_resolve\"\n }\n ]\n },\n \"0x6bf57710571fd159e71b1ed155bb0759027e416c88a06556f321c94c214e768\": {\n name: \"Leave battle contract\",\n description: \"Allows armies to leave a battle\",\n methods: [\n {\n name: \"Leave Battle\",\n description: \"Leave a battle\",\n entrypoint: \"leave_battle\"\n },\n {\n name: \"Leave Battle If Ended\",\n description: \"Leave a battle if its ended\",\n entrypoint: \"leave_battle_if_ended\"\n }\n ]\n },\n \"0x4b6a35c0c541467674ebb9640113a6d79c6f5a468796e9299b8e484a770032a\": {\n name: \"Building contract\",\n description: \"Allows to manage buildings\",\n methods: [\n {\n name: \"Create\",\n description: \"Create a building\",\n entrypoint: \"create\"\n },\n {\n name: \"Pause Production\",\n description: \"Pause the production of a building\",\n entrypoint: \"pause_production\"\n },\n {\n name: \"Resume Production\",\n description: \"Resume production of a building\",\n entrypoint: \"resume_production\"\n },\n {\n name: \"Destroy a building\",\n description: \"Destroy a building\",\n entrypoint: \"destroy\"\n }\n ]\n },\n \"0x57d514154bb4dc319539d4e338312a41c248fb6a5122f82b2f2e11ddd3e67e4\": {\n name: \"Guild contract\",\n description: \"Allows guild utilities\",\n methods: [\n {\n name: \"Create Guild\",\n description: \"Creates a new guild\",\n entrypoint: \"create_guild\"\n },\n {\n name: \"Join Guild\",\n description: \"Join an existing guild\",\n entrypoint: \"join_guild\"\n },\n {\n name: \"Whitelist Player\",\n description: \"Add a player to the guild's whitelist\",\n entrypoint: \"whitelist_player\"\n },\n {\n name: \"Transfer Guild Ownership\",\n description: \"Transfer ownership of the guild to another player\",\n entrypoint: \"transfer_guild_ownership\"\n },\n {\n name: \"Remove Guild Member\",\n description: \"Remove a member from the guild\",\n entrypoint: \"remove_guild_member\"\n },\n {\n name: \"Remove Player From Whitelist\",\n description: \"Remove a player from the guild's whitelist\",\n entrypoint: \"remove_player_from_whitelist\"\n }\n ]\n },\n \"0x2fcc3c1691387321c2f4d6310eda7a14365bd274c1a37ed3948d2e93a56f821\": {\n name: \"Hyperstructure contract\",\n description: \"Handles the creation and management of hyperstructures\",\n methods: [\n {\n name: \"Get Points\",\n description: \"Gets your total number of points\",\n entrypoint: \"get_points\"\n },\n {\n name: \"Create\",\n description: \"Create a new hyperstructure\",\n entrypoint: \"create\"\n },\n {\n name: \"Contribute To Construction\",\n description: \"Contribute resources to hyperstructure construction\",\n entrypoint: \"contribute_to_construction\"\n },\n {\n name: \"Set Co Owners\",\n description: \"Set additional owners for the hyperstructure\",\n entrypoint: \"set_co_owners\"\n },\n {\n name: \"End Game\",\n description: \"Terminates the current game season once you've reached enough points\",\n entrypoint: \"end_game\"\n },\n {\n name: \"Set Access\",\n description: \"Configure access permissions for contributions to the hyperstructure\",\n entrypoint: \"set_access\"\n }\n ]\n },\n \"0xa052c5ca082356bcc8457f0f805eaf18f97d0fdddde3f90f5b238923859ed4\": {\n name: \"AMM liquidity contract\",\n description: \"Manages liquidity for the Automated Market Maker\",\n methods: [\n {\n name: \"Add\",\n description: \"Add liquidity to the pool\",\n entrypoint: \"add\"\n },\n {\n name: \"Remove\",\n description: \"Remove liquidity from the pool\",\n entrypoint: \"remove\"\n }\n ]\n },\n \"0x4a212c52c4035bc9bd170125216604f406dcd75b41be11d3b4d89047366d84d\": {\n name: \"Exploration contract\",\n description: \"Allows you to move to unexplored hexes on the map\",\n methods: [\n {\n name: \"Explore\",\n description: \"Explore an uncharted hex on the game map\",\n entrypoint: \"explore\"\n }\n ]\n },\n \"0x7e3bae0e253a0131063b63ee4d7b27b50329c617ae88b82d529a70f1a11c63\": {\n name: \"Naming contract\",\n description: \"Manages entity naming in the game\",\n methods: [\n {\n name: \"Set Entity Name\",\n description: \"Assign a custom name to a game entity\",\n entrypoint: \"set_entity_name\"\n },\n {\n name: \"Set Address Name\",\n description: \"Assign a custom name to a user's address\",\n entrypoint: \"set_address_name\"\n }\n ]\n },\n \"0x1b480f620ea35431ab43dba634795b14f547ef3e77370db6f0a31f2fdc21d86\": {\n name: \"Realms contract\",\n description: \"Manages realm-related actions\",\n methods: [\n {\n name: \"Create a realm\",\n description: \"Create a new realm\",\n entrypoint: \"create\"\n },\n {\n name: \"Upgrade Level\",\n description: \"Upgrade the level of a realm\",\n entrypoint: \"upgrade_level\"\n },\n {\n name: \"Quest Claim\",\n description: \"Claim rewards from completed quests\",\n entrypoint: \"quest_claim\"\n }\n ]\n },\n \"0x691a60b709ca5c1c5ff86824831f84deb26f0f5d07d70c0f807eab48110d2f6\": {\n name: \"Resource bridge contract\",\n description: \"Manages bridge transfers between L2 and Eternum\",\n methods: [\n {\n name: \"Deposit Initial\",\n description: \"Initial deposit of resources for bridge transfer\",\n entrypoint: \"deposit_initial\"\n },\n {\n name: \"Deposit\",\n description: \"Deposit additional resources for bridge transfer\",\n entrypoint: \"deposit\"\n },\n {\n name: \"Start Withdraw\",\n description: \"Initiate a withdrawal process\",\n entrypoint: \"start_withdraw\"\n },\n {\n name: \"Finish Withdraw\",\n description: \"Finalize a withdrawal process\",\n entrypoint: \"finish_withdraw\"\n }\n ]\n },\n \"0x42c0303a2119a9e20daa60e83c48221cdf1bb2a4c009bab031d1cd3555a127e\": {\n name: \"Resource contract\",\n description: \"In-game resource management\",\n methods: [\n {\n name: \"Approve\",\n description: \"Approve resource transfer\",\n entrypoint: \"approve\"\n },\n {\n name: \"Send\",\n description: \"Send resources to another entity\",\n entrypoint: \"send\"\n },\n {\n name: \"Pickup\",\n description: \"Collect available resources after approval\",\n entrypoint: \"pickup\"\n }\n ]\n },\n \"0x4f92a1d00d3aec8cece60fc2d0fc236fe1d95c54ff0ceb2f393fbc7e0863d8e\": {\n name: \"AMM swap contract\",\n description: \"Handles token swaps in the Automated Market Maker\",\n methods: [\n {\n name: \"Buy\",\n description: \"Purchase tokens from the liquidity pool\",\n entrypoint: \"buy\"\n },\n {\n name: \"Sell\",\n description: \"Sell tokens to the liquidity pool\",\n entrypoint: \"sell\"\n }\n ]\n },\n \"0x7e2b1334398fafbe640f34bacae99b649d633417960ee397b6a8fb117fec819\": {\n name: \"Market contract\",\n description: \"Manages trading orders in the in-game market\",\n methods: [\n {\n name: \"Create Order\",\n description: \"Create a new trading order\",\n entrypoint: \"create_order\"\n },\n {\n name: \"Accept Order\",\n description: \"Accept a trading order\",\n entrypoint: \"accept_order\"\n },\n {\n name: \"Accept Partial Order\",\n description: \"Accept a partial trading order\",\n entrypoint: \"accept_partial_order\"\n },\n {\n name: \"Cancel Order\",\n description: \"Cancel a trading order\",\n entrypoint: \"cancel_order\"\n }\n ]\n },\n \"0x4069c2be57f08fef9f31afc85a5b4c03c208ebdb278b9d853606caa7a9cbee6\": {\n name: \"Map travel contract\",\n description: \"Manages player movement across the game map\",\n methods: [\n {\n name: \"Travel Hex\",\n description: \"Move to a specific hex on the map\",\n entrypoint: \"travel_hex\"\n }\n ]\n },\n \"0x26be0ed574aa9ee6f73b53b12f0a199ddbf4ac697470316cdb3d9d1f5680cab\": {\n name: \"Army contract\",\n description: \"Manages army-related actions\",\n methods: [\n {\n name: \"Army Create\",\n description: \"Create a new army\",\n entrypoint: \"army_create\"\n },\n {\n name: \"Army Delete\",\n description: \"Delete an existing army\",\n entrypoint: \"army_delete\"\n },\n {\n name: \"Army Buy Troops\",\n description: \"Buy troops for an army\",\n entrypoint: \"army_buy_troops\"\n },\n {\n name: \"Army Merge Troops\",\n description: \"Merge troops from multiple armies\",\n entrypoint: \"army_merge_troops\"\n }\n ]\n },\n \"0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f\": {\n name: \"VRF Provider\",\n description: \"Verifiable Random Function contract, allows randomness in the game\",\n methods: [\n {\n name: \"Request Random\",\n description: \"Allows requesting random numbers from the VRF provider\",\n entrypoint: \"request_random\"\n }\n ]\n },\n \"0x057675b9c0bd62b096a2e15502a37b290fa766ead21c33eda42993e48a714b80\": {\n name: \"Season pass ERC20 contract\",\n description: \"Manages the season passes\",\n methods: [\n {\n name: \"Approve for all\",\n description: \"Approves transfer of season pass\",\n entrypoint: \"set_approval_for_all\"\n }\n ]\n },\n \"0x4b5e65a9617c7ba3c7ea64324ff4338a400adb1a3cfe903b3f8b647cbb59fb7\": {\n name: \"Season Systems\",\n description: \"Register and claim\",\n methods: [\n {\n name: \"Register\",\n description: \"Registers to leaderboard\",\n entrypoint: \"register_to_leaderboard\"\n },\n {\n name: \"Claim\",\n description: \"Claim\",\n entrypoint: \"claim_leaderboard_rewards\"\n }\n ]\n }\n },\n messages: [\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"s0_eternum-Message\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"channel\",\n type: \"shortstring\"\n },\n {\n name: \"content\",\n type: \"string\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n },\n {\n name: \"salt\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"s0_eternum-Message\",\n domain: {\n name: \"Eternum\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n }\n ]\n }\n }\n },\n theme: {\n name: \"Eternum\",\n icon: \"https://static.cartridge.gg/presets/eternum/icon.svg\",\n cover: \"https://static.cartridge.gg/presets/eternum/cover.png\",\n colors: {\n primary: \"#dc8b07\"\n },\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n flippyflop: {\n origin: \"flippyflop.gg\",\n theme: {\n colors: {\n primary: \"#F38332\"\n },\n cover: \"https://static.cartridge.gg/presets/flippyflop/cover.png\",\n icon: \"https://static.cartridge.gg/presets/flippyflop/icon.png\",\n name: \"FlippyFlop\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"force-prime\": {\n origin: \"forceprime.io\",\n theme: {\n colors: {\n primary: \"#E1CC89\"\n },\n cover: \"https://static.cartridge.gg/presets/force-prime/cover.png\",\n icon: \"https://static.cartridge.gg/presets/force-prime/icon.png\",\n name: \"Force Prime\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"jokers-of-neon\": {\n origin: \"jokersofneon.com\",\n theme: {\n colors: {\n primary: \"#A144B2\"\n },\n cover: \"https://static.cartridge.gg/presets/jokers-of-neon/cover.png\",\n icon: \"https://static.cartridge.gg/presets/jokers-of-neon/icon.png\",\n name: \"Jokers of Neon\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"loot-survivor\": {\n origin: \"lootsurvivor.io\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x0305f26ad19e0a10715d9f3137573d3a543de7b707967cd85d11234d6ec0fb7e\": {\n methods: [\n {\n entrypoint: \"attack\"\n },\n {\n entrypoint: \"drop\"\n },\n {\n entrypoint: \"equip\"\n },\n {\n entrypoint: \"explore\"\n },\n {\n entrypoint: \"flee\"\n },\n {\n entrypoint: \"new_game\"\n },\n {\n entrypoint: \"transfer_from\"\n },\n {\n entrypoint: \"upgrade\"\n }\n ]\n },\n \"0x3347382d530ff6acb9283ac1d78471187aae8a4690e9316bb4e3c3365ff7a86\": {\n methods: [\n {\n entrypoint: \"enter_tournament\"\n },\n {\n entrypoint: \"start_tournament\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#33FF33\"\n },\n cover: \"https://static.cartridge.gg/presets/loot-survivor/cover.png\",\n icon: \"https://static.cartridge.gg/presets/loot-survivor/icon.png\",\n name: \"Loot Survivor\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n metacube: {\n origin: [\"*.metacube.games\", \"metacube.games\"],\n theme: {\n colors: {\n primary: \"#11ffbb\"\n },\n cover: \"https://static.cartridge.gg/presets/metacube/cover.png\",\n icon: \"https://static.cartridge.gg/presets/metacube/icon.png\",\n name: \"Metacube\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"metal-slug\": {\n origin: \"https://metalslug.starkarcade.com/\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x6aa878dfaa2710b66f26c02e52cbcc8adddd0c3e9b0d766fb045c8250490be0\": {\n name: \"Metal Slug Systems\",\n description: \"Allows you to interact with metal slug features.\",\n methods: [\n {\n name: \"Claim end match reward\",\n description: \"A method to claim reward after finishing a match.\",\n entrypoint: \"claim_end_match_reward\"\n },\n {\n name: \"Claim Points\",\n description: \"A method to claim points after finishing suvival match.\",\n entrypoint: \"claim_points\"\n },\n {\n name: \"Graft Treasure Chest\",\n description: \"A method to graft a treasure chest after collect enough materials.\",\n entrypoint: \"graft_treasure_chest\"\n },\n {\n name: \"Open Treasure Chest\",\n description: \"A method to open a treasure chest.\",\n entrypoint: \"open_treasure_chest\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#C00F0C\"\n },\n cover: \"https://static.cartridge.gg/presets/metal-slug/cover.png\",\n icon: \"https://static.cartridge.gg/presets/metal-slug/icon.png\",\n name: \"Dragark\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n nums: {\n origin: [\"*.nums.gg\", \"nums.gg\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x07ccfbc43c109efd466638defa52702382ace922051d35a0554b5ccd02a8f155\": {\n name: \"Game Actions\",\n methods: [\n {\n name: \"Create Game\",\n entrypoint: \"create_game\",\n description: \"Creates a new game\"\n },\n {\n name: \"Set Slot\",\n entrypoint: \"set_slot\",\n description: \"Sets one slot for the game\"\n }\n ]\n },\n \"0x00ea44dd8e971d3af9f99568577bf14b0a80a7f7763fa6281840ab68a8a53ba9\": {\n name: \"Claim Actions\",\n methods: [\n {\n name: \"Claim Appchain Reward\",\n entrypoint: \"claim_reward\",\n description: \"Claims token rewards on Appchain\"\n }\n ]\n },\n \"0x03ee42961dc151d740df95c44b929abe85cf66e8444e0279252dd99b055c64b0\": {\n name: \"Rewards Claim\",\n methods: [\n {\n name: \"Consume Reward on Starknet\",\n entrypoint: \"consume_claim_reward\",\n description: \"Consumes a claim reward message on Starknet\"\n }\n ]\n },\n \"0x7ed472bdde3b19a5cf2334ad0f368426272f477938270b1b04259f159bdc0e2\": {\n name: \"VRF Provider\",\n methods: [\n {\n name: \"Request Random\",\n entrypoint: \"request_random\",\n description: \"Requests a random number from the VRF contract\"\n }\n ]\n },\n \"0x4d776373427434a22f7d60d0f7fe0e336fd830edf4294acec33d9f2e1275327\": {\n name: \"Social\",\n description: \"Social contract to manage your social activities\",\n methods: [\n {\n name: \"pin\",\n entrypoint: \"pin\",\n description: \"Pin an achievement.\"\n },\n {\n name: \"unpin\",\n entrypoint: \"unpin\",\n description: \"Unpin an achievement.\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#9E84E9\"\n },\n cover: \"https://static.cartridge.gg/presets/nums/cover.png\",\n icon: \"https://static.cartridge.gg/presets/nums/icon.png\",\n name: \"Nums\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n paved: {\n origin: \"paved.gg\",\n theme: {\n colors: {\n primary: \"#B0CAF8\"\n },\n cover: \"https://static.cartridge.gg/presets/paved/cover.png\",\n icon: \"https://static.cartridge.gg/presets/paved/icon.svg\",\n name: \"Paved\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n pistols: {\n origin: [\"*.pistols.gg\", \"*.underware.gg\"],\n theme: {\n colors: {\n primary: \"#EF9758\"\n },\n cover: \"https://static.cartridge.gg/presets/pistols/cover.png\",\n icon: \"https://static.cartridge.gg/presets/pistols/icon.png\",\n name: \"Pistols at Dawn\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n },\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x0154d9a74e8106255d8146b250683ba939f4db3e98b586997caf9514163ca963\": {\n description: \"Game loop contract\",\n methods: [\n {\n entrypoint: \"commit_moves\",\n description: \"Commit moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"reveal_moves\",\n description: \"Reveal moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"clear_call_to_action\",\n description: \"Clear the required action call for a duelist\"\n },\n {\n entrypoint: \"collect_duel\",\n description: \"Close expired duels\"\n },\n {\n entrypoint: \"collect_season\",\n description: \"Close the current season and start the next one\"\n }\n ]\n },\n \"0x0320a19527bb1e661df4e41639c755353f6a401b24a8922a1d086a9667391428\": {\n description: \"Bank contract\",\n methods: [\n {\n entrypoint: \"sponsor_duelists\",\n description: \"Sponsor duelist starter packs with $LORDS\"\n },\n {\n entrypoint: \"sponsor_season\",\n description: \"Sponsor the current season with $LORDS\"\n },\n {\n entrypoint: \"sponsor_tournament\",\n description: \"Sponsor a tournament with $LORDS\"\n }\n ]\n },\n \"0x032fecc3b90057da30d74fa450abcdd55621cd88000fe709384f8a6b1a910c9f\": {\n description: \"Packs ERC721 contract\",\n methods: [\n {\n entrypoint: \"claim_starter_pack\",\n description: \"Claim the starter pack, mint Duelists\"\n },\n {\n entrypoint: \"purchase\",\n description: \"Purchase a closed pack\"\n },\n {\n entrypoint: \"open\",\n description: \"Open a pack, mint its contents\"\n }\n ]\n },\n \"0x03e1da8b8d6208af7d90ae32d1c3a6f597223022bc0e72b5abc2ba07009c560f\": {\n description: \"Duel ERC721 contract\",\n methods: [\n {\n entrypoint: \"create_duel\",\n description: \"Create a Duel, mint its token\"\n },\n {\n entrypoint: \"reply_duel\",\n description: \"Reply to a Duel (accept or reject)\"\n }\n ]\n },\n \"0x03d042d2022519481f424b01f1a68268f773d0220275a102e809f49dee62c1c3\": {\n description: \"Duelist ERC721 contract\",\n methods: [\n {\n entrypoint: \"poke\",\n description: \"Reactivates an inactive Duelist\"\n },\n {\n entrypoint: \"sacrifice\",\n description: \"Sacrifices a Duelist\"\n },\n {\n entrypoint: \"memorialize\",\n description: \"Memorializes a Duelist\"\n }\n ]\n },\n \"0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f\": {\n description: \"Cartridge VRF Provider\",\n methods: [\n {\n entrypoint: \"request_random\",\n description: \"Request a random number\"\n }\n ]\n }\n },\n messages: [\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerOnline\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"pistols-PlayerOnline\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n },\n name: \"PlayerOnline\",\n description: \"Notify the server that a player is online\"\n },\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerBookmark\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_address\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_id\",\n type: \"u128\"\n },\n {\n name: \"enabled\",\n type: \"bool\"\n }\n ]\n },\n primaryType: \"pistols-PlayerBookmark\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n },\n name: \"PlayerBookmark\",\n description: \"Notify the server that a player follows another player or token\"\n }\n ]\n }\n },\n SN_SEPOLIA: {\n policies: {\n contracts: {\n \"0x008e63a48288f4672d955f97dc5d3e026712f927fc4262dde1b49070c3b98397\": {\n description: \"Game loop contract\",\n methods: [\n {\n entrypoint: \"commit_moves\",\n description: \"Commit moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"reveal_moves\",\n description: \"Reveal moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"collect_duel\",\n description: \"Close expired duels\"\n },\n {\n entrypoint: \"collect_season\",\n description: \"Close the current season and start the next one\"\n },\n {\n entrypoint: \"clear_call_to_action\",\n description: \"Clear the required action call for a duelist\"\n }\n ]\n },\n \"0x05aadbdf456aa5c8be5438e8e7465c5e6b7bb48fc2e9339f30ced197315d8896\": {\n description: \"Bank contract\",\n methods: [\n {\n entrypoint: \"sponsor_duelists\",\n description: \"Sponsor duelist starter packs with $LORDS\"\n },\n {\n entrypoint: \"sponsor_season\",\n description: \"Sponsor the current season with $LORDS\"\n },\n {\n entrypoint: \"sponsor_tournament\",\n description: \"Sponsor a tournament with $LORDS\"\n }\n ]\n },\n \"0x0578b4e302d95d233a1e5a45b648b7066a21896f288a31a98f77e8bd177b7b9b\": {\n description: \"Packs ERC721 contract\",\n methods: [\n {\n entrypoint: \"claim_starter_pack\",\n description: \"Claim the starter pack, mint Duelists\"\n },\n {\n entrypoint: \"purchase\",\n description: \"Purchase a closed pack\"\n },\n {\n entrypoint: \"open\",\n description: \"Open a pack, mint its contents\"\n }\n ]\n },\n \"0x0377acc27a0ca83d1894a1ae62636ba3998197505b20b918e3e74effe395c6a7\": {\n description: \"Duel ERC721 contract\",\n methods: [\n {\n entrypoint: \"create_duel\",\n description: \"Create a Duel, mint its token\"\n },\n {\n entrypoint: \"reply_duel\",\n description: \"Reply to a Duel (accept or reject)\"\n }\n ]\n },\n \"0x06012ef19b1a4c6d0b06f583c4d5fa13ba39e56297760073da636ab48e5ee6c8\": {\n description: \"Duelist ERC721 contract\",\n methods: [\n {\n entrypoint: \"poke\",\n description: \"Reactivates an inactive Duelist\"\n },\n {\n entrypoint: \"sacrifice\",\n description: \"Sacrifices a Duelist\"\n },\n {\n entrypoint: \"memorialize\",\n description: \"Memorializes a Duelist\"\n }\n ]\n },\n \"0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f\": {\n description: \"Cartridge VRF Provider\",\n methods: [\n {\n entrypoint: \"request_random\",\n description: \"Request a random number\"\n }\n ]\n }\n },\n messages: [\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerOnline\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"pistols-PlayerOnline\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_SEPOLIA\",\n revision: \"1\"\n },\n name: \"PlayerOnline\",\n description: \"Notify the server that a player is online\"\n },\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerBookmark\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_address\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_id\",\n type: \"u128\"\n },\n {\n name: \"enabled\",\n type: \"bool\"\n }\n ]\n },\n primaryType: \"pistols-PlayerBookmark\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_SEPOLIA\",\n revision: \"1\"\n },\n name: \"PlayerBookmark\",\n description: \"Notify the server that a player follows another player or token\"\n }\n ]\n }\n }\n }\n },\n pixelaw: {\n origin: \"dojo.pixelaw.xyz\",\n theme: {\n colors: {\n primary: \"#7C00B1\",\n primaryForeground: \"white\"\n },\n cover: \"https://static.cartridge.gg/presets/pixelaw/cover.png\",\n icon: \"https://static.cartridge.gg/presets/pixelaw/icon.svg\",\n name: \"Pixelaw\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n ponziland: {\n origin: [\"*.ponzi.land\"],\n theme: {\n colors: {\n primary: \"#F38332\"\n },\n cover: \"https://static.cartridge.gg/presets/ponziland/cover.png\",\n icon: \"https://static.cartridge.gg/presets/ponziland/icon.svg\",\n name: \"PonziLand\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n },\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x77eeeef469121d1761bb25efbfce7650f5c7fbf00d63cb1b778b774783b2c6\": {\n name: \"PonziLand Systems\",\n description: \"Main game contract\",\n methods: [\n {\n name: \"Bid\",\n entrypoint: \"bid\",\n description: \"Bid for auction land\"\n },\n {\n name: \"Buy\",\n entrypoint: \"buy\",\n description: \"Buy land from another player\"\n },\n {\n name: \"Claim\",\n entrypoint: \"claim\",\n description: \"Claim rewards for a single land\"\n },\n {\n name: \"Claim All\",\n entrypoint: \"claim_all\",\n description: \"Claim rewards for lands\"\n },\n {\n name: \"Increase Price\",\n entrypoint: \"increase_price\",\n description: \"Increase price of the land\"\n },\n {\n name: \"Increase Stake\",\n entrypoint: \"increase_stake\",\n description: \"Increase stake of the land\"\n },\n {\n name: \"Level Up\",\n entrypoint: \"level_up\",\n description: \"Level up the land\"\n }\n ]\n },\n \"0x524624cb89898776386140c36093d1bc4dd1654d125f0f677c9cd2b122463ff\": {\n name: \"PonziLand Auth System\",\n description: \"Contract to allow authorized players to play\",\n methods: [\n {\n name: \"Add Authorized\",\n entrypoint: \"add_authorized_with_signature\",\n description: \"Add authorized with signature\"\n }\n ]\n },\n \"0x5735fa6be5dd248350866644c0a137e571f9d637bb4db6532ddd63a95854b58\": {\n name: \"eSTRK Token\",\n description: \"eSTRK ERC20 methods\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eSTRK allowance\"\n }\n ]\n },\n \"0x415c058a41cc80e7368562564c96fc4e3c03b23e32ba07a5c8cadc262b50c3c\": {\n name: \"ePAPER Token\",\n description: \"ePAPER ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"ePAPER allowance\"\n }\n ]\n },\n \"0x4b66d22d3001daad50fb853c0c1cb3b96d1745acb295bae4a6d54b29125ed09\": {\n name: \"eLORDS Token\",\n description: \"eLORDS ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eLORDS allowance\"\n }\n ]\n },\n \"0x1920ef3c5e765454dd3f6aeb5420ef524830e0b5f9a95ec2e1b9ee2073a16d1\": {\n name: \"eBROTHER Token\",\n description: \"eBROTHER ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eBROTHER allowance\"\n }\n ]\n },\n \"0x79aba4c89e9cc3495318d2479fe93601e1188ff5d9a8823e3dc736d74bb437f\": {\n name: \"ePAL Token\",\n description: \"ePAL ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"ePAL allowance\"\n }\n ]\n },\n \"0x38217779933c147320af3239e2dd098312e3074e0898001c79939c2e676fe8c\": {\n name: \"eETH Token\",\n description: \"eETH ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eETH allowance\"\n }\n ]\n },\n \"0x4c090a1a34a3ba423e63a498ce23de7c7a4f0f1a8128fa768a09738606cbb9e\": {\n name: \"eBTC Token\",\n description: \"eBTC ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eBTC allowance\"\n }\n ]\n }\n },\n messages: [\n {\n name: \"Socialink - Register\",\n description: \"Registers your controller wallet to a new Socialink account\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n register: [\n {\n name: \"username\",\n type: \"felt\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"register\",\n domain: {\n name: \"socialink\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n },\n {\n name: \"Socialink - Link\",\n description: \"Links your social account to a Socialink account\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n link: [\n {\n name: \"token\",\n type: \"string\"\n },\n {\n name: \"provider\",\n type: \"string\"\n },\n {\n name: \"nonce\",\n type: \"felt\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"link\",\n domain: {\n name: \"socialink\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n },\n {\n name: \"Socialink - Mint\",\n description: \"Confirms your selection of token for the tournament mint\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n mint: [\n {\n name: \"token\",\n type: \"string\"\n },\n {\n name: \"nonce\",\n type: \"felt\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"mint\",\n domain: {\n name: \"socialink\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n }\n ]\n }\n }\n }\n },\n \"realm-of-ra\": {\n origin: \"mancala.realmofra.com\",\n theme: {\n colors: {\n primary: \"#de9534\"\n },\n cover: \"https://static.cartridge.gg/presets/realm-of-ra/cover.png\",\n icon: \"https://static.cartridge.gg/presets/realm-of-ra/icon.png\",\n name: \"Realm of Ra\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"savage-summit\": {\n origin: \"savagesummit.io\",\n theme: {\n colors: {\n primary: \"#fbf7da\"\n },\n cover: \"https://static.cartridge.gg/presets/savage-summit/cover.png\",\n icon: \"https://static.cartridge.gg/presets/savage-summit/icon.png\",\n name: \"Savage Summit\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"tale-weaver\": {\n origin: \"\",\n theme: {\n colors: {\n primary: \"#fce377\"\n },\n cover: \"https://static.cartridge.gg/presets/tale-weaver/cover.png\",\n icon: \"https://static.cartridge.gg/presets/tale-weaver/icon.png\",\n name: \"Tale Weaver\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n wardens: {\n origin: \"app.wardens.xyz\",\n theme: {\n colors: {\n primary: \"#f7ac18\"\n },\n cover: \"https://static.cartridge.gg/presets/wardens/cover.jpg\",\n icon: \"https://static.cartridge.gg/presets/wardens/icon.png\",\n name: \"Wardens\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n zkastle: {\n origin: \"zkastle.vercel.app\",\n theme: {\n colors: {\n primary: \"#E50D2C\"\n },\n cover: \"https://static.cartridge.gg/presets/zkastle/cover.png\",\n icon: \"https://static.cartridge.gg/presets/zkastle/icon.svg\",\n name: \"zKastle\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n zktt: {\n origin: \"zktable.top\",\n theme: {\n colors: {\n primary: \"#FFFFFF\"\n },\n cover: \"https://static.cartridge.gg/presets/zktt/cover.png\",\n icon: \"https://static.cartridge.gg/presets/zktt/icon.png\",\n name: \"zKTT\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n zkube: {\n origin: \"app.zkube.xyz\",\n theme: {\n colors: {\n primary: \"#5bc3e6\"\n },\n cover: \"https://static.cartridge.gg/presets/zkube/cover.png\",\n icon: \"https://static.cartridge.gg/presets/zkube/icon.png\",\n name: \"zKube\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n }\n};\n\n// src/generated/erc20-metadata.ts\nvar metadata = [\n {\n name: \"Wrapped BTC\",\n symbol: \"WBTC\",\n decimals: 8,\n l2_token_address: \"0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac\",\n sort_order: 0,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7dcb2db2-a7a7-44af-660b-8262e057a100/logo\"\n },\n {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 6,\n l2_token_address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n sort_order: 5,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e5aaa970-a998-47e8-bd43-4a3b56b87200/logo\"\n },\n {\n name: \"LUSD Stablecoin\",\n symbol: \"LUSD\",\n decimals: 18,\n l2_token_address: \"0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dc0ae733-5498-4afa-f475-48dba677aa00/logo\"\n },\n {\n name: \"Tether USD\",\n symbol: \"USDT\",\n decimals: 6,\n l2_token_address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c8a721d1-07c3-46e4-ab4e-523977c30b00/logo\"\n },\n {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n l2_token_address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n sort_order: 3,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e07829b7-0382-4e03-7ecd-a478c5aa9f00/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAIv0\",\n decimals: 18,\n l2_token_address: \"0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3\",\n sort_order: 4,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAI\",\n decimals: 18,\n l2_token_address: \"0x05574eb6b8789a91466f902c380d978e472db68170ff82a5b650b95a58ddf4ad\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Legacy Starknet Wrapped Staked Ether\",\n symbol: \"wstETH-legacy\",\n decimals: 18,\n l2_token_address: \"0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/26162dcc-29c2-4f5e-3acd-5e6be1f07a00/logo\"\n },\n {\n name: \"Wrapped Staked Ether\",\n symbol: \"wstETH\",\n decimals: 18,\n l2_token_address: \"0x0057912720381af14b0e5c87aa4718ed5e527eab60b3801ebf702ab09139e38b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dbbcbdea-1a92-437d-3701-4a5ee129d000/logo\"\n },\n {\n name: \"Rocket Pool ETH\",\n symbol: \"rETH\",\n decimals: 18,\n l2_token_address: \"0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c9f2d6fe-fbc6-4384-0990-923dfcb7a200/logo\"\n },\n {\n name: \"LORDS\",\n symbol: \"LORDS\",\n decimals: 18,\n l2_token_address: \"0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49\",\n sort_order: 1,\n total_supply: 509e5,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a3bfe959-50c4-4f89-0aef-b19207d82a00/logo\"\n },\n {\n name: \"R Stablecoin\",\n symbol: \"R\",\n decimals: 18,\n l2_token_address: \"0x01fa2fb85f624600112040e1f3a848f53a37ed5a7385810063d5fe6887280333\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/77612e4e-f7ee-4dba-2066-af321843ef00/logo\"\n },\n {\n name: \"Frax\",\n symbol: \"FRAX\",\n decimals: 18,\n l2_token_address: \"0x009c6b4fb13dfaa025c1383ed6190af8ed8cbb09d9588a3bb020feb152442406\",\n sort_order: 1,\n total_supply: 649462235,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/eeaf0779-e492-474c-ef19-b27843525600/logo\"\n },\n {\n name: \"Frax Share\",\n symbol: \"FXS\",\n decimals: 18,\n l2_token_address: \"0x0058efd0e73c33a848ffaa88738d128ebf0af98ea78cf3c14dc757bb02d39ffb\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/98bea621-1e4f-4d63-9689-bdaef0d56500/logo\"\n },\n {\n name: \"Staked Frax Ether\",\n symbol: \"sfrxETH\",\n decimals: 18,\n l2_token_address: \"0x04578fffc279e61b5cb0267a5f8e24b6089d40f93158fbbad2cb23b8622c9233\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cd6fe18a-25db-4de9-758a-daf3b364ea00/logo\"\n },\n {\n name: \"Uniswap\",\n symbol: \"UNI\",\n decimals: 18,\n l2_token_address: \"0x049210ffc442172463f3177147c1aeaa36c51d152c1b0630f2364c300d4f48ee\",\n sort_order: 1,\n total_supply: 1e9,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/361b018e-bd53-4019-27c8-7cf8d9031b00/logo\"\n },\n {\n name: \"Paper\",\n symbol: \"PAPER\",\n decimals: 18,\n l2_token_address: \"0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/811f019a-0461-4cff-6c1e-442102863f00/logo\"\n },\n {\n name: \"StarkPepe\",\n symbol: \"xSPEPE\",\n decimals: 18,\n l2_token_address: \"0x06f15ec4b6ff0b7f7a216c4b2ccdefc96cbf114d6242292ca82971592f62273b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n disabled: true\n },\n {\n name: \"StarkNet Token\",\n symbol: \"STRK\",\n decimals: 18,\n l2_token_address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n sort_order: 2,\n total_supply: 1e10,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1b126320-367c-48ed-cf5a-ba7580e49600/logo\"\n },\n {\n name: \"zkLend Token\",\n symbol: \"ZEND\",\n decimals: 18,\n l2_token_address: \"0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/95515b0e-1230-4158-10f1-56888f613c00/logo\"\n },\n {\n name: \"Ekubo Protocol\",\n symbol: \"EKUBO\",\n decimals: 18,\n l2_token_address: \"0x075afe6402ad5a5c20dd25e10ec3b3986acaa647b77e4ae24b0cbc9a54a27a87\",\n sort_order: 1,\n total_supply: 1e7,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/634d9c36-2f0b-4781-93e6-72d701b5af00/logo\"\n },\n {\n name: \"SOCKS\",\n symbol: \"SOCKS\",\n decimals: 18,\n l2_token_address: \"0x023ed2ba4fb5709302c5dfd739fa7613359042f143286c115b6c7f7dc2601015\",\n sort_order: 1,\n total_supply: 1e11,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2db5a2a6-c98e-4b80-35e0-31b489132100/logo\"\n },\n {\n name: \"Nostra\",\n symbol: \"NSTR\",\n decimals: 18,\n l2_token_address: \"0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a45c2224-17a7-4269-ea7e-3924e9755800/logo\"\n },\n {\n name: \"Carmine\",\n symbol: \"CRM\",\n decimals: 18,\n l2_token_address: \"0x51c4b1fe3bf6774b87ad0b15ef5d1472759076e42944fff9b9f641ff13e5bbe\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6ab817f1-8075-4a94-6e14-f112f1f89d00/logo\"\n },\n {\n name: \"Cash\",\n symbol: \"CASH\",\n decimals: 18,\n l2_token_address: \"0x498edfaf50ca5855666a700c25dd629d577eb9afccdf3b5977aec79aee55ada\",\n sort_order: 3,\n total_supply: null,\n hidden: false,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bd6d156-f509-4b51-5dfc-3ee566143600/logo\"\n },\n {\n name: \"Nums\",\n symbol: \"NUMS\",\n decimals: 18,\n l2_token_address: \"0xe5f10eddc01699dc899a30dbc3c9858148fa4aa0a47c0ffd85f887ffc4653e\",\n sort_order: 1,\n total_supply: 1,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/90868d05-cb75-4c42-278c-5a540db2cf00/logo\"\n },\n {\n name: \"Flip\",\n symbol: \"FLIP\",\n decimals: 18,\n l2_token_address: \"0x01bfe97d729138fc7c2d93c77d6d1d8a24708d5060608017d9b384adf38f04c7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/275f0fa8-a691-471c-ace6-0eb0315dde00/logo\"\n },\n {\n name: \"Eternum Stone\",\n symbol: \"STONE\",\n decimals: 18,\n l2_token_address: \"0x439a1c010e3e1bb2d43d43411000893c0042bd88f6c701611a0ea914d426da4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/932e7f83-a4c2-40f0-3048-35af3b194100/logo\"\n },\n {\n name: \"Eternum Coal\",\n symbol: \"COAL\",\n decimals: 18,\n l2_token_address: \"0xce635e3f241b0ae78c46a929d84a9101910188f9c4024eaa7559556503c31a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cf2ee180-06bf-4443-e3aa-724d7c28e800/logo\"\n },\n {\n name: \"Eternum Wood\",\n symbol: \"WOOD\",\n decimals: 18,\n l2_token_address: \"0x40d8907cec0f7ae9c364dfb12485a1314d84c129bf1898d2f3d4b7fcc7d44f4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1db5f954-c1ef-447e-9f8f-05bd9f3b2b00/logo\"\n },\n {\n name: \"Eternum Copper\",\n symbol: \"COPPER\",\n decimals: 18,\n l2_token_address: \"0x66ed5c928ee027a9419ace1cbea8389885161db5572a7c5c4fef2310e9bf494\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bbcdcc9-6146-404d-9501-92a664cf3100/logo\"\n },\n {\n name: \"Eternum Ironwood\",\n symbol: \"IRONWOOD\",\n decimals: 18,\n l2_token_address: \"0x1720cf6318bff45e62acc588680ae3cd4d5f8465b1d52cb710533c9299b031a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/5af7c03b-e4ae-4aee-eba4-a4e2160a1d00/logo\"\n },\n {\n name: \"Eternum Obsidian\",\n symbol: \"OBSIDIAN\",\n decimals: 18,\n l2_token_address: \"0x3b6448d09dcd023507376402686261f5d6739455fa02f804907b066e488da66\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8be9bc66-486b-4181-6804-725a1db8ad00/logo\"\n },\n {\n name: \"Eternum Gold\",\n symbol: \"GOLD\",\n decimals: 18,\n l2_token_address: \"0xdff9dca192609c4e86ab3be22c7ec1e968876c992d21986f3c542be97fa2f\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fb9e90f7-3c2f-4c64-7e43-c3f694f35e00/logo\"\n },\n {\n name: \"Eternum Silver\",\n symbol: \"SILVER\",\n decimals: 18,\n l2_token_address: \"0x6fe21d2d4a8a05bdb70f09c9250af9870020d5dcc35f410b4a39d6605c3e353\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e443afeb-850b-46a0-a7ba-a473306d6b00/logo\"\n },\n {\n name: \"Eternum Mithral\",\n symbol: \"MITHRAL\",\n decimals: 18,\n l2_token_address: \"0x67ba235c569c23877064b2ac6ebd4d79f32d3c00f5fab8e28a3b5700b957f6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/33dc517f-8a66-45eb-f2c5-de5388e47500/logo\"\n },\n {\n name: \"Eternum Alchemical Silver\",\n symbol: \"ALCHEMICALSILVER\",\n decimals: 18,\n l2_token_address: \"0x3956a5301e99522038a2e7dcb9c2a89bf087ffa79310ee0a508b5538efd8ddd\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3d2e0fd8-4af8-49a0-4bdb-691a4d6ef800/logo\"\n },\n {\n name: \"Eternum Cold Iron\",\n symbol: \"COLDIRON\",\n decimals: 18,\n l2_token_address: \"0x555d713e59d4ff96b7960447e9bc9e79bfdeab5b0eea74e3df81bce61cfbc77\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/878c0d8a-8e2c-4281-0896-9cbbb2ef9400/logo\"\n },\n {\n name: \"Eternum Deep Crystal\",\n symbol: \"DEEPCRYSTAL\",\n decimals: 18,\n l2_token_address: \"0x1d655ac834d38df7921074fc1588411e202b1af83307cbd996983aff52db3a8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1c2c954f-448c-476b-a4a6-19b52efe3e00/logo\"\n },\n {\n name: \"Eternum Ruby\",\n symbol: \"RUBY\",\n decimals: 18,\n l2_token_address: \"0x3d9b66720959d0e7687b898292c10e62e78626f2dba5e1909961a2ce3f86612\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6a45b34d-3bfe-4994-45b0-f2bee8abac00/logo\"\n },\n {\n name: \"Eternum Diamonds\",\n symbol: \"DIAMONDS\",\n decimals: 18,\n l2_token_address: \"0xe03ea8ae385f64754820af5c01c36abf1b8130dd6797d3fd9d430e4114e876\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/b1fa609d-8799-4754-cdea-ab69514ca700/logo\"\n },\n {\n name: \"Eternum Hartwood\",\n symbol: \"HARTWOOD\",\n decimals: 18,\n l2_token_address: \"0x5620aa7170cd66dbcbc37d03087bfe4633ffef91d3e4d97b501de906004f79b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/27e37e85-91bd-4ee1-0552-1e0795077400/logo\"\n },\n {\n name: \"Eternum Ignium\",\n symbol: \"IGNIUM\",\n decimals: 18,\n l2_token_address: \"0x625c1f789b03ebebc7a9322366f38ebad1f693b84b2abd8cb8f5b2748b0cdd5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/58591e20-24fb-4353-417a-81d877a5a200/logo\"\n },\n {\n name: \"Eternum Twilight Quartz\",\n symbol: \"TWILIGHTQUARTZ\",\n decimals: 18,\n l2_token_address: \"0x35e24c02409c3cfe8d5646399a62c4d102bb782938d5f5180e92c9c62d3faf7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2f8cb892-e82a-4af3-bd09-316061faec00/logo\"\n },\n {\n name: \"Eternum True Ice\",\n symbol: \"TRUEICE\",\n decimals: 18,\n l2_token_address: \"0x4485f5a6e16562e1c761cd348e63256d00389e3ddf4f5d98afe7ab44c57c481\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fe4bfc17-6553-4dc5-58d2-f452b4aa8a00/logo\"\n },\n {\n name: \"Eternum Adamantine\",\n symbol: \"ADAMANTINE\",\n decimals: 18,\n l2_token_address: \"0x367f838f85a2f5e1580d6f011e4476f581083314cff8721ba3dda9706076eed\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/13bd026b-3612-480e-0119-04cf4c505a00/logo\"\n },\n {\n name: \"Eternum Sapphire\",\n symbol: \"SAPPHIRE\",\n decimals: 18,\n l2_token_address: \"0x2f8dd022568af8f9f718aa37707a9b858529db56910633a160456838b6cbcbc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/0ebf555f-e732-4054-f8e5-55b2ed49ba00/logo\"\n },\n {\n name: \"Eternum Ethereal Silica\",\n symbol: \"ETHEREALSILICA\",\n decimals: 18,\n l2_token_address: \"0x68b6e23cbbd58a644700f55e96c83580921e9f521b6e5175396b53ba7910e7d\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f02a5b43-bfcf-408c-7d1b-fcfe68b02d00/logo\"\n },\n {\n name: \"Eternum Dragon Hide\",\n symbol: \"DRAGONHIDE\",\n decimals: 18,\n l2_token_address: \"0x3bf856515bece3c93f5061b7941b8645f817a0acab93c758b8c7b4bc0afa3c6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e74955fc-5c8a-4dff-4882-a49a46a5a800/logo\"\n },\n {\n name: \"Eternum Ancient Fragment\",\n symbol: \"ANCIENTFRAGMENT\",\n decimals: 18,\n l2_token_address: \"0x0695b08ecdfdd828c2e6267da62f59e6d7543e690ef56a484df25c8566b332a5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/9af855b7-4790-4390-9466-6bed4481ab00/logo\"\n },\n {\n name: \"Eternum Donkey\",\n symbol: \"DONKEY\",\n decimals: 18,\n l2_token_address: \"0x264be95a4a2ace20add68cb321acdccd2f9f8440ee1c7abd85da44ddab01085\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/20817378-a45e-4521-f464-10f6dd13c500/logo\"\n },\n {\n name: \"Eternum Knight\",\n symbol: \"KNIGHT\",\n decimals: 18,\n l2_token_address: \"0xac965f9e67164723c16735a9da8dbc9eb8e43b1bd0323591e87c056badf606\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8787ed1f-af5c-4873-c01a-55f05e999a00/logo\"\n },\n {\n name: \"Eternum Crossbowman\",\n symbol: \"CROSSBOWMAN\",\n decimals: 18,\n l2_token_address: \"0x67e4ac00a241be06ba6afc11fa2715ec7da0c42c05a67ef6ecfcfeda725aaa8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dec7f31b-4b1d-46bb-4fca-c0253cf55a00/logo\"\n },\n {\n name: \"Eternum Paladin\",\n symbol: \"PALADIN\",\n decimals: 18,\n l2_token_address: \"0x3bc86299bee061c7c8d7546ccb62b9daf9bffc653b1508facb722c6593874bc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7d2cd5a5-f38a-49f6-11f8-ba3b59a59e00/logo\"\n },\n {\n name: \"Eternum Wheat\",\n symbol: \"WHEAT\",\n decimals: 18,\n l2_token_address: \"0x57a3f1ee475e072ce3be41785c0e889b7295d7a0dcc22b992c5b9408dbeb280\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c338b6a8-77c4-4dd6-34f5-1af0d3fb1e00/logo\"\n },\n {\n name: \"Eternum Fish\",\n symbol: \"FISH\",\n decimals: 18,\n l2_token_address: \"0x27719173cfe10f1aa38d2aaed0a075b6077290f1e817aa3485d2b828394f4d9\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6deef27f-df40-4248-4e1b-ed1d79a3f000/logo\"\n }\n];\n\n// src/index.ts\nvar controllerConfigs = configs;\nvar erc20Metadata = metadata;\nvar defaultTheme = configs[\"cartridge\"].theme;\nexport {\n controllerConfigs,\n defaultTheme,\n erc20Metadata\n};\n//# sourceMappingURL=index.js.map"],"names":["ControllerAccount","WalletAccount","provider","rpcUrl","address","keychain","options","modal","calls","toArray","resolve","reject","sessionExecute","ResponseCodes","manualExecute","typedData","sessionSign","manualSign","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","createDestructor","localName","log","callbacks","destroyed","error","callback","createLogger","debug","args","DEFAULT_PORT_BY_PROTOCOL","URL_REGEX","opaqueOriginSchemes","getOriginFromSrc","src","scheme","location","regexResult","protocol","hostname","port","portSuffix","serializeError","name","message","stack","deserializeError","obj","deserializedError","key","connectCallReceiver","info","serializedMethods","local","remote","originForSending","originForReceiving","handleMessageEvent","event","callMessage","methodName","id","createPromiseHandler","resolution","returnValue","err","errorReplyMessage","generateId","KEY_PATH_DELIMITER","keyPathToSegments","keyPath","segmentsToKeyPath","segments","createKeyPath","prefix","setAtKeyPath","subject","value","prevSubject","idx","serializeMethods","methods","flattenedMethods","deserializeMethods","connectCallSender","callSender","methodKeyPaths","destroyConnection","createMethodProxy","iframeRemoved","replyMessage","api","handleAckMessageFactory","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","receiverMethodName","destroyCallSender","handleSynMessageFactory","synAckMessage","CHECK_IFRAME_IN_DOC_INTERVAL","monitorIframeRemoval","iframe","checkIframeInDocIntervalId","startConnectionTimeout","timeout","timeoutId","validateIframeHasSrcOrSrcDoc","connectToChild","handleSynMessage","handleAckMessage","stopConnectionTimeout","handleMessage","IFrame","url","preset","onClose","onConnect","container","_origin","observer","existingController","ArgentWallet","available","wallet","connectorData","connect","InjectedConnector","data","sig","_txn","_chainId","_tokenAddress","MetaMaskWallet","MetaMaskSDK","accounts","transaction","ethereum","result","chainId","tokenAddress","balance","PhantomWallet","response","encodedMessage","serailized_txn","txn","Transaction","requestProviders","listener","handler","createStore","listeners","providerDetails","request","providerDetail","unwatch","rdns","emitImmediately","RABBY_RDNS","RabbyWallet","rabbyProvider","WalletBridge","type","identifier","adapter","operation","responseType","errorMessage","walletType","KeychainIFrame","policies","iframeOptions","_url","KEYCHAIN_URL","walletBridge","ProfileIFrame","profileUrl","version","username","slot","namespace","tokens","_profileUrl","PROFILE_URL","contract","ControllerProvider","BaseProvider","NotReadyToConnect","profile","e","_chain","tab","to","at","res","origin","_policy","chain","availableChains","shortString","starterpackId","currentChainId","chains","parseChainId","interval","startTime","cache","lookup","API_URL","lookupUsernames","usernames","uncachedUsernames","entry","lookupAddresses","addresses","num","uncachedAddresses","addr","defineProperties","target","values","types","stringify","HEX","i","keys","k","makeError","code","shortMessage","details","assert","check","assertArgument","accum","form","assertPrivate","givenGuard","guard","className","method","_getBytes","copy","offset","getBytes","isHexString","length","HexCharacters","hexlify","bytes","v","concat","datas","d","dataLength","zeroPad","left","zeroPadValue","BN_0","maxValue","getBigInt","getUint","getNumber","toBeArray","_value","hex","toUtf8Bytes","str","c","c2","pair","number","b","lengths","exists","instance","checkFinished","output","out","min","u8a","a","u32","arr","isLE","utf8ToBytes","toBytes","Hash","wrapConstructor","hashCons","hashC","msg","tmp","U32_MASK64","_32n","fromBig","le","split","lst","Ah","Al","h","l","rotlSH","s","rotlSL","rotlBH","rotlBL","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","round","R","x","y","t","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","Keccak","blockLen","suffix","outputLen","enableXOF","state","len","pos","take","bufferOut","gen","keccak_256","locked","_keccak256","__keccak256","keccak256","_data","func","ZeroHash","MessagePrefix","BN_1","BN_2","BN_27","BN_28","BN_35","_guard","toUint256","Signature","#r","#s","#v","#networkV","yParityAndS","r","clone","networkV","bv","assertError","_r","_v","yParity","hashMessage","TurnkeyWallet","turnkeyIframeClient","organizationId","walletAccount","paddedMessage","messageBytes","messageHash","ethers.hashMessage","rHex","sHex","vNumber","signature","WalletConnectWallet","configs","metadata","controllerConfigs","erc20Metadata","defaultTheme"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,20,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,45]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/account.ts","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/enums.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createDestructor.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/createLogger.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/getOriginFromSrc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/errorSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallReceiver.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/generateId.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/methodSerialization.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/connectCallSender.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleAckMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/handleSynMessageFactory.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/monitorIframeRemoval.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/startConnectionTimeout.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../../../node_modules/.pnpm/@cartridge+penpal@6.2.4/node_modules/@cartridge/penpal/lib/parent/connectToChild.js","../src/iframe/base.ts","../src/wallets/argent/index.ts","../src/wallets/metamask/index.ts","../src/wallets/phantom/index.ts","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/utils.js","../../../node_modules/.pnpm/mipd@0.0.7_typescript@5.8.3/node_modules/mipd/dist/esm/store.js","../src/wallets/rabby/index.ts","../src/wallets/bridge.ts","../src/iframe/keychain.ts","../src/iframe/profile.ts","../src/controller.ts","../src/lookup.ts","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/_version.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/properties.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/errors.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/data.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/maths.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/utils/utf8.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/_assert.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/sha3.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/crypto/keccak.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/constants/hashes.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/constants/strings.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/crypto/signature.js","../../../node_modules/.pnpm/ethers@6.13.7_bufferutil@4.0.9_utf-8-validate@5.0.10/node_modules/ethers/lib.esm/hash/message.js","../src/wallets/turnkey/index.ts","../src/wallets/wallet-connect/index.ts","../../../node_modules/.pnpm/@cartridge+presets@https+++codeload.github.com+cartridge-gg+presets+tar.gz+11ee3b8/node_modules/@cartridge/presets/dist/index.js"],"sourcesContent":["import {\n InvokeFunctionResponse,\n TypedData,\n WalletAccount,\n Call,\n AllowArray,\n} from \"starknet\";\n\nimport { SPEC } from \"@starknet-io/types-js\";\n\nimport {\n ConnectError,\n Keychain,\n KeychainOptions,\n Modal,\n ResponseCodes,\n} from \"./types\";\nimport { AsyncMethodReturns } from \"@cartridge/penpal\";\nimport BaseProvider from \"./provider\";\nimport { toArray } from \"./utils\";\n\nclass ControllerAccount extends WalletAccount {\n address: string;\n private keychain: AsyncMethodReturns<Keychain>;\n private modal: Modal;\n private options?: KeychainOptions;\n\n constructor(\n provider: BaseProvider,\n rpcUrl: string,\n address: string,\n keychain: AsyncMethodReturns<Keychain>,\n options: KeychainOptions,\n modal: Modal,\n ) {\n super({ nodeUrl: rpcUrl }, provider);\n\n this.address = address;\n this.keychain = keychain;\n this.options = options;\n this.modal = modal;\n }\n\n /**\n * Invoke execute function in account contract\n *\n * @param calls the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abis (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n async execute(calls: AllowArray<Call>): Promise<InvokeFunctionResponse> {\n calls = toArray(calls);\n\n return new Promise(async (resolve, reject) => {\n const sessionExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n false,\n this.options?.feeSource,\n );\n\n // Session call succeeded\n if (sessionExecute.code === ResponseCodes.SUCCESS) {\n resolve(sessionExecute as InvokeFunctionResponse);\n return;\n }\n\n // Propagates session txn error back to caller\n if (\n this.options?.propagateSessionErrors &&\n sessionExecute.code !== ResponseCodes.USER_INTERACTION_REQUIRED\n ) {\n reject((sessionExecute as ConnectError).error);\n return;\n }\n\n // Session call or Paymaster flow failed.\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n true,\n (sessionExecute as ConnectError).error,\n );\n\n // Manual call succeeded\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n return;\n }\n\n reject((manualExecute as ConnectError).error);\n return;\n });\n }\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n async signMessage(typedData: TypedData): Promise<SPEC.SIGNATURE> {\n return new Promise(async (resolve, reject) => {\n const sessionSign = await this.keychain.signMessage(typedData, \"\", true);\n\n // Session sign succeeded\n if (!(\"code\" in sessionSign)) {\n resolve(sessionSign as SPEC.SIGNATURE);\n return;\n }\n\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualSign = await this.keychain.signMessage(typedData, \"\", false);\n\n if (!(\"code\" in manualSign)) {\n resolve(manualSign as SPEC.SIGNATURE);\n } else {\n reject((manualSign as ConnectError).error);\n }\n this.modal.close();\n });\n }\n}\n\nexport default ControllerAccount;\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","export default (localName, log) => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n if (!destroyed) {\n destroyed = true;\n log(`${localName}: Destroying connection`);\n callbacks.forEach((callback) => {\n callback(error);\n });\n }\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n },\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443',\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find((scheme) => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = regexResult[1] ? regexResult[1] : location.protocol;\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack, }) => ({\n name,\n message,\n stack,\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach((key) => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution, } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, serializedMethods, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (originForReceiving !== '*' && event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue,\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true,\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise((resolve) => resolve(serializedMethods[methodName]\n .call(serializedMethods, event.origin)\n .apply(serializedMethods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","const KEY_PATH_DELIMITER = '.';\nconst keyPathToSegments = (keyPath) => keyPath ? keyPath.split(KEY_PATH_DELIMITER) : [];\nconst segmentsToKeyPath = (segments) => segments.join(KEY_PATH_DELIMITER);\nconst createKeyPath = (key, prefix) => {\n const segments = keyPathToSegments(prefix || '');\n segments.push(key);\n return segmentsToKeyPath(segments);\n};\n/**\n * Given a `keyPath`, set it to be `value` on `subject`, creating any intermediate\n * objects along the way.\n *\n * @param {Object} subject The object on which to set value.\n * @param {string} keyPath The key path at which to set value.\n * @param {Object} value The value to store at the given key path.\n * @returns {Object} Updated subject.\n */\nexport const setAtKeyPath = (subject, keyPath, value) => {\n const segments = keyPathToSegments(keyPath);\n segments.reduce((prevSubject, key, idx) => {\n if (typeof prevSubject[key] === 'undefined') {\n prevSubject[key] = {};\n }\n if (idx === segments.length - 1) {\n prevSubject[key] = value;\n }\n return prevSubject[key];\n }, subject);\n return subject;\n};\n/**\n * Given a dictionary of (nested) keys to function, flatten them to a map\n * from key path to function.\n *\n * @param {Object} methods The (potentially nested) object to serialize.\n * @param {string} prefix A string with which to prefix entries. Typically not intended to be used by consumers.\n * @returns {Object} An map from key path in `methods` to functions.\n */\nexport const serializeMethods = (methods, prefix) => {\n const flattenedMethods = {};\n Object.keys(methods).forEach((key) => {\n const value = methods[key];\n const keyPath = createKeyPath(key, prefix);\n if (typeof value === 'object') {\n // Recurse into any nested children.\n Object.assign(flattenedMethods, serializeMethods(value, keyPath));\n }\n if (typeof value === 'function') {\n // If we've found a method, expose it.\n flattenedMethods[keyPath] = value;\n }\n });\n return flattenedMethods;\n};\n/**\n * Given a map of key paths to functions, unpack the key paths to an object.\n *\n * @param {Object} flattenedMethods A map of key paths to functions to unpack.\n * @returns {Object} A (potentially nested) map of functions.\n */\nexport const deserializeMethods = (flattenedMethods) => {\n const methods = {};\n for (const keyPath in flattenedMethods) {\n setAtKeyPath(methods, keyPath, flattenedMethods[keyPath]);\n }\n return methods;\n};\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { deserializeMethods } from './methodSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodKeyPaths Key paths of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodKeyPaths, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving, } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (originForReceiving !== '*' &&\n event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args,\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n // Wrap each method in a proxy which sends it to the corresponding receiver.\n const flattenedMethods = methodKeyPaths.reduce((api, name) => {\n api[name] = createMethodProxy(name);\n return api;\n }, {});\n // Unpack the structure of the provided methods object onto the CallSender, exposing\n // the methods in the same shape they were provided.\n Object.assign(callSender, deserializeMethods(flattenedMethods));\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (serializedMethods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin,\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, serializedMethods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach((receiverMethodName) => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, serializedMethods, childOrigin, originForSending) => {\n return (event) => {\n // Under specific timing circumstances, we can receive an event\n // whose source is null. This seems to happen when the child iframe is\n // removed from the DOM about the same time it has sent the SYN event.\n // https://github.com/Aaronius/penpal/issues/85\n if (!event.source) {\n return;\n }\n if (childOrigin !== '*' && event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(serializedMethods),\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport { serializeMethods } from '../methodSerialization';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor('Parent', log);\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const serializedMethods = serializeMethods(methods);\n const handleSynMessage = handleSynMessageFactory(log, serializedMethods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(serializedMethods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (error) {\n reject(error);\n }\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n },\n };\n};\n","import { AsyncMethodReturns, connectToChild } from \"@cartridge/penpal\";\nimport { ControllerOptions, Modal } from \"../types\";\n\nexport type IFrameOptions<CallSender> = Omit<\n ConstructorParameters<typeof IFrame>[0],\n \"id\" | \"url\" | \"onConnect\"\n> & {\n url?: string;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n};\n\nexport class IFrame<CallSender extends {}> implements Modal {\n url?: URL;\n private iframe?: HTMLIFrameElement;\n private container?: HTMLDivElement;\n private onClose?: () => void;\n\n constructor({\n id,\n url,\n preset,\n onClose,\n onConnect,\n methods = {},\n }: Pick<ControllerOptions, \"preset\"> & {\n id: string;\n url: URL;\n onClose?: () => void;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n methods?: { [key: string]: (...args: any[]) => void };\n }) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (preset) {\n url.searchParams.set(\"preset\", preset);\n }\n\n this.url = url;\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url.toString();\n iframe.id = id;\n iframe.style.border = \"none\";\n iframe.sandbox.add(\"allow-forms\");\n iframe.sandbox.add(\"allow-popups\");\n iframe.sandbox.add(\"allow-popups-to-escape-sandbox\");\n iframe.sandbox.add(\"allow-scripts\");\n iframe.sandbox.add(\"allow-same-origin\");\n iframe.allow =\n \"publickey-credentials-create *; publickey-credentials-get *; clipboard-write\";\n if (!!document.hasStorageAccess) {\n iframe.sandbox.add(\"allow-storage-access-by-user-activation\");\n }\n\n const container = document.createElement(\"div\");\n container.id = \"controller\";\n container.style.position = \"fixed\";\n container.style.height = \"100%\";\n container.style.width = \"100%\";\n container.style.top = \"0\";\n container.style.left = \"0\";\n container.style.zIndex = \"10000\";\n container.style.backgroundColor = \"rgba(0,0,0,0.6)\";\n container.style.display = \"flex\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.visibility = \"hidden\";\n container.style.opacity = \"0\";\n container.style.transition = \"opacity 0.2s ease\";\n container.style.pointerEvents = \"auto\";\n container.appendChild(iframe);\n\n this.iframe = iframe;\n this.container = container;\n\n connectToChild<CallSender>({\n iframe: this.iframe,\n methods: {\n close: (_origin: string) => () => this.close(),\n closeAll: (_origin: string) => () => {\n // Close all iframes\n const iframes = document.querySelectorAll(\n 'iframe[id^=\"controller-\"]',\n );\n iframes.forEach((iframe) => {\n const container = iframe.parentElement;\n if (container) {\n container.style.visibility = \"hidden\";\n container.style.opacity = \"0\";\n }\n });\n document.body.style.overflow = \"auto\";\n },\n reload: (_origin: string) => () => window.location.reload(),\n ...methods,\n },\n }).promise.then(onConnect);\n\n this.resize();\n window.addEventListener(\"resize\", () => this.resize());\n\n const observer = new MutationObserver(() => {\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (\n (id === \"controller-keychain\" && !existingController) ||\n id === \"controller-profile\"\n ) {\n document.body.appendChild(container);\n observer.disconnect();\n }\n }\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (\n (id === \"controller-keychain\" && !existingController) ||\n id === \"controller-profile\"\n ) {\n document.body.appendChild(container);\n }\n }\n\n this.onClose = onClose;\n }\n\n open() {\n if (!this.container) return;\n document.body.style.overflow = \"hidden\";\n\n this.container.style.visibility = \"visible\";\n this.container.style.opacity = \"1\";\n }\n\n close() {\n if (!this.container) return;\n this.onClose?.();\n\n document.body.style.overflow = \"auto\";\n\n this.container.style.visibility = \"hidden\";\n this.container.style.opacity = \"0\";\n }\n\n sendBackward() {\n if (!this.container) return;\n this.container.style.zIndex = \"9999\";\n }\n\n sendForward() {\n if (!this.container) return;\n this.container.style.zIndex = \"10000\";\n }\n\n private resize() {\n if (!this.iframe) return;\n\n this.iframe.style.userSelect = \"none\";\n\n if (window.innerWidth < 768) {\n this.iframe.style.height = \"100%\";\n this.iframe.style.width = \"100%\";\n this.iframe.style.borderRadius = \"0\";\n return;\n }\n\n this.iframe.style.height = \"600px\";\n this.iframe.style.width = \"432px\";\n this.iframe.style.borderRadius = \"8px\";\n }\n}\n","import {\n WalletAdapter,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n ExternalPlatform,\n} from \"../types\";\nimport { connect, StarknetWindowObject } from \"starknetkit\";\nimport { InjectedConnector } from \"starknetkit/injected\";\nimport { TypedData } from \"@starknet-io/types-js\";\n\nexport class ArgentWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"argent\";\n readonly platform: ExternalPlatform = \"starknet\";\n private wallet: StarknetWindowObject | undefined = undefined;\n private account: string | undefined = undefined;\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.starknet_argentX;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available\n ? window.starknet_argentX?.version || \"Unknown\"\n : undefined,\n chainId: available ? window.starknet_argentX?.chainId : undefined,\n name: \"Argent\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Argent is not available\");\n }\n\n const { wallet, connectorData } = await connect({\n connectors: [new InjectedConnector({ options: { id: \"argentX\" } })],\n });\n\n if (!wallet) {\n throw new Error(\"No wallet found\");\n }\n\n this.wallet = wallet;\n this.account = connectorData?.account;\n return { success: true, wallet: this.type, account: this.account };\n } catch (error) {\n console.error(`Error connecting to Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: TypedData): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n const sig = await this.wallet.request({\n type: \"wallet_signTypedData\",\n params: data,\n });\n\n return { success: true, wallet: this.type, result: sig };\n } catch (error) {\n console.error(`Error signing typed data with Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n console.warn(\n \"Chain switching for Argent may require custom implementation\",\n );\n return false;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.wallet) {\n throw new Error(\"Argent is not connected\");\n }\n\n // TODO: Implement balance fetching based on Argent's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Argent API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Argent:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { MetaMaskSDK } from \"@metamask/sdk\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class MetaMaskWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"metamask\";\n readonly platform: ExternalPlatform = \"ethereum\";\n private MMSDK: MetaMaskSDK;\n private account: string | undefined = undefined;\n private connectedAccounts: string[] = [];\n\n constructor() {\n this.MMSDK = new MetaMaskSDK({\n dappMetadata: {\n name: \"Cartridge Controller\",\n url: window.location.href,\n },\n });\n this.MMSDK.sdkInitPromise?.then(() => {\n this.MMSDK.getProvider()\n ?.request({\n method: \"eth_accounts\",\n })\n .then((accounts: any) => {\n if (accounts && accounts.length > 0) {\n console.log(accounts);\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n }\n });\n });\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.ethereum?.isMetaMask;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: \"MetaMask\",\n platform: this.platform,\n connectedAccounts: this.connectedAccounts,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"MetaMask is not available\");\n }\n\n const accounts = await this.MMSDK.connect();\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const result = await this.MMSDK.getProvider()?.request({\n method: \"personal_sign\",\n params: [this.account!, message],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const result = await ethereum.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing typed data with MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(\"MetaMask is not available\");\n }\n\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n try {\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(\"Chain not added to MetaMask\");\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for MetaMask:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const ethereum = this.MMSDK.getProvider();\n if (!ethereum) {\n throw new Error(\"MetaMask is not connected\");\n }\n\n const balance = await ethereum.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"],\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from MetaMask:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport {\n WalletAdapter,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n ExternalPlatform,\n} from \"../types\";\n\ninterface PhantomProvider {\n isPhantom: boolean;\n publicKey: PublicKey | null;\n isConnected: boolean;\n connect(opts?: { onlyIfTrusted: boolean }): Promise<{ publicKey: PublicKey }>;\n disconnect(): Promise<void>;\n signTransaction(\n transaction: Transaction | VersionedTransaction,\n ): Promise<Transaction | VersionedTransaction>;\n signAllTransactions(\n transactions: (Transaction | VersionedTransaction)[],\n ): Promise<(Transaction | VersionedTransaction)[]>;\n signAndSendTransaction(\n transaction: Transaction | VersionedTransaction,\n opts?: { skipPreflight?: boolean; maxRetries?: number },\n ): Promise<{ signature: string }>;\n signMessage(\n message: Uint8Array,\n display?: \"utf8\" | \"hex\",\n ): Promise<{ signature: Uint8Array }>;\n on(\n event: \"connect\" | \"disconnect\" | \"accountChanged\",\n handler: (args: unknown) => void,\n ): void;\n request(args: { method: string; params?: unknown }): Promise<unknown>;\n}\n\nexport class PhantomWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"phantom\";\n readonly platform: ExternalPlatform = \"solana\";\n private account: string | undefined = undefined;\n\n private getProvider(): PhantomProvider {\n if (typeof window === \"undefined\") {\n throw new Error(\"Not ready\");\n }\n\n const provider = window.solana;\n\n if (!provider?.isPhantom) {\n throw new Error(\"Phantom is not available\");\n }\n\n return provider;\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.solana?.isPhantom;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: \"Unknown\",\n name: \"Phantom\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Phantom is not available\");\n }\n\n const response = await this.getProvider().connect();\n if (response.publicKey) {\n this.account = response.publicKey.toString();\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n const encodedMessage = new TextEncoder().encode(message);\n const result = await this.getProvider().signMessage(\n encodedMessage,\n \"utf8\",\n );\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(\n serailized_txn: Uint8Array,\n ): Promise<ExternalWalletResponse<any>> {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n try {\n const txn = Transaction.from(serailized_txn);\n const provider = this.getProvider();\n const result = await provider.signAndSendTransaction(txn);\n return {\n success: true,\n wallet: this.type,\n result,\n };\n } catch (error) {\n console.error(`Error sending transaction with Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n console.warn(\"Chain switching not supported for Phantom\");\n return false;\n }\n\n async getBalance(\n _tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Phantom is not connected\");\n }\n\n // TODO: Implement balance fetching based on Phantom's API\n return {\n success: true,\n wallet: this.type,\n result: \"Implement based on Phantom API\",\n };\n } catch (error) {\n console.error(`Error getting balance from Phantom:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","/**\n * Announces an EIP-1193 Provider.\n */\nexport function announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\n/**\n * Watches for EIP-1193 Providers to be announced.\n */\nexport function requestProviders(listener) {\n if (typeof window === 'undefined')\n return;\n const handler = (event) => listener(event.detail);\n window.addEventListener('eip6963:announceProvider', handler);\n window.dispatchEvent(new CustomEvent('eip6963:requestProvider'));\n return () => window.removeEventListener('eip6963:announceProvider', handler);\n}\n//# sourceMappingURL=utils.js.map","import { requestProviders } from './utils.js';\nexport function createStore() {\n const listeners = new Set();\n let providerDetails = [];\n const request = () => requestProviders((providerDetail) => {\n if (providerDetails.some(({ info }) => info.uuid === providerDetail.info.uuid))\n return;\n providerDetails = [...providerDetails, providerDetail];\n listeners.forEach((listener) => listener(providerDetails, { added: [providerDetail] }));\n });\n let unwatch = request();\n return {\n _listeners() {\n return listeners;\n },\n clear() {\n listeners.forEach((listener) => listener([], { removed: [...providerDetails] }));\n providerDetails = [];\n },\n destroy() {\n this.clear();\n listeners.clear();\n unwatch?.();\n },\n findProvider({ rdns }) {\n return providerDetails.find((providerDetail) => providerDetail.info.rdns === rdns);\n },\n getProviders() {\n return providerDetails;\n },\n reset() {\n this.clear();\n unwatch?.();\n unwatch = request();\n },\n subscribe(listener, { emitImmediately } = {}) {\n listeners.add(listener);\n if (emitImmediately)\n listener(providerDetails, { added: providerDetails });\n return () => listeners.delete(listener);\n },\n };\n}\n//# sourceMappingURL=store.js.map","import { createStore, EIP6963ProviderDetail } from \"mipd\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nconst RABBY_RDNS = \"io.rabby\";\n\nexport class RabbyWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"rabby\";\n readonly platform: ExternalPlatform = \"ethereum\";\n private account: string | undefined = undefined;\n private store = createStore();\n private provider: EIP6963ProviderDetail | undefined;\n private connectedAccounts: string[] = [];\n\n constructor() {\n this.provider = this.store\n .getProviders()\n .find((provider) => provider.info.rdns === RABBY_RDNS);\n this.provider?.provider\n .request({\n method: \"eth_accounts\",\n })\n .then((accounts) => {\n this.connectedAccounts = accounts;\n });\n }\n\n isAvailable(): boolean {\n return !!this.provider;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: \"Rabby\",\n platform: this.platform,\n connectedAccounts: this.connectedAccounts,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Rabby is not available\");\n }\n\n const accounts = await this.provider?.provider.request({\n method: \"eth_requestAccounts\",\n });\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n this.connectedAccounts = accounts;\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const ethereum = this.provider?.provider;\n if (!ethereum) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const result = await ethereum.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(\n message: `0x${string}`,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const result = await this.provider?.provider.request({\n method: \"personal_sign\",\n params: [this.account!, message] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const provider = this.provider?.provider;\n if (!provider) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const result = await provider.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing typed data with Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Rabby is not available\");\n }\n\n const provider = this.provider?.provider;\n if (!provider) {\n throw new Error(\"Rabby is not connected\");\n }\n\n try {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(\"Chain not added to Rabby\");\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for Rabby:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Rabby is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const provider = this.provider?.provider;\n if (!provider) {\n throw new Error(\"Rabby is not connected\");\n }\n\n const balance = await provider.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"] as any,\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from Rabby:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import { ArgentWallet } from \"./argent\";\nimport { MetaMaskWallet } from \"./metamask\";\nimport { PhantomWallet } from \"./phantom\";\nimport { RabbyWallet } from \"./rabby\";\nimport {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n\nexport class WalletBridge {\n private readonly walletAdapters: Map<ExternalWalletType, WalletAdapter>;\n private readonly connectedWalletsByType: Map<\n ExternalWalletType,\n WalletAdapter\n > = new Map();\n private readonly connectedWalletsByAddress: Map<string, WalletAdapter> =\n new Map();\n\n constructor() {\n this.walletAdapters = new Map<ExternalWalletType, WalletAdapter>();\n const metamask = new MetaMaskWallet();\n metamask.isAvailable() && this.walletAdapters.set(\"metamask\", metamask);\n const phantom = new PhantomWallet();\n phantom.isAvailable() && this.walletAdapters.set(\"phantom\", phantom);\n const argent = new ArgentWallet();\n argent.isAvailable() && this.walletAdapters.set(\"argent\", argent);\n const rabby = new RabbyWallet();\n rabby.isAvailable() && this.walletAdapters.set(\"rabby\", rabby);\n\n if (typeof window !== \"undefined\") {\n window.wallet_bridge = this;\n }\n }\n\n getIFrameMethods() {\n return {\n externalDetectWallets: (_origin: string) => () => this.detectWallets(),\n externalConnectWallet: (_origin: string) => (type: ExternalWalletType) =>\n this.connectWallet(type),\n externalSignMessage:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, message: string) =>\n this.signMessage(identifier, message),\n externalSignTypedData:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, data: any) =>\n this.signTypedData(identifier, data),\n externalSendTransaction:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, txn: any) =>\n this.sendTransaction(identifier, txn),\n externalGetBalance:\n (_origin: string) =>\n (identifier: ExternalWalletType | string, tokenAddress?: string) =>\n this.getBalance(identifier, tokenAddress),\n };\n }\n\n async detectWallets(): Promise<ExternalWallet[]> {\n const wallets = Array.from(this.walletAdapters.values()).map((adapter) =>\n adapter.getInfo(),\n ) as ExternalWallet[];\n\n return wallets;\n }\n\n private getWalletAdapterByType(type: ExternalWalletType): WalletAdapter {\n const adapter = this.walletAdapters.get(type);\n if (!adapter) {\n throw new Error(`Unsupported wallet type: ${type}`);\n }\n return adapter;\n }\n\n private handleError(\n identifier: ExternalWalletType | string,\n error: unknown,\n operation: string,\n responseType?: ExternalWalletType,\n ): ExternalWalletResponse {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n let walletType: ExternalWalletType | string = \"unknown\";\n if (typeof identifier === \"string\") {\n const adapter = this.connectedWalletsByAddress.get(identifier);\n walletType = responseType ?? adapter?.type ?? identifier;\n } else {\n walletType = identifier;\n }\n\n console.error(`Error ${operation} with ${identifier} wallet:`, error);\n return {\n success: false,\n wallet: walletType as ExternalWalletType,\n error: errorMessage,\n };\n }\n\n async connectWallet(\n type: ExternalWalletType,\n ): Promise<ExternalWalletResponse> {\n try {\n const wallet = this.getWalletAdapterByType(type);\n const response = await wallet.connect();\n\n if (response.success && response.account) {\n this.connectedWalletsByType.set(type, wallet);\n this.connectedWalletsByAddress.set(response.account, wallet);\n console.log(\n `Wallet ${type} connected with address ${response.account}`,\n );\n } else if (response.success && !response.account) {\n console.error(\n `Wallet ${type} connected successfully but did not provide an address.`,\n );\n return {\n ...response,\n success: false,\n error: \"Wallet connected but address not found.\",\n };\n }\n\n return response;\n } catch (error) {\n return this.handleError(type, error, \"connecting to\");\n }\n }\n\n private getConnectedWalletAdapter(\n identifier: ExternalWalletType | string,\n ): WalletAdapter {\n let wallet: WalletAdapter | undefined;\n if (typeof identifier === \"string\") {\n wallet = this.connectedWalletsByAddress.get(identifier);\n } else {\n wallet = this.connectedWalletsByType.get(identifier);\n }\n\n if (!wallet && typeof identifier === \"string\") {\n wallet = this.connectedWalletsByType.get(\n identifier as ExternalWalletType,\n );\n }\n\n if (!wallet) {\n throw new Error(\n `Wallet with identifier ${identifier} is not connected or supported`,\n );\n }\n return wallet;\n }\n\n async signMessage(\n identifier: ExternalWalletType | string,\n message: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signMessage) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing messages`,\n );\n }\n return await wallet.signMessage(message);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing message with\",\n wallet?.type,\n );\n }\n }\n\n async signTypedData(\n identifier: ExternalWalletType | string,\n data: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n if (!wallet.signTypedData) {\n throw new Error(\n `Wallet type ${wallet.type} (identifier: ${identifier}) does not support signing typed data`,\n );\n }\n return await wallet.signTypedData(data);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"signing typed data with\",\n wallet?.type,\n );\n }\n }\n\n async sendTransaction(\n identifier: ExternalWalletType | string,\n txn: any,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.sendTransaction(txn);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"sending transaction with\",\n wallet?.type,\n );\n }\n }\n\n async getBalance(\n identifier: ExternalWalletType | string,\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse> {\n let wallet: WalletAdapter | undefined;\n try {\n wallet = this.getConnectedWalletAdapter(identifier);\n return await wallet.getBalance(tokenAddress);\n } catch (error) {\n return this.handleError(\n identifier,\n error,\n \"getting balance from\",\n wallet?.type,\n );\n }\n }\n}\n\ndeclare global {\n interface Window {\n ethereum?: any;\n solana?: any;\n starknet_argentX?: any;\n wallet_bridge?: WalletBridge;\n }\n}\n\nexport type {\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"./types\";\n","import { KEYCHAIN_URL } from \"../constants\";\nimport { Keychain, KeychainOptions } from \"../types\";\nimport { WalletBridge } from \"../wallets/bridge\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\ntype KeychainIframeOptions = IFrameOptions<Keychain> & KeychainOptions;\n\nexport class KeychainIFrame extends IFrame<Keychain> {\n private walletBridge: WalletBridge;\n\n constructor({ url, policies, ...iframeOptions }: KeychainIframeOptions) {\n const _url = new URL(url ?? KEYCHAIN_URL);\n const walletBridge = new WalletBridge();\n\n if (policies) {\n _url.searchParams.set(\n \"policies\",\n encodeURIComponent(JSON.stringify(policies)),\n );\n }\n\n super({\n ...iframeOptions,\n id: \"controller-keychain\",\n url: _url,\n methods: walletBridge.getIFrameMethods(),\n });\n\n this.walletBridge = walletBridge;\n\n // Expose the wallet bridge instance globally for WASM interop\n if (typeof window !== \"undefined\") {\n (window as any).external_wallets = this.walletBridge;\n }\n }\n\n getWalletBridge(): WalletBridge {\n return this.walletBridge;\n }\n}\n","import { PROFILE_URL } from \"../constants\";\nimport { Profile, ProfileOptions } from \"../types\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\nexport type ProfileIFrameOptions = IFrameOptions<Profile> &\n ProfileOptions & {\n rpcUrl: string;\n version?: string;\n username: string;\n slot?: string;\n namespace?: string;\n };\n\nexport class ProfileIFrame extends IFrame<Profile> {\n constructor({\n profileUrl,\n rpcUrl,\n version,\n username,\n slot,\n namespace,\n tokens,\n policies,\n ...iframeOptions\n }: ProfileIFrameOptions) {\n const _profileUrl = (profileUrl || PROFILE_URL).replace(/\\/$/, \"\");\n let _url = new URL(\n slot\n ? `${_profileUrl}/account/${username}/slot/${slot}`\n : `${_profileUrl}/account/${username}`,\n );\n\n if (slot) {\n _url.searchParams.set(\"ps\", encodeURIComponent(slot));\n }\n\n if (namespace) {\n _url.searchParams.set(\"ns\", encodeURIComponent(namespace));\n }\n\n if (version) {\n _url.searchParams.set(\"v\", encodeURIComponent(version));\n }\n\n _url.searchParams.set(\"rpcUrl\", encodeURIComponent(rpcUrl));\n\n if (tokens?.erc20) {\n _url.searchParams.set(\n \"erc20\",\n encodeURIComponent(tokens.erc20.toString()),\n );\n }\n\n if (policies?.contracts) {\n const methods = Object.values(policies.contracts).flatMap(\n (contract) => contract.methods,\n );\n _url.searchParams.set(\n \"methods\",\n encodeURIComponent(JSON.stringify(methods)),\n );\n }\n\n super({\n ...iframeOptions,\n id: \"controller-profile\",\n url: _url,\n });\n }\n}\n","import { AsyncMethodReturns } from \"@cartridge/penpal\";\n\nimport ControllerAccount from \"./account\";\nimport { KeychainIFrame, ProfileIFrame } from \"./iframe\";\nimport { NotReadyToConnect } from \"./errors\";\nimport {\n Keychain,\n ResponseCodes,\n ConnectReply,\n ProbeReply,\n ControllerOptions,\n ConnectError,\n Profile,\n IFrames,\n ProfileContextTypeVariant,\n Chain,\n} from \"./types\";\nimport BaseProvider from \"./provider\";\nimport { shortString, WalletAccount } from \"starknet\";\nimport { Policy } from \"@cartridge/presets\";\nimport {\n AddInvokeTransactionResult,\n AddStarknetChainParameters,\n ChainId,\n} from \"@starknet-io/types-js\";\nimport { parseChainId } from \"./utils\";\n\nexport default class ControllerProvider extends BaseProvider {\n private keychain?: AsyncMethodReturns<Keychain>;\n private profile?: AsyncMethodReturns<Profile>;\n private options: ControllerOptions;\n private iframes: IFrames;\n private selectedChain: ChainId;\n private chains: Map<ChainId, Chain>;\n\n constructor(options: ControllerOptions) {\n super();\n\n this.selectedChain = options.defaultChainId;\n this.chains = new Map<ChainId, Chain>();\n\n this.iframes = {\n keychain: new KeychainIFrame({\n ...options,\n onClose: this.keychain?.reset,\n onConnect: (keychain) => {\n this.keychain = keychain;\n },\n }),\n };\n\n this.options = options;\n\n this.validateChains(options.chains);\n\n if (typeof window !== \"undefined\") {\n (window as any).starknet_controller = this;\n }\n }\n\n async probe(): Promise<WalletAccount | undefined> {\n try {\n await this.waitForKeychain();\n\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n // For backwards compat with controller <=0.6.0\n let rpcUrl = response?.rpcUrl || this.rpcUrl();\n this.account = new ControllerAccount(\n this,\n rpcUrl,\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n } catch (e) {\n console.error(e);\n return;\n }\n\n if (!this.iframes.profile) {\n const username = await this.keychain.username();\n\n this.iframes.profile = new ProfileIFrame({\n ...this.options,\n onConnect: (profile) => {\n this.profile = profile;\n },\n methods: {\n openSettings: () => this.openSettings.bind(this),\n openPurchaseCredits: () => this.openPurchaseCredits.bind(this),\n openExecute: () => this.openExecute.bind(this),\n },\n rpcUrl: this.rpcUrl(),\n username,\n version: this.version,\n });\n }\n\n return this.account;\n }\n\n async connect(): Promise<WalletAccount | undefined> {\n if (this.account) {\n return this.account;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n if (!!document.hasStorageAccess) {\n const ok = await document.hasStorageAccess();\n if (!ok) {\n await document.requestStorageAccess();\n }\n }\n\n this.iframes.keychain.open();\n\n try {\n let response = await this.keychain.connect(\n this.options.policies || {},\n this.rpcUrl(),\n );\n if (response.code !== ResponseCodes.SUCCESS) {\n throw new Error(response.message);\n }\n\n response = response as ConnectReply;\n this.account = new ControllerAccount(\n this,\n this.rpcUrl(),\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n\n return this.account;\n } catch (e) {\n console.log(e);\n } finally {\n this.iframes.keychain.close();\n }\n }\n\n async switchStarknetChain(chainId: string): Promise<boolean> {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return false;\n }\n\n try {\n this.selectedChain = chainId;\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n if (response.rpcUrl === this.rpcUrl()) {\n return true;\n }\n\n await this.keychain.switchChain(this.rpcUrl());\n await this.profile?.switchChain(this.rpcUrl());\n } catch (e) {\n console.error(e);\n return false;\n }\n\n this.emitNetworkChanged(chainId);\n return true;\n }\n\n addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n async disconnect() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n if (!!document.hasStorageAccess) {\n const ok = await document.hasStorageAccess();\n if (!ok) {\n await document.requestStorageAccess();\n }\n }\n\n this.account = undefined;\n return this.keychain.disconnect();\n }\n\n async openProfile(tab: ProfileContextTypeVariant = \"inventory\") {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(`${this.iframes.profile.url?.pathname}/${tab}`);\n this.iframes.profile.open();\n }\n\n async openProfileTo(to: string) {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(`${this.iframes.profile.url?.pathname}/${to}`);\n this.iframes.profile.open();\n }\n\n async openProfileAt(at: string) {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(at);\n this.iframes.profile.open();\n }\n\n async openSettings() {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n if (this.iframes.profile?.sendBackward) {\n this.iframes.profile?.sendBackward();\n } else {\n this.iframes.profile?.close();\n }\n this.iframes.keychain.open();\n const res = await this.keychain.openSettings();\n this.iframes.keychain.close();\n this.iframes.profile?.sendForward?.();\n if (res && (res as ConnectError).code === ResponseCodes.NOT_CONNECTED) {\n return false;\n }\n return true;\n }\n\n revoke(origin: string, _policy: Policy[]) {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return this.keychain.revoke(origin);\n }\n\n rpcUrl(): string {\n const chain = this.chains.get(this.selectedChain);\n if (!chain) {\n const availableChains = Array.from(this.chains.keys()).map((chain) =>\n shortString.decodeShortString(chain),\n );\n throw new Error(\n `Chain not found: ${shortString.decodeShortString(this.selectedChain)}. Available chains: ${availableChains.join(\", \")}`,\n );\n }\n return chain.rpcUrl;\n }\n\n username() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n return this.keychain.username();\n }\n\n openPurchaseCredits() {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n this.iframes.profile.close();\n this.iframes.keychain.open();\n this.keychain.openPurchaseCredits();\n }\n\n openStarterPack(starterpackId: string) {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n this.iframes.profile.close();\n this.iframes.keychain.open();\n this.keychain.openStarterPack(starterpackId);\n }\n\n async openExecute(calls: any, chainId?: string) {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n // Switch to the chain if provided\n let currentChainId = this.selectedChain;\n if (chainId) {\n this.switchStarknetChain(chainId);\n }\n // Switch iframes\n this.iframes.profile?.sendBackward();\n this.iframes.keychain.open();\n this.iframes.profile?.close();\n // Invoke execute\n const res = await this.keychain.execute(calls, undefined, undefined, true);\n // Switch back iframes\n this.iframes.profile?.open();\n this.iframes.keychain.close();\n this.iframes.profile?.sendForward();\n // Switch back to the original chain\n if (chainId) {\n this.switchStarknetChain(currentChainId);\n }\n const status = !(\n res &&\n ((res as ConnectError).code === ResponseCodes.NOT_CONNECTED ||\n (res as ConnectError).code === ResponseCodes.CANCELED)\n );\n return {\n status,\n transactionHash: (res as AddInvokeTransactionResult)?.transaction_hash,\n };\n }\n\n async delegateAccount() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return await this.keychain.delegateAccount();\n }\n\n private async validateChains(chains: Chain[]) {\n for (const chain of chains) {\n try {\n const url = new URL(chain.rpcUrl);\n const chainId = await parseChainId(url);\n this.chains.set(chainId, chain);\n } catch (error) {\n console.error(`Failed to parse chainId for ${chain.rpcUrl}:`, error);\n }\n }\n\n if (!this.chains.has(this.selectedChain)) {\n console.warn(\n `Selected chain ${this.selectedChain} not found in configured chains. ` +\n `Available chains: ${Array.from(this.chains.keys()).join(\", \")}`,\n );\n }\n }\n\n private waitForKeychain({\n timeout = 50000,\n interval = 100,\n }:\n | {\n timeout?: number;\n interval?: number;\n }\n | undefined = {}) {\n return new Promise<void>((resolve, reject) => {\n const startTime = Date.now();\n const id = setInterval(() => {\n if (Date.now() - startTime > timeout) {\n clearInterval(id);\n reject(new Error(\"Timeout waiting for keychain\"));\n return;\n }\n\n if (!this.keychain) return;\n\n clearInterval(id);\n resolve();\n }, interval);\n });\n }\n}\n","import { LookupRequest, LookupResponse } from \"./types\";\nimport { num } from \"starknet\";\nimport { API_URL } from \"./constants\";\n\nconst cache = new Map<string, string>();\n\nasync function lookup(request: LookupRequest): Promise<LookupResponse> {\n if (!request.addresses?.length && !request.usernames?.length) {\n return { results: [] };\n }\n\n const response = await fetch(`${API_URL}/lookup`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return response.json();\n}\n\nexport async function lookupUsernames(\n usernames: string[],\n): Promise<Map<string, string>> {\n const uncachedUsernames = usernames.filter((name) => !cache.has(name));\n\n if (uncachedUsernames.length > 0) {\n const response = await lookup({ usernames: uncachedUsernames });\n\n response.results.forEach((result) => {\n cache.set(result.username, result.addresses[0]); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n usernames\n .map((name) => [name, cache.get(name)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n\nexport async function lookupAddresses(\n addresses: string[],\n): Promise<Map<string, string>> {\n addresses = addresses.map(num.toHex);\n const uncachedAddresses = addresses.filter((addr) => !cache.has(addr));\n\n if (uncachedAddresses.length > 0) {\n const response = await lookup({\n addresses: uncachedAddresses,\n });\n\n response.results.forEach((result) => {\n cache.set(result.addresses[0], result.username); // TODO: handle multiple controller addresses\n });\n }\n\n return new Map(\n addresses\n .map((addr) => [addr, cache.get(addr)] as [string, string])\n .filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n","/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n/**\n * The current version of Ethers.\n */\nexport const version = \"6.13.7\";\n//# sourceMappingURL=_version.js.map","/**\n * Property helper functions.\n *\n * @_subsection api/utils:Properties [about-properties]\n */\nfunction checkType(value, type, name) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n const error = new Error(`invalid value for type ${type}`);\n error.code = \"INVALID_ARGUMENT\";\n error.argument = `value.${name}`;\n error.value = value;\n throw error;\n}\n/**\n * Resolves to a new object that is a copy of %%value%%, but with all\n * values resolved.\n */\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\n/**\n * Assigns the %%values%% to %%target%% as read-only values.\n *\n * It %%types%% is specified, the values are checked.\n */\nexport function defineProperties(target, values, types) {\n for (let key in values) {\n let value = values[key];\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type, key);\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","/**\n * All errors in ethers include properties to ensure they are both\n * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n * The [[isError]] function can be used to check the error ``code`` and\n * provide a type guard for the properties present on that error interface.\n *\n * @_section: api/utils/errors:Errors [about-errors]\n */\nimport { version } from \"../_version.js\";\nimport { defineProperties } from \"./properties.js\";\nfunction stringify(value) {\n if (value == null) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n }\n if (value instanceof Uint8Array) {\n const HEX = \"0123456789abcdef\";\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n result += HEX[value[i] >> 4];\n result += HEX[value[i] & 0xf];\n }\n return result;\n }\n if (typeof (value) === \"object\" && typeof (value.toJSON) === \"function\") {\n return stringify(value.toJSON());\n }\n switch (typeof (value)) {\n case \"boolean\":\n case \"symbol\":\n return value.toString();\n case \"bigint\":\n return BigInt(value).toString();\n case \"number\":\n return (value).toString();\n case \"string\":\n return JSON.stringify(value);\n case \"object\": {\n const keys = Object.keys(value);\n keys.sort();\n return \"{ \" + keys.map((k) => `${stringify(k)}: ${stringify(value[k])}`).join(\", \") + \" }\";\n }\n }\n return `[ COULD NOT SERIALIZE ]`;\n}\n/**\n * Returns true if the %%error%% matches an error thrown by ethers\n * that matches the error %%code%%.\n *\n * In TypeScript environments, this can be used to check that %%error%%\n * matches an EthersError type, which means the expected properties will\n * be set.\n *\n * @See [ErrorCodes](api:ErrorCode)\n * @example\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, \"CALL_EXCEPTION\")) {\n * // The Type Guard has validated this object\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\n/**\n * Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/**\n * Returns a new Error configured to the format ethers emits errors, with\n * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n * for the corresponding EthersError.\n *\n * Each error in ethers includes the version of ethers, a\n * machine-readable [[ErrorCode]], and depending on %%code%%, additional\n * required properties. The error message will also include the %%message%%,\n * ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError(message, code, info) {\n let shortMessage = message;\n {\n const details = [];\n if (info) {\n if (\"message\" in info || \"code\" in info || \"name\" in info) {\n throw new Error(`value will overwrite populated values: ${stringify(info)}`);\n }\n for (const key in info) {\n if (key === \"shortMessage\") {\n continue;\n }\n const value = (info[key]);\n // try {\n details.push(key + \"=\" + stringify(value));\n // } catch (error: any) {\n // console.log(\"MMM\", error.message);\n // details.push(key + \"=[could not serialize object]\");\n // }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n let error;\n switch (code) {\n case \"INVALID_ARGUMENT\":\n error = new TypeError(message);\n break;\n case \"NUMERIC_FAULT\":\n case \"BUFFER_OVERRUN\":\n error = new RangeError(message);\n break;\n default:\n error = new Error(message);\n }\n defineProperties(error, { code });\n if (info) {\n Object.assign(error, info);\n }\n if (error.shortMessage == null) {\n defineProperties(error, { shortMessage });\n }\n return error;\n}\n/**\n * Throws an EthersError with %%message%%, %%code%% and additional error\n * %%info%% when %%check%% is falsish..\n *\n * @see [[api:makeError]]\n */\nexport function assert(check, message, code, info) {\n if (!check) {\n throw makeError(message, code, info);\n }\n}\n/**\n * A simple helper to simply ensuring provided arguments match expected\n * constraints, throwing if not.\n *\n * In TypeScript environments, the %%check%% has been asserted true, so\n * any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check, message, name, value) {\n assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\nexport function assertArgumentCount(count, expectedCount, message) {\n if (message == null) {\n message = \"\";\n }\n if (message) {\n message = \": \" + message;\n }\n assert(count >= expectedCount, \"missing argument\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n}\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\n/**\n * Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form) {\n assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n}\n/**\n * Many classes use file-scoped values to guard the constructor,\n * making it effectively private. This facilitates that pattern\n * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n * throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard, guard, className) {\n if (className == null) {\n className = \"\";\n }\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n assert(false, `private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n}\n//# sourceMappingURL=errors.js.map","/**\n * Some data helpers.\n *\n *\n * @_subsection api/utils:Data Helpers [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\nfunction _getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n/**\n * Get a typed Uint8Array for %%value%%. If already a Uint8Array\n * the original %%value%% is returned; if a copy is required use\n * [[getBytesCopy]].\n *\n * @see: getBytesCopy\n */\nexport function getBytes(value, name) {\n return _getBytes(value, name, false);\n}\n/**\n * Get a typed Uint8Array for %%value%%, creating a copy if necessary\n * to prevent any modifications of the returned value from being\n * reflected elsewhere.\n *\n * @see: getBytes\n */\nexport function getBytesCopy(value, name) {\n return _getBytes(value, name, true);\n}\n/**\n * Returns true if %%value%% is a valid [[HexString]].\n *\n * If %%length%% is ``true`` or a //number//, it also checks that\n * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n * bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/**\n * Returns true if %%value%% is a valid representation of arbitrary\n * data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\nconst HexCharacters = \"0123456789abcdef\";\n/**\n * Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data) {\n const bytes = getBytes(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\n/**\n * Returns a [[DataHexString]] by concatenating all values\n * within %%data%%.\n */\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n/**\n * Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return getBytes(data).length;\n}\n/**\n * Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n * offset to the %%end%% offset.\n *\n * By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data, start, end) {\n const bytes = getBytes(data);\n if (end != null && end > bytes.length) {\n assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\n/**\n * Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.startsWith(\"00\")) {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\nfunction zeroPad(data, length, left) {\n const bytes = getBytes(data);\n assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **left**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **values** are in Solidity\n * (e.g. ``uint128``).\n */\nexport function zeroPadValue(data, length) {\n return zeroPad(data, length, true);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **right**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **bytes** are in Solidity\n * (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=data.js.map","/**\n * Some mathematic operations.\n *\n * @_subsection: api/utils:Math Helpers [about-maths]\n */\nimport { hexlify, isBytesLike } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1;\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n/**\n * Convert %%value%% from a twos-compliment representation of %%width%%\n * bits to its value.\n *\n * If the highest bit is ``1``, the result will be negative.\n */\nexport function fromTwos(_value, _width) {\n const value = getUint(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n assert((value >> width) === BN_0, \"overflow\", \"NUMERIC_FAULT\", {\n operation: \"fromTwos\", fault: \"overflow\", value: _value\n });\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n/**\n * Convert %%value%% to a twos-compliment representation of\n * %%width%% bits.\n *\n * The result will always be positive.\n */\nexport function toTwos(_value, _width) {\n let value = getBigInt(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n const limit = (BN_1 << (width - BN_1));\n if (value < BN_0) {\n value = -value;\n assert(value <= limit, \"too low\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n const mask = (BN_1 << width) - BN_1;\n return ((~value) & mask) + BN_1;\n }\n else {\n assert(value < limit, \"too high\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n }\n return value;\n}\n/**\n * Mask %%value%% with a bitmask of %%bits%% ones.\n */\nexport function mask(_value, _bits) {\n const value = getUint(_value, \"value\");\n const bits = BigInt(getNumber(_bits, \"bits\"));\n return value & ((BN_1 << bits) - BN_1);\n}\n/**\n * Gets a BigInt from %%value%%. If it is an invalid value for\n * a BigInt, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return BigInt(value);\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n if (value[0] === \"-\" && value[1] !== \"-\") {\n return -BigInt(value.substring(1));\n }\n return BigInt(value);\n }\n catch (e) {\n assertArgument(false, `invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid BigNumberish value\", name || \"value\", value);\n}\n/**\n * Returns %%value%% as a bigint, validating it is valid as a bigint\n * value and that it is positive.\n */\nexport function getUint(value, name) {\n const result = getBigInt(value, name);\n assert(result >= BN_0, \"unsigned value cannot be negative\", \"NUMERIC_FAULT\", {\n fault: \"overflow\", operation: \"getUint\", value\n });\n return result;\n}\nconst Nibbles = \"0123456789abcdef\";\n/*\n * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data.\n */\nexport function toBigInt(value) {\n if (value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of value) {\n result += Nibbles[v >> 4];\n result += Nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return getBigInt(value);\n}\n/**\n * Gets a //number// from %%value%%. If it is an invalid value for\n * a //number//, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return Number(value);\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return value;\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n return getNumber(BigInt(value), name);\n }\n catch (e) {\n assertArgument(false, `invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid numeric value\", name || \"value\", value);\n}\n/**\n * Converts %%value%% to a number. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data. Throws if the value is not safe.\n */\nexport function toNumber(value) {\n return getNumber(toBigInt(value));\n}\n/**\n * Converts %%value%% to a Big Endian hexstring, optionally padded to\n * %%width%% bytes.\n */\nexport function toBeHex(_value, _width) {\n const value = getUint(_value, \"value\");\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = getNumber(_width, \"width\");\n assert(width * 2 >= result.length, `value exceeds width (${width} bytes)`, \"NUMERIC_FAULT\", {\n operation: \"toBeHex\",\n fault: \"overflow\",\n value: _value\n });\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\n/**\n * Converts %%value%% to a Big Endian Uint8Array.\n */\nexport function toBeArray(_value) {\n const value = getUint(_value, \"value\");\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n/**\n * Returns a [[HexString]] for %%value%% safe to use as a //Quantity//.\n *\n * A //Quantity// does not have and leading 0 values unless the value is\n * the literal value `0x0`. This is most commonly used for JSSON-RPC\n * numeric values.\n */\nexport function toQuantity(value) {\n let result = hexlify(isBytesLike(value) ? value : toBeArray(value)).substring(2);\n while (result.startsWith(\"0\")) {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=maths.js.map","/**\n * Using strings in Ethereum (or any security-basd system) requires\n * additional care. These utilities attempt to mitigate some of the\n * safety issues as well as provide the ability to recover and analyse\n * strings.\n *\n * @_subsection api/utils:Strings and UTF-8 [about-strings]\n */\nimport { getBytes } from \"./data.js\";\nimport { assertArgument, assertNormalize } from \"./errors.js\";\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n assertArgument(false, `invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === \"BAD_PREFIX\" || reason === \"UNEXPECTED_CONTINUE\") {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === \"OVERRUN\") {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === \"OVERLONG\") {\n assertArgument(typeof (badCodepoint) === \"number\", \"invalid bad code point for replacement\", \"badCodepoint\", badCodepoint);\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n/**\n * A handful of popular, built-in UTF-8 error handling strategies.\n *\n * **``\"error\"``** - throws on ANY illegal UTF-8 sequence or\n * non-canonical (overlong) codepoints (this is the default)\n *\n * **``\"ignore\"``** - silently drops any illegal UTF-8 sequence\n * and accepts non-canonical (overlong) codepoints\n *\n * **``\"replace\"``** - replace any illegal UTF-8 sequence with the\n * UTF-8 replacement character (i.e. ``\"\\\\ufffd\"``) and accepts\n * non-canonical (overlong) codepoints\n *\n * @returns: Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>\n */\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(\"UNEXPECTED_CONTINUE\", i - 1, bytes, result);\n }\n else {\n i += onError(\"BAD_PREFIX\", i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(\"OVERRUN\", i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(\"MISSING_CONTINUE\", i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(\"OUT_OF_RANGE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(\"UTF16_SURROGATE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(\"OVERLONG\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n/**\n * Returns the UTF-8 byte representation of %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8Bytes(str, form) {\n assertArgument(typeof (str) === \"string\", \"invalid string value\", \"str\", str);\n if (form != null) {\n assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00), \"invalid surrogate pair\", \"str\", str);\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\n//export \nfunction _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\n/**\n * Returns the string represented by the UTF-8 data %%bytes%%.\n *\n * When %%onError%% function is specified, it is called on UTF-8\n * errors allowing recovery using the [[Utf8ErrorFunc]] API.\n * (default: [error](Utf8ErrorFuncs))\n */\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n/**\n * Returns the UTF-8 code-points for %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8CodePoints(str, form) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nfunction bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!u8a(data))\n throw new Error(`expected Uint8Array, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapXOFConstructorWithOpts, } from './utils.js';\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n number(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n exists(this);\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n exists(this, false);\n bytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n number(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n output(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","/**\n * Cryptographic hashing functions\n *\n * @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\n/**\n * Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n * The %%data%% **must** be a data representation, to compute the\n * hash of UTF-8 data use the [[id]] function.\n *\n * @returns DataHexstring\n * @example:\n * keccak256(\"0x\")\n * //_result:\n *\n * keccak256(\"0x1337\")\n * //_result:\n *\n * keccak256(new Uint8Array([ 0x13, 0x37 ]))\n * //_result:\n *\n * // Strings are assumed to be DataHexString, otherwise it will\n * // throw. To hash UTF-8 data, see the note above.\n * keccak256(\"Hello World\")\n * //_error:\n */\nexport function keccak256(_data) {\n const data = getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","/**\n * A constant for the zero hash.\n *\n * (**i.e.** ``\"0x0000000000000000000000000000000000000000000000000000000000000000\"``)\n */\nexport const ZeroHash = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n//# sourceMappingURL=hashes.js.map","// NFKC (composed) // (decomposed)\n/**\n * A constant for the ether symbol (normalized using NFKC).\n *\n * (**i.e.** ``\"\\\\u039e\"``)\n */\nexport const EtherSymbol = \"\\u039e\"; // \"\\uD835\\uDF63\";\n/**\n * A constant for the [[link-eip-191]] personal message prefix.\n *\n * (**i.e.** ``\"\\\\x19Ethereum Signed Message:\\\\n\"``)\n */\nexport const MessagePrefix = \"\\x19Ethereum Signed Message:\\n\";\n//# sourceMappingURL=strings.js.map","import { ZeroHash } from \"../constants/index.js\";\nimport { concat, dataLength, getBigInt, getBytes, getNumber, hexlify, toBeArray, isHexString, zeroPadValue, assertArgument, assertPrivate } from \"../utils/index.js\";\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\nconst _guard = {};\nfunction toUint256(value) {\n return zeroPadValue(toBeArray(value), 32);\n}\n/**\n * A Signature @TODO\n *\n *\n * @_docloc: api/crypto:Signing\n */\nexport class Signature {\n #r;\n #s;\n #v;\n #networkV;\n /**\n * The ``r`` value for a signature.\n *\n * This represents the ``x`` coordinate of a \"reference\" or\n * challenge point, from which the ``y`` can be computed.\n */\n get r() { return this.#r; }\n set r(value) {\n assertArgument(dataLength(value) === 32, \"invalid r\", \"value\", value);\n this.#r = hexlify(value);\n }\n /**\n * The ``s`` value for a signature.\n */\n get s() { return this.#s; }\n set s(_value) {\n assertArgument(dataLength(_value) === 32, \"invalid s\", \"value\", _value);\n const value = hexlify(_value);\n assertArgument(parseInt(value.substring(0, 3)) < 8, \"non-canonical s\", \"value\", value);\n this.#s = value;\n }\n /**\n * The ``v`` value for a signature.\n *\n * Since a given ``x`` value for ``r`` has two possible values for\n * its correspondin ``y``, the ``v`` indicates which of the two ``y``\n * values to use.\n *\n * It is normalized to the values ``27`` or ``28`` for legacy\n * purposes.\n */\n get v() { return this.#v; }\n set v(value) {\n const v = getNumber(value, \"value\");\n assertArgument(v === 27 || v === 28, \"invalid v\", \"v\", value);\n this.#v = v;\n }\n /**\n * The EIP-155 ``v`` for legacy transactions. For non-legacy\n * transactions, this value is ``null``.\n */\n get networkV() { return this.#networkV; }\n /**\n * The chain ID for EIP-155 legacy transactions. For non-legacy\n * transactions, this value is ``null``.\n */\n get legacyChainId() {\n const v = this.networkV;\n if (v == null) {\n return null;\n }\n return Signature.getChainId(v);\n }\n /**\n * The ``yParity`` for the signature.\n *\n * See ``v`` for more details on how this value is used.\n */\n get yParity() {\n return (this.v === 27) ? 0 : 1;\n }\n /**\n * The [[link-eip-2098]] compact representation of the ``yParity``\n * and ``s`` compacted into a single ``bytes32``.\n */\n get yParityAndS() {\n // The EIP-2098 compact representation\n const yParityAndS = getBytes(this.s);\n if (this.yParity) {\n yParityAndS[0] |= 0x80;\n }\n return hexlify(yParityAndS);\n }\n /**\n * The [[link-eip-2098]] compact representation.\n */\n get compactSerialized() {\n return concat([this.r, this.yParityAndS]);\n }\n /**\n * The serialized representation.\n */\n get serialized() {\n return concat([this.r, this.s, (this.yParity ? \"0x1c\" : \"0x1b\")]);\n }\n /**\n * @private\n */\n constructor(guard, r, s, v) {\n assertPrivate(guard, _guard, \"Signature\");\n this.#r = r;\n this.#s = s;\n this.#v = v;\n this.#networkV = null;\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return `Signature { r: \"${this.r}\", s: \"${this.s}\", yParity: ${this.yParity}, networkV: ${this.networkV} }`;\n }\n /**\n * Returns a new identical [[Signature]].\n */\n clone() {\n const clone = new Signature(_guard, this.r, this.s, this.v);\n if (this.networkV) {\n clone.#networkV = this.networkV;\n }\n return clone;\n }\n /**\n * Returns a representation that is compatible with ``JSON.stringify``.\n */\n toJSON() {\n const networkV = this.networkV;\n return {\n _type: \"signature\",\n networkV: ((networkV != null) ? networkV.toString() : null),\n r: this.r, s: this.s, v: this.v,\n };\n }\n /**\n * Compute the chain ID from the ``v`` in a legacy EIP-155 transactions.\n *\n * @example:\n * Signature.getChainId(45)\n * //_result:\n *\n * Signature.getChainId(46)\n * //_result:\n */\n static getChainId(v) {\n const bv = getBigInt(v, \"v\");\n // The v is not an EIP-155 v, so it is the unspecified chain ID\n if ((bv == BN_27) || (bv == BN_28)) {\n return BN_0;\n }\n // Bad value for an EIP-155 v\n assertArgument(bv >= BN_35, \"invalid EIP-155 v\", \"v\", v);\n return (bv - BN_35) / BN_2;\n }\n /**\n * Compute the ``v`` for a chain ID for a legacy EIP-155 transactions.\n *\n * Legacy transactions which use [[link-eip-155]] hijack the ``v``\n * property to include the chain ID.\n *\n * @example:\n * Signature.getChainIdV(5, 27)\n * //_result:\n *\n * Signature.getChainIdV(5, 28)\n * //_result:\n *\n */\n static getChainIdV(chainId, v) {\n return (getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n }\n /**\n * Compute the normalized legacy transaction ``v`` from a ``yParirty``,\n * a legacy transaction ``v`` or a legacy [[link-eip-155]] transaction.\n *\n * @example:\n * // The values 0 and 1 imply v is actually yParity\n * Signature.getNormalizedV(0)\n * //_result:\n *\n * // Legacy non-EIP-1559 transaction (i.e. 27 or 28)\n * Signature.getNormalizedV(27)\n * //_result:\n *\n * // Legacy EIP-155 transaction (i.e. >= 35)\n * Signature.getNormalizedV(46)\n * //_result:\n *\n * // Invalid values throw\n * Signature.getNormalizedV(5)\n * //_error:\n */\n static getNormalizedV(v) {\n const bv = getBigInt(v);\n if (bv === BN_0 || bv === BN_27) {\n return 27;\n }\n if (bv === BN_1 || bv === BN_28) {\n return 28;\n }\n assertArgument(bv >= BN_35, \"invalid v\", \"v\", v);\n // Otherwise, EIP-155 v means odd is 27 and even is 28\n return (bv & BN_1) ? 27 : 28;\n }\n /**\n * Creates a new [[Signature]].\n *\n * If no %%sig%% is provided, a new [[Signature]] is created\n * with default values.\n *\n * If %%sig%% is a string, it is parsed.\n */\n static from(sig) {\n function assertError(check, message) {\n assertArgument(check, message, \"signature\", sig);\n }\n ;\n if (sig == null) {\n return new Signature(_guard, ZeroHash, ZeroHash, 27);\n }\n if (typeof (sig) === \"string\") {\n const bytes = getBytes(sig, \"signature\");\n if (bytes.length === 64) {\n const r = hexlify(bytes.slice(0, 32));\n const s = bytes.slice(32, 64);\n const v = (s[0] & 0x80) ? 28 : 27;\n s[0] &= 0x7f;\n return new Signature(_guard, r, hexlify(s), v);\n }\n if (bytes.length === 65) {\n const r = hexlify(bytes.slice(0, 32));\n const s = bytes.slice(32, 64);\n assertError((s[0] & 0x80) === 0, \"non-canonical s\");\n const v = Signature.getNormalizedV(bytes[64]);\n return new Signature(_guard, r, hexlify(s), v);\n }\n assertError(false, \"invalid raw signature length\");\n }\n if (sig instanceof Signature) {\n return sig.clone();\n }\n // Get r\n const _r = sig.r;\n assertError(_r != null, \"missing r\");\n const r = toUint256(_r);\n // Get s; by any means necessary (we check consistency below)\n const s = (function (s, yParityAndS) {\n if (s != null) {\n return toUint256(s);\n }\n if (yParityAndS != null) {\n assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n const bytes = getBytes(yParityAndS);\n bytes[0] &= 0x7f;\n return hexlify(bytes);\n }\n assertError(false, \"missing s\");\n })(sig.s, sig.yParityAndS);\n assertError((getBytes(s)[0] & 0x80) == 0, \"non-canonical s\");\n // Get v; by any means necessary (we check consistency below)\n const { networkV, v } = (function (_v, yParityAndS, yParity) {\n if (_v != null) {\n const v = getBigInt(_v);\n return {\n networkV: ((v >= BN_35) ? v : undefined),\n v: Signature.getNormalizedV(v)\n };\n }\n if (yParityAndS != null) {\n assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n return { v: ((getBytes(yParityAndS)[0] & 0x80) ? 28 : 27) };\n }\n if (yParity != null) {\n switch (getNumber(yParity, \"sig.yParity\")) {\n case 0: return { v: 27 };\n case 1: return { v: 28 };\n }\n assertError(false, \"invalid yParity\");\n }\n assertError(false, \"missing v\");\n })(sig.v, sig.yParityAndS, sig.yParity);\n const result = new Signature(_guard, r, s, v);\n if (networkV) {\n result.#networkV = networkV;\n }\n // If multiple of v, yParity, yParityAndS we given, check they match\n assertError(sig.yParity == null || getNumber(sig.yParity, \"sig.yParity\") === result.yParity, \"yParity mismatch\");\n assertError(sig.yParityAndS == null || sig.yParityAndS === result.yParityAndS, \"yParityAndS mismatch\");\n return result;\n }\n}\n//# sourceMappingURL=signature.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { MessagePrefix } from \"../constants/index.js\";\nimport { recoverAddress } from \"../transaction/index.js\";\nimport { concat, toUtf8Bytes } from \"../utils/index.js\";\n/**\n * Computes the [[link-eip-191]] personal-sign message digest to sign.\n *\n * This prefixes the message with [[MessagePrefix]] and the decimal length\n * of %%message%% and computes the [[keccak256]] digest.\n *\n * If %%message%% is a string, it is converted to its UTF-8 bytes\n * first. To compute the digest of a [[DataHexString]], it must be converted\n * to [bytes](getBytes).\n *\n * @example:\n * hashMessage(\"Hello World\")\n * //_result:\n *\n * // Hashes the SIX (6) string characters, i.e.\n * // [ \"0\", \"x\", \"4\", \"2\", \"4\", \"3\" ]\n * hashMessage(\"0x4243\")\n * //_result:\n *\n * // Hashes the TWO (2) bytes [ 0x42, 0x43 ]...\n * hashMessage(getBytes(\"0x4243\"))\n * //_result:\n *\n * // ...which is equal to using data\n * hashMessage(new Uint8Array([ 0x42, 0x43 ]))\n * //_result:\n *\n */\nexport function hashMessage(message) {\n if (typeof (message) === \"string\") {\n message = toUtf8Bytes(message);\n }\n return keccak256(concat([\n toUtf8Bytes(MessagePrefix),\n toUtf8Bytes(String(message.length)),\n message\n ]));\n}\n/**\n * Return the address of the private key that produced\n * the signature %%sig%% during signing for %%message%%.\n */\nexport function verifyMessage(message, sig) {\n const digest = hashMessage(message);\n return recoverAddress(digest, sig);\n}\n//# sourceMappingURL=message.js.map","import { TurnkeyIframeClient } from \"@turnkey/sdk-browser\";\nimport { ethers, getBytes, Signature } from \"ethers\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class TurnkeyWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"turnkey\" as ExternalWalletType;\n readonly platform: ExternalPlatform = \"ethereum\";\n private account: string | undefined = undefined;\n private organizationId: string | undefined = undefined;\n\n constructor(\n private turnkeyIframeClient: TurnkeyIframeClient,\n address?: string,\n organizationId?: string,\n ) {\n this.account = address;\n this.organizationId = organizationId;\n }\n\n isAvailable(): boolean {\n return typeof window !== \"undefined\";\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n name: \"Turnkey\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"Turnkey is not available\");\n }\n\n const accounts = await this.turnkeyIframeClient.getWallets();\n if (accounts && accounts.wallets.length > 0) {\n const walletAccount = await this.turnkeyIframeClient.getWalletAccount({\n walletId: accounts.wallets[0].walletId,\n });\n this.account = walletAccount.account.address;\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Turnkey is not connected\");\n }\n\n const result = (\n await this.turnkeyIframeClient.signTransaction({\n organizationId: this.organizationId,\n signWith: this.account,\n unsignedTransaction: transaction,\n type: \"TRANSACTION_TYPE_ETHEREUM\",\n })\n ).signedTransaction;\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(message: string): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Turnkey is not connected\");\n }\n\n const paddedMessage = `0x${message.replace(\"0x\", \"\").padStart(64, \"0\")}`;\n const messageBytes = getBytes(paddedMessage);\n const messageHash = ethers.hashMessage(messageBytes);\n\n const { r, s, v } = await this.turnkeyIframeClient.signRawPayload({\n organizationId: this.organizationId,\n signWith: this.account,\n payload: messageHash,\n encoding: \"PAYLOAD_ENCODING_HEXADECIMAL\",\n hashFunction: \"HASH_FUNCTION_NO_OP\",\n });\n\n const rHex = r.startsWith(\"0x\") ? r : \"0x\" + r;\n const sHex = s.startsWith(\"0x\") ? s : \"0x\" + s;\n\n const vNumber = parseInt(v, 16);\n\n if (isNaN(vNumber)) {\n console.error(`Invalid recovery ID (v) received from Turnkey: ${v}`);\n throw new Error(`Invalid recovery ID (v) received: ${v}`);\n }\n\n const signature = Signature.from({\n r: rHex,\n s: sHex,\n v: vNumber,\n });\n\n return {\n success: true,\n wallet: this.type,\n result: signature.serialized,\n account: this.account,\n };\n } catch (error) {\n console.error(`Error signing message with Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n return this.signMessage(data);\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(_chainId: string): Promise<boolean> {\n return false;\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"Turnkey is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n return { success: true, wallet: this.type, result: \"0\" };\n }\n } catch (error) {\n console.error(`Error getting balance from Turnkey:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","import Provider from \"@walletconnect/ethereum-provider\";\nimport {\n ExternalPlatform,\n ExternalWallet,\n ExternalWalletResponse,\n ExternalWalletType,\n WalletAdapter,\n} from \"../types\";\n\nexport class WalletConnectWallet implements WalletAdapter {\n readonly type: ExternalWalletType = \"walletconnect\" as ExternalWalletType;\n readonly platform: ExternalPlatform = \"ethereum\";\n private account: string | undefined = undefined;\n\n constructor(\n private provider: Provider,\n account?: string,\n ) {\n this.account = account;\n }\n\n isAvailable(): boolean {\n return !!this.provider;\n }\n\n getInfo(): ExternalWallet {\n const available = this.isAvailable();\n\n return {\n type: this.type,\n available,\n version: available ? window.ethereum?.version || \"Unknown\" : undefined,\n chainId: available ? window.ethereum?.chainId : undefined,\n name: \"WalletConnect\",\n platform: this.platform,\n };\n }\n\n async connect(): Promise<ExternalWalletResponse<any>> {\n if (this.account) {\n return { success: true, wallet: this.type, account: this.account };\n }\n\n try {\n if (!this.isAvailable()) {\n throw new Error(\"WalletConnect is not available\");\n }\n\n const accounts = await this.provider.request<string[]>({\n method: \"eth_requestAccounts\",\n });\n\n if (accounts && accounts.length > 0) {\n this.account = accounts[0];\n return { success: true, wallet: this.type, account: this.account };\n }\n\n throw new Error(\"No accounts found\");\n } catch (error) {\n console.error(`Error connecting to WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTransaction(\n transaction: any,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n const result = await this.provider.request({\n method: \"eth_sendTransaction\",\n params: [transaction],\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing transaction with WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signMessage(\n message: `0x${string}`,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n const result = await this.provider.request({\n method: \"personal_sign\",\n params: [this.account!, message] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing message with WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async signTypedData(data: any): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n const result = await this.provider.request({\n method: \"eth_signTypedData_v4\",\n params: [this.account, JSON.stringify(data)] as any,\n });\n\n return { success: true, wallet: this.type, result };\n } catch (error) {\n console.error(`Error signing typed data with WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n\n async sendTransaction(_txn: any): Promise<ExternalWalletResponse<any>> {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented\",\n };\n }\n\n async switchChain(chainId: string): Promise<boolean> {\n try {\n if (!this.isAvailable()) {\n throw new Error(\"WalletConnect is not available\");\n }\n\n try {\n await this.provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId }],\n });\n return true;\n } catch (error) {\n if ((error as any).code === 4902) {\n console.warn(\"Chain not added to WalletConnect\");\n }\n throw error;\n }\n } catch (error) {\n console.error(`Error switching chain for WalletConnect:`, error);\n return false;\n }\n }\n\n async getBalance(\n tokenAddress?: string,\n ): Promise<ExternalWalletResponse<any>> {\n try {\n if (!this.isAvailable() || !this.account) {\n throw new Error(\"WalletConnect is not connected\");\n }\n\n if (tokenAddress) {\n return {\n success: false,\n wallet: this.type,\n error: \"Not implemented for ERC20\",\n };\n } else {\n const balance = await this.provider.request({\n method: \"eth_getBalance\",\n params: [this.account, \"latest\"] as any,\n });\n return { success: true, wallet: this.type, result: balance };\n }\n } catch (error) {\n console.error(`Error getting balance from WalletConnect:`, error);\n return {\n success: false,\n wallet: this.type,\n error: (error as Error).message || \"Unknown error\",\n };\n }\n }\n}\n","// src/generated/controller-configs.ts\nvar configs = {\n \"blob-arena\": {\n origin: [\"*.blobarena.xyz\", \"blobarena.xyz\", \"development.blobarena.xyz\"],\n theme: {\n colors: {\n primary: \"#980f06\"\n },\n cover: \"https://static.cartridge.gg/presets/blob-arena/cover.png\",\n icon: \"https://static.cartridge.gg/presets/blob-arena/icon.png\",\n name: \"Blob Arena\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n },\n chains: {\n SN_SEPOLIA: {\n policies: {\n contracts: {\n \"0x771a2807aa479dacd207c1f12018d0fa6e92ef1eb994169ff4f8904a8845e3f\": {\n name: \"Lobby Contract\",\n description: \"Game invites and responses\",\n methods: [\n {\n name: \"Send Invite\",\n entrypoint: \"send_invite\",\n description: \"Send users an invite\"\n },\n {\n name: \"Rescind Invite\",\n entrypoint: \"rescind_invite\",\n description: \"Rescind a previously sent invite\"\n },\n {\n name: \"Respond Invite\",\n entrypoint: \"respond_invite\",\n description: \"Respond to a received invite\"\n },\n {\n name: \"Rescind Response\",\n entrypoint: \"rescind_response\",\n description: \"Rescind a previous response to an invite\"\n },\n {\n name: \"Reject Invite\",\n entrypoint: \"reject_invite\",\n description: \"Reject a received invite\"\n },\n {\n name: \"Reject Response\",\n entrypoint: \"reject_response\",\n description: \"Reject a response to an invite\"\n },\n {\n name: \"Accept Response\",\n entrypoint: \"accept_response\",\n description: \"Accept a response to an invite\"\n }\n ]\n },\n \"0x6040ee8b2aee6cbcc482b5cb712d1c206f8ad070e98d7e07a70d4e4a6b5e261\": {\n name: \"PVP Contract\",\n description: \"Manages core gameplay interactions\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start\",\n description: \"Start the game\"\n },\n {\n name: \"Commit Attack\",\n entrypoint: \"commit\",\n description: \"Commit an attack in the game\"\n },\n {\n name: \"Reveal Attack\",\n entrypoint: \"reveal\",\n description: \"Reveal the committed attack in the game\"\n },\n {\n name: \"Run Round\",\n entrypoint: \"run\",\n description: \"Run the next round of the game\"\n },\n {\n name: \"Forfeit\",\n entrypoint: \"forfeit\",\n description: \"Forfeit the game\"\n },\n {\n name: \"Kick Player\",\n entrypoint: \"kick_player\",\n description: \"Kick an inactive player from the game\"\n }\n ]\n },\n \"0x69f9cd86938bae98a413c2b4dddee1ab8005d72202466ef4fd35a625596e619\": {\n name: \"Betsy Contract\",\n description: \"Wager operations\",\n methods: [\n {\n name: \"Set Owner's Fee\",\n entrypoint: \"set_owners_fee\",\n description: \"Set the owner's fee\"\n },\n {\n name: \"Create Wager\",\n entrypoint: \"create\",\n description: \"Create a wager\"\n },\n {\n name: \"Accept Wager\",\n entrypoint: \"accept\",\n description: \"Accept a wager\"\n },\n {\n name: \"Reject Wager\",\n entrypoint: \"reject\",\n description: \"Reject a wager\"\n },\n {\n name: \"Revoke Wager\",\n entrypoint: \"revoke\",\n description: \"Revoke a wager\"\n },\n {\n name: \"Claim Win\",\n entrypoint: \"claim_win\",\n description: \"Claim the win\"\n },\n {\n name: \"Approve Release\",\n entrypoint: \"approve_release\",\n description: \"Approve fund release\"\n },\n {\n name: \"Revoke Release\",\n entrypoint: \"revoke_release\",\n description: \"Revoke fund release\"\n },\n {\n name: \"Release Funds\",\n entrypoint: \"release_funds\",\n description: \"Release funds\"\n }\n ]\n },\n \"0x11088b79a397c2fb9d2570acbf711e6972e75e3a28b6bcf36267501d96c781b\": {\n name: \"Arcade Contract\",\n description: \"Minting of arcade Bloberts\",\n methods: [\n {\n name: \"Mint Arcade Blobert\",\n entrypoint: \"mint\",\n description: \"Mint arcade blobert\"\n }\n ]\n },\n \"0x645aec04e61f286691b91d6589d010890bb66ca0af91bf24d12c8bc4387c868\": {\n name: \"AMMA Contract\",\n description: \"Minting of AMMA Bloberts\",\n methods: [\n {\n name: \"Mint AMMA Blobert\",\n entrypoint: \"mint\",\n description: \"Mint AMMA blobert\"\n }\n ]\n },\n \"0x1ad613db1957a576c1a9bae913f1d22a41add2f1d64d822d9e097f219b34954\": {\n name: \"Arcade Contract\",\n description: \"Arcade mode contract\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start_game\",\n description: \"Start the game\"\n },\n {\n name: \"Attack\",\n entrypoint: \"attack\",\n description: \"Submit an attack\"\n },\n {\n name: \"Start Challenge\",\n entrypoint: \"start_challenge\",\n description: \"Start a challenge\"\n },\n {\n name: \"Next Challenge Round\",\n entrypoint: \"next_challenge_round\",\n description: \"Go forward\"\n },\n {\n name: \"Respawn Challenge\",\n entrypoint: \"respawn_challenge\",\n description: \"Restart a challenge\"\n },\n {\n name: \"End Challenge\",\n entrypoint: \"end_challenge\",\n description: \"End a challenge\"\n },\n {\n name: \"Claim Free Game\",\n entrypoint: \"claim_free_game\",\n description: \"Claim an arcade game\"\n }\n ]\n }\n }\n }\n }\n }\n },\n \"blob-arena-amma\": {\n origin: [\"*.blobarena.xyz\", \"blobarena.xyz\", \"development.blobarena.xyz\"],\n theme: {\n colors: {\n primary: \"#D7B000\"\n },\n cover: \"https://static.cartridge.gg/presets/blob-arena-amma/cover.png\",\n icon: \"https://static.cartridge.gg/presets/blob-arena-amma/icon.png\",\n name: \"Blob Arena AMMA\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n },\n chains: {\n SN_SEPOLIA: {\n policies: {\n contracts: {\n \"0x771a2807aa479dacd207c1f12018d0fa6e92ef1eb994169ff4f8904a8845e3f\": {\n name: \"Lobby Contract\",\n description: \"Game invites and responses\",\n methods: [\n {\n name: \"Send Invite\",\n entrypoint: \"send_invite\",\n description: \"Send users an invite\"\n },\n {\n name: \"Rescind Invite\",\n entrypoint: \"rescind_invite\",\n description: \"Rescind a previously sent invite\"\n },\n {\n name: \"Respond Invite\",\n entrypoint: \"respond_invite\",\n description: \"Respond to a received invite\"\n },\n {\n name: \"Rescind Response\",\n entrypoint: \"rescind_response\",\n description: \"Rescind a previous response to an invite\"\n },\n {\n name: \"Reject Invite\",\n entrypoint: \"reject_invite\",\n description: \"Reject a received invite\"\n },\n {\n name: \"Reject Response\",\n entrypoint: \"reject_response\",\n description: \"Reject a response to an invite\"\n },\n {\n name: \"Accept Response\",\n entrypoint: \"accept_response\",\n description: \"Accept a response to an invite\"\n }\n ]\n },\n \"0x6040ee8b2aee6cbcc482b5cb712d1c206f8ad070e98d7e07a70d4e4a6b5e261\": {\n name: \"PVP Contract\",\n description: \"Manages core gameplay interactions\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start\",\n description: \"Start the game\"\n },\n {\n name: \"Commit Attack\",\n entrypoint: \"commit\",\n description: \"Commit an attack in the game\"\n },\n {\n name: \"Reveal Attack\",\n entrypoint: \"reveal\",\n description: \"Reveal the committed attack in the game\"\n },\n {\n name: \"Run Round\",\n entrypoint: \"run\",\n description: \"Run the next round of the game\"\n },\n {\n name: \"Forfeit\",\n entrypoint: \"forfeit\",\n description: \"Forfeit the game\"\n },\n {\n name: \"Kick Player\",\n entrypoint: \"kick_player\",\n description: \"Kick an inactive player from the game\"\n }\n ]\n },\n \"0x69f9cd86938bae98a413c2b4dddee1ab8005d72202466ef4fd35a625596e619\": {\n name: \"Betsy Contract\",\n description: \"Wager operations\",\n methods: [\n {\n name: \"Set Owner's Fee\",\n entrypoint: \"set_owners_fee\",\n description: \"Set the owner's fee\"\n },\n {\n name: \"Create Wager\",\n entrypoint: \"create\",\n description: \"Create a wager\"\n },\n {\n name: \"Accept Wager\",\n entrypoint: \"accept\",\n description: \"Accept a wager\"\n },\n {\n name: \"Reject Wager\",\n entrypoint: \"reject\",\n description: \"Reject a wager\"\n },\n {\n name: \"Revoke Wager\",\n entrypoint: \"revoke\",\n description: \"Revoke a wager\"\n },\n {\n name: \"Claim Win\",\n entrypoint: \"claim_win\",\n description: \"Claim the win\"\n },\n {\n name: \"Approve Release\",\n entrypoint: \"approve_release\",\n description: \"Approve fund release\"\n },\n {\n name: \"Revoke Release\",\n entrypoint: \"revoke_release\",\n description: \"Revoke fund release\"\n },\n {\n name: \"Release Funds\",\n entrypoint: \"release_funds\",\n description: \"Release funds\"\n }\n ]\n },\n \"0x11088b79a397c2fb9d2570acbf711e6972e75e3a28b6bcf36267501d96c781b\": {\n name: \"Arcade Contract\",\n description: \"Minting of arcade Bloberts\",\n methods: [\n {\n name: \"Mint Arcade Blobert\",\n entrypoint: \"mint\",\n description: \"Mint arcade blobert\"\n }\n ]\n },\n \"0x645aec04e61f286691b91d6589d010890bb66ca0af91bf24d12c8bc4387c868\": {\n name: \"AMMA Contract\",\n description: \"Minting of AMMA Bloberts\",\n methods: [\n {\n name: \"Mint AMMA Blobert\",\n entrypoint: \"mint\",\n description: \"Mint AMMA blobert\"\n }\n ]\n },\n \"0x1ad613db1957a576c1a9bae913f1d22a41add2f1d64d822d9e097f219b34954\": {\n name: \"Arcade Contract\",\n description: \"Arcade mode contract\",\n methods: [\n {\n name: \"Start Game\",\n entrypoint: \"start_game\",\n description: \"Start the game\"\n },\n {\n name: \"Attack\",\n entrypoint: \"attack\",\n description: \"Submit an attack\"\n },\n {\n name: \"Start Challenge\",\n entrypoint: \"start_challenge\",\n description: \"Start a challenge\"\n },\n {\n name: \"Next Challenge Round\",\n entrypoint: \"next_challenge_round\",\n description: \"Go forward\"\n },\n {\n name: \"Respawn Challenge\",\n entrypoint: \"respawn_challenge\",\n description: \"Restart a challenge\"\n },\n {\n name: \"End Challenge\",\n entrypoint: \"end_challenge\",\n description: \"End a challenge\"\n },\n {\n name: \"Claim Free Game\",\n entrypoint: \"claim_free_game\",\n description: \"Claim an arcade game\"\n }\n ]\n }\n }\n }\n }\n }\n },\n budokan: {\n origin: \"budokan.gg\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x05fb427962210ac4b3be5e23419b0d9e91ca6a9c57b0665d2ca7783092506f6e\": {\n name: \"Budokan\",\n methods: [\n {\n entrypoint: \"create_tournament\"\n },\n {\n entrypoint: \"enter_tournament\"\n },\n {\n entrypoint: \"submit_score\"\n },\n {\n entrypoint: \"claim_prize\"\n },\n {\n entrypoint: \"add_prize\"\n },\n {\n entrypoint: \"register_token\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#B1B97A\"\n },\n cover: \"https://static.cartridge.gg/presets/budokan/cover.png\",\n icon: \"https://static.cartridge.gg/presets/budokan/icon.png\",\n name: \"Budokan\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"bytebeasts-tamagotchi\": {\n origin: \"bytebeasts.games\",\n theme: {\n colors: {\n primary: \"#ECECDA\"\n },\n cover: \"https://static.cartridge.gg/presets/bytebeasts-tamagotchi/cover.png\",\n icon: \"https://static.cartridge.gg/presets/bytebeasts-tamagotchi/icon.png\",\n name: \"Tamagotchi\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n cartridge: {\n origin: \"*\",\n theme: {\n name: \"Cartridge\",\n icon: \"https://static.cartridge.gg/presets/cartridge/icon.svg\",\n cover: {\n light: \"https://static.cartridge.gg/presets/cartridge/cover-light.png\",\n dark: \"https://static.cartridge.gg/presets/cartridge/cover-dark.png\"\n },\n optimizedCover: {\n light: {\n webp: {\n \"768\": \"cover-light@768.webp\",\n \"1024\": \"cover-light@1024.webp\",\n \"1440\": \"cover-light@1440.webp\"\n },\n jpg: {\n \"768\": \"cover-light@768.jpg\",\n \"1024\": \"cover-light@1024.jpg\",\n \"1440\": \"cover-light@1440.jpg\"\n },\n png: {\n \"768\": \"cover-light@768.png\",\n \"1024\": \"cover-light@1024.png\",\n \"1440\": \"cover-light@1440.png\"\n }\n },\n dark: {\n webp: {\n \"768\": \"cover-dark@768.webp\",\n \"1024\": \"cover-dark@1024.webp\",\n \"1440\": \"cover-dark@1440.webp\"\n },\n jpg: {\n \"768\": \"cover-dark@768.jpg\",\n \"1024\": \"cover-dark@1024.jpg\",\n \"1440\": \"cover-dark@1440.jpg\"\n },\n png: {\n \"768\": \"cover-dark@768.png\",\n \"1024\": \"cover-dark@1024.png\",\n \"1440\": \"cover-dark@1440.png\"\n }\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n coloniz: {\n origin: [\"coloniz.xyz\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x430d7262fb9ad2c830d793471c3a07e08afe54f9a5f0d28db48712bc918f5f\": {\n name: \"Tokenbound Sessions\",\n methods: [\n {\n name: \"Execute\",\n entrypoint: \"execute\",\n description: \"Session proxy\"\n }\n ]\n },\n \"0x56977e22ad4751ea5b3df958da3080971c7f26036127452b98c154fbea86d06\": {\n name: \"Profile Creation\",\n methods: [\n {\n name: \"Create A Coloniz Profile\",\n entrypoint: \"create_profile\",\n description: \"Create a profile on Coloniz\"\n }\n ]\n },\n \"0x5cc4644374e3f91b52cfe64937dacaec91b2d81fe2f146a860ab5b3bb751ce8\": {\n name: \"Handles Minting\",\n methods: [\n {\n name: \"Mint Handle\",\n entrypoint: \"mint_handle\",\n description: \"Mint Coloniz Profile Handle\"\n }\n ]\n },\n \"0x79914426e3cc5336c479ee87770380ceeda4b60496657e70c3ee7d57a992226\": {\n name: \"Handle Registry\",\n methods: [\n {\n name: \"Link Handle\",\n entrypoint: \"link\",\n description: \"Link handle to Coloniz Profile\"\n }\n ]\n }\n },\n messages: [\n {\n name: \"Sign in to Coloniz\",\n description: \"Sign the message to login to Coloniz\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n Signin: [\n {\n name: \"content\",\n type: \"string\"\n },\n {\n name: \"nonce\",\n type: \"string\"\n },\n {\n name: \"timestamp\",\n type: \"string\"\n }\n ]\n },\n primaryType: \"Signin\",\n domain: {\n name: \"Coloniz\",\n version: \"1\",\n revision: \"1\",\n chainId: \"SN_MAIN\"\n }\n }\n ]\n }\n }\n },\n theme: {\n colors: {\n primary: \"#4285F4\"\n },\n cover: \"https://static.cartridge.gg/presets/coloniz/cover.png\",\n icon: \"https://static.cartridge.gg/presets/coloniz/icon.png\",\n name: \"Coloniz\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n credit: {\n origin: \"*\",\n theme: {\n name: \"Credit\",\n icon: \"https://static.cartridge.gg/presets/credit/icon.svg\",\n cover: \"https://static.cartridge.gg/presets/credit/cover.png\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n \"dark-shuffle\": {\n origin: [\"darkshuffle.io\", \"darkshuffle.dev\"],\n theme: {\n colors: {\n primary: \"#F59100\"\n },\n cover: \"https://static.cartridge.gg/presets/dark-shuffle/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dark-shuffle/icon.svg\",\n name: \"Dark Shuffle\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n },\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x051Fea4450Da9D6aeE758BDEbA88B2f665bCbf549D2C61421AA724E9AC0Ced8F\": {\n name: \"VRF Provider\",\n description: \"Provides verifiable random functions\",\n methods: [\n {\n name: \"Request Random\",\n description: \"Request a random number\",\n entrypoint: \"request_random\"\n }\n ]\n },\n \"0x0444834e7b71749832f0db8c64f17ed1c3af8462c1682c10dcd6068b1c57494b\": {\n name: \"game_systems\",\n description: \"Game mechanics\",\n methods: [\n {\n entrypoint: \"mint\"\n },\n {\n entrypoint: \"start_game\"\n },\n {\n entrypoint: \"pick_card\"\n },\n {\n entrypoint: \"generate_tree\"\n },\n {\n entrypoint: \"select_node\"\n }\n ]\n },\n \"0x06633dc0c8e3956fd8d87f68e5a4324cb20270b442a532f4d4179d85c389b324\": {\n name: \"battle_systems\",\n description: \"Battle mechanics\",\n methods: [\n {\n entrypoint: \"battle_actions\"\n }\n ]\n }\n }\n }\n }\n }\n },\n dominion: {\n origin: \"https://dominion.fun\",\n theme: {\n colors: {\n primary: \"#19cfff\"\n },\n cover: \"https://static.cartridge.gg/presets/dominion/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dominion/icon.svg\",\n name: \"Dominion\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n \"dope-wars\": {\n origin: \"dopewars.game\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x051Fea4450Da9D6aeE758BDEbA88B2f665bCbf549D2C61421AA724E9AC0Ced8F\": {\n name: \"VRF Provider\",\n description: \"Provides verifiable random functions\",\n methods: [\n {\n name: \"Request Random\",\n description: \"Request a random number\",\n entrypoint: \"request_random\"\n }\n ]\n },\n \"0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113\": {\n name: \"Paper Token\",\n description: \"Manages paper approvals\",\n methods: [\n {\n name: \"Approve\",\n description: \"Approve paper usage\",\n entrypoint: \"approve\"\n }\n ]\n },\n \"0x044a23BbfE03FFe90D3C23Fb6e5A8AD0341036C039363DfA6F3513278Aa51fCA\": {\n name: \"Game Contract\",\n description: \"Core game mechanics\",\n methods: [\n {\n name: \"Create Game\",\n description: \"Start a new game\",\n entrypoint: \"create_game\"\n },\n {\n name: \"Travel\",\n description: \"Travel to a new location\",\n entrypoint: \"travel\"\n },\n {\n name: \"Decide\",\n description: \"Make a game decision\",\n entrypoint: \"decide\"\n },\n {\n name: \"End Game\",\n description: \"End the current game\",\n entrypoint: \"end_game\"\n }\n ]\n },\n \"0x0412445e644070C69fEa16b964cC81Cd6dEBF6A4DBf683E2E9686a45ad088de8\": {\n name: \"Laundromat Contract\",\n description: \"Manages game scoring and laundering\",\n methods: [\n {\n name: \"Register Score\",\n description: \"Register a game score\",\n entrypoint: \"register_score\"\n },\n {\n name: \"Claim\",\n description: \"Claim rewards\",\n entrypoint: \"claim\"\n },\n {\n name: \"Launder\",\n description: \"Launder resources\",\n entrypoint: \"launder\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#11ED83\"\n },\n cover: \"https://static.cartridge.gg/presets/dope-wars/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dope-wars/icon.png\",\n name: \"Dope Wars\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n dragark: {\n origin: [\"*.dragark.net\", \"dragark.net\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x05553fcb6da57decacce3306d8e0b3bf65b656dceda96c90ba55bde8980253ce\": {\n name: \"Achievement Systems\",\n description: \"Allows you to interact with achievement features.\",\n methods: [\n {\n name: \"Claim Achievement Reward\",\n description: \"A method to claim your achievement reward.\",\n entrypoint: \"claim_achievement_reward\"\n }\n ]\n },\n \"0x059ffaee1d7068332ea8f084a9685b99a5c2a74197ef99e093a10fa25f887402\": {\n name: \"Dragon Systems\",\n description: \"Allows you to interact with dragon features.\",\n methods: [\n {\n name: \"Activate Dragon\",\n description: \"A method to activate the Dragark NFT into the game.\",\n entrypoint: \"activate_dragon\"\n },\n {\n name: \"Deactivate Dragon\",\n description: \"A method to deactivate Dragark NFT out of the game.\",\n entrypoint: \"deactivate_dragon\"\n },\n {\n name: \"Upgrade Dragon\",\n description: \"A method to upgrade the Dragark's level.\",\n entrypoint: \"upgrade_dragon\"\n }\n ]\n },\n \"0x0760d029c7b49069ece425285afb592152da1fff59038e697a5554f1b94150f2\": {\n name: \"Island Systems\",\n description: \"Allows you to interact with island features.\",\n methods: [\n {\n name: \"Claim Resources\",\n description: \"A method to claim the island's rescources.\",\n entrypoint: \"claim_resources\"\n },\n {\n name: \"Claim Resources Islands\",\n description: \"A method to claim rescources on multiple islands.\",\n entrypoint: \"claim_resources_islands\"\n }\n ]\n },\n \"0x000ccb9e596c7d3298b670d91b6c3ed305aeed3eb1335d702265f53f1d0ad68a\": {\n name: \"Journey Systems\",\n description: \"Allows you to interact with journey features.\",\n methods: [\n {\n name: \"Start Journey\",\n description: \"A method to start a new journey to other island.\",\n entrypoint: \"start_journey\"\n },\n {\n name: \"Finish Journey\",\n description: \"A method to finish a started journey.\",\n entrypoint: \"finish_journey\"\n }\n ]\n },\n \"0x0002d12498d7b7f5e4d57a9895f8684fa58f4edb06ba6edb879723d8acb16507\": {\n name: \"Map Systems\",\n description: \"Allows you to interact with map features.\",\n methods: [\n {\n name: \"Join Map\",\n description: \"A method to join the map.\",\n entrypoint: \"join_map\"\n }\n ]\n },\n \"0x01ba78267fd97db89b8ac0316ce0a2d71aaef87ad4f300e5468dc20232a2ff20\": {\n name: \"Mission Systems\",\n description: \"Allows you to interact with mission features.\",\n methods: [\n {\n name: \"Claim Mission Reward\",\n description: \"A method to claim your mission reward.\",\n entrypoint: \"claim_mission_reward\"\n }\n ]\n },\n \"0x063b168f01cbac52b5d2ad82696eeaddde33b38d24364523ad0a3ca400361489\": {\n name: \"Player Systems\",\n description: \"Allows you to interact with player features.\",\n methods: [\n {\n name: \"Buy Energy\",\n description: \"A method to buy energy used in scouting the map.\",\n entrypoint: \"buy_energy\"\n },\n {\n name: \"Claim Reward\",\n description: \"A method to claim your reward.\",\n entrypoint: \"claim_reward\"\n },\n {\n name: \"Upgrade Account Level\",\n description: \"A method to upgrade your account level.\",\n entrypoint: \"upgrade_account_level\"\n },\n {\n name: \"Upgrade Invitation Level\",\n description: \"A method to upgrade your invitation level.\",\n entrypoint: \"upgrade_invitation_level\"\n },\n {\n name: \"Redeem Invite Code\",\n description: \"A method to redeem invite code.\",\n entrypoint: \"redeem_invite_code\"\n },\n {\n name: \"Claim Pool Share Reward\",\n description: \"A method to claim your Pool Share reward.\",\n entrypoint: \"claim_pool_share_reward\"\n }\n ]\n },\n \"0x03284bb4684703a368db8fd538c39b30e51822dbab9ad398e66311e820318444\": {\n name: \"Scout Systems\",\n description: \"Allows you to interact with scout features.\",\n methods: [\n {\n name: \"Scout\",\n description: \"A method to scout the map.\",\n entrypoint: \"scout\"\n }\n ]\n },\n \"0x04a8b7e4106719e75653595c1e55da9ac88fbf1ae29124fca325c0537f00e908\": {\n name: \"Shield Systems\",\n description: \"Allows you to interact with shield features.\",\n methods: [\n {\n name: \"Activate Shield\",\n description: \"A method to activate a shield to protect your island.\",\n entrypoint: \"activate_shield\"\n },\n {\n name: \"Deactivate Shield\",\n description: \"A method to deactivate a shield from your island.\",\n entrypoint: \"deactivate_shield\"\n },\n {\n name: \"Buy Shield\",\n description: \"A method to buy a shield.\",\n entrypoint: \"buy_shield\"\n }\n ]\n },\n \"0x060a67334aed80a5403bd2b727337f29ccdcbf51784cc7ddb73f10ceb92e61f1\": {\n name: \"Star Shop Systems\",\n description: \"Allows you to interact with star shop features.\",\n methods: [\n {\n name: \"Buy Item Star Shop\",\n description: \"A method to buy item from the Star Shop.\",\n entrypoint: \"buy_item_star_shop\"\n }\n ]\n },\n \"0x0655a9a38cb8dd7087a206b7d885528f8994e03dd6449105ef0f068caa502d25\": {\n name: \"Treasure Hunt Systems\",\n description: \"Allows you to interact with treasure hunt features.\",\n methods: [\n {\n name: \"Insert Dragon Treasure Hunt\",\n description: \"A method to insert your Dragarks to start a new treasure hunt.\",\n entrypoint: \"insert_dragon_treasure_hunt\"\n },\n {\n name: \"End Treasure Hunt\",\n description: \"A method to end an existing treasure hunt and claim rewards.\",\n entrypoint: \"end_treasure_hunt\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#71EB34\"\n },\n cover: \"https://static.cartridge.gg/presets/dragark/cover.png\",\n icon: \"https://static.cartridge.gg/presets/dragark/icon.png\",\n name: \"Dragark\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n eternum: {\n origin: [\"eternum.realms.world\", \"empire.realms.world\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x4ed3a7c5f53c6e96186eaf1b670bd2e2a3699c08e070aedf4e5fc6ac246ddc1\": {\n name: \"Pillage\",\n description: \"Allows you to raid a structure and pillage resources\",\n methods: [\n {\n name: \"Battle Pillage\",\n description: \"Pillage a structure\",\n entrypoint: \"battle_pillage\"\n }\n ]\n },\n \"0x2620f65aa2fd72d705306ada1ee7410023a3df03da9291f1ccb744fabfebc0\": {\n name: \"Battle contract\",\n description: \"Required to engage in battles\",\n methods: [\n {\n name: \"Battle Start\",\n description: \"Start a battle\",\n entrypoint: \"battle_start\"\n },\n {\n name: \"Battle Force Start\",\n description: \"Force start a battle\",\n entrypoint: \"battle_force_start\"\n },\n {\n name: \"Battle Join\",\n description: \"Join a battle\",\n entrypoint: \"battle_join\"\n },\n {\n name: \"Battle Leave\",\n description: \"Leave a battle\",\n entrypoint: \"battle_leave\"\n },\n {\n name: \"Battle Claim\",\n description: \"Claim a structure after a battle\",\n entrypoint: \"battle_claim\"\n },\n {\n name: \"Battle Resolve\",\n description: \"Reopens the bank after battle\",\n entrypoint: \"battle_resolve\"\n }\n ]\n },\n \"0x6bf57710571fd159e71b1ed155bb0759027e416c88a06556f321c94c214e768\": {\n name: \"Leave battle contract\",\n description: \"Allows armies to leave a battle\",\n methods: [\n {\n name: \"Leave Battle\",\n description: \"Leave a battle\",\n entrypoint: \"leave_battle\"\n },\n {\n name: \"Leave Battle If Ended\",\n description: \"Leave a battle if its ended\",\n entrypoint: \"leave_battle_if_ended\"\n }\n ]\n },\n \"0x4b6a35c0c541467674ebb9640113a6d79c6f5a468796e9299b8e484a770032a\": {\n name: \"Building contract\",\n description: \"Allows to manage buildings\",\n methods: [\n {\n name: \"Create\",\n description: \"Create a building\",\n entrypoint: \"create\"\n },\n {\n name: \"Pause Production\",\n description: \"Pause the production of a building\",\n entrypoint: \"pause_production\"\n },\n {\n name: \"Resume Production\",\n description: \"Resume production of a building\",\n entrypoint: \"resume_production\"\n },\n {\n name: \"Destroy a building\",\n description: \"Destroy a building\",\n entrypoint: \"destroy\"\n }\n ]\n },\n \"0x57d514154bb4dc319539d4e338312a41c248fb6a5122f82b2f2e11ddd3e67e4\": {\n name: \"Guild contract\",\n description: \"Allows guild utilities\",\n methods: [\n {\n name: \"Create Guild\",\n description: \"Creates a new guild\",\n entrypoint: \"create_guild\"\n },\n {\n name: \"Join Guild\",\n description: \"Join an existing guild\",\n entrypoint: \"join_guild\"\n },\n {\n name: \"Whitelist Player\",\n description: \"Add a player to the guild's whitelist\",\n entrypoint: \"whitelist_player\"\n },\n {\n name: \"Transfer Guild Ownership\",\n description: \"Transfer ownership of the guild to another player\",\n entrypoint: \"transfer_guild_ownership\"\n },\n {\n name: \"Remove Guild Member\",\n description: \"Remove a member from the guild\",\n entrypoint: \"remove_guild_member\"\n },\n {\n name: \"Remove Player From Whitelist\",\n description: \"Remove a player from the guild's whitelist\",\n entrypoint: \"remove_player_from_whitelist\"\n }\n ]\n },\n \"0x2fcc3c1691387321c2f4d6310eda7a14365bd274c1a37ed3948d2e93a56f821\": {\n name: \"Hyperstructure contract\",\n description: \"Handles the creation and management of hyperstructures\",\n methods: [\n {\n name: \"Get Points\",\n description: \"Gets your total number of points\",\n entrypoint: \"get_points\"\n },\n {\n name: \"Create\",\n description: \"Create a new hyperstructure\",\n entrypoint: \"create\"\n },\n {\n name: \"Contribute To Construction\",\n description: \"Contribute resources to hyperstructure construction\",\n entrypoint: \"contribute_to_construction\"\n },\n {\n name: \"Set Co Owners\",\n description: \"Set additional owners for the hyperstructure\",\n entrypoint: \"set_co_owners\"\n },\n {\n name: \"End Game\",\n description: \"Terminates the current game season once you've reached enough points\",\n entrypoint: \"end_game\"\n },\n {\n name: \"Set Access\",\n description: \"Configure access permissions for contributions to the hyperstructure\",\n entrypoint: \"set_access\"\n }\n ]\n },\n \"0xa052c5ca082356bcc8457f0f805eaf18f97d0fdddde3f90f5b238923859ed4\": {\n name: \"AMM liquidity contract\",\n description: \"Manages liquidity for the Automated Market Maker\",\n methods: [\n {\n name: \"Add\",\n description: \"Add liquidity to the pool\",\n entrypoint: \"add\"\n },\n {\n name: \"Remove\",\n description: \"Remove liquidity from the pool\",\n entrypoint: \"remove\"\n }\n ]\n },\n \"0x4a212c52c4035bc9bd170125216604f406dcd75b41be11d3b4d89047366d84d\": {\n name: \"Exploration contract\",\n description: \"Allows you to move to unexplored hexes on the map\",\n methods: [\n {\n name: \"Explore\",\n description: \"Explore an uncharted hex on the game map\",\n entrypoint: \"explore\"\n }\n ]\n },\n \"0x7e3bae0e253a0131063b63ee4d7b27b50329c617ae88b82d529a70f1a11c63\": {\n name: \"Naming contract\",\n description: \"Manages entity naming in the game\",\n methods: [\n {\n name: \"Set Entity Name\",\n description: \"Assign a custom name to a game entity\",\n entrypoint: \"set_entity_name\"\n },\n {\n name: \"Set Address Name\",\n description: \"Assign a custom name to a user's address\",\n entrypoint: \"set_address_name\"\n }\n ]\n },\n \"0x1b480f620ea35431ab43dba634795b14f547ef3e77370db6f0a31f2fdc21d86\": {\n name: \"Realms contract\",\n description: \"Manages realm-related actions\",\n methods: [\n {\n name: \"Create a realm\",\n description: \"Create a new realm\",\n entrypoint: \"create\"\n },\n {\n name: \"Upgrade Level\",\n description: \"Upgrade the level of a realm\",\n entrypoint: \"upgrade_level\"\n },\n {\n name: \"Quest Claim\",\n description: \"Claim rewards from completed quests\",\n entrypoint: \"quest_claim\"\n }\n ]\n },\n \"0x691a60b709ca5c1c5ff86824831f84deb26f0f5d07d70c0f807eab48110d2f6\": {\n name: \"Resource bridge contract\",\n description: \"Manages bridge transfers between L2 and Eternum\",\n methods: [\n {\n name: \"Deposit Initial\",\n description: \"Initial deposit of resources for bridge transfer\",\n entrypoint: \"deposit_initial\"\n },\n {\n name: \"Deposit\",\n description: \"Deposit additional resources for bridge transfer\",\n entrypoint: \"deposit\"\n },\n {\n name: \"Start Withdraw\",\n description: \"Initiate a withdrawal process\",\n entrypoint: \"start_withdraw\"\n },\n {\n name: \"Finish Withdraw\",\n description: \"Finalize a withdrawal process\",\n entrypoint: \"finish_withdraw\"\n }\n ]\n },\n \"0x42c0303a2119a9e20daa60e83c48221cdf1bb2a4c009bab031d1cd3555a127e\": {\n name: \"Resource contract\",\n description: \"In-game resource management\",\n methods: [\n {\n name: \"Approve\",\n description: \"Approve resource transfer\",\n entrypoint: \"approve\"\n },\n {\n name: \"Send\",\n description: \"Send resources to another entity\",\n entrypoint: \"send\"\n },\n {\n name: \"Pickup\",\n description: \"Collect available resources after approval\",\n entrypoint: \"pickup\"\n }\n ]\n },\n \"0x4f92a1d00d3aec8cece60fc2d0fc236fe1d95c54ff0ceb2f393fbc7e0863d8e\": {\n name: \"AMM swap contract\",\n description: \"Handles token swaps in the Automated Market Maker\",\n methods: [\n {\n name: \"Buy\",\n description: \"Purchase tokens from the liquidity pool\",\n entrypoint: \"buy\"\n },\n {\n name: \"Sell\",\n description: \"Sell tokens to the liquidity pool\",\n entrypoint: \"sell\"\n }\n ]\n },\n \"0x7e2b1334398fafbe640f34bacae99b649d633417960ee397b6a8fb117fec819\": {\n name: \"Market contract\",\n description: \"Manages trading orders in the in-game market\",\n methods: [\n {\n name: \"Create Order\",\n description: \"Create a new trading order\",\n entrypoint: \"create_order\"\n },\n {\n name: \"Accept Order\",\n description: \"Accept a trading order\",\n entrypoint: \"accept_order\"\n },\n {\n name: \"Accept Partial Order\",\n description: \"Accept a partial trading order\",\n entrypoint: \"accept_partial_order\"\n },\n {\n name: \"Cancel Order\",\n description: \"Cancel a trading order\",\n entrypoint: \"cancel_order\"\n }\n ]\n },\n \"0x4069c2be57f08fef9f31afc85a5b4c03c208ebdb278b9d853606caa7a9cbee6\": {\n name: \"Map travel contract\",\n description: \"Manages player movement across the game map\",\n methods: [\n {\n name: \"Travel Hex\",\n description: \"Move to a specific hex on the map\",\n entrypoint: \"travel_hex\"\n }\n ]\n },\n \"0x26be0ed574aa9ee6f73b53b12f0a199ddbf4ac697470316cdb3d9d1f5680cab\": {\n name: \"Army contract\",\n description: \"Manages army-related actions\",\n methods: [\n {\n name: \"Army Create\",\n description: \"Create a new army\",\n entrypoint: \"army_create\"\n },\n {\n name: \"Army Delete\",\n description: \"Delete an existing army\",\n entrypoint: \"army_delete\"\n },\n {\n name: \"Army Buy Troops\",\n description: \"Buy troops for an army\",\n entrypoint: \"army_buy_troops\"\n },\n {\n name: \"Army Merge Troops\",\n description: \"Merge troops from multiple armies\",\n entrypoint: \"army_merge_troops\"\n }\n ]\n },\n \"0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f\": {\n name: \"VRF Provider\",\n description: \"Verifiable Random Function contract, allows randomness in the game\",\n methods: [\n {\n name: \"Request Random\",\n description: \"Allows requesting random numbers from the VRF provider\",\n entrypoint: \"request_random\"\n }\n ]\n },\n \"0x057675b9c0bd62b096a2e15502a37b290fa766ead21c33eda42993e48a714b80\": {\n name: \"Season pass ERC20 contract\",\n description: \"Manages the season passes\",\n methods: [\n {\n name: \"Approve for all\",\n description: \"Approves transfer of season pass\",\n entrypoint: \"set_approval_for_all\"\n }\n ]\n },\n \"0x4b5e65a9617c7ba3c7ea64324ff4338a400adb1a3cfe903b3f8b647cbb59fb7\": {\n name: \"Season Systems\",\n description: \"Register and claim\",\n methods: [\n {\n name: \"Register\",\n description: \"Registers to leaderboard\",\n entrypoint: \"register_to_leaderboard\"\n },\n {\n name: \"Claim\",\n description: \"Claim\",\n entrypoint: \"claim_leaderboard_rewards\"\n }\n ]\n }\n },\n messages: [\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"s0_eternum-Message\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"channel\",\n type: \"shortstring\"\n },\n {\n name: \"content\",\n type: \"string\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n },\n {\n name: \"salt\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"s0_eternum-Message\",\n domain: {\n name: \"Eternum\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n }\n ]\n }\n }\n },\n theme: {\n name: \"Eternum\",\n icon: \"https://static.cartridge.gg/presets/eternum/icon.svg\",\n cover: \"https://static.cartridge.gg/presets/eternum/cover.png\",\n colors: {\n primary: \"#dc8b07\"\n },\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n flippyflop: {\n origin: \"flippyflop.gg\",\n theme: {\n colors: {\n primary: \"#F38332\"\n },\n cover: \"https://static.cartridge.gg/presets/flippyflop/cover.png\",\n icon: \"https://static.cartridge.gg/presets/flippyflop/icon.png\",\n name: \"FlippyFlop\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"force-prime\": {\n origin: \"forceprime.io\",\n theme: {\n colors: {\n primary: \"#E1CC89\"\n },\n cover: \"https://static.cartridge.gg/presets/force-prime/cover.png\",\n icon: \"https://static.cartridge.gg/presets/force-prime/icon.png\",\n name: \"Force Prime\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"jokers-of-neon\": {\n origin: \"jokersofneon.com\",\n theme: {\n colors: {\n primary: \"#A144B2\"\n },\n cover: \"https://static.cartridge.gg/presets/jokers-of-neon/cover.png\",\n icon: \"https://static.cartridge.gg/presets/jokers-of-neon/icon.png\",\n name: \"Jokers of Neon\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"loot-survivor\": {\n origin: \"lootsurvivor.io\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x0305f26ad19e0a10715d9f3137573d3a543de7b707967cd85d11234d6ec0fb7e\": {\n methods: [\n {\n entrypoint: \"attack\"\n },\n {\n entrypoint: \"drop\"\n },\n {\n entrypoint: \"equip\"\n },\n {\n entrypoint: \"explore\"\n },\n {\n entrypoint: \"flee\"\n },\n {\n entrypoint: \"new_game\"\n },\n {\n entrypoint: \"transfer_from\"\n },\n {\n entrypoint: \"upgrade\"\n }\n ]\n },\n \"0x3347382d530ff6acb9283ac1d78471187aae8a4690e9316bb4e3c3365ff7a86\": {\n methods: [\n {\n entrypoint: \"enter_tournament\"\n },\n {\n entrypoint: \"start_tournament\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#33FF33\"\n },\n cover: \"https://static.cartridge.gg/presets/loot-survivor/cover.png\",\n icon: \"https://static.cartridge.gg/presets/loot-survivor/icon.png\",\n name: \"Loot Survivor\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n metacube: {\n origin: [\"*.metacube.games\", \"metacube.games\"],\n theme: {\n colors: {\n primary: \"#11ffbb\"\n },\n cover: \"https://static.cartridge.gg/presets/metacube/cover.png\",\n icon: \"https://static.cartridge.gg/presets/metacube/icon.png\",\n name: \"Metacube\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"metal-slug\": {\n origin: \"https://metalslug.starkarcade.com/\",\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x6aa878dfaa2710b66f26c02e52cbcc8adddd0c3e9b0d766fb045c8250490be0\": {\n name: \"Metal Slug Systems\",\n description: \"Allows you to interact with metal slug features.\",\n methods: [\n {\n name: \"Claim end match reward\",\n description: \"A method to claim reward after finishing a match.\",\n entrypoint: \"claim_end_match_reward\"\n },\n {\n name: \"Claim Points\",\n description: \"A method to claim points after finishing suvival match.\",\n entrypoint: \"claim_points\"\n },\n {\n name: \"Graft Treasure Chest\",\n description: \"A method to graft a treasure chest after collect enough materials.\",\n entrypoint: \"graft_treasure_chest\"\n },\n {\n name: \"Open Treasure Chest\",\n description: \"A method to open a treasure chest.\",\n entrypoint: \"open_treasure_chest\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#C00F0C\"\n },\n cover: \"https://static.cartridge.gg/presets/metal-slug/cover.png\",\n icon: \"https://static.cartridge.gg/presets/metal-slug/icon.png\",\n name: \"Dragark\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n nums: {\n origin: [\"*.nums.gg\", \"nums.gg\"],\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x07ccfbc43c109efd466638defa52702382ace922051d35a0554b5ccd02a8f155\": {\n name: \"Game Actions\",\n methods: [\n {\n name: \"Create Game\",\n entrypoint: \"create_game\",\n description: \"Creates a new game\"\n },\n {\n name: \"Set Slot\",\n entrypoint: \"set_slot\",\n description: \"Sets one slot for the game\"\n }\n ]\n },\n \"0x00ea44dd8e971d3af9f99568577bf14b0a80a7f7763fa6281840ab68a8a53ba9\": {\n name: \"Claim Actions\",\n methods: [\n {\n name: \"Claim Appchain Reward\",\n entrypoint: \"claim_reward\",\n description: \"Claims token rewards on Appchain\"\n }\n ]\n },\n \"0x03ee42961dc151d740df95c44b929abe85cf66e8444e0279252dd99b055c64b0\": {\n name: \"Rewards Claim\",\n methods: [\n {\n name: \"Consume Reward on Starknet\",\n entrypoint: \"consume_claim_reward\",\n description: \"Consumes a claim reward message on Starknet\"\n }\n ]\n },\n \"0x7ed472bdde3b19a5cf2334ad0f368426272f477938270b1b04259f159bdc0e2\": {\n name: \"VRF Provider\",\n methods: [\n {\n name: \"Request Random\",\n entrypoint: \"request_random\",\n description: \"Requests a random number from the VRF contract\"\n }\n ]\n },\n \"0x4d776373427434a22f7d60d0f7fe0e336fd830edf4294acec33d9f2e1275327\": {\n name: \"Social\",\n description: \"Social contract to manage your social activities\",\n methods: [\n {\n name: \"pin\",\n entrypoint: \"pin\",\n description: \"Pin an achievement.\"\n },\n {\n name: \"unpin\",\n entrypoint: \"unpin\",\n description: \"Unpin an achievement.\"\n }\n ]\n }\n }\n }\n }\n },\n theme: {\n colors: {\n primary: \"#9E84E9\"\n },\n cover: \"https://static.cartridge.gg/presets/nums/cover.png\",\n icon: \"https://static.cartridge.gg/presets/nums/icon.png\",\n name: \"Nums\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n paved: {\n origin: \"paved.gg\",\n theme: {\n colors: {\n primary: \"#B0CAF8\"\n },\n cover: \"https://static.cartridge.gg/presets/paved/cover.png\",\n icon: \"https://static.cartridge.gg/presets/paved/icon.svg\",\n name: \"Paved\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n pistols: {\n origin: [\"*.pistols.gg\", \"*.underware.gg\"],\n theme: {\n colors: {\n primary: \"#EF9758\"\n },\n cover: \"https://static.cartridge.gg/presets/pistols/cover.png\",\n icon: \"https://static.cartridge.gg/presets/pistols/icon.png\",\n name: \"Pistols at Dawn\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n },\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x02c6a7c98a9dea8322b51018eef7be99ebedd209cebdaacb9f4c5bbf661c1cc9\": {\n description: \"Game loop contract\",\n methods: [\n {\n entrypoint: \"commit_moves\",\n description: \"Commit moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"reveal_moves\",\n description: \"Reveal moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"collect_duel\",\n description: \"Close expired duels\"\n },\n {\n entrypoint: \"clear_call_to_action\",\n description: \"Clear the required action call for a duelist\"\n }\n ]\n },\n \"0x0426c16fe76f12586718c07e47c8e4312e9fee5e7dc849a75f3c587ad9e70b4f\": {\n description: \"Bank contract\",\n methods: [\n {\n entrypoint: \"sponsor_duelists\",\n description: \"Sponsor duelist starter packs with $LORDS\"\n },\n {\n entrypoint: \"sponsor_season\",\n description: \"Sponsor the current season with $LORDS\"\n },\n {\n entrypoint: \"sponsor_tournament\",\n description: \"Sponsor a tournament with $LORDS\"\n },\n {\n entrypoint: \"collect_season\",\n description: \"Close the current season and start the next one\"\n }\n ]\n },\n \"0x071333ac75b7d5ba89a2d0c2b67d5b955258a4d46eb42f3428da6137bbbfdfd9\": {\n description: \"Packs ERC721 contract\",\n methods: [\n {\n entrypoint: \"claim_starter_pack\",\n description: \"Claim the starter pack, mint Duelists\"\n },\n {\n entrypoint: \"claim_gift\",\n description: \"Claim gift pack, if available\"\n },\n {\n entrypoint: \"purchase\",\n description: \"Purchase a closed pack\"\n },\n {\n entrypoint: \"open\",\n description: \"Open a pack, mint its contents\"\n }\n ]\n },\n \"0x02e9c711b1a7e2784570b1bda5082a92606044e836ba392d2b977d280fb74b3c\": {\n description: \"Duel ERC721 contract\",\n methods: [\n {\n entrypoint: \"create_duel\",\n description: \"Create a Duel, mint its token\"\n },\n {\n entrypoint: \"reply_duel\",\n description: \"Reply to a Duel (accept or reject)\"\n }\n ]\n },\n \"0x07aaa9866750a0db82a54ba8674c38620fa2f967d2fbb31133def48e0527c87f\": {\n description: \"Duelist ERC721 contract\",\n methods: [\n {\n entrypoint: \"poke\",\n description: \"Reactivates an inactive Duelist\"\n },\n {\n entrypoint: \"sacrifice\",\n description: \"Sacrifices a Duelist\"\n },\n {\n entrypoint: \"memorialize\",\n description: \"Memorializes a Duelist\"\n }\n ]\n },\n \"0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f\": {\n description: \"Cartridge VRF Provider\",\n methods: [\n {\n entrypoint: \"request_random\",\n description: \"Request a random number\"\n }\n ]\n }\n },\n messages: [\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n Message: [\n {\n name: \"duelId\",\n type: \"felt\"\n },\n {\n name: \"duelistId\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"Message\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n },\n description: \"Verify the identity of a player in a Duel\"\n },\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerOnline\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"pistols-PlayerOnline\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n },\n name: \"PlayerOnline\",\n description: \"Notify when a player is online\"\n },\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerBookmark\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_address\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_id\",\n type: \"u128\"\n },\n {\n name: \"enabled\",\n type: \"bool\"\n }\n ]\n },\n primaryType: \"pistols-PlayerBookmark\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n },\n name: \"PlayerBookmark\",\n description: \"Notify when a player follows another player or token\"\n }\n ]\n }\n },\n SN_SEPOLIA: {\n policies: {\n contracts: {\n \"0x02c6a7c98a9dea8322b51018eef7be99ebedd209cebdaacb9f4c5bbf661c1cc9\": {\n description: \"Game loop contract\",\n methods: [\n {\n entrypoint: \"commit_moves\",\n description: \"Commit moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"reveal_moves\",\n description: \"Reveal moves of a Duelist in a Duel\"\n },\n {\n entrypoint: \"collect_duel\",\n description: \"Close expired duels\"\n },\n {\n entrypoint: \"clear_call_to_action\",\n description: \"Clear the required action call for a duelist\"\n }\n ]\n },\n \"0x0426c16fe76f12586718c07e47c8e4312e9fee5e7dc849a75f3c587ad9e70b4f\": {\n description: \"Bank contract\",\n methods: [\n {\n entrypoint: \"sponsor_duelists\",\n description: \"Sponsor duelist starter packs with $LORDS\"\n },\n {\n entrypoint: \"sponsor_season\",\n description: \"Sponsor the current season with $LORDS\"\n },\n {\n entrypoint: \"sponsor_tournament\",\n description: \"Sponsor a tournament with $LORDS\"\n },\n {\n entrypoint: \"collect_season\",\n description: \"Close the current season and start the next one\"\n }\n ]\n },\n \"0x071333ac75b7d5ba89a2d0c2b67d5b955258a4d46eb42f3428da6137bbbfdfd9\": {\n description: \"Packs ERC721 contract\",\n methods: [\n {\n entrypoint: \"claim_starter_pack\",\n description: \"Claim the starter pack, mint Duelists\"\n },\n {\n entrypoint: \"claim_gift\",\n description: \"Claim gift pack, if available\"\n },\n {\n entrypoint: \"purchase\",\n description: \"Purchase a closed pack\"\n },\n {\n entrypoint: \"open\",\n description: \"Open a pack, mint its contents\"\n }\n ]\n },\n \"0x02e9c711b1a7e2784570b1bda5082a92606044e836ba392d2b977d280fb74b3c\": {\n description: \"Duel ERC721 contract\",\n methods: [\n {\n entrypoint: \"create_duel\",\n description: \"Create a Duel, mint its token\"\n },\n {\n entrypoint: \"reply_duel\",\n description: \"Reply to a Duel (accept or reject)\"\n }\n ]\n },\n \"0x07aaa9866750a0db82a54ba8674c38620fa2f967d2fbb31133def48e0527c87f\": {\n description: \"Duelist ERC721 contract\",\n methods: [\n {\n entrypoint: \"poke\",\n description: \"Reactivates an inactive Duelist\"\n },\n {\n entrypoint: \"sacrifice\",\n description: \"Sacrifices a Duelist\"\n },\n {\n entrypoint: \"memorialize\",\n description: \"Memorializes a Duelist\"\n }\n ]\n },\n \"0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f\": {\n description: \"Cartridge VRF Provider\",\n methods: [\n {\n entrypoint: \"request_random\",\n description: \"Request a random number\"\n }\n ]\n }\n },\n messages: [\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n Message: [\n {\n name: \"duelId\",\n type: \"felt\"\n },\n {\n name: \"duelistId\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"Message\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_SEPOLIA\",\n revision: \"1\"\n },\n description: \"Verify the identity of a player in a Duel\"\n },\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerOnline\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"pistols-PlayerOnline\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_SEPOLIA\",\n revision: \"1\"\n },\n name: \"PlayerOnline\",\n description: \"Notify when a player is online\"\n },\n {\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n \"pistols-PlayerBookmark\": [\n {\n name: \"identity\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_address\",\n type: \"ContractAddress\"\n },\n {\n name: \"target_id\",\n type: \"u128\"\n },\n {\n name: \"enabled\",\n type: \"bool\"\n }\n ]\n },\n primaryType: \"pistols-PlayerBookmark\",\n domain: {\n name: \"Underware_gg\",\n version: \"1.0.0\",\n chainId: \"SN_SEPOLIA\",\n revision: \"1\"\n },\n name: \"PlayerBookmark\",\n description: \"Notify when a player follows another player or token\"\n }\n ]\n }\n }\n }\n },\n pixelaw: {\n origin: \"dojo.pixelaw.xyz\",\n theme: {\n colors: {\n primary: \"#7C00B1\",\n primaryForeground: \"white\"\n },\n cover: \"https://static.cartridge.gg/presets/pixelaw/cover.png\",\n icon: \"https://static.cartridge.gg/presets/pixelaw/icon.svg\",\n name: \"Pixelaw\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n ponziland: {\n origin: [\"*.ponzi.land\"],\n theme: {\n colors: {\n primary: \"#F38332\"\n },\n cover: \"https://static.cartridge.gg/presets/ponziland/cover.png\",\n icon: \"https://static.cartridge.gg/presets/ponziland/icon.svg\",\n name: \"PonziLand\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n },\n chains: {\n SN_MAIN: {\n policies: {\n contracts: {\n \"0x77eeeef469121d1761bb25efbfce7650f5c7fbf00d63cb1b778b774783b2c6\": {\n name: \"PonziLand Systems\",\n description: \"Main game contract\",\n methods: [\n {\n name: \"Bid\",\n entrypoint: \"bid\",\n description: \"Bid for auction land\"\n },\n {\n name: \"Buy\",\n entrypoint: \"buy\",\n description: \"Buy land from another player\"\n },\n {\n name: \"Claim\",\n entrypoint: \"claim\",\n description: \"Claim rewards for a single land\"\n },\n {\n name: \"Claim All\",\n entrypoint: \"claim_all\",\n description: \"Claim rewards for lands\"\n },\n {\n name: \"Increase Price\",\n entrypoint: \"increase_price\",\n description: \"Increase price of the land\"\n },\n {\n name: \"Increase Stake\",\n entrypoint: \"increase_stake\",\n description: \"Increase stake of the land\"\n },\n {\n name: \"Level Up\",\n entrypoint: \"level_up\",\n description: \"Level up the land\"\n }\n ]\n },\n \"0x524624cb89898776386140c36093d1bc4dd1654d125f0f677c9cd2b122463ff\": {\n name: \"PonziLand Auth System\",\n description: \"Contract to allow authorized players to play\",\n methods: [\n {\n name: \"Add Authorized\",\n entrypoint: \"add_authorized_with_signature\",\n description: \"Add authorized with signature\"\n }\n ]\n },\n \"0x5735fa6be5dd248350866644c0a137e571f9d637bb4db6532ddd63a95854b58\": {\n name: \"eSTRK Token\",\n description: \"eSTRK ERC20 methods\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eSTRK allowance\"\n }\n ]\n },\n \"0x415c058a41cc80e7368562564c96fc4e3c03b23e32ba07a5c8cadc262b50c3c\": {\n name: \"ePAPER Token\",\n description: \"ePAPER ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"ePAPER allowance\"\n }\n ]\n },\n \"0x4b66d22d3001daad50fb853c0c1cb3b96d1745acb295bae4a6d54b29125ed09\": {\n name: \"eLORDS Token\",\n description: \"eLORDS ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eLORDS allowance\"\n }\n ]\n },\n \"0x1920ef3c5e765454dd3f6aeb5420ef524830e0b5f9a95ec2e1b9ee2073a16d1\": {\n name: \"eBROTHER Token\",\n description: \"eBROTHER ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eBROTHER allowance\"\n }\n ]\n },\n \"0x79aba4c89e9cc3495318d2479fe93601e1188ff5d9a8823e3dc736d74bb437f\": {\n name: \"ePAL Token\",\n description: \"ePAL ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"ePAL allowance\"\n }\n ]\n },\n \"0x38217779933c147320af3239e2dd098312e3074e0898001c79939c2e676fe8c\": {\n name: \"eETH Token\",\n description: \"eETH ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eETH allowance\"\n }\n ]\n },\n \"0x4c090a1a34a3ba423e63a498ce23de7c7a4f0f1a8128fa768a09738606cbb9e\": {\n name: \"eBTC Token\",\n description: \"eBTC ERC20 approval\",\n methods: [\n {\n name: \"Approve\",\n entrypoint: \"approve\",\n description: \"eBTC allowance\"\n }\n ]\n }\n },\n messages: [\n {\n name: \"Socialink - Register\",\n description: \"Registers your controller wallet to a new Socialink account\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n register: [\n {\n name: \"username\",\n type: \"felt\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"register\",\n domain: {\n name: \"socialink\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n },\n {\n name: \"Socialink - Link\",\n description: \"Links your social account to a Socialink account\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n link: [\n {\n name: \"token\",\n type: \"string\"\n },\n {\n name: \"provider\",\n type: \"string\"\n },\n {\n name: \"nonce\",\n type: \"felt\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"link\",\n domain: {\n name: \"socialink\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n },\n {\n name: \"Socialink - Mint\",\n description: \"Confirms your selection of token for the tournament mint\",\n types: {\n StarknetDomain: [\n {\n name: \"name\",\n type: \"shortstring\"\n },\n {\n name: \"version\",\n type: \"shortstring\"\n },\n {\n name: \"chainId\",\n type: \"shortstring\"\n },\n {\n name: \"revision\",\n type: \"shortstring\"\n }\n ],\n mint: [\n {\n name: \"token\",\n type: \"string\"\n },\n {\n name: \"nonce\",\n type: \"felt\"\n },\n {\n name: \"timestamp\",\n type: \"felt\"\n }\n ]\n },\n primaryType: \"mint\",\n domain: {\n name: \"socialink\",\n version: \"1\",\n chainId: \"SN_MAIN\",\n revision: \"1\"\n }\n }\n ]\n }\n }\n }\n },\n \"realm-of-ra\": {\n origin: \"mancala.realmofra.com\",\n theme: {\n colors: {\n primary: \"#de9534\"\n },\n cover: \"https://static.cartridge.gg/presets/realm-of-ra/cover.png\",\n icon: \"https://static.cartridge.gg/presets/realm-of-ra/icon.png\",\n name: \"Realm of Ra\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"savage-summit\": {\n origin: \"savagesummit.io\",\n theme: {\n colors: {\n primary: \"#fbf7da\"\n },\n cover: \"https://static.cartridge.gg/presets/savage-summit/cover.png\",\n icon: \"https://static.cartridge.gg/presets/savage-summit/icon.png\",\n name: \"Savage Summit\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n \"tale-weaver\": {\n origin: \"\",\n theme: {\n colors: {\n primary: \"#fce377\"\n },\n cover: \"https://static.cartridge.gg/presets/tale-weaver/cover.png\",\n icon: \"https://static.cartridge.gg/presets/tale-weaver/icon.png\",\n name: \"Tale Weaver\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n wardens: {\n origin: \"app.wardens.xyz\",\n theme: {\n colors: {\n primary: \"#f7ac18\"\n },\n cover: \"https://static.cartridge.gg/presets/wardens/cover.jpg\",\n icon: \"https://static.cartridge.gg/presets/wardens/icon.png\",\n name: \"Wardens\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n zkastle: {\n origin: \"zkastle.vercel.app\",\n theme: {\n colors: {\n primary: \"#E50D2C\"\n },\n cover: \"https://static.cartridge.gg/presets/zkastle/cover.png\",\n icon: \"https://static.cartridge.gg/presets/zkastle/icon.svg\",\n name: \"zKastle\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n },\n svg: {\n \"16\": \"icon@16.svg\",\n \"32\": \"icon@32.svg\",\n \"64\": \"icon@64.svg\",\n \"128\": \"icon@128.svg\",\n \"256\": \"icon@256.svg\"\n }\n }\n }\n },\n zktt: {\n origin: \"zktable.top\",\n theme: {\n colors: {\n primary: \"#FFFFFF\"\n },\n cover: \"https://static.cartridge.gg/presets/zktt/cover.png\",\n icon: \"https://static.cartridge.gg/presets/zktt/icon.png\",\n name: \"zKTT\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n },\n zkube: {\n origin: \"app.zkube.xyz\",\n theme: {\n colors: {\n primary: \"#5bc3e6\"\n },\n cover: \"https://static.cartridge.gg/presets/zkube/cover.png\",\n icon: \"https://static.cartridge.gg/presets/zkube/icon.png\",\n name: \"zKube\",\n optimizedCover: {\n webp: {\n \"768\": \"cover@768.webp\",\n \"1024\": \"cover@1024.webp\",\n \"1440\": \"cover@1440.webp\"\n },\n jpg: {\n \"768\": \"cover@768.jpg\",\n \"1024\": \"cover@1024.jpg\",\n \"1440\": \"cover@1440.jpg\"\n },\n png: {\n \"768\": \"cover@768.png\",\n \"1024\": \"cover@1024.png\",\n \"1440\": \"cover@1440.png\"\n }\n },\n optimizedIcon: {\n webp: {\n \"16\": \"icon@16.webp\",\n \"32\": \"icon@32.webp\",\n \"64\": \"icon@64.webp\",\n \"128\": \"icon@128.webp\",\n \"256\": \"icon@256.webp\"\n },\n png: {\n \"16\": \"icon@16.png\",\n \"32\": \"icon@32.png\",\n \"64\": \"icon@64.png\",\n \"128\": \"icon@128.png\",\n \"256\": \"icon@256.png\"\n }\n }\n }\n }\n};\n\n// src/generated/erc20-metadata.ts\nvar metadata = [\n {\n name: \"Wrapped BTC\",\n symbol: \"WBTC\",\n decimals: 8,\n l2_token_address: \"0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac\",\n sort_order: 0,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7dcb2db2-a7a7-44af-660b-8262e057a100/logo\"\n },\n {\n name: \"USD Coin\",\n symbol: \"USDC\",\n decimals: 6,\n l2_token_address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n sort_order: 5,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e5aaa970-a998-47e8-bd43-4a3b56b87200/logo\"\n },\n {\n name: \"LUSD Stablecoin\",\n symbol: \"LUSD\",\n decimals: 18,\n l2_token_address: \"0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dc0ae733-5498-4afa-f475-48dba677aa00/logo\"\n },\n {\n name: \"Tether USD\",\n symbol: \"USDT\",\n decimals: 6,\n l2_token_address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c8a721d1-07c3-46e4-ab4e-523977c30b00/logo\"\n },\n {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n l2_token_address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n sort_order: 3,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e07829b7-0382-4e03-7ecd-a478c5aa9f00/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAIv0\",\n decimals: 18,\n l2_token_address: \"0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3\",\n sort_order: 4,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Dai Stablecoin\",\n symbol: \"DAI\",\n decimals: 18,\n l2_token_address: \"0x05574eb6b8789a91466f902c380d978e472db68170ff82a5b650b95a58ddf4ad\",\n sort_order: 4,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo\"\n },\n {\n name: \"Legacy Starknet Wrapped Staked Ether\",\n symbol: \"wstETH-legacy\",\n decimals: 18,\n l2_token_address: \"0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/26162dcc-29c2-4f5e-3acd-5e6be1f07a00/logo\"\n },\n {\n name: \"Wrapped Staked Ether\",\n symbol: \"wstETH\",\n decimals: 18,\n l2_token_address: \"0x0057912720381af14b0e5c87aa4718ed5e527eab60b3801ebf702ab09139e38b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dbbcbdea-1a92-437d-3701-4a5ee129d000/logo\"\n },\n {\n name: \"Rocket Pool ETH\",\n symbol: \"rETH\",\n decimals: 18,\n l2_token_address: \"0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c9f2d6fe-fbc6-4384-0990-923dfcb7a200/logo\"\n },\n {\n name: \"LORDS\",\n symbol: \"LORDS\",\n decimals: 18,\n l2_token_address: \"0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49\",\n sort_order: 1,\n total_supply: 509e5,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a3bfe959-50c4-4f89-0aef-b19207d82a00/logo\"\n },\n {\n name: \"R Stablecoin\",\n symbol: \"R\",\n decimals: 18,\n l2_token_address: \"0x01fa2fb85f624600112040e1f3a848f53a37ed5a7385810063d5fe6887280333\",\n sort_order: 3,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/77612e4e-f7ee-4dba-2066-af321843ef00/logo\"\n },\n {\n name: \"Frax\",\n symbol: \"FRAX\",\n decimals: 18,\n l2_token_address: \"0x009c6b4fb13dfaa025c1383ed6190af8ed8cbb09d9588a3bb020feb152442406\",\n sort_order: 1,\n total_supply: 649462235,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/eeaf0779-e492-474c-ef19-b27843525600/logo\"\n },\n {\n name: \"Frax Share\",\n symbol: \"FXS\",\n decimals: 18,\n l2_token_address: \"0x0058efd0e73c33a848ffaa88738d128ebf0af98ea78cf3c14dc757bb02d39ffb\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/98bea621-1e4f-4d63-9689-bdaef0d56500/logo\"\n },\n {\n name: \"Staked Frax Ether\",\n symbol: \"sfrxETH\",\n decimals: 18,\n l2_token_address: \"0x04578fffc279e61b5cb0267a5f8e24b6089d40f93158fbbad2cb23b8622c9233\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cd6fe18a-25db-4de9-758a-daf3b364ea00/logo\"\n },\n {\n name: \"Uniswap\",\n symbol: \"UNI\",\n decimals: 18,\n l2_token_address: \"0x049210ffc442172463f3177147c1aeaa36c51d152c1b0630f2364c300d4f48ee\",\n sort_order: 1,\n total_supply: 1e9,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/361b018e-bd53-4019-27c8-7cf8d9031b00/logo\"\n },\n {\n name: \"Paper\",\n symbol: \"PAPER\",\n decimals: 18,\n l2_token_address: \"0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/811f019a-0461-4cff-6c1e-442102863f00/logo\"\n },\n {\n name: \"StarkPepe\",\n symbol: \"xSPEPE\",\n decimals: 18,\n l2_token_address: \"0x06f15ec4b6ff0b7f7a216c4b2ccdefc96cbf114d6242292ca82971592f62273b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n disabled: true\n },\n {\n name: \"StarkNet Token\",\n symbol: \"STRK\",\n decimals: 18,\n l2_token_address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n sort_order: 2,\n total_supply: 1e10,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1b126320-367c-48ed-cf5a-ba7580e49600/logo\"\n },\n {\n name: \"zkLend Token\",\n symbol: \"ZEND\",\n decimals: 18,\n l2_token_address: \"0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/95515b0e-1230-4158-10f1-56888f613c00/logo\"\n },\n {\n name: \"Ekubo Protocol\",\n symbol: \"EKUBO\",\n decimals: 18,\n l2_token_address: \"0x075afe6402ad5a5c20dd25e10ec3b3986acaa647b77e4ae24b0cbc9a54a27a87\",\n sort_order: 1,\n total_supply: 1e7,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/634d9c36-2f0b-4781-93e6-72d701b5af00/logo\"\n },\n {\n name: \"SOCKS\",\n symbol: \"SOCKS\",\n decimals: 18,\n l2_token_address: \"0x023ed2ba4fb5709302c5dfd739fa7613359042f143286c115b6c7f7dc2601015\",\n sort_order: 1,\n total_supply: 1e11,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2db5a2a6-c98e-4b80-35e0-31b489132100/logo\"\n },\n {\n name: \"Nostra\",\n symbol: \"NSTR\",\n decimals: 18,\n l2_token_address: \"0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a45c2224-17a7-4269-ea7e-3924e9755800/logo\"\n },\n {\n name: \"Carmine\",\n symbol: \"CRM\",\n decimals: 18,\n l2_token_address: \"0x51c4b1fe3bf6774b87ad0b15ef5d1472759076e42944fff9b9f641ff13e5bbe\",\n sort_order: 1,\n total_supply: 1e8,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6ab817f1-8075-4a94-6e14-f112f1f89d00/logo\"\n },\n {\n name: \"Cash\",\n symbol: \"CASH\",\n decimals: 18,\n l2_token_address: \"0x498edfaf50ca5855666a700c25dd629d577eb9afccdf3b5977aec79aee55ada\",\n sort_order: 3,\n total_supply: null,\n hidden: false,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bd6d156-f509-4b51-5dfc-3ee566143600/logo\"\n },\n {\n name: \"Nums\",\n symbol: \"NUMS\",\n decimals: 18,\n l2_token_address: \"0xe5f10eddc01699dc899a30dbc3c9858148fa4aa0a47c0ffd85f887ffc4653e\",\n sort_order: 1,\n total_supply: 1,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/90868d05-cb75-4c42-278c-5a540db2cf00/logo\"\n },\n {\n name: \"Flip\",\n symbol: \"FLIP\",\n decimals: 18,\n l2_token_address: \"0x01bfe97d729138fc7c2d93c77d6d1d8a24708d5060608017d9b384adf38f04c7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/275f0fa8-a691-471c-ace6-0eb0315dde00/logo\"\n },\n {\n name: \"Eternum Stone\",\n symbol: \"STONE\",\n decimals: 18,\n l2_token_address: \"0x439a1c010e3e1bb2d43d43411000893c0042bd88f6c701611a0ea914d426da4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/932e7f83-a4c2-40f0-3048-35af3b194100/logo\"\n },\n {\n name: \"Eternum Coal\",\n symbol: \"COAL\",\n decimals: 18,\n l2_token_address: \"0xce635e3f241b0ae78c46a929d84a9101910188f9c4024eaa7559556503c31a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cf2ee180-06bf-4443-e3aa-724d7c28e800/logo\"\n },\n {\n name: \"Eternum Wood\",\n symbol: \"WOOD\",\n decimals: 18,\n l2_token_address: \"0x40d8907cec0f7ae9c364dfb12485a1314d84c129bf1898d2f3d4b7fcc7d44f4\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1db5f954-c1ef-447e-9f8f-05bd9f3b2b00/logo\"\n },\n {\n name: \"Eternum Copper\",\n symbol: \"COPPER\",\n decimals: 18,\n l2_token_address: \"0x66ed5c928ee027a9419ace1cbea8389885161db5572a7c5c4fef2310e9bf494\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bbcdcc9-6146-404d-9501-92a664cf3100/logo\"\n },\n {\n name: \"Eternum Ironwood\",\n symbol: \"IRONWOOD\",\n decimals: 18,\n l2_token_address: \"0x1720cf6318bff45e62acc588680ae3cd4d5f8465b1d52cb710533c9299b031a\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/5af7c03b-e4ae-4aee-eba4-a4e2160a1d00/logo\"\n },\n {\n name: \"Eternum Obsidian\",\n symbol: \"OBSIDIAN\",\n decimals: 18,\n l2_token_address: \"0x3b6448d09dcd023507376402686261f5d6739455fa02f804907b066e488da66\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8be9bc66-486b-4181-6804-725a1db8ad00/logo\"\n },\n {\n name: \"Eternum Gold\",\n symbol: \"GOLD\",\n decimals: 18,\n l2_token_address: \"0xdff9dca192609c4e86ab3be22c7ec1e968876c992d21986f3c542be97fa2f\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fb9e90f7-3c2f-4c64-7e43-c3f694f35e00/logo\"\n },\n {\n name: \"Eternum Silver\",\n symbol: \"SILVER\",\n decimals: 18,\n l2_token_address: \"0x6fe21d2d4a8a05bdb70f09c9250af9870020d5dcc35f410b4a39d6605c3e353\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e443afeb-850b-46a0-a7ba-a473306d6b00/logo\"\n },\n {\n name: \"Eternum Mithral\",\n symbol: \"MITHRAL\",\n decimals: 18,\n l2_token_address: \"0x67ba235c569c23877064b2ac6ebd4d79f32d3c00f5fab8e28a3b5700b957f6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/33dc517f-8a66-45eb-f2c5-de5388e47500/logo\"\n },\n {\n name: \"Eternum Alchemical Silver\",\n symbol: \"ALCHEMICALSILVER\",\n decimals: 18,\n l2_token_address: \"0x3956a5301e99522038a2e7dcb9c2a89bf087ffa79310ee0a508b5538efd8ddd\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3d2e0fd8-4af8-49a0-4bdb-691a4d6ef800/logo\"\n },\n {\n name: \"Eternum Cold Iron\",\n symbol: \"COLDIRON\",\n decimals: 18,\n l2_token_address: \"0x555d713e59d4ff96b7960447e9bc9e79bfdeab5b0eea74e3df81bce61cfbc77\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/878c0d8a-8e2c-4281-0896-9cbbb2ef9400/logo\"\n },\n {\n name: \"Eternum Deep Crystal\",\n symbol: \"DEEPCRYSTAL\",\n decimals: 18,\n l2_token_address: \"0x1d655ac834d38df7921074fc1588411e202b1af83307cbd996983aff52db3a8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1c2c954f-448c-476b-a4a6-19b52efe3e00/logo\"\n },\n {\n name: \"Eternum Ruby\",\n symbol: \"RUBY\",\n decimals: 18,\n l2_token_address: \"0x3d9b66720959d0e7687b898292c10e62e78626f2dba5e1909961a2ce3f86612\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6a45b34d-3bfe-4994-45b0-f2bee8abac00/logo\"\n },\n {\n name: \"Eternum Diamonds\",\n symbol: \"DIAMONDS\",\n decimals: 18,\n l2_token_address: \"0xe03ea8ae385f64754820af5c01c36abf1b8130dd6797d3fd9d430e4114e876\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/b1fa609d-8799-4754-cdea-ab69514ca700/logo\"\n },\n {\n name: \"Eternum Hartwood\",\n symbol: \"HARTWOOD\",\n decimals: 18,\n l2_token_address: \"0x5620aa7170cd66dbcbc37d03087bfe4633ffef91d3e4d97b501de906004f79b\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/27e37e85-91bd-4ee1-0552-1e0795077400/logo\"\n },\n {\n name: \"Eternum Ignium\",\n symbol: \"IGNIUM\",\n decimals: 18,\n l2_token_address: \"0x625c1f789b03ebebc7a9322366f38ebad1f693b84b2abd8cb8f5b2748b0cdd5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/58591e20-24fb-4353-417a-81d877a5a200/logo\"\n },\n {\n name: \"Eternum Twilight Quartz\",\n symbol: \"TWILIGHTQUARTZ\",\n decimals: 18,\n l2_token_address: \"0x35e24c02409c3cfe8d5646399a62c4d102bb782938d5f5180e92c9c62d3faf7\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2f8cb892-e82a-4af3-bd09-316061faec00/logo\"\n },\n {\n name: \"Eternum True Ice\",\n symbol: \"TRUEICE\",\n decimals: 18,\n l2_token_address: \"0x4485f5a6e16562e1c761cd348e63256d00389e3ddf4f5d98afe7ab44c57c481\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fe4bfc17-6553-4dc5-58d2-f452b4aa8a00/logo\"\n },\n {\n name: \"Eternum Adamantine\",\n symbol: \"ADAMANTINE\",\n decimals: 18,\n l2_token_address: \"0x367f838f85a2f5e1580d6f011e4476f581083314cff8721ba3dda9706076eed\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/13bd026b-3612-480e-0119-04cf4c505a00/logo\"\n },\n {\n name: \"Eternum Sapphire\",\n symbol: \"SAPPHIRE\",\n decimals: 18,\n l2_token_address: \"0x2f8dd022568af8f9f718aa37707a9b858529db56910633a160456838b6cbcbc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/0ebf555f-e732-4054-f8e5-55b2ed49ba00/logo\"\n },\n {\n name: \"Eternum Ethereal Silica\",\n symbol: \"ETHEREALSILICA\",\n decimals: 18,\n l2_token_address: \"0x68b6e23cbbd58a644700f55e96c83580921e9f521b6e5175396b53ba7910e7d\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f02a5b43-bfcf-408c-7d1b-fcfe68b02d00/logo\"\n },\n {\n name: \"Eternum Dragon Hide\",\n symbol: \"DRAGONHIDE\",\n decimals: 18,\n l2_token_address: \"0x3bf856515bece3c93f5061b7941b8645f817a0acab93c758b8c7b4bc0afa3c6\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e74955fc-5c8a-4dff-4882-a49a46a5a800/logo\"\n },\n {\n name: \"Eternum Ancient Fragment\",\n symbol: \"ANCIENTFRAGMENT\",\n decimals: 18,\n l2_token_address: \"0x0695b08ecdfdd828c2e6267da62f59e6d7543e690ef56a484df25c8566b332a5\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/9af855b7-4790-4390-9466-6bed4481ab00/logo\"\n },\n {\n name: \"Eternum Donkey\",\n symbol: \"DONKEY\",\n decimals: 18,\n l2_token_address: \"0x264be95a4a2ace20add68cb321acdccd2f9f8440ee1c7abd85da44ddab01085\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/20817378-a45e-4521-f464-10f6dd13c500/logo\"\n },\n {\n name: \"Eternum Knight\",\n symbol: \"KNIGHT\",\n decimals: 18,\n l2_token_address: \"0xac965f9e67164723c16735a9da8dbc9eb8e43b1bd0323591e87c056badf606\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8787ed1f-af5c-4873-c01a-55f05e999a00/logo\"\n },\n {\n name: \"Eternum Crossbowman\",\n symbol: \"CROSSBOWMAN\",\n decimals: 18,\n l2_token_address: \"0x67e4ac00a241be06ba6afc11fa2715ec7da0c42c05a67ef6ecfcfeda725aaa8\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dec7f31b-4b1d-46bb-4fca-c0253cf55a00/logo\"\n },\n {\n name: \"Eternum Paladin\",\n symbol: \"PALADIN\",\n decimals: 18,\n l2_token_address: \"0x3bc86299bee061c7c8d7546ccb62b9daf9bffc653b1508facb722c6593874bc\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7d2cd5a5-f38a-49f6-11f8-ba3b59a59e00/logo\"\n },\n {\n name: \"Eternum Wheat\",\n symbol: \"WHEAT\",\n decimals: 18,\n l2_token_address: \"0x57a3f1ee475e072ce3be41785c0e889b7295d7a0dcc22b992c5b9408dbeb280\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c338b6a8-77c4-4dd6-34f5-1af0d3fb1e00/logo\"\n },\n {\n name: \"Eternum Fish\",\n symbol: \"FISH\",\n decimals: 18,\n l2_token_address: \"0x27719173cfe10f1aa38d2aaed0a075b6077290f1e817aa3485d2b828394f4d9\",\n sort_order: 1,\n total_supply: null,\n hidden: true,\n logo_url: \"https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6deef27f-df40-4248-4e1b-ed1d79a3f000/logo\"\n },\n {\n name: \"Fools\",\n symbol: \"FOOLS\",\n decimals: 18,\n l2_token_address: \"0x068a7a07e08fc3e723a878223d00f669106780d5ea6665eb15d893476d47bf3b\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://assets.underware.gg/pistols/fools.svg\"\n },\n {\n name: \"Fame\",\n symbol: \"FAME\",\n decimals: 18,\n l2_token_address: \"0x02549653a4ae1ff8d04a20b8820a49cbe97486c536ec0e4c8f68aa33d80067cf\",\n sort_order: 1,\n total_supply: null,\n logo_url: \"https://assets.underware.gg/pistols/fame.svg\"\n }\n];\n\n// src/index.ts\nvar controllerConfigs = configs;\nvar erc20Metadata = metadata;\nvar defaultTheme = configs[\"cartridge\"].theme;\nexport {\n controllerConfigs,\n defaultTheme,\n erc20Metadata\n};\n//# sourceMappingURL=index.js.map"],"names":["ControllerAccount","WalletAccount","provider","rpcUrl","address","keychain","options","modal","calls","toArray","resolve","reject","sessionExecute","ResponseCodes","manualExecute","typedData","sessionSign","manualSign","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","createDestructor","localName","log","callbacks","destroyed","error","callback","createLogger","debug","args","DEFAULT_PORT_BY_PROTOCOL","URL_REGEX","opaqueOriginSchemes","getOriginFromSrc","src","scheme","location","regexResult","protocol","hostname","port","portSuffix","serializeError","name","message","stack","deserializeError","obj","deserializedError","key","connectCallReceiver","info","serializedMethods","local","remote","originForSending","originForReceiving","handleMessageEvent","event","callMessage","methodName","id","createPromiseHandler","resolution","returnValue","err","errorReplyMessage","generateId","KEY_PATH_DELIMITER","keyPathToSegments","keyPath","segmentsToKeyPath","segments","createKeyPath","prefix","setAtKeyPath","subject","value","prevSubject","idx","serializeMethods","methods","flattenedMethods","deserializeMethods","connectCallSender","callSender","methodKeyPaths","destroyConnection","createMethodProxy","iframeRemoved","replyMessage","api","handleAckMessageFactory","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","receiverMethodName","destroyCallSender","handleSynMessageFactory","synAckMessage","CHECK_IFRAME_IN_DOC_INTERVAL","monitorIframeRemoval","iframe","checkIframeInDocIntervalId","startConnectionTimeout","timeout","timeoutId","validateIframeHasSrcOrSrcDoc","connectToChild","handleSynMessage","handleAckMessage","stopConnectionTimeout","handleMessage","IFrame","url","preset","onClose","onConnect","container","_origin","observer","existingController","ArgentWallet","available","wallet","connectorData","connect","InjectedConnector","data","sig","_txn","_chainId","_tokenAddress","MetaMaskWallet","MetaMaskSDK","accounts","transaction","ethereum","result","chainId","tokenAddress","balance","PhantomWallet","response","encodedMessage","serailized_txn","txn","Transaction","requestProviders","listener","handler","createStore","listeners","providerDetails","request","providerDetail","unwatch","rdns","emitImmediately","RABBY_RDNS","RabbyWallet","WalletBridge","metamask","phantom","argent","rabby","type","identifier","adapter","operation","responseType","errorMessage","walletType","KeychainIFrame","policies","iframeOptions","_url","KEYCHAIN_URL","walletBridge","ProfileIFrame","profileUrl","version","username","slot","namespace","tokens","_profileUrl","PROFILE_URL","contract","ControllerProvider","BaseProvider","NotReadyToConnect","profile","e","_chain","tab","to","at","res","origin","_policy","chain","availableChains","shortString","starterpackId","currentChainId","chains","parseChainId","interval","startTime","cache","lookup","API_URL","lookupUsernames","usernames","uncachedUsernames","entry","lookupAddresses","addresses","num","uncachedAddresses","addr","defineProperties","target","values","types","stringify","HEX","i","keys","k","makeError","code","shortMessage","details","assert","check","assertArgument","accum","form","assertPrivate","givenGuard","guard","className","method","_getBytes","copy","offset","getBytes","isHexString","length","HexCharacters","hexlify","bytes","v","concat","datas","d","dataLength","zeroPad","left","zeroPadValue","BN_0","maxValue","getBigInt","getUint","getNumber","toBeArray","_value","hex","toUtf8Bytes","str","c","c2","pair","number","b","lengths","exists","instance","checkFinished","output","out","min","u8a","a","u32","arr","isLE","utf8ToBytes","toBytes","Hash","wrapConstructor","hashCons","hashC","msg","tmp","U32_MASK64","_32n","fromBig","le","split","lst","Ah","Al","h","l","rotlSH","s","rotlSL","rotlBH","rotlBL","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","round","R","x","y","t","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","Keccak","blockLen","suffix","outputLen","enableXOF","state","len","pos","take","bufferOut","gen","keccak_256","locked","_keccak256","__keccak256","keccak256","_data","func","ZeroHash","MessagePrefix","BN_1","BN_2","BN_27","BN_28","BN_35","_guard","toUint256","Signature","#r","#s","#v","#networkV","yParityAndS","r","clone","networkV","bv","assertError","_r","_v","yParity","hashMessage","TurnkeyWallet","turnkeyIframeClient","organizationId","walletAccount","paddedMessage","messageBytes","messageHash","ethers.hashMessage","rHex","sHex","vNumber","signature","WalletConnectWallet","account","configs","metadata","controllerConfigs","erc20Metadata","defaultTheme"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,20,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,45]}
|