@cartridge/controller 0.10.2 → 0.10.3
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 +18 -19
- package/.turbo/turbo-build.log +16 -17
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/node/index.cjs +2 -2
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +3 -3
- package/dist/node/index.js.map +1 -1
- package/dist/{provider-D-5qL7QC.js → provider-S-IvFw23.js} +68 -68
- package/dist/provider-S-IvFw23.js.map +1 -0
- package/dist/session/index.d.ts +1 -0
- package/dist/session/provider.d.ts +4 -2
- package/dist/session.js +120 -255
- package/dist/session.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/types.d.ts +3 -3
- package/package.json +3 -3
- package/src/session/index.ts +1 -0
- package/src/session/provider.ts +64 -15
- package/src/types.ts +3 -3
- package/src/utils.ts +1 -1
- package/tsconfig.json +10 -1
- package/vite.config.js +5 -3
- package/dist/provider-D-5qL7QC.js.map +0 -1
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sources":["../../../node_modules/.pnpm/@cartridge+controller-wasm@0.3.4/node_modules/@cartridge/controller-wasm/pkg-session/session_wasm_bg.js","../../../node_modules/.pnpm/@cartridge+controller-wasm@0.3.4/node_modules/@cartridge/controller-wasm/pkg-session/session_wasm.js","../src/session/account.ts","../src/session/provider.ts"],"sourcesContent":["import { Mutex } from './snippets/account-wasm-35da9c7350cbc3ae/src/wasm-mutex.js';\n\nlet wasm;\nexport function __wbg_set_wasm(val) {\n wasm = val;\n}\n\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nconst heap = new Array(128).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nconst cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export_2(addHeapObject(e));\n }\n}\n\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nconst CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(state => {\n wasm.__wbindgen_export_4.get(state.dtor)(state.a, state.b)\n});\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_4.get(state.dtor)(a, state.b);\n CLOSURE_DTORS.unregister(state);\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n CLOSURE_DTORS.register(real, state, state);\n return real;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n const ptr = malloc(array.length * 4, 4) >>> 0;\n const mem = getDataViewMemory0();\n for (let i = 0; i < array.length; i++) {\n mem.setUint32(ptr + 4 * i, addHeapObject(array[i]), true);\n }\n WASM_VECTOR_LEN = array.length;\n return ptr;\n}\nfunction __wbg_adapter_36(arg0, arg1) {\n wasm.__wbindgen_export_5(arg0, arg1);\n}\n\nfunction __wbg_adapter_39(arg0, arg1, arg2) {\n wasm.__wbindgen_export_6(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_195(arg0, arg1, arg2, arg3) {\n wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\n\n/**\n * @enum {1 | 20 | 24 | 27 | 28 | 29 | 31 | 32 | 33 | 34 | 40 | 41 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 10 | 64 | 65 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141}\n */\nexport const ErrorCode = Object.freeze({\n StarknetFailedToReceiveTransaction: 1, \"1\": \"StarknetFailedToReceiveTransaction\",\n StarknetContractNotFound: 20, \"20\": \"StarknetContractNotFound\",\n StarknetBlockNotFound: 24, \"24\": \"StarknetBlockNotFound\",\n StarknetInvalidTransactionIndex: 27, \"27\": \"StarknetInvalidTransactionIndex\",\n StarknetClassHashNotFound: 28, \"28\": \"StarknetClassHashNotFound\",\n StarknetTransactionHashNotFound: 29, \"29\": \"StarknetTransactionHashNotFound\",\n StarknetPageSizeTooBig: 31, \"31\": \"StarknetPageSizeTooBig\",\n StarknetNoBlocks: 32, \"32\": \"StarknetNoBlocks\",\n StarknetInvalidContinuationToken: 33, \"33\": \"StarknetInvalidContinuationToken\",\n StarknetTooManyKeysInFilter: 34, \"34\": \"StarknetTooManyKeysInFilter\",\n StarknetContractError: 40, \"40\": \"StarknetContractError\",\n StarknetTransactionExecutionError: 41, \"41\": \"StarknetTransactionExecutionError\",\n StarknetClassAlreadyDeclared: 51, \"51\": \"StarknetClassAlreadyDeclared\",\n StarknetInvalidTransactionNonce: 52, \"52\": \"StarknetInvalidTransactionNonce\",\n StarknetInsufficientMaxFee: 53, \"53\": \"StarknetInsufficientMaxFee\",\n StarknetInsufficientAccountBalance: 54, \"54\": \"StarknetInsufficientAccountBalance\",\n StarknetValidationFailure: 55, \"55\": \"StarknetValidationFailure\",\n StarknetCompilationFailed: 56, \"56\": \"StarknetCompilationFailed\",\n StarknetContractClassSizeIsTooLarge: 57, \"57\": \"StarknetContractClassSizeIsTooLarge\",\n StarknetNonAccount: 58, \"58\": \"StarknetNonAccount\",\n StarknetDuplicateTx: 59, \"59\": \"StarknetDuplicateTx\",\n StarknetCompiledClassHashMismatch: 60, \"60\": \"StarknetCompiledClassHashMismatch\",\n StarknetUnsupportedTxVersion: 61, \"61\": \"StarknetUnsupportedTxVersion\",\n StarknetUnsupportedContractClassVersion: 62, \"62\": \"StarknetUnsupportedContractClassVersion\",\n StarknetUnexpectedError: 63, \"63\": \"StarknetUnexpectedError\",\n StarknetNoTraceAvailable: 10, \"10\": \"StarknetNoTraceAvailable\",\n StarknetReplacementTransactionUnderpriced: 64, \"64\": \"StarknetReplacementTransactionUnderpriced\",\n StarknetFeeBelowMinimum: 65, \"65\": \"StarknetFeeBelowMinimum\",\n SignError: 101, \"101\": \"SignError\",\n StorageError: 102, \"102\": \"StorageError\",\n AccountFactoryError: 103, \"103\": \"AccountFactoryError\",\n PaymasterExecutionTimeNotReached: 104, \"104\": \"PaymasterExecutionTimeNotReached\",\n PaymasterExecutionTimePassed: 105, \"105\": \"PaymasterExecutionTimePassed\",\n PaymasterInvalidCaller: 106, \"106\": \"PaymasterInvalidCaller\",\n PaymasterRateLimitExceeded: 107, \"107\": \"PaymasterRateLimitExceeded\",\n PaymasterNotSupported: 108, \"108\": \"PaymasterNotSupported\",\n PaymasterHttp: 109, \"109\": \"PaymasterHttp\",\n PaymasterExcecution: 110, \"110\": \"PaymasterExcecution\",\n PaymasterSerialization: 111, \"111\": \"PaymasterSerialization\",\n CartridgeControllerNotDeployed: 112, \"112\": \"CartridgeControllerNotDeployed\",\n InsufficientBalance: 113, \"113\": \"InsufficientBalance\",\n OriginError: 114, \"114\": \"OriginError\",\n EncodingError: 115, \"115\": \"EncodingError\",\n SerdeWasmBindgenError: 116, \"116\": \"SerdeWasmBindgenError\",\n CairoSerdeError: 117, \"117\": \"CairoSerdeError\",\n CairoShortStringToFeltError: 118, \"118\": \"CairoShortStringToFeltError\",\n DeviceCreateCredential: 119, \"119\": \"DeviceCreateCredential\",\n DeviceGetAssertion: 120, \"120\": \"DeviceGetAssertion\",\n DeviceBadAssertion: 121, \"121\": \"DeviceBadAssertion\",\n DeviceChannel: 122, \"122\": \"DeviceChannel\",\n DeviceOrigin: 123, \"123\": \"DeviceOrigin\",\n AccountSigning: 124, \"124\": \"AccountSigning\",\n AccountProvider: 125, \"125\": \"AccountProvider\",\n AccountClassHashCalculation: 126, \"126\": \"AccountClassHashCalculation\",\n AccountFeeOutOfRange: 128, \"128\": \"AccountFeeOutOfRange\",\n ProviderRateLimited: 129, \"129\": \"ProviderRateLimited\",\n ProviderArrayLengthMismatch: 130, \"130\": \"ProviderArrayLengthMismatch\",\n ProviderOther: 131, \"131\": \"ProviderOther\",\n SessionAlreadyRegistered: 132, \"132\": \"SessionAlreadyRegistered\",\n UrlParseError: 133, \"133\": \"UrlParseError\",\n Base64DecodeError: 134, \"134\": \"Base64DecodeError\",\n CoseError: 135, \"135\": \"CoseError\",\n PolicyChainIdMismatch: 136, \"136\": \"PolicyChainIdMismatch\",\n InvalidOwner: 137, \"137\": \"InvalidOwner\",\n GasPriceTooHigh: 138, \"138\": \"GasPriceTooHigh\",\n TransactionTimeout: 139, \"139\": \"TransactionTimeout\",\n ConversionError: 140, \"140\": \"ConversionError\",\n InvalidChainId: 141, \"141\": \"InvalidChainId\",\n});\n\nconst __wbindgen_enum_RequestCache = [\"default\", \"no-store\", \"reload\", \"no-cache\", \"force-cache\", \"only-if-cached\"];\n\nconst __wbindgen_enum_RequestCredentials = [\"omit\", \"same-origin\", \"include\"];\n\nconst __wbindgen_enum_RequestMode = [\"same-origin\", \"no-cors\", \"cors\", \"navigate\"];\n\nconst CartridgeSessionAccountFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_cartridgesessionaccount_free(ptr >>> 0, 1));\n\nexport class CartridgeSessionAccount {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(CartridgeSessionAccount.prototype);\n obj.__wbg_ptr = ptr;\n CartridgeSessionAccountFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n CartridgeSessionAccountFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_cartridgesessionaccount_free(ptr, 0);\n }\n /**\n * @param {string} rpc_url\n * @param {JsFelt} signer\n * @param {JsFelt} address\n * @param {JsFelt} chain_id\n * @param {JsFelt[]} session_authorization\n * @param {Session} session\n * @returns {CartridgeSessionAccount}\n */\n static new(rpc_url, signer, address, chain_id, session_authorization, session) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(rpc_url, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayJsValueToWasm0(session_authorization, wasm.__wbindgen_export_0);\n const len1 = WASM_VECTOR_LEN;\n wasm.cartridgesessionaccount_new(retptr, ptr0, len0, addHeapObject(signer), addHeapObject(address), addHeapObject(chain_id), ptr1, len1, addHeapObject(session));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return CartridgeSessionAccount.__wrap(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} rpc_url\n * @param {JsFelt} signer\n * @param {JsFelt} address\n * @param {JsFelt} owner_guid\n * @param {JsFelt} chain_id\n * @param {Session} session\n * @returns {CartridgeSessionAccount}\n */\n static newAsRegistered(rpc_url, signer, address, owner_guid, chain_id, session) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(rpc_url, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n wasm.cartridgesessionaccount_newAsRegistered(retptr, ptr0, len0, addHeapObject(signer), addHeapObject(address), addHeapObject(owner_guid), addHeapObject(chain_id), addHeapObject(session));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return CartridgeSessionAccount.__wrap(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {JsFelt} hash\n * @param {JsCall[]} calls\n * @returns {Promise<Felts>}\n */\n sign(hash, calls) {\n const ptr0 = passArrayJsValueToWasm0(calls, wasm.__wbindgen_export_0);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.cartridgesessionaccount_sign(this.__wbg_ptr, addHeapObject(hash), ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {JsCall[]} calls\n * @returns {Promise<any>}\n */\n execute(calls) {\n const ptr0 = passArrayJsValueToWasm0(calls, wasm.__wbindgen_export_0);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.cartridgesessionaccount_execute(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {JsCall[]} calls\n * @returns {Promise<any>}\n */\n executeFromOutside(calls) {\n const ptr0 = passArrayJsValueToWasm0(calls, wasm.__wbindgen_export_0);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.cartridgesessionaccount_executeFromOutside(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n}\n\nconst JsControllerErrorFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_jscontrollererror_free(ptr >>> 0, 1));\n\nexport class JsControllerError {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(JsControllerError.prototype);\n obj.__wbg_ptr = ptr;\n JsControllerErrorFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n JsControllerErrorFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_jscontrollererror_free(ptr, 0);\n }\n /**\n * @returns {ErrorCode}\n */\n get code() {\n const ret = wasm.__wbg_get_jscontrollererror_code(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {ErrorCode} arg0\n */\n set code(arg0) {\n wasm.__wbg_set_jscontrollererror_code(this.__wbg_ptr, arg0);\n }\n /**\n * @returns {string}\n */\n get message() {\n let deferred1_0;\n let deferred1_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.__wbg_get_jscontrollererror_message(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n deferred1_0 = r0;\n deferred1_1 = r1;\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export_3(deferred1_0, deferred1_1, 1);\n }\n }\n /**\n * @param {string} arg0\n */\n set message(arg0) {\n const ptr0 = passStringToWasm0(arg0, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n wasm.__wbg_set_jscontrollererror_message(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * @returns {string | undefined}\n */\n get data() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.__wbg_get_jscontrollererror_data(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n let v1;\n if (r0 !== 0) {\n v1 = getStringFromWasm0(r0, r1).slice();\n wasm.__wbindgen_export_3(r0, r1 * 1, 1);\n }\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string | null} [arg0]\n */\n set data(arg0) {\n var ptr0 = isLikeNone(arg0) ? 0 : passStringToWasm0(arg0, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len0 = WASM_VECTOR_LEN;\n wasm.__wbg_set_jscontrollererror_data(this.__wbg_ptr, ptr0, len0);\n }\n}\n\nexport function __wbg_Error_0497d5bdba9362e5(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_String_8f0eb39a4a4c2f66(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n};\n\nexport function __wbg_abort_18ba44d46e13d7fe(arg0) {\n getObject(arg0).abort();\n};\n\nexport function __wbg_abort_4198a1129c47f21a(arg0, arg1) {\n getObject(arg0).abort(getObject(arg1));\n};\n\nexport function __wbg_append_0342728346e47425() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n}, arguments) };\n\nexport function __wbg_arrayBuffer_d58b858456021d7f() { return handleError(function (arg0) {\n const ret = getObject(arg0).arrayBuffer();\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_buffer_a1a27a0dfa70165d(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_f2db6205e5c51dc8() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_call_fbe8be8bf6436ce5() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_clearTimeout_6222fede17abcb1a(arg0) {\n const ret = clearTimeout(takeObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_credentials_2111b2d8612be757(arg0) {\n const ret = getObject(arg0).credentials;\n return addHeapObject(ret);\n};\n\nexport function __wbg_crypto_574e78ad8b13b65f(arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nexport function __wbg_done_4d01f352bade43b7(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n};\n\nexport function __wbg_fetch_a8e43a4e138dfc93(arg0, arg1) {\n const ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_fetch_f156d10be9a5c88a(arg0) {\n const ret = fetch(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_fetch_f1856afdb49415d1(arg0) {\n const ret = fetch(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_getClientExtensionResults_6e8c179868f9d3bb(arg0) {\n const ret = getObject(arg0).getClientExtensionResults();\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_b8f5dbd5f3995a9e() { return handleError(function (arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n}, arguments) };\n\nexport function __wbg_getTime_2afe67905d873e92(arg0) {\n const ret = getObject(arg0).getTime();\n return ret;\n};\n\nexport function __wbg_get_5d953d918b77e646() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).get(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_get_92470be87867c2e5() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_getwithrefkey_1dc361bd10053bfe(arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n};\n\nexport function __wbg_has_809e438ee9d787a7() { return handleError(function (arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n}, arguments) };\n\nexport function __wbg_headers_0f0cbdc6290b6780(arg0) {\n const ret = getObject(arg0).headers;\n return addHeapObject(ret);\n};\n\nexport function __wbg_instanceof_ArrayBuffer_a8b6f580b363f2bc(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_instanceof_Object_9a05796038b7a8f6(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Object;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_instanceof_Response_e80ce8b7a2b968d2(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Response;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_instanceof_Uint8Array_ca460677bc155827(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_instanceof_Window_68f3f67bad1729c1(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nexport function __wbg_iterator_4068add5b2aef7a6() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n};\n\nexport function __wbg_jscontrollererror_new(arg0) {\n const ret = JsControllerError.__wrap(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_length_ab6d22b5ead75c72(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n};\n\nexport function __wbg_location_53fd1bbab625ae8d(arg0) {\n const ret = getObject(arg0).location;\n return addHeapObject(ret);\n};\n\nexport function __wbg_log_ea240990d83e374e(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_msCrypto_a61aeb35a24c1329(arg0) {\n const ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n};\n\nexport function __wbg_navigator_fc64ba1417939b25(arg0) {\n const ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n};\n\nexport function __wbg_new0_97314565408dea38() {\n const ret = new Date();\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_07b483f72211fd66() {\n const ret = new Object();\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_186abcfdff244e42() { return handleError(function () {\n const ret = new AbortController();\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_new_2658d63118834d8e() {\n const ret = new Mutex();\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_4796e1cd2eb9ea6d() { return handleError(function () {\n const ret = new Headers();\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_new_58353953ad2097cc() {\n const ret = new Array();\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_e30c39c06edaabf2(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_195(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally {\n state0.a = state0.b = 0;\n }\n};\n\nexport function __wbg_new_e52b3efaaa774f96(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_newfromslice_7c05ab1297cb2d88(arg0, arg1) {\n const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_newnoargs_ff528e72d35de39a(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_newwithbyteoffsetandlength_3b01ecda099177e8(arg0, arg1, arg2) {\n const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_newwithlength_08f872dc1e3ada2e(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_newwithstrandinit_f8a9dbe009d6be37() { return handleError(function (arg0, arg1, arg2) {\n const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_next_8bb824d217961b5d(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n};\n\nexport function __wbg_next_e2da48d8fff7439a() { return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_node_905d3e251edff8a2(arg0) {\n const ret = getObject(arg0).node;\n return addHeapObject(ret);\n};\n\nexport function __wbg_obtain_a9626b3b96e6dc2c(arg0) {\n const ret = getObject(arg0).obtain();\n return addHeapObject(ret);\n};\n\nexport function __wbg_origin_5c460f727a4fbf19() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg1).origin;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n}, arguments) };\n\nexport function __wbg_parse_2e023e23741dc54b(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n const ret = JSON.parse(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n } finally {\n wasm.__wbindgen_export_3(deferred0_0, deferred0_1, 1);\n }\n};\n\nexport function __wbg_process_dc0fbacc7c1c06f7(arg0) {\n const ret = getObject(arg0).process;\n return addHeapObject(ret);\n};\n\nexport function __wbg_push_73fd7b5550ebf707(arg0, arg1) {\n const ret = getObject(arg0).push(getObject(arg1));\n return ret;\n};\n\nexport function __wbg_queueMicrotask_46c1df247678729f(arg0) {\n queueMicrotask(getObject(arg0));\n};\n\nexport function __wbg_queueMicrotask_8acf3ccb75ed8d11(arg0) {\n const ret = getObject(arg0).queueMicrotask;\n return addHeapObject(ret);\n};\n\nexport function __wbg_randomFillSync_ac0988aba3254290() { return handleError(function (arg0, arg1) {\n getObject(arg0).randomFillSync(takeObject(arg1));\n}, arguments) };\n\nexport function __wbg_require_60cc747a6bc5215a() { return handleError(function () {\n const ret = module.require;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_resolve_0dac8c580ffd4678(arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_setTimeout_2b339866a2aa3789(arg0, arg1) {\n const ret = setTimeout(getObject(arg0), arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbg_set_3f1d0b984ed272ed(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n};\n\nexport function __wbg_set_3fda3bac07393de4(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n};\n\nexport function __wbg_set_7422acbe992d64ab(arg0, arg1, arg2) {\n getObject(arg0)[arg1 >>> 0] = takeObject(arg2);\n};\n\nexport function __wbg_set_c43293f93a35998a() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n return ret;\n}, arguments) };\n\nexport function __wbg_set_fe4e79d1ed3b0e9b(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nexport function __wbg_setbody_971ec015fc13d6b4(arg0, arg1) {\n getObject(arg0).body = getObject(arg1);\n};\n\nexport function __wbg_setcache_a94cd14dc0cc72a2(arg0, arg1) {\n getObject(arg0).cache = __wbindgen_enum_RequestCache[arg1];\n};\n\nexport function __wbg_setcredentials_920d91fb5984c94a(arg0, arg1) {\n getObject(arg0).credentials = __wbindgen_enum_RequestCredentials[arg1];\n};\n\nexport function __wbg_setheaders_65a4eb4c0443ae61(arg0, arg1) {\n getObject(arg0).headers = getObject(arg1);\n};\n\nexport function __wbg_setmethod_8ce1be0b4d701b7c(arg0, arg1, arg2) {\n getObject(arg0).method = getStringFromWasm0(arg1, arg2);\n};\n\nexport function __wbg_setmode_bd35f026f55b6247(arg0, arg1) {\n getObject(arg0).mode = __wbindgen_enum_RequestMode[arg1];\n};\n\nexport function __wbg_setsignal_8e72abfe7ee03c97(arg0, arg1) {\n getObject(arg0).signal = getObject(arg1);\n};\n\nexport function __wbg_signMessage_c732ea9d998cac79() { return handleError(function (arg0, arg1, arg2, arg3) {\n let deferred0_0;\n let deferred0_1;\n let deferred1_0;\n let deferred1_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n deferred1_0 = arg2;\n deferred1_1 = arg3;\n const ret = window.keychain_wallets.signMessage(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));\n return addHeapObject(ret);\n } finally {\n wasm.__wbindgen_export_3(deferred0_0, deferred0_1, 1);\n wasm.__wbindgen_export_3(deferred1_0, deferred1_1, 1);\n }\n}, arguments) };\n\nexport function __wbg_signal_b96223519a041faa(arg0) {\n const ret = getObject(arg0).signal;\n return addHeapObject(ret);\n};\n\nexport function __wbg_static_accessor_GLOBAL_487c52c58d65314d() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_static_accessor_GLOBAL_THIS_ee9704f328b6b291() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_static_accessor_SELF_78c9e3071b912620() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_static_accessor_WINDOW_a093d21393777366() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_status_a54682bbe52f9058(arg0) {\n const ret = getObject(arg0).status;\n return ret;\n};\n\nexport function __wbg_stringify_7f942ad6a97a2d11(arg0, arg1) {\n const ret = JSON.stringify(getObject(arg1));\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n};\n\nexport function __wbg_stringify_c242842b97f054cc() { return handleError(function (arg0) {\n const ret = JSON.stringify(getObject(arg0));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_subarray_dd4ade7d53bd8e26(arg0, arg1, arg2) {\n const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_text_ec0e22f60e30dd2f() { return handleError(function (arg0) {\n const ret = getObject(arg0).text();\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_then_82ab9fb4080f1707(arg0, arg1, arg2) {\n const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n};\n\nexport function __wbg_then_db882932c0c714c6(arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_url_e6ed869ea05b7a71(arg0, arg1) {\n const ret = getObject(arg1).url;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n};\n\nexport function __wbg_value_17b896954e14f896(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n};\n\nexport function __wbg_versions_c01dfd4722a88165(arg0) {\n const ret = getObject(arg0).versions;\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_boolean_get(arg0) {\n const v = getObject(arg0);\n const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n return ret;\n};\n\nexport function __wbindgen_cb_drop(arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n const ret = false;\n return ret;\n};\n\nexport function __wbindgen_closure_wrapper3365(arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 400, __wbg_adapter_36);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_closure_wrapper3495(arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 434, __wbg_adapter_39);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_debug_string(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n};\n\nexport function __wbindgen_in(arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n};\n\nexport function __wbindgen_is_function(arg0) {\n const ret = typeof(getObject(arg0)) === 'function';\n return ret;\n};\n\nexport function __wbindgen_is_object(arg0) {\n const val = getObject(arg0);\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n};\n\nexport function __wbindgen_is_string(arg0) {\n const ret = typeof(getObject(arg0)) === 'string';\n return ret;\n};\n\nexport function __wbindgen_is_undefined(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n};\n\nexport function __wbindgen_jsval_loose_eq(arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n};\n\nexport function __wbindgen_memory() {\n const ret = wasm.memory;\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_number_get(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n};\n\nexport function __wbindgen_number_new(arg0) {\n const ret = arg0;\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_object_clone_ref(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbindgen_string_get(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n};\n\nexport function __wbindgen_string_new(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n","import * as wasm from \"./session_wasm_bg.wasm\";\nexport * from \"./session_wasm_bg.js\";\nimport { __wbg_set_wasm } from \"./session_wasm_bg.js\";\n__wbg_set_wasm(wasm);","import { Policy } from \"@cartridge/controller-wasm\";\nimport { CartridgeSessionAccount } from \"@cartridge/controller-wasm/session\";\nimport { Call, InvokeFunctionResponse, WalletAccount } from \"starknet\";\n\nimport { normalizeCalls } from \"../utils\";\nimport BaseProvider from \"../provider\";\n\nexport * from \"../errors\";\nexport * from \"../types\";\n\nexport default class SessionAccount extends WalletAccount {\n public controller: CartridgeSessionAccount;\n\n constructor(\n provider: BaseProvider,\n {\n rpcUrl,\n privateKey,\n address,\n ownerGuid,\n chainId,\n expiresAt,\n policies,\n guardianKeyGuid,\n metadataHash,\n sessionKeyGuid,\n }: {\n rpcUrl: string;\n privateKey: string;\n address: string;\n ownerGuid: string;\n chainId: string;\n expiresAt: number;\n policies: Policy[];\n guardianKeyGuid: string;\n metadataHash: string;\n sessionKeyGuid: string;\n },\n ) {\n super({\n provider: { nodeUrl: rpcUrl },\n walletProvider: provider,\n address,\n });\n\n this.controller = CartridgeSessionAccount.newAsRegistered(\n rpcUrl,\n privateKey,\n address,\n ownerGuid,\n chainId,\n {\n expiresAt,\n policies,\n guardianKeyGuid,\n metadataHash,\n sessionKeyGuid,\n },\n );\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: Call | Call[]): Promise<InvokeFunctionResponse> {\n return this.controller.execute(normalizeCalls(calls));\n }\n}\n","import { ec, stark, WalletAccount } from \"starknet\";\n\nimport SessionAccount from \"./account\";\nimport { KEYCHAIN_URL } from \"../constants\";\nimport BaseProvider from \"../provider\";\nimport { toWasmPolicies } from \"../utils\";\nimport { SessionPolicies } from \"@cartridge/presets\";\nimport { AddStarknetChainParameters } from \"@starknet-io/types-js\";\nimport { ParsedSessionPolicies } from \"../policies\";\n\ninterface SessionRegistration {\n username: string;\n address: string;\n ownerGuid: string;\n transactionHash?: string;\n expiresAt: string;\n guardianKeyGuid: string;\n metadataHash: string;\n sessionKeyGuid: string;\n}\n\nexport type SessionOptions = {\n rpc: string;\n chainId: string;\n policies: SessionPolicies;\n redirectUrl: string;\n keychainUrl?: string;\n};\n\nexport default class SessionProvider extends BaseProvider {\n public id = \"controller_session\";\n public name = \"Controller Session\";\n\n protected _chainId: string;\n protected _rpcUrl: string;\n protected _username?: string;\n protected _redirectUrl: string;\n protected _policies: ParsedSessionPolicies;\n protected _keychainUrl: string;\n\n constructor({\n rpc,\n chainId,\n policies,\n redirectUrl,\n keychainUrl,\n }: SessionOptions) {\n super();\n\n this._policies = {\n verified: false,\n contracts: policies.contracts\n ? Object.fromEntries(\n Object.entries(policies.contracts).map(([address, contract]) => [\n address,\n {\n ...contract,\n methods: contract.methods.map((method) => ({\n ...method,\n authorized: true,\n })),\n },\n ]),\n )\n : undefined,\n messages: policies.messages?.map((message) => ({\n ...message,\n authorized: true,\n })),\n };\n\n this._rpcUrl = rpc;\n this._chainId = chainId;\n this._redirectUrl = redirectUrl;\n this._keychainUrl = keychainUrl || KEYCHAIN_URL;\n\n if (typeof window !== \"undefined\") {\n (window as any).starknet_controller_session = this;\n }\n }\n\n private validatePoliciesSubset(\n newPolicies: ParsedSessionPolicies,\n existingPolicies: ParsedSessionPolicies,\n ): boolean {\n if (newPolicies.contracts) {\n if (!existingPolicies.contracts) return false;\n\n for (const [address, contract] of Object.entries(newPolicies.contracts)) {\n const existingContract = existingPolicies.contracts[address];\n if (!existingContract) return false;\n\n for (const method of contract.methods) {\n const existingMethod = existingContract.methods.find(\n (m) => m.entrypoint === method.entrypoint,\n );\n if (!existingMethod || !existingMethod.authorized) return false;\n }\n }\n }\n\n if (newPolicies.messages) {\n if (!existingPolicies.messages) return false;\n\n for (const message of newPolicies.messages) {\n const existingMessage = existingPolicies.messages.find(\n (m) =>\n JSON.stringify(m.domain) === JSON.stringify(message.domain) &&\n JSON.stringify(m.types) === JSON.stringify(message.types),\n );\n if (!existingMessage || !existingMessage.authorized) return false;\n }\n }\n\n return true;\n }\n\n async username() {\n await this.tryRetrieveFromQueryOrStorage();\n return this._username;\n }\n\n async probe(): Promise<WalletAccount | undefined> {\n if (this.account) {\n return this.account;\n }\n\n this.account = await this.tryRetrieveFromQueryOrStorage();\n return this.account;\n }\n\n async connect(): Promise<WalletAccount | undefined> {\n if (this.account) {\n return this.account;\n }\n\n this.account = await this.tryRetrieveFromQueryOrStorage();\n if (this.account) {\n return this.account;\n }\n\n const pk = stark.randomAddress();\n const publicKey = ec.starkCurve.getStarkKey(pk);\n\n localStorage.setItem(\n \"sessionSigner\",\n JSON.stringify({\n privKey: pk,\n pubKey: publicKey,\n }),\n );\n\n localStorage.setItem(\"sessionPolicies\", JSON.stringify(this._policies));\n\n const url = `${\n this._keychainUrl\n }/session?public_key=${publicKey}&redirect_uri=${\n this._redirectUrl\n }&redirect_query_name=startapp&policies=${JSON.stringify(\n this._policies,\n )}&rpc_url=${this._rpcUrl}`;\n\n localStorage.setItem(\"lastUsedConnector\", this.id);\n window.open(url, \"_blank\");\n\n return this.account;\n }\n\n switchStarknetChain(_chainId: string): Promise<boolean> {\n throw new Error(\"switchStarknetChain not implemented\");\n }\n\n addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean> {\n throw new Error(\"addStarknetChain not implemented\");\n }\n\n disconnect(): Promise<void> {\n localStorage.removeItem(\"sessionSigner\");\n localStorage.removeItem(\"session\");\n localStorage.removeItem(\"sessionPolicies\");\n this.account = undefined;\n this._username = undefined;\n return Promise.resolve();\n }\n\n async tryRetrieveFromQueryOrStorage() {\n if (this.account) {\n return this.account;\n }\n\n const signerString = localStorage.getItem(\"sessionSigner\");\n const signer = signerString ? JSON.parse(signerString) : null;\n let sessionRegistration: SessionRegistration | null = null;\n\n if (window.location.search.includes(\"startapp\")) {\n const params = new URLSearchParams(window.location.search);\n const session = params.get(\"startapp\");\n if (session) {\n sessionRegistration = JSON.parse(atob(session));\n localStorage.setItem(\"session\", JSON.stringify(sessionRegistration));\n\n // Remove the session query parameter\n params.delete(\"startapp\");\n const newUrl =\n window.location.pathname +\n (params.toString() ? `?${params.toString()}` : \"\") +\n window.location.hash;\n window.history.replaceState({}, document.title, newUrl);\n }\n }\n\n if (!sessionRegistration) {\n const sessionString = localStorage.getItem(\"session\");\n if (sessionString) {\n sessionRegistration = JSON.parse(sessionString);\n }\n }\n\n if (!sessionRegistration || !signer) {\n return;\n }\n\n // Check expiration\n const expirationTime = parseInt(sessionRegistration.expiresAt) * 1000;\n if (Date.now() >= expirationTime) {\n this.clearStoredSession();\n return;\n }\n\n // Check stored policies\n const storedPoliciesStr = localStorage.getItem(\"sessionPolicies\");\n if (storedPoliciesStr) {\n const storedPolicies = JSON.parse(\n storedPoliciesStr,\n ) as ParsedSessionPolicies;\n\n const isValid = this.validatePoliciesSubset(\n this._policies,\n storedPolicies,\n );\n\n if (!isValid) {\n this.clearStoredSession();\n return;\n }\n }\n\n this._username = sessionRegistration.username;\n this.account = new SessionAccount(this, {\n rpcUrl: this._rpcUrl,\n privateKey: signer.privKey,\n address: sessionRegistration.address,\n ownerGuid: sessionRegistration.ownerGuid,\n chainId: this._chainId,\n expiresAt: parseInt(sessionRegistration.expiresAt),\n policies: toWasmPolicies(this._policies),\n guardianKeyGuid: sessionRegistration.guardianKeyGuid,\n metadataHash: sessionRegistration.metadataHash,\n sessionKeyGuid: sessionRegistration.sessionKeyGuid,\n });\n\n return this.account;\n }\n\n private clearStoredSession(): void {\n localStorage.removeItem(\"sessionSigner\");\n localStorage.removeItem(\"session\");\n localStorage.removeItem(\"sessionPolicies\");\n }\n}\n"],"names":["wasm","__wbg_set_wasm","val","cachedUint8ArrayMemory0","getUint8ArrayMemory0","lTextDecoder","cachedTextDecoder","heap","heap_next","addHeapObject","obj","idx","getObject","WASM_VECTOR_LEN","lTextEncoder","cachedTextEncoder","encodeString","arg","view","buf","passStringToWasm0","malloc","realloc","ptr","len","mem","offset","code","ret","cachedDataViewMemory0","getDataViewMemory0","dropObject","takeObject","state","passArrayJsValueToWasm0","array","i","CartridgeSessionAccountFinalization","CartridgeSessionAccount","rpc_url","signer","address","chain_id","session_authorization","session","retptr","ptr0","len0","ptr1","len1","r0","r1","r2","owner_guid","hash","calls","SessionAccount","WalletAccount","provider","rpcUrl","privateKey","ownerGuid","chainId","expiresAt","policies","guardianKeyGuid","metadataHash","sessionKeyGuid","normalizeCalls","SessionProvider","BaseProvider","rpc","redirectUrl","keychainUrl","contract","method","message","KEYCHAIN_URL","newPolicies","existingPolicies","existingContract","existingMethod","m","existingMessage","pk","stark","publicKey","ec","url","_chainId","_chain","signerString","sessionRegistration","params","newUrl","sessionString","expirationTime","storedPoliciesStr","storedPolicies","toWasmPolicies"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"session.js","sources":["../src/session/account.ts","../src/session/provider.ts"],"sourcesContent":["import { Policy } from \"@cartridge/controller-wasm\";\nimport { CartridgeSessionAccount } from \"@cartridge/controller-wasm/session\";\nimport { Call, InvokeFunctionResponse, WalletAccount } from \"starknet\";\n\nimport { normalizeCalls } from \"../utils\";\nimport BaseProvider from \"../provider\";\n\nexport * from \"../errors\";\nexport * from \"../types\";\n\nexport default class SessionAccount extends WalletAccount {\n public controller: CartridgeSessionAccount;\n\n constructor(\n provider: BaseProvider,\n {\n rpcUrl,\n privateKey,\n address,\n ownerGuid,\n chainId,\n expiresAt,\n policies,\n guardianKeyGuid,\n metadataHash,\n sessionKeyGuid,\n }: {\n rpcUrl: string;\n privateKey: string;\n address: string;\n ownerGuid: string;\n chainId: string;\n expiresAt: number;\n policies: Policy[];\n guardianKeyGuid: string;\n metadataHash: string;\n sessionKeyGuid: string;\n },\n ) {\n super({\n provider: { nodeUrl: rpcUrl },\n walletProvider: provider,\n address,\n });\n\n this.controller = CartridgeSessionAccount.newAsRegistered(\n rpcUrl,\n privateKey,\n address,\n ownerGuid,\n chainId,\n {\n expiresAt,\n policies,\n guardianKeyGuid,\n metadataHash,\n sessionKeyGuid,\n },\n );\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: Call | Call[]): Promise<InvokeFunctionResponse> {\n return this.controller.execute(normalizeCalls(calls));\n }\n}\n","import { ec, stark, WalletAccount } from \"starknet\";\n\nimport {\n signerToGuid,\n subscribeCreateSession,\n} from \"@cartridge/controller-wasm\";\nimport { SessionPolicies } from \"@cartridge/presets\";\nimport { AddStarknetChainParameters } from \"@starknet-io/types-js\";\nimport { encode } from \"starknet\";\nimport { KEYCHAIN_URL } from \"../constants\";\nimport { ParsedSessionPolicies } from \"../policies\";\nimport BaseProvider from \"../provider\";\nimport { toWasmPolicies } from \"../utils\";\nimport SessionAccount from \"./account\";\n\ninterface SessionRegistration {\n username: string;\n address: string;\n ownerGuid: string;\n transactionHash?: string;\n expiresAt: string;\n guardianKeyGuid: string;\n metadataHash: string;\n sessionKeyGuid: string;\n}\n\nexport type SessionOptions = {\n rpc: string;\n chainId: string;\n policies: SessionPolicies;\n redirectUrl: string;\n keychainUrl?: string;\n apiUrl?: string;\n};\n\nexport default class SessionProvider extends BaseProvider {\n public id = \"controller_session\";\n public name = \"Controller Session\";\n\n protected _chainId: string;\n protected _rpcUrl: string;\n protected _username?: string;\n protected _redirectUrl: string;\n protected _policies: ParsedSessionPolicies;\n protected _keychainUrl: string;\n protected _apiUrl?: string;\n\n constructor({\n rpc,\n chainId,\n policies,\n redirectUrl,\n keychainUrl,\n apiUrl,\n }: SessionOptions) {\n super();\n\n this._policies = {\n verified: false,\n contracts: policies.contracts\n ? Object.fromEntries(\n Object.entries(policies.contracts).map(([address, contract]) => [\n address,\n {\n ...contract,\n methods: contract.methods.map((method) => ({\n ...method,\n authorized: true,\n })),\n },\n ]),\n )\n : undefined,\n messages: policies.messages?.map((message) => ({\n ...message,\n authorized: true,\n })),\n };\n\n this._rpcUrl = rpc;\n this._chainId = chainId;\n this._redirectUrl = redirectUrl;\n this._keychainUrl = keychainUrl || KEYCHAIN_URL;\n this._apiUrl = apiUrl;\n\n if (typeof window !== \"undefined\") {\n (window as any).starknet_controller_session = this;\n }\n }\n\n private validatePoliciesSubset(\n newPolicies: ParsedSessionPolicies,\n existingPolicies: ParsedSessionPolicies,\n ): boolean {\n if (newPolicies.contracts) {\n if (!existingPolicies.contracts) return false;\n\n for (const [address, contract] of Object.entries(newPolicies.contracts)) {\n const existingContract = existingPolicies.contracts[address];\n if (!existingContract) return false;\n\n for (const method of contract.methods) {\n const existingMethod = existingContract.methods.find(\n (m) => m.entrypoint === method.entrypoint,\n );\n if (!existingMethod || !existingMethod.authorized) return false;\n }\n }\n }\n\n if (newPolicies.messages) {\n if (!existingPolicies.messages) return false;\n\n for (const message of newPolicies.messages) {\n const existingMessage = existingPolicies.messages.find(\n (m) =>\n JSON.stringify(m.domain) === JSON.stringify(message.domain) &&\n JSON.stringify(m.types) === JSON.stringify(message.types),\n );\n if (!existingMessage || !existingMessage.authorized) return false;\n }\n }\n\n return true;\n }\n\n async username() {\n await this.tryRetrieveFromQueryOrStorage();\n return this._username;\n }\n\n async probe(): Promise<WalletAccount | undefined> {\n if (this.account) {\n return this.account;\n }\n\n this.account = await this.tryRetrieveFromQueryOrStorage();\n return this.account;\n }\n\n async connect(): Promise<WalletAccount | undefined> {\n if (this.account) {\n return this.account;\n }\n\n this.account = await this.tryRetrieveFromQueryOrStorage();\n if (this.account) {\n return this.account;\n }\n\n const pk = stark.randomAddress();\n const publicKey = ec.starkCurve.getStarkKey(pk);\n\n localStorage.setItem(\n \"sessionSigner\",\n JSON.stringify({\n privKey: pk,\n pubKey: publicKey,\n }),\n );\n\n localStorage.setItem(\"sessionPolicies\", JSON.stringify(this._policies));\n\n const url = `${\n this._keychainUrl\n }/session?public_key=${publicKey}&redirect_uri=${\n this._redirectUrl\n }&redirect_query_name=startapp&policies=${JSON.stringify(\n this._policies,\n )}&rpc_url=${this._rpcUrl}`;\n\n localStorage.setItem(\"lastUsedConnector\", this.id);\n const openedWindow = window.open(url, \"_blank\");\n\n try {\n const formattedPk = encode.addHexPrefix(pk);\n\n const sessionKeyGuid = signerToGuid({\n starknet: { privateKey: formattedPk },\n });\n\n const cartridgeApiUrl = this._apiUrl ?? \"https://api.cartridge.gg\";\n const sessionResult = await subscribeCreateSession(\n sessionKeyGuid,\n cartridgeApiUrl,\n );\n\n // auth is: [shortstring!('authorization-by-registered'), owner_guid]\n const ownerGuid = sessionResult.authorization[1];\n const session: SessionRegistration = {\n username: sessionResult.controller.accountID,\n address: sessionResult.controller.address,\n ownerGuid,\n expiresAt: sessionResult.expiresAt,\n guardianKeyGuid: \"0x0\",\n metadataHash: \"0x0\",\n sessionKeyGuid,\n };\n localStorage.setItem(\"session\", JSON.stringify(session));\n\n this.tryRetrieveFromQueryOrStorage();\n\n openedWindow?.close();\n\n return this.account;\n } catch (e) {\n console.log(e);\n }\n }\n\n switchStarknetChain(_chainId: string): Promise<boolean> {\n throw new Error(\"switchStarknetChain not implemented\");\n }\n\n addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean> {\n throw new Error(\"addStarknetChain not implemented\");\n }\n\n disconnect(): Promise<void> {\n localStorage.removeItem(\"sessionSigner\");\n localStorage.removeItem(\"session\");\n localStorage.removeItem(\"sessionPolicies\");\n this.account = undefined;\n this._username = undefined;\n return Promise.resolve();\n }\n\n async tryRetrieveFromQueryOrStorage() {\n if (this.account) {\n return this.account;\n }\n\n const signerString = localStorage.getItem(\"sessionSigner\");\n const signer = signerString ? JSON.parse(signerString) : null;\n let sessionRegistration: SessionRegistration | null = null;\n\n const sessionString = localStorage.getItem(\"session\");\n if (sessionString) {\n sessionRegistration = JSON.parse(sessionString);\n }\n\n if (window.location.search.includes(\"startapp\")) {\n const params = new URLSearchParams(window.location.search);\n const session = params.get(\"startapp\");\n if (session) {\n const possibleNewSession: SessionRegistration = JSON.parse(\n atob(session),\n );\n\n if (\n Number(possibleNewSession.expiresAt) !==\n Number(sessionRegistration?.expiresAt)\n ) {\n sessionRegistration = possibleNewSession;\n localStorage.setItem(\"session\", JSON.stringify(sessionRegistration));\n }\n\n // Remove the session query parameter\n params.delete(\"startapp\");\n const newUrl =\n window.location.pathname +\n (params.toString() ? `?${params.toString()}` : \"\") +\n window.location.hash;\n window.history.replaceState({}, document.title, newUrl);\n }\n }\n\n if (!sessionRegistration || !signer) {\n return;\n }\n\n // Check expiration\n const expirationTime = parseInt(sessionRegistration.expiresAt) * 1000;\n if (Date.now() >= expirationTime) {\n this.clearStoredSession();\n return;\n }\n\n // Check stored policies\n const storedPoliciesStr = localStorage.getItem(\"sessionPolicies\");\n if (storedPoliciesStr) {\n const storedPolicies = JSON.parse(\n storedPoliciesStr,\n ) as ParsedSessionPolicies;\n\n const isValid = this.validatePoliciesSubset(\n this._policies,\n storedPolicies,\n );\n\n if (!isValid) {\n this.clearStoredSession();\n return;\n }\n }\n\n this._username = sessionRegistration.username;\n this.account = new SessionAccount(this, {\n rpcUrl: this._rpcUrl,\n privateKey: signer.privKey,\n address: sessionRegistration.address,\n ownerGuid: sessionRegistration.ownerGuid,\n chainId: this._chainId,\n expiresAt: parseInt(sessionRegistration.expiresAt),\n policies: toWasmPolicies(this._policies),\n guardianKeyGuid: sessionRegistration.guardianKeyGuid,\n metadataHash: sessionRegistration.metadataHash,\n sessionKeyGuid: sessionRegistration.sessionKeyGuid,\n });\n\n return this.account;\n }\n\n private clearStoredSession(): void {\n localStorage.removeItem(\"sessionSigner\");\n localStorage.removeItem(\"session\");\n localStorage.removeItem(\"sessionPolicies\");\n }\n}\n"],"names":["SessionAccount","WalletAccount","provider","rpcUrl","privateKey","address","ownerGuid","chainId","expiresAt","policies","guardianKeyGuid","metadataHash","sessionKeyGuid","CartridgeSessionAccount","calls","normalizeCalls","SessionProvider","BaseProvider","rpc","redirectUrl","keychainUrl","apiUrl","contract","method","message","KEYCHAIN_URL","newPolicies","existingPolicies","existingContract","existingMethod","m","existingMessage","pk","stark","publicKey","ec","url","openedWindow","formattedPk","encode","signerToGuid","cartridgeApiUrl","sessionResult","subscribeCreateSession","session","e","_chainId","_chain","signerString","signer","sessionRegistration","sessionString","params","possibleNewSession","newUrl","expirationTime","storedPoliciesStr","storedPolicies","toWasmPolicies"],"mappings":";;;;;;AAUA,MAAqBA,UAAuBC,EAAc;AAAA,EACjD;AAAA,EAEP,YACEC,GACA;AAAA,IACE,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,SAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,GAaF;AACM,UAAA;AAAA,MACJ,UAAU,EAAE,SAAST,EAAO;AAAA,MAC5B,gBAAgBD;AAAA,MAChB,SAAAG;AAAA,IAAA,CACD,GAED,KAAK,aAAaQ,EAAwB;AAAA,MACxCV;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACA;AAAA,QACE,WAAAC;AAAA,QACA,UAAAC;AAAA,QACA,iBAAAC;AAAA,QACA,cAAAC;AAAA,QACA,gBAAAC;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeF,MAAM,QAAQE,GAAuD;AACnE,WAAO,KAAK,WAAW,QAAQC,EAAeD,CAAK,CAAC;AAAA,EAAA;AAExD;ACzCA,MAAqBE,UAAwBC,EAAa;AAAA,EACjD,KAAK;AAAA,EACL,OAAO;AAAA,EAEJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEV,YAAY;AAAA,IACV,KAAAC;AAAA,IACA,SAAAX;AAAA,IACA,UAAAE;AAAA,IACA,aAAAU;AAAA,IACA,aAAAC;AAAA,IACA,QAAAC;AAAA,EAAA,GACiB;AACX,UAAA,GAEN,KAAK,YAAY;AAAA,MACf,UAAU;AAAA,MACV,WAAWZ,EAAS,YAChB,OAAO;AAAA,QACL,OAAO,QAAQA,EAAS,SAAS,EAAE,IAAI,CAAC,CAACJ,GAASiB,CAAQ,MAAM;AAAA,UAC9DjB;AAAA,UACA;AAAA,YACE,GAAGiB;AAAA,YACH,SAASA,EAAS,QAAQ,IAAI,CAACC,OAAY;AAAA,cACzC,GAAGA;AAAA,cACH,YAAY;AAAA,YAAA,EACZ;AAAA,UAAA;AAAA,QAEL,CAAA;AAAA,MAAA,IAEH;AAAA,MACJ,UAAUd,EAAS,UAAU,IAAI,CAACe,OAAa;AAAA,QAC7C,GAAGA;AAAA,QACH,YAAY;AAAA,MAAA,EACZ;AAAA,IACJ,GAEA,KAAK,UAAUN,GACf,KAAK,WAAWX,GAChB,KAAK,eAAeY,GACpB,KAAK,eAAeC,KAAeK,GACnC,KAAK,UAAUJ,GAEX,OAAO,SAAW,QACnB,OAAe,8BAA8B;AAAA,EAChD;AAAA,EAGM,uBACNK,GACAC,GACS;AACT,QAAID,EAAY,WAAW;AACrB,UAAA,CAACC,EAAiB,UAAkB,QAAA;AAE7B,iBAAA,CAACtB,GAASiB,CAAQ,KAAK,OAAO,QAAQI,EAAY,SAAS,GAAG;AACjE,cAAAE,IAAmBD,EAAiB,UAAUtB,CAAO;AACvD,YAAA,CAACuB,EAAyB,QAAA;AAEnB,mBAAAL,KAAUD,EAAS,SAAS;AAC/B,gBAAAO,IAAiBD,EAAiB,QAAQ;AAAA,YAC9C,CAACE,MAAMA,EAAE,eAAeP,EAAO;AAAA,UACjC;AACA,cAAI,CAACM,KAAkB,CAACA,EAAe,WAAmB,QAAA;AAAA,QAAA;AAAA,MAC5D;AAAA,IACF;AAGF,QAAIH,EAAY,UAAU;AACpB,UAAA,CAACC,EAAiB,SAAiB,QAAA;AAE5B,iBAAAH,KAAWE,EAAY,UAAU;AACpC,cAAAK,IAAkBJ,EAAiB,SAAS;AAAA,UAChD,CAACG,MACC,KAAK,UAAUA,EAAE,MAAM,MAAM,KAAK,UAAUN,EAAQ,MAAM,KAC1D,KAAK,UAAUM,EAAE,KAAK,MAAM,KAAK,UAAUN,EAAQ,KAAK;AAAA,QAC5D;AACA,YAAI,CAACO,KAAmB,CAACA,EAAgB,WAAmB,QAAA;AAAA,MAAA;AAAA,IAC9D;AAGK,WAAA;AAAA,EAAA;AAAA,EAGT,MAAM,WAAW;AACf,iBAAM,KAAK,8BAA8B,GAClC,KAAK;AAAA,EAAA;AAAA,EAGd,MAAM,QAA4C;AAChD,WAAI,KAAK,UACA,KAAK,WAGT,KAAA,UAAU,MAAM,KAAK,8BAA8B,GACjD,KAAK;AAAA,EAAA;AAAA,EAGd,MAAM,UAA8C;AAClD,QAAI,KAAK;AACP,aAAO,KAAK;AAId,QADK,KAAA,UAAU,MAAM,KAAK,8BAA8B,GACpD,KAAK;AACP,aAAO,KAAK;AAGR,UAAAC,IAAKC,EAAM,cAAc,GACzBC,IAAYC,EAAG,WAAW,YAAYH,CAAE;AAEjC,iBAAA;AAAA,MACX;AAAA,MACA,KAAK,UAAU;AAAA,QACb,SAASA;AAAA,QACT,QAAQE;AAAA,MACT,CAAA;AAAA,IACH,GAEA,aAAa,QAAQ,mBAAmB,KAAK,UAAU,KAAK,SAAS,CAAC;AAEhE,UAAAE,IAAM,GACV,KAAK,YACP,uBAAuBF,CAAS,iBAC9B,KAAK,YACP,0CAA0C,KAAK;AAAA,MAC7C,KAAK;AAAA,IAAA,CACN,YAAY,KAAK,OAAO;AAEZ,iBAAA,QAAQ,qBAAqB,KAAK,EAAE;AACjD,UAAMG,IAAe,OAAO,KAAKD,GAAK,QAAQ;AAE1C,QAAA;AACI,YAAAE,IAAcC,EAAO,aAAaP,CAAE,GAEpCpB,IAAiB4B,EAAa;AAAA,QAClC,UAAU,EAAE,YAAYF,EAAY;AAAA,MAAA,CACrC,GAEKG,IAAkB,KAAK,WAAW,4BAClCC,IAAgB,MAAMC;AAAA,QAC1B/B;AAAA,QACA6B;AAAA,MACF,GAGMnC,IAAYoC,EAAc,cAAc,CAAC,GACzCE,IAA+B;AAAA,QACnC,UAAUF,EAAc,WAAW;AAAA,QACnC,SAASA,EAAc,WAAW;AAAA,QAClC,WAAApC;AAAA,QACA,WAAWoC,EAAc;AAAA,QACzB,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,gBAAA9B;AAAA,MACF;AACA,0BAAa,QAAQ,WAAW,KAAK,UAAUgC,CAAO,CAAC,GAEvD,KAAK,8BAA8B,GAEnCP,GAAc,MAAM,GAEb,KAAK;AAAA,aACLQ,GAAG;AACV,cAAQ,IAAIA,CAAC;AAAA,IAAA;AAAA,EACf;AAAA,EAGF,oBAAoBC,GAAoC;AAChD,UAAA,IAAI,MAAM,qCAAqC;AAAA,EAAA;AAAA,EAGvD,iBAAiBC,GAAsD;AAC/D,UAAA,IAAI,MAAM,kCAAkC;AAAA,EAAA;AAAA,EAGpD,aAA4B;AAC1B,wBAAa,WAAW,eAAe,GACvC,aAAa,WAAW,SAAS,GACjC,aAAa,WAAW,iBAAiB,GACzC,KAAK,UAAU,QACf,KAAK,YAAY,QACV,QAAQ,QAAQ;AAAA,EAAA;AAAA,EAGzB,MAAM,gCAAgC;AACpC,QAAI,KAAK;AACP,aAAO,KAAK;AAGR,UAAAC,IAAe,aAAa,QAAQ,eAAe,GACnDC,IAASD,IAAe,KAAK,MAAMA,CAAY,IAAI;AACzD,QAAIE,IAAkD;AAEhD,UAAAC,IAAgB,aAAa,QAAQ,SAAS;AAKpD,QAJIA,MACoBD,IAAA,KAAK,MAAMC,CAAa,IAG5C,OAAO,SAAS,OAAO,SAAS,UAAU,GAAG;AAC/C,YAAMC,IAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,GACnDR,IAAUQ,EAAO,IAAI,UAAU;AACrC,UAAIR,GAAS;AACX,cAAMS,IAA0C,KAAK;AAAA,UACnD,KAAKT,CAAO;AAAA,QACd;AAEA,QACE,OAAOS,EAAmB,SAAS,MACnC,OAAOH,GAAqB,SAAS,MAEfA,IAAAG,GACtB,aAAa,QAAQ,WAAW,KAAK,UAAUH,CAAmB,CAAC,IAIrEE,EAAO,OAAO,UAAU;AACxB,cAAME,IACJ,OAAO,SAAS,YACfF,EAAO,aAAa,IAAIA,EAAO,SAAS,CAAC,KAAK,MAC/C,OAAO,SAAS;AAClB,eAAO,QAAQ,aAAa,CAAI,GAAA,SAAS,OAAOE,CAAM;AAAA,MAAA;AAAA,IACxD;AAGE,QAAA,CAACJ,KAAuB,CAACD;AAC3B;AAIF,UAAMM,IAAiB,SAASL,EAAoB,SAAS,IAAI;AAC7D,QAAA,KAAK,IAAI,KAAKK,GAAgB;AAChC,WAAK,mBAAmB;AACxB;AAAA,IAAA;AAII,UAAAC,IAAoB,aAAa,QAAQ,iBAAiB;AAChE,QAAIA,GAAmB;AACrB,YAAMC,IAAiB,KAAK;AAAA,QAC1BD;AAAA,MACF;AAOA,UAAI,CALY,KAAK;AAAA,QACnB,KAAK;AAAA,QACLC;AAAA,MACF,GAEc;AACZ,aAAK,mBAAmB;AACxB;AAAA,MAAA;AAAA,IACF;AAGF,gBAAK,YAAYP,EAAoB,UAChC,KAAA,UAAU,IAAIlD,EAAe,MAAM;AAAA,MACtC,QAAQ,KAAK;AAAA,MACb,YAAYiD,EAAO;AAAA,MACnB,SAASC,EAAoB;AAAA,MAC7B,WAAWA,EAAoB;AAAA,MAC/B,SAAS,KAAK;AAAA,MACd,WAAW,SAASA,EAAoB,SAAS;AAAA,MACjD,UAAUQ,EAAe,KAAK,SAAS;AAAA,MACvC,iBAAiBR,EAAoB;AAAA,MACrC,cAAcA,EAAoB;AAAA,MAClC,gBAAgBA,EAAoB;AAAA,IAAA,CACrC,GAEM,KAAK;AAAA,EAAA;AAAA,EAGN,qBAA2B;AACjC,iBAAa,WAAW,eAAe,GACvC,aAAa,WAAW,SAAS,GACjC,aAAa,WAAW,iBAAiB;AAAA,EAAA;AAE7C;"}
|