@steerprotocol/app-loader 3.0.6 → 3.1.0
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/README.md +86 -0
- package/lib/browser.d.ts +5 -2
- package/lib/browser.mjs +247 -72
- package/lib/browser.mjs.map +1 -1
- package/lib/index.cjs +3687 -107
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.ts +5 -2
- package/lib/index.mjs +3687 -107
- package/lib/index.mjs.map +1 -1
- package/lib/internal/asyncHostCalls.d.ts +37 -0
- package/lib/internal/instantiate.d.ts +3 -4
- package/lib/internal/loadOptions.d.ts +1 -0
- package/lib/internal/panoptic/deps.d.ts +24 -0
- package/lib/internal/panoptic/dynamicJobs/fragments.d.ts +10 -0
- package/lib/internal/panoptic/dynamicJobs/renderExecuteJob.d.ts +8 -0
- package/lib/internal/panoptic/fragments/collateral.d.ts +5 -0
- package/lib/internal/panoptic/fragments/erc20.d.ts +3 -0
- package/lib/internal/panoptic/fragments/hypovault.d.ts +12 -0
- package/lib/internal/panoptic/fragments/merkle.d.ts +22 -0
- package/lib/internal/panoptic/fragments/panoptic.d.ts +17 -0
- package/lib/internal/panoptic/fragments/permit2.d.ts +3 -0
- package/lib/internal/panoptic/fragments/support.d.ts +16 -0
- package/lib/internal/panoptic/fragments/uniswap.d.ts +10 -0
- package/lib/internal/panoptic/fragments/weth.d.ts +19 -0
- package/lib/internal/panoptic/handlers.d.ts +27 -0
- package/lib/internal/panoptic/protocol.d.ts +29 -0
- package/lib/internal/panoptic/reads/account.d.ts +11 -0
- package/lib/internal/panoptic/reads/greeks.d.ts +5 -0
- package/lib/internal/panoptic/reads/hypovault.d.ts +7 -0
- package/lib/internal/panoptic/reads/pool.d.ts +10 -0
- package/lib/internal/panoptic/reads/uniswap.d.ts +6 -0
- package/lib/internal/panoptic/support.d.ts +20 -0
- package/lib/internal/panopticBrowserRuntime.d.ts +6 -0
- package/lib/internal/panopticDtos.d.ts +72 -0
- package/lib/internal/panopticHostEnvelope.d.ts +2 -0
- package/lib/internal/panopticHostImport.d.ts +17 -0
- package/lib/internal/panopticJsonArgs.d.ts +26 -0
- package/lib/internal/panopticRuntime.d.ts +12 -0
- package/lib/internal/panopticScalars.d.ts +10 -0
- package/lib/internal/panopticSerialization.d.ts +19 -0
- package/lib/internal/panopticSources.d.ts +22 -0
- package/lib/loadOptions.d.ts +5 -0
- package/lib/node.cjs +3634 -72
- package/lib/node.cjs.map +1 -1
- package/lib/node.d.ts +5 -2
- package/lib/node.mjs +3634 -72
- package/lib/node.mjs.map +1 -1
- package/lib/panoptic.cjs +19 -0
- package/lib/panoptic.cjs.map +1 -0
- package/lib/panoptic.d.ts +56 -0
- package/lib/panoptic.mjs +1 -0
- package/lib/panoptic.mjs.map +1 -0
- package/package.json +44 -3
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/internal/instantiate.ts","../src/timestring.ts","../src/Candle.ts","../src/RawTradeData.ts"],"sourcesContent":["/**\n * Runtime-agnostic entrypoints for loading Steer wasm bundles.\n */\nimport { instantiate, Candle, RawTradeData } from './internal/instantiate';\nimport type { WasmModule } from './WasmModule';\n\n/**\n * Load a wasm bundle synchronously. Only accepts the actual binary data.\n * @param input - Wasm bundle data\n * @param imports - Imports\n * @returns\n */\nfunction loadWasmSync(input: ArrayBuffer, imports = {}): WasmModule {\n return instantiate(new WebAssembly.Module(input), imports, {\n getFetch: getRuntimeFetch,\n getCcxt: getRuntimeCcxt,\n });\n}\n\n/**\n * Load a wasm bundle asynchronously. Accepts the actual binary data or a runtime-specific string source.\n * In browsers, string inputs are treated as URLs. In Node.js, string inputs may be URLs or filesystem paths.\n * @param input - Wasm bundle data, URL, or filesystem path\n * @param imports - Imports\n * @returns\n */\nasync function loadWasm(input: string | ArrayBuffer, imports = {}): Promise<WasmModule> {\n const module = typeof input === 'string' ? await compileFromString(input) : await WebAssembly.compile(input);\n return instantiate(module, imports, {\n getFetch: getRuntimeFetch,\n getCcxt: getRuntimeCcxt,\n });\n}\n\n/**\n * Resolves a wasm module from a runtime-specific string source.\n * @param input - Browser URL, Node URL, or Node filesystem path.\n * @returns The compiled wasm module.\n */\nasync function compileFromString(input: string): Promise<WebAssembly.Module> {\n if (!isNodeRuntime()) {\n return compileFromUrl(input);\n }\n\n if (isHttpUrl(input)) {\n return compileFromUrl(input);\n }\n\n // In Node, non-URL strings are treated as filesystem paths.\n const fs = (await importRuntimeModule('fs/promises')) as typeof import('fs/promises');\n return WebAssembly.compile(await fs.readFile(input));\n}\n\n/**\n * Fetches and compiles a wasm module from a URL.\n * @param url - URL that serves a wasm binary.\n * @returns The compiled wasm module.\n */\nasync function compileFromUrl(url: string): Promise<WebAssembly.Module> {\n const fetchImpl = await getRuntimeFetch();\n const response = await fetchImpl(url);\n\n if (typeof WebAssembly.compileStreaming === 'function') {\n try {\n // Clone the response so the body is still readable if streaming compilation fails.\n return await WebAssembly.compileStreaming(Promise.resolve(response.clone()));\n } catch {\n // Fall back to ArrayBuffer for non-standard wasm responses.\n }\n }\n\n return WebAssembly.compile(await response.arrayBuffer());\n}\n\n/**\n * Resolves the active runtime's `fetch` implementation.\n * @returns The bound `fetch` function.\n */\nasync function getRuntimeFetch(): Promise<typeof fetch> {\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch.bind(globalThis);\n }\n\n if (!isNodeRuntime()) {\n throw new Error('Fetch is not available in this browser runtime.');\n }\n\n throw new Error('Fetch is not available in this Node runtime. Node 18+ is required.');\n}\n\n/**\n * Resolves the active runtime's `ccxt` implementation.\n * @returns The `ccxt` module or browser global.\n */\nasync function getRuntimeCcxt(): Promise<any> {\n if (isNodeRuntime()) {\n const ccxt = (await importRuntimeModule('ccxt')) as typeof import('ccxt');\n return ccxt.default ?? ccxt;\n }\n\n const ccxt = (globalThis as typeof globalThis & { ccxt?: any }).ccxt;\n\n if (!ccxt) {\n throw new Error('ccxt is not available in this browser runtime.');\n }\n\n return ccxt;\n}\n\n/**\n * Reports whether the current runtime is Node.js.\n * @returns `true` when running under Node.js.\n */\nfunction isNodeRuntime(): boolean {\n return typeof process !== 'undefined' && !!process.versions?.node;\n}\n\n/**\n * Checks whether a string is an HTTP(S) URL.\n * @param value - Candidate URL string.\n * @returns `true` when the value parses as an HTTP(S) URL.\n */\nfunction isHttpUrl(value: string): boolean {\n try {\n const url = new URL(value);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}\n\n/**\n * Imports a module through either CommonJS or dynamic import.\n * @typeParam T - Expected module shape.\n * @param specifier - Module specifier to resolve.\n * @returns The imported module namespace.\n */\nfunction importRuntimeModule<T = unknown>(specifier: string): Promise<T> {\n if (isNodeRuntime() && typeof require === 'function') {\n // Prefer `require` when available so CommonJS consumers resolve built-ins consistently.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return Promise.resolve(require(specifier) as T);\n }\n\n // `new Function` avoids TypeScript downleveling dynamic import into `require`.\n return new Function('s', 'return import(s)')(specifier) as Promise<T>;\n}\n\nexport type { WasmModule } from './WasmModule';\nexport { loadWasm, loadWasmSync, Candle, RawTradeData };\n","/**\n * Wasm instantiation and host-interop helpers shared by all runtime entrypoints.\n */\nimport { ethers } from 'ethers';\nimport { Candle, generateCandles } from '../Candle';\nimport { RawTradeData } from '../RawTradeData';\nimport type { WasmModule } from '../WasmModule';\n\nenum State {\n None = 0,\n Unwinding = 1,\n Rewinding = 2,\n}\n\n/**\n * Runtime-provided host adapters for environment-specific dependencies.\n */\ntype RuntimeAdapters = {\n getFetch?: () => Promise<typeof fetch>;\n getCcxt?: () => Promise<any>;\n};\n\nexport { Candle, RawTradeData };\nexport type { WasmModule };\n\n/**\n * Instantiates a wasm module and wraps its exports with host-side helpers.\n * @param module - Compiled wasm module.\n * @param imports - Additional import object entries.\n * @param runtime - Runtime adapters for optional host integrations.\n * @returns The wrapped wasm exports.\n */\nexport function instantiate(module: WebAssembly.Module, imports = {}, runtime: RuntimeAdapters = {}): WasmModule {\n let WASM_MEMORY: WebAssembly.Memory;\n let WASM_EXPORTS: WasmModule;\n let WASM_DV: DataView;\n\n let ASYNCIFY_PTR = 0;\n let ASYNCIFY_MEM!: Uint32Array;\n let ASYNCIFY_INITIALIZED = false;\n\n let fetchFn: (() => Promise<ArrayBuffer>) | null = null;\n let ccxtFn: (() => Promise<number[][]>) | null = null;\n\n let detachedValue: number[][] | ArrayBuffer | null = null;\n let executeInFlight = false;\n const pinScopes: number[][] = [];\n\n const adaptedImports = Object.assign(\n {\n console: {\n /**\n * Logs a lifted AssemblyScript string.\n * @param text - Pointer to the message string.\n */\n log(text: number) {\n console.log(__liftString(text));\n },\n },\n ethers: {\n /**\n * Hashes a lifted string with `keccak256`.\n * @param str_ptr - Pointer to the input string.\n * @returns Pointer to the hashed string result.\n */\n keccak256_str(str_ptr: number) {\n const str = __liftString(str_ptr);\n const hash = ethers.keccak256(str!);\n return withAutoPinScope(() => __lowerString(hash));\n },\n /**\n * Hashes a lifted buffer with `keccak256`.\n * @param buf_ptr - Pointer to the input buffer.\n * @returns Pointer to the hashed string result.\n */\n keccak256_buf(buf_ptr: number) {\n const buf = __liftBuffer(buf_ptr);\n const hash = ethers.keccak256(new Uint8Array(buf!));\n return withAutoPinScope(() => __lowerString(hash));\n },\n },\n // @ts-ignore\n env: {\n /**\n * Raises a JavaScript error for an AssemblyScript abort.\n * @param message - Pointer to the abort message.\n * @param fileName - Pointer to the source filename.\n * @param lineNumber - Source line number.\n * @param columnNumber - Source column number.\n */\n abort(message: number, fileName: number, lineNumber: number, columnNumber: number) {\n (() => {\n throw Error(`${__liftString(message)} in ${__liftString(fileName)}:${lineNumber}:${columnNumber}`);\n })();\n },\n /**\n * Initializes Asyncify bookkeeping for host callbacks.\n * @param frame_ptr - Asyncify frame pointer.\n * @param stack_ptr - Asyncify stack pointer.\n */\n _initAsyncify(frame_ptr: number, stack_ptr: number) {\n // @ts-ignore\n if (!WASM_EXPORTS['asyncify_get_state'])\n throw new Error(\n 'Asyncify initialized, but not enabled when run! Compile with the --runPasses asyncify flag or asyncify-shim transform!',\n );\n if (ASYNCIFY_INITIALIZED) return;\n ASYNCIFY_PTR = frame_ptr;\n ASYNCIFY_MEM[ASYNCIFY_PTR >> 2] = ASYNCIFY_PTR + 8;\n ASYNCIFY_MEM[(ASYNCIFY_PTR + 4) >> 2] = stack_ptr;\n ASYNCIFY_INITIALIZED = true;\n },\n /**\n * Aggregates lifted trade data into candles.\n * @param data - Pointer to the serialized trade array.\n * @param candleSize - Pointer to the candle size string.\n * @returns Pointer to the serialized candle array.\n */\n generateCandles(data: number, candleSize: number) {\n const _data = __liftString(data) || '[]';\n const _candleSize = __liftString(candleSize) || '69m';\n const candles = generateCandles(JSON.parse(_data), _candleSize);\n return withAutoPinScope(() => __lowerString(JSON.stringify(candles)));\n },\n /**\n * Logs a lifted AssemblyScript string.\n * @param text - Pointer to the message string.\n */\n 'console.log': (text: number) => {\n console.log(__liftString(text));\n },\n /**\n * Schedules an async OHLCV request for asyncified execution.\n * @param exchangeId - Pointer to the exchange id string.\n * @param symbol - Pointer to the market symbol string.\n * @param timeframe - Pointer to the timeframe string.\n * @param limit - Maximum number of rows.\n * @param since - Optional start timestamp.\n * @returns Pointer to the rewound OHLCV matrix when replaying.\n */\n ccxt_fetchOHLCV: (exchangeId: number, symbol: number, timeframe: number, limit: number, since: number) => {\n // @ts-ignore\n const currentState = WASM_EXPORTS.asyncify_get_state();\n if (currentState === State.Rewinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_rewind();\n // Replay returns the host result captured during the earlier unwind pass.\n // @ts-ignore\n const ptr = __lowerStaticArray(\n (pointer: number, value: any) => {\n __setU32(pointer, __lowerStaticArray(__setF64, 7, 3, value, Float64Array));\n },\n 8,\n 2,\n detachedValue as number[][],\n );\n return ptr;\n }\n\n const _exchange = __liftString(exchangeId);\n const _symbol = __liftString(symbol);\n const _timeframe = __liftString(timeframe);\n ccxtFn = async () => {\n if (!_exchange || !_symbol || !_timeframe)\n throw new Error('Exchange, Symbol, or Timeframe not provided when fetching OHCLV data.');\n\n const ccxt = await getCcxtOrThrow(runtime);\n // @ts-ignore\n const data = await new ccxt[_exchange]({\n apiKey: '',\n secret: '',\n }).fetchOHLCV(_symbol, _timeframe, since, limit);\n return data;\n };\n\n // Yield back to JS so the pending promise can resolve before wasm resumes.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_unwind(ASYNCIFY_PTR);\n },\n },\n 'as-fetch': {\n /**\n * Initializes Asyncify bookkeeping for as-fetch host calls.\n * @param frame_ptr - Asyncify frame pointer.\n * @param stack_ptr - Asyncify stack pointer.\n */\n _initAsyncify(frame_ptr: number, stack_ptr: number) {\n // @ts-ignore\n if (!WASM_EXPORTS['asyncify_get_state'])\n throw new Error(\n 'Asyncify initialized, but not enabled when run! Compile with the --runPasses asyncify flag or asyncify-shim transform!',\n );\n if (ASYNCIFY_INITIALIZED) return;\n ASYNCIFY_PTR = frame_ptr;\n ASYNCIFY_MEM[ASYNCIFY_PTR >> 2] = ASYNCIFY_PTR + 8;\n ASYNCIFY_MEM[(ASYNCIFY_PTR + 4) >> 2] = stack_ptr;\n ASYNCIFY_INITIALIZED = true;\n },\n /**\n * Executes a synchronous asyncified POST request.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @param body - Pointer to the request body.\n * @returns Pointer to the response body when replaying.\n */\n _fetchPOSTSync(url: number, mode: number, headers: number, body: number) {\n // @ts-ignore\n const currentState = WASM_EXPORTS.asyncify_get_state();\n if (currentState === State.Rewinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_rewind();\n // Replay writes the buffered response back into wasm memory.\n const ptr = __lowerBuffer(detachedValue as ArrayBuffer);\n detachedValue = null;\n return ptr;\n }\n\n fetchFn = async () => {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'POST',\n mode: modeToString(mode) || 'cors',\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n body: __liftBuffer(body),\n });\n const value = await res.arrayBuffer();\n return value;\n };\n\n // Asyncify suspends wasm here and resumes once `fetchFn` has populated `detachedValue`.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_unwind(ASYNCIFY_PTR);\n },\n /**\n * Executes a synchronous asyncified GET request.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @returns Pointer to the response body when replaying.\n */\n _fetchGETSync(url: number, mode: number, headers: number) {\n // @ts-ignore\n const currentState = WASM_EXPORTS.asyncify_get_state();\n if (currentState === State.Rewinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_rewind();\n // Replay writes the buffered response back into wasm memory.\n const ptr = __lowerBuffer(detachedValue as ArrayBuffer);\n detachedValue = null;\n return ptr;\n }\n\n fetchFn = async () => {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'GET',\n mode: modeToString(mode) || 'cors',\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n });\n const value = await res.arrayBuffer();\n return value;\n };\n\n // Asyncify suspends wasm here and resumes once `fetchFn` has populated `detachedValue`.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_unwind(ASYNCIFY_PTR);\n },\n /**\n * Executes an asynchronous GET request and forwards the response to wasm.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @param callbackID - Wasm callback identifier.\n */\n _fetchGET(url: number, mode: number, headers: number, callbackID: number) {\n void (async () => {\n try {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'GET',\n mode: modeToString(mode) || 'cors',\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n });\n const body = await res.arrayBuffer();\n WASM_EXPORTS.responseHandler(body, res.status, res.redirected ? 1 : 0, callbackID);\n } catch (error) {\n console.error(error);\n }\n })();\n },\n /**\n * Executes an asynchronous POST request and forwards the response to wasm.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @param body - Request body.\n * @param callbackID - Wasm callback identifier.\n */\n _fetchPOST(url: number, mode: number, headers: number, body: ArrayBuffer, callbackID: number) {\n void (async () => {\n try {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'POST',\n mode: modeToString(mode) || 'cors',\n body: body,\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n });\n const responseBody = await res.arrayBuffer();\n WASM_EXPORTS.responseHandler(responseBody, res.status, res.redirected ? 1 : 0, callbackID);\n } catch (error) {\n console.error(error);\n }\n })();\n },\n },\n },\n imports,\n );\n\n const mod = new WebAssembly.Instance(module, adaptedImports) as unknown as { exports: WasmModule };\n WASM_EXPORTS = mod.exports;\n // @ts-ignore\n WASM_MEMORY = WASM_EXPORTS.memory || adaptedImports.env.memory;\n\n ASYNCIFY_MEM = new Uint32Array(WASM_MEMORY.buffer);\n\n const handledExports = Object.setPrototypeOf(\n {\n /**\n * Forwards an HTTP response body into the wasm export.\n * @param body - Response body.\n * @param statusCode - HTTP status code.\n * @param redirected - Whether the request redirected.\n * @param callbackID - Wasm callback identifier.\n */\n responseHandler(body: ArrayBuffer, statusCode: number, redirected: boolean, callbackID: number) {\n if (!WASM_EXPORTS['responseHandler'])\n throw new Error(\n 'Unable to call .responseHandler on wasm module. Add the line export { responseHandler } from \"as-fetch/assembly\" to your entry file.',\n );\n withPinScope(() => {\n // @ts-ignore\n WASM_EXPORTS.responseHandler(__lowerBuffer(body), statusCode, redirected ? 1 : 0, callbackID);\n });\n },\n /**\n * Initializes the wasm module with a JSON configuration payload.\n * @param config - Serialized connector configuration.\n * @returns `true` when initialization succeeds.\n */\n initialize(config: string): boolean {\n if (!WASM_EXPORTS['initialize'])\n throw new Error('Unable to call .initialize on wasm module. Are you sure this is a data connector?');\n try {\n withPinScope(() => {\n // @ts-ignore\n WASM_EXPORTS.initialize(__lowerString(config));\n });\n return true;\n } catch (e) {\n console.error(e);\n return false;\n }\n },\n /**\n * Executes the wasm module, replaying arguments across asyncify rewinds.\n * @param params - Logical execute arguments.\n * @returns The lifted execute result.\n */\n async execute(...params: number[] | string[] | ArrayBuffer[] | null[]): Promise<string | null> {\n if (!WASM_EXPORTS['execute'])\n throw new Error('Unable to call .execute on wasm module. Are you sure this is a data connector?');\n if (executeInFlight) {\n throw new Error('Concurrent execute calls are not supported on the same wasm instance.');\n }\n\n executeInFlight = true;\n const replayArgs = snapshotLogicalArgs(params);\n // Keep one pin scope alive across the full unwind/rewind cycle.\n pinScopes.push([]);\n\n try {\n let result: unknown;\n\n try {\n result = executeWithReplayArgs(replayArgs);\n } catch (error) {\n if (params.length !== 0) {\n throw error;\n }\n\n // Legacy v1 bundles can expect execute(\"\") for their first host-driven request.\n replayArgs.splice(0, replayArgs.length, '');\n result = executeWithReplayArgs(replayArgs);\n }\n\n if (ASYNCIFY_INITIALIZED) {\n // @ts-ignore\n while (WASM_EXPORTS.asyncify_get_state() === State.Unwinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_unwind();\n\n // Exactly one host callback should have staged work before the unwind completed.\n if (fetchFn) {\n const pendingFetch = fetchFn;\n fetchFn = null;\n detachedValue = await pendingFetch();\n }\n if (ccxtFn) {\n const pendingCcxt = ccxtFn;\n ccxtFn = null;\n detachedValue = await pendingCcxt();\n }\n\n // Resume wasm with the original logical arguments so pointers are freshly lowered.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_rewind(ASYNCIFY_PTR);\n\n result = executeWithReplayArgs(replayArgs);\n }\n }\n\n // @ts-ignore\n return __liftString(result);\n } finally {\n const scope = pinScopes.pop() || [];\n for (let i = scope.length - 1; i >= 0; i--) {\n WASM_EXPORTS.__unpin(scope[i]);\n }\n fetchFn = null;\n ccxtFn = null;\n detachedValue = null;\n executeInFlight = false;\n }\n },\n /**\n * Reads the connector configuration schema from wasm.\n * @returns The lifted configuration payload.\n */\n config() {\n if (!WASM_EXPORTS['config'])\n throw new Error('Unable to call .config on wasm module. Are you sure this is a data connector?');\n return withPinScope(() => __liftString(WASM_EXPORTS.config() as unknown as number));\n },\n /**\n * Reads the connector transform from wasm.\n * @returns The lifted transform payload.\n */\n transform() {\n if (!WASM_EXPORTS['transform'])\n throw new Error('Unable to call .transform on wasm module. Are you sure this is a data connector?');\n return withPinScope(() => __liftString(WASM_EXPORTS.transform() as unknown as number));\n },\n /**\n * Resets wasm module state when supported.\n */\n reset() {\n if (WASM_EXPORTS['reset']) WASM_EXPORTS.reset();\n },\n },\n WASM_EXPORTS,\n );\n\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n\n /**\n * Lowers a supported JS value into a wasm pointer or primitive.\n * @param val - JS value to lower.\n * @returns The lowered wasm value.\n */\n function __lower(val: number | string | ArrayBuffer | null): number {\n if (typeof val === 'number') {\n return val;\n } else if (typeof val === 'string') {\n return __lowerString(val);\n } else if (val instanceof ArrayBuffer) {\n return __lowerBuffer(val);\n } else {\n return 0;\n }\n }\n\n /**\n * Lowers a list of logical execute arguments for a wasm call.\n * @param values - Logical argument values.\n * @returns Lowered argument list.\n */\n function lowerArgs(values: Array<number | string | ArrayBuffer | null>): number[] {\n const loweredArgs = new Array<number>(values.length);\n for (let i = 0; i < values.length; i++) {\n loweredArgs[i] = __lower(values[i]);\n }\n return loweredArgs;\n }\n\n /**\n * Copies replayable execute arguments so async rewinds do not reuse detached buffers.\n * @param values - Logical argument values.\n * @returns A replay-safe copy of the arguments.\n */\n function snapshotLogicalArgs(\n values: Array<number | string | ArrayBuffer | null>,\n ): Array<number | string | ArrayBuffer | null> {\n return values.map((value) => {\n if (value instanceof ArrayBuffer) {\n // Asyncify may replay after the original buffer has been transferred or mutated.\n return value.slice(0);\n }\n\n return value;\n });\n }\n\n /**\n * Executes the wasm `execute` export with replay-safe arguments.\n * @param values - Logical argument values.\n * @returns The raw wasm result.\n */\n function executeWithReplayArgs(values: Array<number | string | ArrayBuffer | null>): unknown {\n return withAutoPinScope(() => WASM_EXPORTS.execute(...lowerArgs(values)));\n }\n\n /**\n * Tracks and releases wasm-pinned allocations created during a call.\n * @typeParam T - Callback return type.\n * @param fn - Callback to run within the pin scope.\n * @returns The callback result.\n */\n function withPinScope<T>(fn: () => T): T {\n pinScopes.push([]);\n\n try {\n return fn();\n } finally {\n // Unpin in reverse order so nested temporary allocations are released last.\n const scope = pinScopes.pop() || [];\n for (let i = scope.length - 1; i >= 0; i--) {\n WASM_EXPORTS.__unpin(scope[i]);\n }\n }\n }\n\n /**\n * Reuses an existing pin scope or creates one for standalone calls.\n * @typeParam T - Callback return type.\n * @param fn - Callback to run.\n * @returns The callback result.\n */\n function withAutoPinScope<T>(fn: () => T): T {\n if (pinScopes.length > 0) {\n // Nested helpers can reuse the active scope instead of creating a second cleanup pass.\n return fn();\n }\n\n return withPinScope(fn);\n }\n\n /**\n * Registers a pinned pointer to be released with the current scope.\n * @param ptr - Pinned wasm pointer.\n * @returns The same pointer.\n */\n function trackPinnedPointer(ptr: number): number {\n const scope = pinScopes[pinScopes.length - 1];\n if (scope) {\n scope.push(ptr);\n }\n\n return ptr;\n }\n\n /**\n * Lifts an AssemblyScript string pointer into JavaScript.\n * @param ptr - AssemblyScript string pointer.\n * @returns The lifted string, or `null` for a null pointer.\n */\n function __liftString(ptr: number): string | null {\n if (!ptr) return null;\n const end = (ptr + new Uint32Array(WASM_MEMORY.buffer)[(ptr - 4) >>> 2]) >>> 1;\n const memoryU16 = new Uint16Array(WASM_MEMORY.buffer);\n let start = ptr >>> 1;\n let string = '';\n while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, (start += 1024)));\n return string + String.fromCharCode(...memoryU16.subarray(start, end));\n }\n\n /**\n * Lowers a JavaScript string into AssemblyScript memory.\n * @param value - String to lower.\n * @returns Pointer to the lowered string.\n */\n function __lowerString(value: string): number {\n if (value == null) return 0;\n const length = value.length;\n const ptr = trackPinnedPointer(WASM_EXPORTS.__pin(WASM_EXPORTS.__new(length << 1, 2) >>> 0));\n const memoryU16 = new Uint16Array(WASM_MEMORY.buffer);\n for (let i = 0; i < length; ++i) memoryU16[(ptr >>> 1) + i] = value.charCodeAt(i);\n return ptr;\n }\n\n /**\n * Lifts an AssemblyScript buffer into JavaScript.\n * @param ptr - Buffer pointer.\n * @returns The lifted buffer, or `null` for a null pointer.\n */\n function __liftBuffer(ptr: number): ArrayBuffer | null {\n if (!ptr) return null;\n return WASM_MEMORY.buffer.slice(ptr, ptr + new Uint32Array(WASM_MEMORY.buffer)[(ptr - 4) >>> 2]);\n }\n\n /**\n * Lowers a JavaScript buffer into AssemblyScript memory.\n * @param value - Buffer to lower.\n * @returns Pointer to the lowered buffer.\n */\n function __lowerBuffer(value: ArrayBuffer): number {\n if (value == null) return 0;\n const ptr = trackPinnedPointer(WASM_EXPORTS.__pin(WASM_EXPORTS.__new(value.byteLength, 1) >>> 0));\n new Uint8Array(WASM_MEMORY.buffer).set(new Uint8Array(value), ptr);\n return ptr;\n }\n\n /**\n * Lifts an AssemblyScript array into JavaScript values.\n * @param liftElement - Element lifting callback.\n * @param align - Element alignment shift.\n * @param ptr - Array pointer.\n * @returns The lifted array, or `null` for a null pointer.\n */\n function __liftArray(liftElement: Function, align: number, ptr: number): any[] | null {\n if (!ptr) return null;\n const dataStart = __getU32(ptr + 4);\n const length = WASM_DV.getUint32(ptr + 12, true);\n const values = new Array(length);\n for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + ((i << align) >>> 0));\n return values;\n }\n\n /**\n * Lowers a JavaScript array into AssemblyScript memory.\n * @param lowerElement - Element lowering callback.\n * @param id - AssemblyScript runtime type id.\n * @param align - Element alignment shift.\n * @param values - Values to lower.\n * @param typedConstructor - Optional typed array constructor for bulk copies.\n * @returns Pointer to the lowered array.\n */\n function __lowerStaticArray(\n lowerElement: Function,\n id: number,\n align: number,\n values: any[],\n typedConstructor: any | null = null,\n ) {\n if (values == null) return 0;\n const length = values.length;\n const buffer = trackPinnedPointer(WASM_EXPORTS.__pin(WASM_EXPORTS.__new(length << align, id)) >>> 0) >>> 0;\n if (typedConstructor) {\n new typedConstructor(WASM_MEMORY.buffer, buffer, length).set(values);\n } else {\n for (let i = 0; i < length; i++) lowerElement(buffer + ((i << align) >>> 0), values[i]);\n }\n return buffer;\n }\n\n /**\n * Writes a `u32` to wasm memory and refreshes the view if memory grew.\n * @param ptr - Memory offset to write.\n * @param value - Value to write.\n */\n function __setU32(ptr: number, value: number) {\n try {\n WASM_DV.setUint32(ptr, value, true);\n } catch {\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n WASM_DV.setUint32(ptr, value, true);\n }\n }\n\n /**\n * Writes an `f64` to wasm memory and refreshes the view if memory grew.\n * @param ptr - Memory offset to write.\n * @param value - Value to write.\n */\n function __setF64(ptr: number, value: number) {\n try {\n WASM_DV.setFloat64(ptr, value, true);\n } catch {\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n WASM_DV.setFloat64(ptr, value, true);\n }\n }\n\n /**\n * Reads a `u32` from wasm memory and refreshes the view if memory grew.\n * @param ptr - Memory offset to read.\n * @returns The loaded value.\n */\n function __getU32(ptr: number): number {\n try {\n return WASM_DV.getUint32(ptr, true);\n } catch {\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n return WASM_DV.getUint32(ptr, true);\n }\n }\n\n return handledExports;\n}\n\n/**\n * Resolves `fetch` from the runtime adapters or throws.\n * @param runtime - Runtime adapter bag.\n * @returns The runtime `fetch` implementation.\n */\nasync function getFetchOrThrow(runtime: RuntimeAdapters): Promise<typeof fetch> {\n if (!runtime.getFetch) {\n throw new Error('Fetch is not available in this runtime.');\n }\n\n return runtime.getFetch();\n}\n\n/**\n * Resolves `ccxt` from the runtime adapters or throws.\n * @param runtime - Runtime adapter bag.\n * @returns The runtime `ccxt` implementation.\n */\nasync function getCcxtOrThrow(runtime: RuntimeAdapters): Promise<any> {\n if (!runtime.getCcxt) {\n throw new Error('ccxt is not available in this runtime.');\n }\n\n return runtime.getCcxt();\n}\n\n/**\n * Converts the AssemblyScript fetch mode enum into a DOM `RequestMode`.\n * @param mode - Numeric mode value from wasm.\n * @returns The matching request mode, or `null` when unknown.\n */\nfunction modeToString(mode: number): RequestMode | null {\n if (mode == 1) return 'cors';\n if (mode == 2) return 'no-cors';\n if (mode == 3) return 'same-origin';\n if (mode == 4) return 'navigate';\n return null;\n}\n","/**\n * Utilities for parsing duration strings into numeric values.\n */\ninterface TimestringOptions {\n hoursPerDay?: number;\n daysPerWeek?: number;\n weeksPerMonth?: number;\n monthsPerYear?: number;\n daysPerYear?: number;\n}\n\nconst DEFAULT_OPTS: Required<TimestringOptions> = {\n hoursPerDay: 24,\n daysPerWeek: 7,\n weeksPerMonth: 4,\n monthsPerYear: 12,\n daysPerYear: 365.25,\n};\n\nconst UNIT_MAP: Record<string, string[]> = {\n ms: ['ms', 'milli', 'millisecond', 'milliseconds'],\n s: ['s', 'sec', 'secs', 'second', 'seconds'],\n m: ['m', 'min', 'mins', 'minute', 'minutes'],\n h: ['h', 'hr', 'hrs', 'hour', 'hours'],\n d: ['d', 'day', 'days'],\n w: ['w', 'week', 'weeks'],\n mth: ['mon', 'mth', 'mths', 'month', 'months'],\n y: ['y', 'yr', 'yrs', 'year', 'years'],\n};\n\n/**\n * Parses a timestring into seconds or another requested unit.\n * @param value - Duration string or numeric millisecond value.\n * @param returnUnit - Optional unit to convert the parsed result into.\n * @param opts - Calendar conversion overrides.\n * @returns The parsed duration in seconds or the requested unit.\n */\nexport default function parseTimestring(value: string | number, returnUnit?: string, opts?: TimestringOptions): number {\n const options = Object.assign({}, DEFAULT_OPTS, opts || {});\n\n let strValue: string;\n if (typeof value === 'number') {\n strValue = parseInt(value.toString()) + 'ms';\n } else if (value.match(/^[-+]?[0-9.]+$/g)) {\n strValue = parseInt(value) + 'ms';\n } else {\n strValue = value;\n }\n\n let totalSeconds = 0;\n const unitValues = getUnitValues(options);\n const groups = strValue\n .toLowerCase()\n .replace(/[^.\\w+-]+/g, '')\n .match(/[-+]?[0-9.]+[a-z]+/g);\n\n if (groups === null) {\n throw new Error(`The value [${strValue}] could not be parsed by timestring`);\n }\n\n groups.forEach((group) => {\n const valMatch = group.match(/[0-9.]+/g);\n const unitMatch = group.match(/[a-z]+/g);\n\n if (valMatch && unitMatch) {\n const val = parseFloat(valMatch[0]);\n const unit = unitMatch[0];\n totalSeconds += getSeconds(val, unit, unitValues);\n }\n });\n\n if (returnUnit) {\n return convert(totalSeconds, returnUnit, unitValues);\n }\n\n return totalSeconds;\n}\n\n/**\n * Builds the seconds-per-unit lookup table.\n * @param opts - Calendar conversion options.\n * @returns A map of unit keys to their value in seconds.\n */\nfunction getUnitValues(opts: Required<TimestringOptions>): Record<string, number> {\n const unitValues: Record<string, number> = {\n ms: 0.001,\n s: 1,\n m: 60,\n h: 3600,\n d: 0,\n w: 0,\n mth: 0,\n y: 0,\n };\n\n unitValues.d = opts.hoursPerDay * unitValues.h;\n unitValues.w = opts.daysPerWeek * unitValues.d;\n unitValues.mth = (opts.daysPerYear / opts.monthsPerYear) * unitValues.d;\n unitValues.y = opts.daysPerYear * unitValues.d;\n\n return unitValues;\n}\n\n/**\n * Resolves a normalized unit key from a supported alias.\n * @param unit - Unit alias to resolve.\n * @returns The canonical unit key.\n */\nfunction getUnitKey(unit: string): string {\n for (const key of Object.keys(UNIT_MAP)) {\n if (UNIT_MAP[key].indexOf(unit) > -1) {\n return key;\n }\n }\n\n throw new Error(`The unit [${unit}] is not supported by timestring`);\n}\n\n/**\n * Converts a unit value into seconds.\n * @param value - Numeric value to convert.\n * @param unit - Unit alias for the value.\n * @param unitValues - Canonical unit conversion table.\n * @returns The value expressed in seconds.\n */\nfunction getSeconds(value: number, unit: string, unitValues: Record<string, number>): number {\n return value * unitValues[getUnitKey(unit)];\n}\n\n/**\n * Converts seconds into another unit.\n * @param value - Value in seconds.\n * @param unit - Target unit alias.\n * @param unitValues - Canonical unit conversion table.\n * @returns The value expressed in the target unit.\n */\nfunction convert(value: number, unit: string, unitValues: Record<string, number>): number {\n return value / unitValues[getUnitKey(unit)];\n}\n","/**\n * Candle models and helpers for OHLCV aggregation.\n */\nimport timestring from './timestring';\nimport { RawTradeData } from './RawTradeData';\n\n/**\n * OHLCV candle model.\n */\nexport class Candle {\n timestamp: number;\n high: number;\n low: number;\n open: number;\n close: number;\n volume: number;\n\n /**\n * Creates a candle instance.\n * @param timestamp - Candle open timestamp in milliseconds.\n * @param high - Highest traded price.\n * @param low - Lowest traded price.\n * @param open - Opening price.\n * @param close - Closing price.\n * @param volume - Total traded volume.\n */\n constructor(timestamp: number, high: number, low: number, open: number, close: number, volume: number) {\n this.timestamp = timestamp;\n this.high = high;\n this.low = low;\n this.open = open;\n this.close = close;\n this.volume = volume;\n }\n\n /**\n * Serializes the candle as JSON.\n * @returns The candle as a JSON string.\n */\n toString(): string {\n return JSON.stringify(this);\n }\n}\n\n/**\n * Encodes a candle into a fixed-width integer buffer.\n * @param candle - Candle to encode.\n * @returns The encoded candle buffer.\n */\nexport function encodeCandle(candle: Candle): Uint32Array {\n return new Uint32Array([candle.timestamp, candle.high, candle.low, candle.open, candle.close, candle.volume]);\n}\n\n/**\n * Decodes a fixed-width integer buffer into a candle.\n * @param buffer - Encoded candle buffer.\n * @returns The decoded candle.\n */\nexport function decodeCandle(buffer: Uint32Array): Candle {\n return new Candle(buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5]);\n}\n\n/**\n * Aggregates raw trades into OHLCV candles.\n * @param data - Raw trades sorted by timestamp.\n * @param candleSize - Candle width expressed as a timestring.\n * @returns Generated candles.\n */\nexport function generateCandles(data: RawTradeData[], candleSize: string): Candle[] {\n const candleWidth = timestring(candleSize, 'ms', {});\n if (data.length === 0) {\n throw new Error('Input data is empty');\n }\n const _data = data.map((point) => {\n return Object.assign(Object.assign({}, point), {\n // Older inputs may still provide 10-digit second timestamps instead of milliseconds.\n timestamp: point.timestamp && String(point.timestamp).length == 10 ? point.timestamp * 1000 : point.timestamp,\n });\n });\n if (_data[0] === undefined || Object.keys(_data[0]).length === 0) {\n return [];\n }\n const ohlcvData = [];\n let i = 0;\n let currentTimestamp = Math.floor(_data[0].timestamp / candleWidth) * candleWidth;\n let open = _data[0].price;\n let high = _data[0].price;\n let low = _data[0].price;\n let close = _data[0].price;\n let volume = 0.0;\n // Walk the trades once, emitting one OHLCV row per candle window.\n while (i < _data.length) {\n open = close;\n high = close;\n low = close;\n volume = 0.0;\n\n let innerI = i;\n\n // Consume every trade whose timestamp falls inside the current candle bucket.\n while (innerI < _data.length && _data[innerI].timestamp < currentTimestamp + candleWidth) {\n open = innerI === 0 ? _data[innerI].price : open;\n high = Math.max(high, _data[innerI].price);\n low = Math.min(low, _data[innerI].price);\n close = _data[innerI].price;\n volume += _data[innerI].volume;\n innerI++;\n }\n\n ohlcvData.push({\n timestamp: currentTimestamp,\n high,\n low,\n open,\n close,\n volume,\n });\n\n // Advance to the next time bucket and continue from the first unconsumed trade.\n currentTimestamp += candleWidth;\n i = innerI;\n }\n return ohlcvData;\n}\n","/**\n * Trade point model used as candle-generation input.\n */\nexport class RawTradeData {\n timestamp: number;\n price: number;\n volume: number;\n\n /**\n * Creates a raw trade data point.\n * @param timestamp - Trade timestamp.\n * @param price - Trade price.\n * @param volume - Trade volume.\n */\n constructor(timestamp: number, price: number, volume: number) {\n this.timestamp = timestamp;\n this.price = price;\n this.volume = volume;\n }\n}\n"],"mappings":"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","names":["module","pointer","module","ccxt"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/internal/instantiate.ts","../src/timestring.ts","../src/Candle.ts","../src/RawTradeData.ts","../src/internal/asyncHostCalls.ts","../src/internal/panoptic/protocol.ts","../src/internal/panopticHostImport.ts","../src/internal/panopticBrowserRuntime.ts","../src/internal/panoptic/deps.ts","../src/internal/panopticSerialization.ts","../src/internal/panopticSources.ts","../src/internal/panopticJsonArgs.ts","../src/internal/panopticDtos.ts","../src/internal/panopticScalars.ts","../src/internal/panoptic/support.ts","../src/internal/panoptic/reads/account.ts","../src/internal/panoptic/reads/greeks.ts","../src/internal/panoptic/reads/hypovault.ts","../src/internal/panoptic/reads/pool.ts","../src/internal/panoptic/reads/uniswap.ts","../src/internal/panoptic/dynamicJobs/fragments.ts","../src/internal/panoptic/fragments/support.ts","../src/internal/panoptic/fragments/erc20.ts","../src/internal/panoptic/fragments/collateral.ts","../src/internal/panoptic/fragments/hypovault.ts","../src/internal/panoptic/fragments/merkle.ts","../src/internal/panoptic/fragments/panoptic.ts","../src/internal/panoptic/fragments/permit2.ts","../src/internal/panoptic/fragments/uniswap.ts","../src/internal/panoptic/fragments/weth.ts","../src/internal/panoptic/dynamicJobs/renderExecuteJob.ts","../src/internal/panoptic/handlers.ts","../src/internal/panopticRuntime.ts"],"sourcesContent":["/**\n * Runtime-agnostic entrypoints for loading Steer wasm bundles.\n */\nimport { instantiate, Candle, RawTradeData } from './internal/instantiate';\nimport { callBrowserPanoptic } from './internal/panopticBrowserRuntime';\nimport type { LoadWasmOptions } from './loadOptions';\nimport { createNodePanopticAdapter } from './internal/panopticRuntime';\nimport type { PanopticCallRequest, PanopticCallResponse } from './internal/panopticHostEnvelope';\nimport type { WasmModule } from './WasmModule';\n\n/**\n * Load a wasm bundle synchronously. Only accepts the actual binary data.\n * @param input - Wasm bundle data\n * @param imports - Imports\n * @returns\n */\nfunction loadWasmSync(input: ArrayBuffer, imports = {}, options: LoadWasmOptions = {}): WasmModule {\n return instantiate(new WebAssembly.Module(input), imports, {\n getFetch: getRuntimeFetch,\n getCcxt: getRuntimeCcxt,\n callPanoptic: createRuntimePanopticAdapter(options),\n });\n}\n\n/**\n * Load a wasm bundle asynchronously. Accepts the actual binary data or a runtime-specific string source.\n * In browsers, string inputs are treated as URLs. In Node.js, string inputs may be URLs or filesystem paths.\n * @param input - Wasm bundle data, URL, or filesystem path\n * @param imports - Imports\n * @returns\n */\nasync function loadWasm(input: string | ArrayBuffer, imports = {}, options: LoadWasmOptions = {}): Promise<WasmModule> {\n const module = typeof input === 'string' ? await compileFromString(input) : await WebAssembly.compile(input);\n return instantiate(module, imports, {\n getFetch: getRuntimeFetch,\n getCcxt: getRuntimeCcxt,\n callPanoptic: createRuntimePanopticAdapter(options),\n });\n}\n\n/**\n * Resolves a wasm module from a runtime-specific string source.\n * @param input - Browser URL, Node URL, or Node filesystem path.\n * @returns The compiled wasm module.\n */\nasync function compileFromString(input: string): Promise<WebAssembly.Module> {\n if (!isNodeRuntime()) {\n return compileFromUrl(input);\n }\n\n if (isHttpUrl(input)) {\n return compileFromUrl(input);\n }\n\n // In Node, non-URL strings are treated as filesystem paths.\n const fs = (await importRuntimeModule('fs/promises')) as typeof import('fs/promises');\n return WebAssembly.compile(await fs.readFile(input));\n}\n\n/**\n * Fetches and compiles a wasm module from a URL.\n * @param url - URL that serves a wasm binary.\n * @returns The compiled wasm module.\n */\nasync function compileFromUrl(url: string): Promise<WebAssembly.Module> {\n const fetchImpl = await getRuntimeFetch();\n const response = await fetchImpl(url);\n\n if (typeof WebAssembly.compileStreaming === 'function') {\n try {\n // Clone the response so the body is still readable if streaming compilation fails.\n return await WebAssembly.compileStreaming(Promise.resolve(response.clone()));\n } catch {\n // Fall back to ArrayBuffer for non-standard wasm responses.\n }\n }\n\n return WebAssembly.compile(await response.arrayBuffer());\n}\n\n/**\n * Resolves the active runtime's `fetch` implementation.\n * @returns The bound `fetch` function.\n */\nasync function getRuntimeFetch(): Promise<typeof fetch> {\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch.bind(globalThis);\n }\n\n if (!isNodeRuntime()) {\n throw new Error('Fetch is not available in this browser runtime.');\n }\n\n throw new Error('Fetch is not available in this Node runtime. Node 18+ is required.');\n}\n\n/**\n * Resolves the active runtime's `ccxt` implementation.\n * @returns The `ccxt` module or browser global.\n */\nasync function getRuntimeCcxt(): Promise<any> {\n if (isNodeRuntime()) {\n const ccxt = (await importRuntimeModule('ccxt')) as typeof import('ccxt');\n return ccxt.default ?? ccxt;\n }\n\n const ccxt = (globalThis as typeof globalThis & { ccxt?: any }).ccxt;\n\n if (!ccxt) {\n throw new Error('ccxt is not available in this browser runtime.');\n }\n\n return ccxt;\n}\n\n/**\n * Resolves the active runtime's Panoptic adapter.\n * @param method - Allowlisted Panoptic method name.\n * @param request - Serializable Panoptic request envelope.\n * @returns Serializable Panoptic success response.\n */\nfunction createRuntimePanopticAdapter(\n options: LoadWasmOptions,\n): (method: string, request: PanopticCallRequest) => Promise<PanopticCallResponse> {\n if (!isNodeRuntime()) {\n if (options.panoptic) {\n throw new Error('Panoptic runtime adapter is Node-only until browser support lands.');\n }\n\n return callBrowserPanoptic;\n }\n\n return createNodePanopticAdapter(options.panoptic);\n}\n\n/**\n * Reports whether the current runtime is Node.js.\n * @returns `true` when running under Node.js.\n */\nfunction isNodeRuntime(): boolean {\n return typeof process !== 'undefined' && !!process.versions?.node;\n}\n\n/**\n * Checks whether a string is an HTTP(S) URL.\n * @param value - Candidate URL string.\n * @returns `true` when the value parses as an HTTP(S) URL.\n */\nfunction isHttpUrl(value: string): boolean {\n try {\n const url = new URL(value);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}\n\n/**\n * Imports a module through either CommonJS or dynamic import.\n * @typeParam T - Expected module shape.\n * @param specifier - Module specifier to resolve.\n * @returns The imported module namespace.\n */\nfunction importRuntimeModule<T = unknown>(specifier: string): Promise<T> {\n if (isNodeRuntime() && typeof require === 'function') {\n // Prefer `require` when available so CommonJS consumers resolve built-ins consistently.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n return Promise.resolve(require(specifier) as T);\n }\n\n // `new Function` avoids TypeScript downleveling dynamic import into `require`.\n return new Function('s', 'return import(s)')(specifier) as Promise<T>;\n}\n\nexport type { LoadWasmOptions } from './loadOptions';\nexport type {\n PanopticAuditEvent,\n PanopticClientCacheOptions,\n PanopticJsonValue,\n PanopticOperationOptions,\n PanopticRpcSource,\n PanopticRuntimeOptions,\n PanopticSourceRegistry,\n PanopticSubgraphSource,\n SourceMeta,\n} from './panoptic';\nexport type { WasmModule } from './WasmModule';\nexport { loadWasm, loadWasmSync, Candle, RawTradeData };\n","/**\n * Wasm instantiation and host-interop helpers shared by all runtime entrypoints.\n */\nimport { ethers } from 'ethers';\nimport { Candle, generateCandles } from '../Candle';\nimport { RawTradeData } from '../RawTradeData';\nimport type { WasmModule } from '../WasmModule';\nimport { createAsyncHostCallSlot } from './asyncHostCalls';\nimport { createPanopticHostImport } from './panopticHostImport';\nimport type { JsonValue, PanopticCallRequest, PanopticCallResponse } from './panopticHostEnvelope';\n\nenum State {\n None = 0,\n Unwinding = 1,\n Rewinding = 2,\n}\n\ntype RuntimeAdapters = {\n getFetch?: () => Promise<typeof fetch>;\n getCcxt?: () => Promise<any>;\n callPanoptic?: (method: string, request: PanopticCallRequest) => Promise<PanopticCallResponse>;\n};\n\nexport { Candle, RawTradeData };\nexport type { JsonValue, PanopticCallRequest, PanopticCallResponse, WasmModule };\n\n/**\n * Instantiates a wasm module and wraps its exports with host-side helpers.\n * @param module - Compiled wasm module.\n * @param imports - Additional import object entries.\n * @param runtime - Runtime adapters for optional host integrations.\n * @returns The wrapped wasm exports.\n */\nexport function instantiate(module: WebAssembly.Module, imports = {}, runtime: RuntimeAdapters = {}): WasmModule {\n let WASM_MEMORY: WebAssembly.Memory;\n let WASM_EXPORTS: WasmModule;\n let WASM_DV: DataView;\n\n let ASYNCIFY_PTR = 0;\n let ASYNCIFY_MEM!: Uint32Array;\n let ASYNCIFY_INITIALIZED = false;\n\n const hostCalls = createAsyncHostCallSlot();\n let executeInFlight = false;\n const pinScopes: number[][] = [];\n\n const adaptedImports = Object.assign(\n {\n console: {\n /**\n * Logs a lifted AssemblyScript string.\n * @param text - Pointer to the message string.\n */\n log(text: number) {\n console.log(__liftString(text));\n },\n },\n ethers: {\n /**\n * Hashes a lifted string with `keccak256`.\n * @param str_ptr - Pointer to the input string.\n * @returns Pointer to the hashed string result.\n */\n keccak256_str(str_ptr: number) {\n const str = __liftString(str_ptr);\n const hash = ethers.keccak256(str!);\n return withAutoPinScope(() => __lowerString(hash));\n },\n /**\n * Hashes a lifted buffer with `keccak256`.\n * @param buf_ptr - Pointer to the input buffer.\n * @returns Pointer to the hashed string result.\n */\n keccak256_buf(buf_ptr: number) {\n const buf = __liftBuffer(buf_ptr);\n const hash = ethers.keccak256(new Uint8Array(buf!));\n return withAutoPinScope(() => __lowerString(hash));\n },\n },\n // @ts-ignore\n env: {\n /**\n * Raises a JavaScript error for an AssemblyScript abort.\n * @param message - Pointer to the abort message.\n * @param fileName - Pointer to the source filename.\n * @param lineNumber - Source line number.\n * @param columnNumber - Source column number.\n */\n abort(message: number, fileName: number, lineNumber: number, columnNumber: number) {\n (() => {\n throw Error(`${__liftString(message)} in ${__liftString(fileName)}:${lineNumber}:${columnNumber}`);\n })();\n },\n /**\n * Initializes Asyncify bookkeeping for host callbacks.\n * @param frame_ptr - Asyncify frame pointer.\n * @param stack_ptr - Asyncify stack pointer.\n */\n _initAsyncify(frame_ptr: number, stack_ptr: number) {\n // @ts-ignore\n if (!WASM_EXPORTS['asyncify_get_state'])\n throw new Error(\n 'Asyncify initialized, but not enabled when run! Compile with the --runPasses asyncify flag or asyncify-shim transform!',\n );\n if (ASYNCIFY_INITIALIZED) return;\n ASYNCIFY_PTR = frame_ptr;\n ASYNCIFY_MEM[ASYNCIFY_PTR >> 2] = ASYNCIFY_PTR + 8;\n ASYNCIFY_MEM[(ASYNCIFY_PTR + 4) >> 2] = stack_ptr;\n ASYNCIFY_INITIALIZED = true;\n },\n /**\n * Aggregates lifted trade data into candles.\n * @param data - Pointer to the serialized trade array.\n * @param candleSize - Pointer to the candle size string.\n * @returns Pointer to the serialized candle array.\n */\n generateCandles(data: number, candleSize: number) {\n const _data = __liftString(data) || '[]';\n const _candleSize = __liftString(candleSize) || '69m';\n const candles = generateCandles(JSON.parse(_data), _candleSize);\n return withAutoPinScope(() => __lowerString(JSON.stringify(candles)));\n },\n /**\n * Logs a lifted AssemblyScript string.\n * @param text - Pointer to the message string.\n */\n 'console.log': (text: number) => {\n console.log(__liftString(text));\n },\n /**\n * Schedules an async OHLCV request for asyncified execution.\n * @param exchangeId - Pointer to the exchange id string.\n * @param symbol - Pointer to the market symbol string.\n * @param timeframe - Pointer to the timeframe string.\n * @param limit - Maximum number of rows.\n * @param since - Optional start timestamp.\n * @returns Pointer to the rewound OHLCV matrix when replaying.\n */\n ccxt_fetchOHLCV: (exchangeId: number, symbol: number, timeframe: number, limit: number, since: number) => {\n // @ts-ignore\n const currentState = WASM_EXPORTS.asyncify_get_state();\n if (currentState === State.Rewinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_rewind();\n const completed = hostCalls.take('ccxt-ohlcv');\n // Replay returns the host result captured during the earlier unwind pass.\n // @ts-ignore\n const ptr = __lowerStaticArray(\n (pointer: number, value: any) => {\n __setU32(pointer, __lowerStaticArray(__setF64, 7, 3, value, Float64Array, 'wasm'));\n },\n 8,\n 2,\n completed.value,\n null,\n 'host',\n );\n return ptr;\n }\n\n const _exchange = __liftString(exchangeId);\n const _symbol = __liftString(symbol);\n const _timeframe = __liftString(timeframe);\n hostCalls.stage({\n kind: 'ccxt-ohlcv',\n run: async () => {\n if (!_exchange || !_symbol || !_timeframe)\n throw new Error('Exchange, Symbol, or Timeframe not provided when fetching OHCLV data.');\n\n const ccxt = await getCcxtOrThrow(runtime);\n // @ts-ignore\n const data = await new ccxt[_exchange]({\n apiKey: '',\n secret: '',\n }).fetchOHLCV(_symbol, _timeframe, since, limit);\n return data;\n },\n });\n\n // Yield back to JS so the pending promise can resolve before wasm resumes.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_unwind(ASYNCIFY_PTR);\n },\n panoptic_call: createPanopticHostImport({\n runtime,\n hostCalls,\n // @ts-ignore\n getAsyncifyState: () => WASM_EXPORTS.asyncify_get_state(),\n rewindingState: State.Rewinding,\n // @ts-ignore\n stopRewind: () => WASM_EXPORTS.asyncify_stop_rewind(),\n // @ts-ignore\n startUnwind: () => WASM_EXPORTS.asyncify_start_unwind(ASYNCIFY_PTR),\n liftString: __liftString,\n lowerString: __lowerString,\n }),\n },\n 'as-fetch': {\n /**\n * Initializes Asyncify bookkeeping for as-fetch host calls.\n * @param frame_ptr - Asyncify frame pointer.\n * @param stack_ptr - Asyncify stack pointer.\n */\n _initAsyncify(frame_ptr: number, stack_ptr: number) {\n // @ts-ignore\n if (!WASM_EXPORTS['asyncify_get_state'])\n throw new Error(\n 'Asyncify initialized, but not enabled when run! Compile with the --runPasses asyncify flag or asyncify-shim transform!',\n );\n if (ASYNCIFY_INITIALIZED) return;\n ASYNCIFY_PTR = frame_ptr;\n ASYNCIFY_MEM[ASYNCIFY_PTR >> 2] = ASYNCIFY_PTR + 8;\n ASYNCIFY_MEM[(ASYNCIFY_PTR + 4) >> 2] = stack_ptr;\n ASYNCIFY_INITIALIZED = true;\n },\n /**\n * Executes a synchronous asyncified POST request.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @param body - Pointer to the request body.\n * @returns Pointer to the response body when replaying.\n */\n _fetchPOSTSync(url: number, mode: number, headers: number, body: number) {\n // @ts-ignore\n const currentState = WASM_EXPORTS.asyncify_get_state();\n if (currentState === State.Rewinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_rewind();\n const completed = hostCalls.take('fetch-buffer');\n // Replay writes the buffered response back into wasm memory.\n const ptr = __lowerBuffer(completed.value, 'wasm');\n return ptr;\n }\n\n hostCalls.stage({\n kind: 'fetch-buffer',\n run: async () => {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'POST',\n mode: modeToString(mode) || 'cors',\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n body: __liftBuffer(body),\n });\n const value = await res.arrayBuffer();\n return value;\n },\n });\n\n // Asyncify suspends wasm here and resumes once the staged fetch has completed.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_unwind(ASYNCIFY_PTR);\n },\n /**\n * Executes a synchronous asyncified GET request.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @returns Pointer to the response body when replaying.\n */\n _fetchGETSync(url: number, mode: number, headers: number) {\n // @ts-ignore\n const currentState = WASM_EXPORTS.asyncify_get_state();\n if (currentState === State.Rewinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_rewind();\n const completed = hostCalls.take('fetch-buffer');\n // Replay writes the buffered response back into wasm memory.\n const ptr = __lowerBuffer(completed.value, 'wasm');\n return ptr;\n }\n\n hostCalls.stage({\n kind: 'fetch-buffer',\n run: async () => {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'GET',\n mode: modeToString(mode) || 'cors',\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n });\n const value = await res.arrayBuffer();\n return value;\n },\n });\n\n // Asyncify suspends wasm here and resumes once the staged fetch has completed.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_unwind(ASYNCIFY_PTR);\n },\n /**\n * Executes an asynchronous GET request and forwards the response to wasm.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @param callbackID - Wasm callback identifier.\n */\n _fetchGET(url: number, mode: number, headers: number, callbackID: number) {\n void (async () => {\n try {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'GET',\n mode: modeToString(mode) || 'cors',\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n });\n const body = await res.arrayBuffer();\n WASM_EXPORTS.responseHandler(body, res.status, res.redirected ? 1 : 0, callbackID);\n } catch (error) {\n console.error(error);\n }\n })();\n },\n /**\n * Executes an asynchronous POST request and forwards the response to wasm.\n * @param url - Pointer to the request URL.\n * @param mode - Numeric fetch mode.\n * @param headers - Pointer to the header array.\n * @param body - Request body.\n * @param callbackID - Wasm callback identifier.\n */\n _fetchPOST(url: number, mode: number, headers: number, body: ArrayBuffer, callbackID: number) {\n void (async () => {\n try {\n const fetchImpl = await getFetchOrThrow(runtime);\n const res = await fetchImpl(__liftString(url) || '', {\n method: 'POST',\n mode: modeToString(mode) || 'cors',\n body: body,\n headers:\n __liftArray(\n (pointer: number) =>\n __liftArray((pointer: number) => __liftString(__getU32(pointer)), 2, __getU32(pointer)),\n 2,\n headers,\n ) || [],\n });\n const responseBody = await res.arrayBuffer();\n WASM_EXPORTS.responseHandler(responseBody, res.status, res.redirected ? 1 : 0, callbackID);\n } catch (error) {\n console.error(error);\n }\n })();\n },\n },\n },\n imports,\n );\n\n const mod = new WebAssembly.Instance(module, adaptedImports) as unknown as { exports: WasmModule };\n WASM_EXPORTS = mod.exports;\n // @ts-ignore\n WASM_MEMORY = WASM_EXPORTS.memory || adaptedImports.env.memory;\n\n ASYNCIFY_MEM = new Uint32Array(WASM_MEMORY.buffer);\n\n const handledExports = Object.setPrototypeOf(\n {\n /**\n * Forwards an HTTP response body into the wasm export.\n * @param body - Response body.\n * @param statusCode - HTTP status code.\n * @param redirected - Whether the request redirected.\n * @param callbackID - Wasm callback identifier.\n */\n responseHandler(body: ArrayBuffer, statusCode: number, redirected: boolean, callbackID: number) {\n if (!WASM_EXPORTS['responseHandler'])\n throw new Error(\n 'Unable to call .responseHandler on wasm module. Add the line export { responseHandler } from \"as-fetch/assembly\" to your entry file.',\n );\n withPinScope(() => {\n // @ts-ignore\n WASM_EXPORTS.responseHandler(__lowerBuffer(body), statusCode, redirected ? 1 : 0, callbackID);\n });\n },\n /**\n * Initializes the wasm module with a JSON configuration payload.\n * @param config - Serialized connector configuration.\n * @returns `true` when initialization succeeds.\n */\n initialize(config: string): boolean {\n if (!WASM_EXPORTS['initialize'])\n throw new Error('Unable to call .initialize on wasm module. Are you sure this is a data connector?');\n try {\n withPinScope(() => {\n // @ts-ignore\n WASM_EXPORTS.initialize(__lowerString(config));\n });\n return true;\n } catch (e) {\n console.error(e);\n return false;\n }\n },\n /**\n * Executes the wasm module, replaying arguments across asyncify rewinds.\n * @param params - Logical execute arguments.\n * @returns The lifted execute result.\n */\n async execute(...params: number[] | string[] | ArrayBuffer[] | null[]): Promise<string | null> {\n if (!WASM_EXPORTS['execute'])\n throw new Error('Unable to call .execute on wasm module. Are you sure this is a data connector?');\n if (executeInFlight) {\n throw new Error('Concurrent execute calls are not supported on the same wasm instance.');\n }\n\n executeInFlight = true;\n const replayArgs = snapshotLogicalArgs(params);\n // Keep one pin scope alive across the full unwind/rewind cycle.\n pinScopes.push([]);\n\n try {\n let result: unknown;\n\n try {\n result = executeWithReplayArgs(replayArgs);\n } catch (error) {\n if (params.length !== 0) {\n throw error;\n }\n\n // Legacy v1 bundles can expect execute(\"\") for their first host-driven request.\n replayArgs.splice(0, replayArgs.length, '');\n result = executeWithReplayArgs(replayArgs);\n }\n\n if (ASYNCIFY_INITIALIZED) {\n // @ts-ignore\n while (WASM_EXPORTS.asyncify_get_state() === State.Unwinding) {\n // @ts-ignore\n WASM_EXPORTS.asyncify_stop_unwind();\n\n await hostCalls.complete();\n\n // Resume wasm with the original logical arguments so pointers are freshly lowered.\n // @ts-ignore\n WASM_EXPORTS.asyncify_start_rewind(ASYNCIFY_PTR);\n\n result = executeWithReplayArgs(replayArgs);\n }\n }\n\n // @ts-ignore\n return __liftString(result);\n } finally {\n const scope = pinScopes.pop() || [];\n for (let i = scope.length - 1; i >= 0; i--) {\n WASM_EXPORTS.__unpin(scope[i]);\n }\n hostCalls.reset();\n executeInFlight = false;\n }\n },\n /**\n * Reads the connector configuration schema from wasm.\n * @returns The lifted configuration payload.\n */\n config() {\n if (!WASM_EXPORTS['config'])\n throw new Error('Unable to call .config on wasm module. Are you sure this is a data connector?');\n return withPinScope(() => __liftString(WASM_EXPORTS.config() as unknown as number));\n },\n /**\n * Reads the connector transform from wasm.\n * @returns The lifted transform payload.\n */\n transform() {\n if (!WASM_EXPORTS['transform'])\n throw new Error('Unable to call .transform on wasm module. Are you sure this is a data connector?');\n return withPinScope(() => __liftString(WASM_EXPORTS.transform() as unknown as number));\n },\n /**\n * Resets wasm module state when supported.\n */\n reset() {\n if (WASM_EXPORTS['reset']) WASM_EXPORTS.reset();\n },\n },\n WASM_EXPORTS,\n );\n\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n\n /**\n * Lowers a supported JS value into a wasm pointer or primitive.\n * @param val - JS value to lower.\n * @returns The lowered wasm value.\n */\n function __lower(val: number | string | ArrayBuffer | null): number {\n if (typeof val === 'number') {\n return val;\n } else if (typeof val === 'string') {\n return __lowerString(val);\n } else if (val instanceof ArrayBuffer) {\n return __lowerBuffer(val);\n } else {\n return 0;\n }\n }\n\n /**\n * Lowers a list of logical execute arguments for a wasm call.\n * @param values - Logical argument values.\n * @returns Lowered argument list.\n */\n function lowerArgs(values: Array<number | string | ArrayBuffer | null>): number[] {\n const loweredArgs = new Array<number>(values.length);\n for (let i = 0; i < values.length; i++) {\n loweredArgs[i] = __lower(values[i]);\n }\n return loweredArgs;\n }\n\n /**\n * Copies replayable execute arguments so async rewinds do not reuse detached buffers.\n * @param values - Logical argument values.\n * @returns A replay-safe copy of the arguments.\n */\n function snapshotLogicalArgs(\n values: Array<number | string | ArrayBuffer | null>,\n ): Array<number | string | ArrayBuffer | null> {\n return values.map((value) => {\n if (value instanceof ArrayBuffer) {\n // Asyncify may replay after the original buffer has been transferred or mutated.\n return value.slice(0);\n }\n\n return value;\n });\n }\n\n /**\n * Executes the wasm `execute` export with replay-safe arguments.\n * @param values - Logical argument values.\n * @returns The raw wasm result.\n */\n function executeWithReplayArgs(values: Array<number | string | ArrayBuffer | null>): unknown {\n return withAutoPinScope(() => WASM_EXPORTS.execute(...lowerArgs(values)));\n }\n\n /**\n * Tracks and releases wasm-pinned allocations created during a call.\n * @typeParam T - Callback return type.\n * @param fn - Callback to run within the pin scope.\n * @returns The callback result.\n */\n function withPinScope<T>(fn: () => T): T {\n pinScopes.push([]);\n\n try {\n return fn();\n } finally {\n // Unpin in reverse order so nested temporary allocations are released last.\n const scope = pinScopes.pop() || [];\n for (let i = scope.length - 1; i >= 0; i--) {\n WASM_EXPORTS.__unpin(scope[i]);\n }\n }\n }\n\n /**\n * Reuses an existing pin scope or creates one for standalone calls.\n * @typeParam T - Callback return type.\n * @param fn - Callback to run.\n * @returns The callback result.\n */\n function withAutoPinScope<T>(fn: () => T): T {\n if (pinScopes.length > 0) {\n // Nested helpers can reuse the active scope instead of creating a second cleanup pass.\n return fn();\n }\n\n return withPinScope(fn);\n }\n\n /**\n * Registers a pinned pointer to be released with the current scope.\n * @param ptr - Pinned wasm pointer.\n * @returns The same pointer.\n */\n function trackPinnedPointer(ptr: number): number {\n const scope = pinScopes[pinScopes.length - 1];\n if (scope) {\n scope.push(ptr);\n }\n\n return ptr;\n }\n\n /**\n * Lifts an AssemblyScript string pointer into JavaScript.\n * @param ptr - AssemblyScript string pointer.\n * @returns The lifted string, or `null` for a null pointer.\n */\n function __liftString(ptr: number): string | null {\n if (!ptr) return null;\n const end = (ptr + new Uint32Array(WASM_MEMORY.buffer)[(ptr - 4) >>> 2]) >>> 1;\n const memoryU16 = new Uint16Array(WASM_MEMORY.buffer);\n let start = ptr >>> 1;\n let string = '';\n while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, (start += 1024)));\n return string + String.fromCharCode(...memoryU16.subarray(start, end));\n }\n\n /**\n * Lowers a JavaScript string into AssemblyScript memory.\n * @param value - String to lower.\n * @returns Pointer to the lowered string.\n */\n function __lowerString(value: string, owner: 'host' | 'wasm' = 'host'): number {\n if (value == null) return 0;\n const length = value.length;\n const ptr = allocateLoweredPointer(length << 1, 2, owner);\n const memoryU16 = new Uint16Array(WASM_MEMORY.buffer);\n for (let i = 0; i < length; ++i) memoryU16[(ptr >>> 1) + i] = value.charCodeAt(i);\n return ptr;\n }\n\n /**\n * Lifts an AssemblyScript buffer into JavaScript.\n * @param ptr - Buffer pointer.\n * @returns The lifted buffer, or `null` for a null pointer.\n */\n function __liftBuffer(ptr: number): ArrayBuffer | null {\n if (!ptr) return null;\n return WASM_MEMORY.buffer.slice(ptr, ptr + new Uint32Array(WASM_MEMORY.buffer)[(ptr - 4) >>> 2]);\n }\n\n /**\n * Lowers a JavaScript buffer into AssemblyScript memory.\n * @param value - Buffer to lower.\n * @returns Pointer to the lowered buffer.\n */\n function __lowerBuffer(value: ArrayBuffer, owner: 'host' | 'wasm' = 'host'): number {\n if (value == null) return 0;\n const ptr = allocateLoweredPointer(value.byteLength, 1, owner);\n new Uint8Array(WASM_MEMORY.buffer).set(new Uint8Array(value), ptr);\n return ptr;\n }\n\n /**\n * Lifts an AssemblyScript array into JavaScript values.\n * @param liftElement - Element lifting callback.\n * @param align - Element alignment shift.\n * @param ptr - Array pointer.\n * @returns The lifted array, or `null` for a null pointer.\n */\n function __liftArray(liftElement: Function, align: number, ptr: number): any[] | null {\n if (!ptr) return null;\n const dataStart = __getU32(ptr + 4);\n const length = WASM_DV.getUint32(ptr + 12, true);\n const values = new Array(length);\n for (let i = 0; i < length; ++i) values[i] = liftElement(dataStart + ((i << align) >>> 0));\n return values;\n }\n\n /**\n * Lowers a JavaScript array into AssemblyScript memory.\n * @param lowerElement - Element lowering callback.\n * @param id - AssemblyScript runtime type id.\n * @param align - Element alignment shift.\n * @param values - Values to lower.\n * @param typedConstructor - Optional typed array constructor for bulk copies.\n * @returns Pointer to the lowered array.\n */\n function __lowerStaticArray(\n lowerElement: Function,\n id: number,\n align: number,\n values: any[],\n typedConstructor: any | null = null,\n owner: 'host' | 'wasm' = 'host',\n ) {\n if (values == null) return 0;\n const length = values.length;\n const buffer = allocateLoweredPointer(length << align, id, owner) >>> 0;\n if (typedConstructor) {\n new typedConstructor(WASM_MEMORY.buffer, buffer, length).set(values);\n } else {\n for (let i = 0; i < length; i++) lowerElement(buffer + ((i << align) >>> 0), values[i]);\n }\n return buffer;\n }\n\n /**\n * Allocates a lowered AssemblyScript value with explicit ownership.\n * Host-owned values are pinned and released by this wrapper. Wasm-owned\n * return values are handed back to AssemblyScript without host cleanup.\n */\n function allocateLoweredPointer(size: number, id: number, owner: 'host' | 'wasm'): number {\n const ptr = WASM_EXPORTS.__new(size, id) >>> 0;\n\n if (owner === 'wasm') {\n return ptr;\n }\n\n return trackPinnedPointer(WASM_EXPORTS.__pin(ptr) >>> 0);\n }\n\n /**\n * Writes a `u32` to wasm memory and refreshes the view if memory grew.\n * @param ptr - Memory offset to write.\n * @param value - Value to write.\n */\n function __setU32(ptr: number, value: number) {\n try {\n WASM_DV.setUint32(ptr, value, true);\n } catch {\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n WASM_DV.setUint32(ptr, value, true);\n }\n }\n\n /**\n * Writes an `f64` to wasm memory and refreshes the view if memory grew.\n * @param ptr - Memory offset to write.\n * @param value - Value to write.\n */\n function __setF64(ptr: number, value: number) {\n try {\n WASM_DV.setFloat64(ptr, value, true);\n } catch {\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n WASM_DV.setFloat64(ptr, value, true);\n }\n }\n\n /**\n * Reads a `u32` from wasm memory and refreshes the view if memory grew.\n * @param ptr - Memory offset to read.\n * @returns The loaded value.\n */\n function __getU32(ptr: number): number {\n try {\n return WASM_DV.getUint32(ptr, true);\n } catch {\n WASM_DV = new DataView(WASM_MEMORY.buffer);\n return WASM_DV.getUint32(ptr, true);\n }\n }\n\n return handledExports;\n}\n\n/**\n * Resolves `fetch` from the runtime adapters or throws.\n * @param runtime - Runtime adapter bag.\n * @returns The runtime `fetch` implementation.\n */\nasync function getFetchOrThrow(runtime: RuntimeAdapters): Promise<typeof fetch> {\n if (!runtime.getFetch) {\n throw new Error('Fetch is not available in this runtime.');\n }\n\n return runtime.getFetch();\n}\n\n/**\n * Resolves `ccxt` from the runtime adapters or throws.\n * @param runtime - Runtime adapter bag.\n * @returns The runtime `ccxt` implementation.\n */\nasync function getCcxtOrThrow(runtime: RuntimeAdapters): Promise<any> {\n if (!runtime.getCcxt) {\n throw new Error('ccxt is not available in this runtime.');\n }\n\n return runtime.getCcxt();\n}\n\n/**\n * Converts the AssemblyScript fetch mode enum into a DOM `RequestMode`.\n * @param mode - Numeric mode value from wasm.\n * @returns The matching request mode, or `null` when unknown.\n */\nfunction modeToString(mode: number): RequestMode | null {\n if (mode == 1) return 'cors';\n if (mode == 2) return 'no-cors';\n if (mode == 3) return 'same-origin';\n if (mode == 4) return 'navigate';\n return null;\n}\n","/**\n * Utilities for parsing duration strings into numeric values.\n */\ninterface TimestringOptions {\n hoursPerDay?: number;\n daysPerWeek?: number;\n weeksPerMonth?: number;\n monthsPerYear?: number;\n daysPerYear?: number;\n}\n\nconst DEFAULT_OPTS: Required<TimestringOptions> = {\n hoursPerDay: 24,\n daysPerWeek: 7,\n weeksPerMonth: 4,\n monthsPerYear: 12,\n daysPerYear: 365.25,\n};\n\nconst UNIT_MAP: Record<string, string[]> = {\n ms: ['ms', 'milli', 'millisecond', 'milliseconds'],\n s: ['s', 'sec', 'secs', 'second', 'seconds'],\n m: ['m', 'min', 'mins', 'minute', 'minutes'],\n h: ['h', 'hr', 'hrs', 'hour', 'hours'],\n d: ['d', 'day', 'days'],\n w: ['w', 'week', 'weeks'],\n mth: ['mon', 'mth', 'mths', 'month', 'months'],\n y: ['y', 'yr', 'yrs', 'year', 'years'],\n};\n\n/**\n * Parses a timestring into seconds or another requested unit.\n * @param value - Duration string or numeric millisecond value.\n * @param returnUnit - Optional unit to convert the parsed result into.\n * @param opts - Calendar conversion overrides.\n * @returns The parsed duration in seconds or the requested unit.\n */\nexport default function parseTimestring(value: string | number, returnUnit?: string, opts?: TimestringOptions): number {\n const options = Object.assign({}, DEFAULT_OPTS, opts || {});\n\n let strValue: string;\n if (typeof value === 'number') {\n strValue = parseInt(value.toString()) + 'ms';\n } else if (value.match(/^[-+]?[0-9.]+$/g)) {\n strValue = parseInt(value) + 'ms';\n } else {\n strValue = value;\n }\n\n let totalSeconds = 0;\n const unitValues = getUnitValues(options);\n const groups = strValue\n .toLowerCase()\n .replace(/[^.\\w+-]+/g, '')\n .match(/[-+]?[0-9.]+[a-z]+/g);\n\n if (groups === null) {\n throw new Error(`The value [${strValue}] could not be parsed by timestring`);\n }\n\n groups.forEach((group) => {\n const valMatch = group.match(/[0-9.]+/g);\n const unitMatch = group.match(/[a-z]+/g);\n\n if (valMatch && unitMatch) {\n const val = parseFloat(valMatch[0]);\n const unit = unitMatch[0];\n totalSeconds += getSeconds(val, unit, unitValues);\n }\n });\n\n if (returnUnit) {\n return convert(totalSeconds, returnUnit, unitValues);\n }\n\n return totalSeconds;\n}\n\n/**\n * Builds the seconds-per-unit lookup table.\n * @param opts - Calendar conversion options.\n * @returns A map of unit keys to their value in seconds.\n */\nfunction getUnitValues(opts: Required<TimestringOptions>): Record<string, number> {\n const unitValues: Record<string, number> = {\n ms: 0.001,\n s: 1,\n m: 60,\n h: 3600,\n d: 0,\n w: 0,\n mth: 0,\n y: 0,\n };\n\n unitValues.d = opts.hoursPerDay * unitValues.h;\n unitValues.w = opts.daysPerWeek * unitValues.d;\n unitValues.mth = (opts.daysPerYear / opts.monthsPerYear) * unitValues.d;\n unitValues.y = opts.daysPerYear * unitValues.d;\n\n return unitValues;\n}\n\n/**\n * Resolves a normalized unit key from a supported alias.\n * @param unit - Unit alias to resolve.\n * @returns The canonical unit key.\n */\nfunction getUnitKey(unit: string): string {\n for (const key of Object.keys(UNIT_MAP)) {\n if (UNIT_MAP[key].indexOf(unit) > -1) {\n return key;\n }\n }\n\n throw new Error(`The unit [${unit}] is not supported by timestring`);\n}\n\n/**\n * Converts a unit value into seconds.\n * @param value - Numeric value to convert.\n * @param unit - Unit alias for the value.\n * @param unitValues - Canonical unit conversion table.\n * @returns The value expressed in seconds.\n */\nfunction getSeconds(value: number, unit: string, unitValues: Record<string, number>): number {\n return value * unitValues[getUnitKey(unit)];\n}\n\n/**\n * Converts seconds into another unit.\n * @param value - Value in seconds.\n * @param unit - Target unit alias.\n * @param unitValues - Canonical unit conversion table.\n * @returns The value expressed in the target unit.\n */\nfunction convert(value: number, unit: string, unitValues: Record<string, number>): number {\n return value / unitValues[getUnitKey(unit)];\n}\n","/**\n * Candle models and helpers for OHLCV aggregation.\n */\nimport timestring from './timestring';\nimport { RawTradeData } from './RawTradeData';\n\n/**\n * OHLCV candle model.\n */\nexport class Candle {\n timestamp: number;\n high: number;\n low: number;\n open: number;\n close: number;\n volume: number;\n\n /**\n * Creates a candle instance.\n * @param timestamp - Candle open timestamp in milliseconds.\n * @param high - Highest traded price.\n * @param low - Lowest traded price.\n * @param open - Opening price.\n * @param close - Closing price.\n * @param volume - Total traded volume.\n */\n constructor(timestamp: number, high: number, low: number, open: number, close: number, volume: number) {\n this.timestamp = timestamp;\n this.high = high;\n this.low = low;\n this.open = open;\n this.close = close;\n this.volume = volume;\n }\n\n /**\n * Serializes the candle as JSON.\n * @returns The candle as a JSON string.\n */\n toString(): string {\n return JSON.stringify(this);\n }\n}\n\n/**\n * Encodes a candle into a fixed-width integer buffer.\n * @param candle - Candle to encode.\n * @returns The encoded candle buffer.\n */\nexport function encodeCandle(candle: Candle): Uint32Array {\n return new Uint32Array([candle.timestamp, candle.high, candle.low, candle.open, candle.close, candle.volume]);\n}\n\n/**\n * Decodes a fixed-width integer buffer into a candle.\n * @param buffer - Encoded candle buffer.\n * @returns The decoded candle.\n */\nexport function decodeCandle(buffer: Uint32Array): Candle {\n return new Candle(buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5]);\n}\n\n/**\n * Aggregates raw trades into OHLCV candles.\n * @param data - Raw trades sorted by timestamp.\n * @param candleSize - Candle width expressed as a timestring.\n * @returns Generated candles.\n */\nexport function generateCandles(data: RawTradeData[], candleSize: string): Candle[] {\n const candleWidth = timestring(candleSize, 'ms', {});\n if (data.length === 0) {\n throw new Error('Input data is empty');\n }\n const _data = data.map((point) => {\n return Object.assign(Object.assign({}, point), {\n // Older inputs may still provide 10-digit second timestamps instead of milliseconds.\n timestamp: point.timestamp && String(point.timestamp).length == 10 ? point.timestamp * 1000 : point.timestamp,\n });\n });\n if (_data[0] === undefined || Object.keys(_data[0]).length === 0) {\n return [];\n }\n const ohlcvData = [];\n let i = 0;\n let currentTimestamp = Math.floor(_data[0].timestamp / candleWidth) * candleWidth;\n let open = _data[0].price;\n let high = _data[0].price;\n let low = _data[0].price;\n let close = _data[0].price;\n let volume = 0.0;\n // Walk the trades once, emitting one OHLCV row per candle window.\n while (i < _data.length) {\n open = close;\n high = close;\n low = close;\n volume = 0.0;\n\n let innerI = i;\n\n // Consume every trade whose timestamp falls inside the current candle bucket.\n while (innerI < _data.length && _data[innerI].timestamp < currentTimestamp + candleWidth) {\n open = innerI === 0 ? _data[innerI].price : open;\n high = Math.max(high, _data[innerI].price);\n low = Math.min(low, _data[innerI].price);\n close = _data[innerI].price;\n volume += _data[innerI].volume;\n innerI++;\n }\n\n ohlcvData.push({\n timestamp: currentTimestamp,\n high,\n low,\n open,\n close,\n volume,\n });\n\n // Advance to the next time bucket and continue from the first unconsumed trade.\n currentTimestamp += candleWidth;\n i = innerI;\n }\n return ohlcvData;\n}\n","/**\n * Trade point model used as candle-generation input.\n */\nexport class RawTradeData {\n timestamp: number;\n price: number;\n volume: number;\n\n /**\n * Creates a raw trade data point.\n * @param timestamp - Trade timestamp.\n * @param price - Trade price.\n * @param volume - Trade volume.\n */\n constructor(timestamp: number, price: number, volume: number) {\n this.timestamp = timestamp;\n this.price = price;\n this.volume = volume;\n }\n}\n","type StagedHostCall =\n | { kind: 'fetch-buffer'; run: () => Promise<ArrayBuffer> }\n | { kind: 'ccxt-ohlcv'; run: () => Promise<number[][]> }\n | { kind: 'panoptic-json'; run: () => Promise<string> };\n\ntype CompletedHostCall =\n | { kind: 'fetch-buffer'; value: ArrayBuffer }\n | { kind: 'ccxt-ohlcv'; value: number[][] }\n | { kind: 'panoptic-json'; value: string };\n\ntype AsyncHostCallSlot = {\n stage(call: StagedHostCall): void;\n complete(): Promise<void>;\n take(kind: 'fetch-buffer'): Extract<CompletedHostCall, { kind: 'fetch-buffer' }>;\n take(kind: 'ccxt-ohlcv'): Extract<CompletedHostCall, { kind: 'ccxt-ohlcv' }>;\n take(kind: 'panoptic-json'): Extract<CompletedHostCall, { kind: 'panoptic-json' }>;\n reset(): void;\n};\n\nfunction createAsyncHostCallSlot(): AsyncHostCallSlot {\n let stagedHostCall: StagedHostCall | null = null;\n let completedHostCall: CompletedHostCall | null = null;\n\n function stage(call: StagedHostCall): void {\n if (stagedHostCall || completedHostCall) {\n throw new Error('Only one async host call can be staged per asyncify unwind.');\n }\n\n stagedHostCall = call;\n }\n\n async function complete(): Promise<void> {\n if (!stagedHostCall) {\n throw new Error('Asyncify unwound without a staged host call.');\n }\n\n const call = stagedHostCall;\n stagedHostCall = null;\n\n if (call.kind === 'fetch-buffer') {\n completedHostCall = { kind: 'fetch-buffer', value: await call.run() };\n return;\n }\n\n if (call.kind === 'ccxt-ohlcv') {\n completedHostCall = { kind: 'ccxt-ohlcv', value: await call.run() };\n return;\n }\n\n completedHostCall = { kind: 'panoptic-json', value: await call.run() };\n }\n\n function take(kind: 'fetch-buffer'): Extract<CompletedHostCall, { kind: 'fetch-buffer' }>;\n function take(kind: 'ccxt-ohlcv'): Extract<CompletedHostCall, { kind: 'ccxt-ohlcv' }>;\n function take(kind: 'panoptic-json'): Extract<CompletedHostCall, { kind: 'panoptic-json' }>;\n function take(kind: CompletedHostCall['kind']): CompletedHostCall {\n if (!completedHostCall) {\n throw new Error(`Asyncify rewind for ${kind} did not have a completed host result.`);\n }\n\n if (completedHostCall.kind !== kind) {\n throw new Error(`Asyncify rewind expected ${kind} but found ${completedHostCall.kind}.`);\n }\n\n const call = completedHostCall;\n completedHostCall = null;\n return call;\n }\n\n function reset(): void {\n stagedHostCall = null;\n completedHostCall = null;\n }\n\n return { stage, complete, take, reset };\n}\n\nexport { createAsyncHostCallSlot };\nexport type { AsyncHostCallSlot, CompletedHostCall, StagedHostCall };\n","import type { PanopticJsonValue } from '../../panoptic';\n\ntype JsonValue = PanopticJsonValue;\ntype PanopticCallRequest = {\n context?: {\n chainId?: string;\n sourceId?: string;\n blockNumber?: string;\n account?: string;\n panopticSubgraphId?: string;\n rpcUrl?: string;\n };\n args?: JsonValue;\n};\ntype PanopticCallResponse = {\n ok: true;\n result: JsonValue;\n};\n\nconst DEFAULT_MAX_REQUEST_BYTES = 512 * 1024;\n\nfunction parsePanopticRequest(value: string, maxBytes = DEFAULT_MAX_REQUEST_BYTES): PanopticCallRequest {\n if (utf8ByteLength(value) > maxBytes) {\n throw new Error(`Invalid Panoptic request JSON: request exceeds maximum size ${maxBytes} bytes.`);\n }\n\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n throw new Error(`Invalid Panoptic request JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n if (!isJsonObject(parsed) || !isJsonValue(parsed)) {\n throw new Error('Invalid Panoptic request JSON: expected a JSON-safe object envelope.');\n }\n\n return parsed as PanopticCallRequest;\n}\n\nfunction assertPanopticSuccessResponse(value: PanopticCallResponse): void {\n const keys = isJsonObject(value) ? Object.keys(value) : [];\n\n if (\n !isJsonObject(value) ||\n value.ok !== true ||\n !('result' in value) ||\n !isJsonValue(value.result) ||\n keys.length !== 2 ||\n !keys.includes('ok') ||\n !keys.includes('result')\n ) {\n throw new Error('Panoptic runtime adapter returned an invalid success response.');\n }\n}\n\nfunction panopticSuccess(result: JsonValue): PanopticCallResponse {\n return { ok: true, result };\n}\n\nfunction isJsonObject(value: unknown): value is { [key: string]: unknown } {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction isJsonRecord(value: unknown): value is { [key: string]: JsonValue } {\n return isJsonObject(value) && isJsonValue(value);\n}\n\nfunction requestArgs(request: PanopticCallRequest, method: string): { [key: string]: JsonValue } {\n if (!isJsonRecord(request.args)) {\n throw new Error(`Panoptic ${method} args must be an object.`);\n }\n\n return request.args;\n}\n\nfunction sanitizePanopticError(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return message\n .split('\\n')[0]\n .replace(/https?:\\/\\/[^\\s)]+/gi, '[redacted-url]')\n .replace(/\\b(api[_-]?key|token|secret|authorization)=([^&\\s]+)/gi, '$1=[redacted]')\n .replace(/\\b(authorization|proxy-authorization)\\s*:\\s*(bearer|basic)\\s+[^\\s,}]+/gi, '$1: $2 [redacted]')\n .replace(/\\b(bearer|basic)\\s+[a-z0-9._~+/-]+=*/gi, '$1 [redacted]')\n .replace(/\"(api[_-]?key|token|secret|authorization)\"\\s*:\\s*\"[^\"]*\"/gi, '\"$1\":\"[redacted]\"')\n .replace(/\\b(api[_-]?key|token|secret)\\s*:\\s*([^\\s,}]+)/gi, '$1: [redacted]')\n .slice(0, 240);\n}\n\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null) return true;\n\n const valueType = typeof value;\n if (valueType === 'string' || valueType === 'number' || valueType === 'boolean') {\n return Number.isFinite(value as number) || valueType !== 'number';\n }\n\n if (Array.isArray(value)) {\n return value.every(isJsonValue);\n }\n\n if (isJsonObject(value)) {\n return Object.values(value).every(isJsonValue);\n }\n\n return false;\n}\n\nfunction utf8ByteLength(value: string): number {\n let bytes = 0;\n\n for (let i = 0; i < value.length; i++) {\n const codePoint = value.codePointAt(i) || 0;\n\n if (codePoint <= 0x7f) {\n bytes += 1;\n } else if (codePoint <= 0x7ff) {\n bytes += 2;\n } else if (codePoint <= 0xffff) {\n bytes += 3;\n } else {\n bytes += 4;\n i += 1;\n }\n }\n\n return bytes;\n}\n\nexport {\n assertPanopticSuccessResponse,\n isJsonRecord,\n panopticSuccess,\n parsePanopticRequest,\n requestArgs,\n sanitizePanopticError,\n};\nexport type { JsonValue, PanopticCallRequest, PanopticCallResponse };\n","import type { AsyncHostCallSlot } from './asyncHostCalls';\nimport {\n assertPanopticSuccessResponse,\n parsePanopticRequest,\n type PanopticCallRequest,\n type PanopticCallResponse,\n} from './panopticHostEnvelope';\n\ntype PanopticRuntimeAdapter = {\n callPanoptic?: (method: string, request: PanopticCallRequest) => Promise<PanopticCallResponse>;\n};\n\ntype PanopticHostImportOptions = {\n runtime: PanopticRuntimeAdapter;\n hostCalls: AsyncHostCallSlot;\n getAsyncifyState: () => number;\n rewindingState: number;\n stopRewind: () => void;\n startUnwind: () => void;\n liftString: (ptr: number) => string | null;\n lowerString: (value: string, owner: 'host' | 'wasm') => number;\n};\n\nfunction createPanopticHostImport(\n options: PanopticHostImportOptions,\n): (methodPtr: number, paramsJsonPtr: number) => number | void {\n return (methodPtr, paramsJsonPtr) => {\n if (options.getAsyncifyState() === options.rewindingState) {\n options.stopRewind();\n const completed = options.hostCalls.take('panoptic-json');\n return options.lowerString(completed.value, 'wasm');\n }\n\n const method = options.liftString(methodPtr);\n const paramsJson = options.liftString(paramsJsonPtr) || '{}';\n options.hostCalls.stage({\n kind: 'panoptic-json',\n run: async () => {\n if (!method) {\n throw new Error('Panoptic method not provided.');\n }\n\n const request = parsePanopticRequest(paramsJson);\n const response = await callPanopticOrThrow(options.runtime, method, request);\n assertPanopticSuccessResponse(response);\n return JSON.stringify({ ok: true, result: response.result });\n },\n });\n\n options.startUnwind();\n };\n}\n\nasync function callPanopticOrThrow(\n runtime: PanopticRuntimeAdapter,\n method: string,\n request: PanopticCallRequest,\n): Promise<PanopticCallResponse> {\n if (!runtime.callPanoptic) {\n throw new Error('Panoptic runtime adapter is not available in this runtime.');\n }\n\n return runtime.callPanoptic(method, request);\n}\n\nexport { createPanopticHostImport };\n","import type { PanopticCallRequest, PanopticCallResponse } from './panopticHostEnvelope';\n\n/**\n * Browser Panoptic adapter placeholder. Phase 8 owns the browser loading model.\n */\nasync function callBrowserPanoptic(method: string, request: PanopticCallRequest): Promise<PanopticCallResponse> {\n void method;\n void request;\n\n throw new Error(\n 'Panoptic runtime adapter is not enabled for browser runtimes yet. Phase 8 must choose globalThis SDK globals or dynamic browser imports first.',\n );\n}\n\nexport { callBrowserPanoptic };\n","type RuntimeImport = (specifier: string) => Promise<unknown>;\ntype PanopticDependencyKey = 'sdk' | 'sdkV2' | 'uniswap' | 'viem';\ntype PanopticDependencies = {\n sdk(): Promise<Record<string, unknown>>;\n sdkV2(): Promise<Record<string, unknown>>;\n uniswap(): Promise<Record<string, unknown>>;\n viem(): Promise<Record<string, unknown>>;\n};\n\nconst PANOPTIC_MODULE_SPECIFIERS: Record<PanopticDependencyKey, string> = {\n sdk: '@panoptic-eng/sdk',\n sdkV2: '@panoptic-eng/sdk/v2',\n uniswap: '@panoptic-eng/sdk/uniswap',\n viem: 'viem',\n};\n\nlet dynamicImport: RuntimeImport | null = null;\nlet runtimeImport: RuntimeImport | null = null;\nlet moduleCache = new Map<PanopticDependencyKey, Promise<unknown>>();\n\nfunction createPanopticDependencies(): PanopticDependencies {\n return {\n sdk: () => loadPanopticModuleRecord('sdk'),\n sdkV2: () => loadPanopticModuleRecord('sdkV2'),\n uniswap: () => loadPanopticModuleRecord('uniswap'),\n viem: () => loadPanopticModuleRecord('viem'),\n };\n}\n\n/**\n * Loads a Panoptic runtime module through always-dynamic import.\n */\nasync function loadPanopticModule(key: PanopticDependencyKey): Promise<unknown> {\n const cached = moduleCache.get(key);\n\n if (cached) {\n return cached;\n }\n\n const specifier = PANOPTIC_MODULE_SPECIFIERS[key];\n const loaded = getRuntimeImport()(specifier).catch(() => {\n moduleCache.delete(key);\n throw missingPanopticDependencyError(specifier);\n });\n\n moduleCache.set(key, loaded);\n return loaded;\n}\n\nasync function loadPanopticModuleRecord(key: PanopticDependencyKey): Promise<Record<string, unknown>> {\n const loadedModule = await loadPanopticModule(key);\n\n if (!isRecord(loadedModule)) {\n return {};\n }\n\n return loadedModule;\n}\n\nfunction missingPanopticDependencyError(specifier: string): Error {\n return new Error(\n `Panoptic runtime dependency \"${specifier}\" is not available. Install the optional Panoptic dependencies before calling Panoptic methods.`,\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction getRuntimeImport(): RuntimeImport {\n if (runtimeImport) {\n return runtimeImport;\n }\n\n if (!dynamicImport) {\n dynamicImport = new Function('s', 'return import(s)') as RuntimeImport;\n }\n\n return dynamicImport;\n}\n\n/**\n * Test-only hook for proving the dynamic-import path without installing the SDK.\n */\nfunction __setPanopticRuntimeImportForTests(importer: RuntimeImport): void {\n runtimeImport = importer;\n moduleCache = new Map<PanopticDependencyKey, Promise<unknown>>();\n}\n\n/**\n * Test-only cache reset.\n */\nfunction __resetPanopticRuntimeForTests(): void {\n runtimeImport = null;\n dynamicImport = null;\n moduleCache = new Map<PanopticDependencyKey, Promise<unknown>>();\n}\n\nexport {\n PANOPTIC_MODULE_SPECIFIERS,\n __resetPanopticRuntimeForTests,\n __setPanopticRuntimeImportForTests,\n createPanopticDependencies,\n loadPanopticModule,\n};\nexport type { PanopticDependencies, RuntimeImport };\n","import type { JsonValue } from './panopticHostEnvelope';\n\ntype PanopticJsonResourceLimits = {\n maxArrayItems?: number;\n maxObjectKeys?: number;\n maxDepth?: number;\n maxRequestBytes?: number;\n maxResponseBytes?: number;\n maxCalldataBytes?: number;\n maxStringBytes?: number;\n maxDecimalDigits?: number;\n};\n\nconst DEFAULT_MAX_ARRAY_ITEMS = 256;\nconst DEFAULT_MAX_OBJECT_KEYS = 128;\nconst DEFAULT_MAX_DEPTH = 32;\nconst DEFAULT_MAX_REQUEST_BYTES = 512 * 1024;\nconst DEFAULT_MAX_RESPONSE_BYTES = 512 * 1024;\nconst DEFAULT_MAX_CALLDATA_BYTES = 256 * 1024;\nconst DEFAULT_MAX_STRING_BYTES = 64 * 1024;\nconst DEFAULT_MAX_DECIMAL_DIGITS = 96;\n\nfunction normalizePanopticAddress(value: unknown, fieldName = 'address'): string {\n if (typeof value !== 'string' || !/^0x[0-9a-fA-F]{40}$/.test(value)) {\n throw new Error(`Panoptic ${fieldName} must be a 20-byte hex address.`);\n }\n\n return value.toLowerCase();\n}\n\nfunction normalizePanopticHex(value: unknown, fieldName = 'hex', maxBytes = DEFAULT_MAX_CALLDATA_BYTES): string {\n if (typeof value === 'string' && value.length > maxBytes * 2 + 2) {\n throw new Error(`Panoptic ${fieldName} exceeds maximum hex size ${maxBytes} bytes.`);\n }\n\n if (typeof value !== 'string' || !/^0x(?:[0-9a-fA-F]{2})*$/.test(value)) {\n throw new Error(`Panoptic ${fieldName} must be an even-length hex string.`);\n }\n\n return value.toLowerCase();\n}\n\nfunction normalizePanopticDecimalString(\n value: unknown,\n fieldName = 'value',\n maxDigits = DEFAULT_MAX_DECIMAL_DIGITS,\n): string {\n if (typeof value === 'string' && /^(0|[1-9][0-9]*)$/.test(value)) {\n assertDecimalDigitLength(value, fieldName, maxDigits);\n return BigInt(value).toString(10);\n }\n\n throw new Error(`Panoptic ${fieldName} must be an unsigned decimal string.`);\n}\n\nfunction normalizePanopticSignedDecimalString(\n value: unknown,\n fieldName = 'value',\n maxDigits = DEFAULT_MAX_DECIMAL_DIGITS,\n): string {\n if (typeof value === 'string' && /^-?(0|[1-9][0-9]*)$/.test(value)) {\n assertDecimalDigitLength(value.replace(/^-/, ''), fieldName, maxDigits);\n return BigInt(value).toString(10);\n }\n\n throw new Error(`Panoptic ${fieldName} must be a signed decimal string.`);\n}\n\nfunction projectPanopticSerializableValue(\n value: unknown,\n limits: PanopticJsonResourceLimits = {},\n label = 'result',\n): JsonValue {\n const normalized = normalizeSerializableValue(value, normalizeLimits(limits), label, 0, new WeakSet<object>());\n assertSerializedSize(normalized, limits.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES, label, 'response');\n return normalized;\n}\n\nfunction projectPanopticSerializableRequest(\n value: unknown,\n limits: PanopticJsonResourceLimits = {},\n label = 'request',\n): JsonValue {\n const normalizedLimits = normalizeLimits(limits);\n const normalized = normalizeSerializableValue(value, normalizedLimits, label, 0, new WeakSet<object>());\n assertSerializedSize(normalized, normalizedLimits.maxRequestBytes, label, 'request');\n return normalized;\n}\n\nfunction normalizeSerializableValue(\n value: unknown,\n limits: Required<PanopticJsonResourceLimits>,\n path: string,\n depth: number,\n seen: WeakSet<object>,\n): JsonValue {\n if (depth > limits.maxDepth) {\n throw new Error(`Panoptic ${path} exceeds maximum JSON depth.`);\n }\n\n if (value === null || typeof value === 'string' || typeof value === 'boolean') {\n enforceHexSizeIfNeeded(value, limits, path);\n if (typeof value === 'string' && utf8ByteLength(value) > limits.maxStringBytes) {\n throw new Error(`Panoptic ${path} exceeds maximum string length ${limits.maxStringBytes} bytes.`);\n }\n return value;\n }\n\n if (typeof value === 'bigint') {\n return value.toString(10);\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Panoptic ${path} must be a finite number.`);\n }\n\n return value;\n }\n\n if (value instanceof Uint8Array) {\n if (value.byteLength > limits.maxCalldataBytes) {\n throw new Error(`Panoptic ${path} exceeds maximum encoded calldata size ${limits.maxCalldataBytes} bytes.`);\n }\n return bytesToHex(value);\n }\n\n if (value instanceof ArrayBuffer) {\n if (value.byteLength > limits.maxCalldataBytes) {\n throw new Error(`Panoptic ${path} exceeds maximum encoded calldata size ${limits.maxCalldataBytes} bytes.`);\n }\n return bytesToHex(new Uint8Array(value));\n }\n\n if (Array.isArray(value)) {\n if (value.length > limits.maxArrayItems) {\n throw new Error(`Panoptic ${path} exceeds maximum array length ${limits.maxArrayItems}.`);\n }\n\n return value.map((item, index) => normalizeSerializableValue(item, limits, `${path}[${index}]`, depth + 1, seen));\n }\n\n if (typeof value === 'object' && value !== null) {\n const prototype = Object.getPrototypeOf(value);\n\n if (prototype !== Object.prototype && prototype !== null) {\n throw new Error(`Panoptic ${path} must be explicitly projected before crossing the wasm boundary.`);\n }\n\n if (seen.has(value)) {\n throw new Error(`Panoptic ${path} contains a circular reference.`);\n }\n\n seen.add(value);\n\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length > limits.maxObjectKeys) {\n throw new Error(`Panoptic ${path} exceeds maximum object key count ${limits.maxObjectKeys}.`);\n }\n\n const normalized = Object.create(null) as { [key: string]: JsonValue };\n for (const [key, entryValue] of entries) {\n if (isUnsafeObjectKey(key)) {\n throw new Error(`Panoptic ${path}.${key} is not supported as an object key.`);\n }\n\n if (entryValue === undefined || typeof entryValue === 'function' || typeof entryValue === 'symbol') {\n throw new Error(`Panoptic ${path}.${key} is not serializable.`);\n }\n\n normalized[key] = normalizeSerializableValue(entryValue, limits, `${path}.${key}`, depth + 1, seen);\n }\n\n seen.delete(value);\n return normalized;\n }\n\n throw new Error(`Panoptic ${path} is not serializable.`);\n}\n\nfunction normalizeLimits(limits: PanopticJsonResourceLimits): Required<PanopticJsonResourceLimits> {\n return {\n maxArrayItems: limits.maxArrayItems ?? DEFAULT_MAX_ARRAY_ITEMS,\n maxObjectKeys: limits.maxObjectKeys ?? DEFAULT_MAX_OBJECT_KEYS,\n maxDepth: limits.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxRequestBytes: limits.maxRequestBytes ?? DEFAULT_MAX_REQUEST_BYTES,\n maxResponseBytes: limits.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES,\n maxCalldataBytes: limits.maxCalldataBytes ?? DEFAULT_MAX_CALLDATA_BYTES,\n maxStringBytes: limits.maxStringBytes ?? DEFAULT_MAX_STRING_BYTES,\n maxDecimalDigits: limits.maxDecimalDigits ?? DEFAULT_MAX_DECIMAL_DIGITS,\n };\n}\n\nfunction assertSerializedSize(value: JsonValue, maxBytes: number, label: string, kind: 'request' | 'response'): void {\n const serialized = JSON.stringify(value);\n\n if (utf8ByteLength(serialized) > maxBytes) {\n throw new Error(`Panoptic ${label} exceeds maximum ${kind} size ${maxBytes} bytes.`);\n }\n}\n\nfunction utf8ByteLength(value: string): number {\n let bytes = 0;\n\n for (let i = 0; i < value.length; i++) {\n const codePoint = value.codePointAt(i) || 0;\n\n if (codePoint > 0xffff) {\n i += 1;\n }\n\n if (codePoint <= 0x7f) {\n bytes += 1;\n } else if (codePoint <= 0x7ff) {\n bytes += 2;\n } else if (codePoint <= 0xffff) {\n bytes += 3;\n } else {\n bytes += 4;\n }\n }\n\n return bytes;\n}\n\nfunction enforceHexSizeIfNeeded(\n value: string | boolean | null,\n limits: Required<PanopticJsonResourceLimits>,\n path: string,\n) {\n if (typeof value !== 'string' || !/^0x[0-9a-fA-F]*$/.test(value)) {\n return;\n }\n\n const byteLength = Math.max(0, (value.length - 2) / 2);\n if (byteLength > limits.maxCalldataBytes) {\n throw new Error(`Panoptic ${path} exceeds maximum encoded calldata size ${limits.maxCalldataBytes} bytes.`);\n }\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n let hex = '0x';\n\n for (const byte of bytes) {\n hex += byte.toString(16).padStart(2, '0');\n }\n\n return hex;\n}\n\nfunction assertDecimalDigitLength(value: string, fieldName: string, maxDigits: number): void {\n if (value.length > maxDigits) {\n throw new Error(`Panoptic ${fieldName} exceeds maximum decimal digit length ${maxDigits}.`);\n }\n}\n\nfunction isUnsafeObjectKey(key: string): boolean {\n return key === '__proto__' || key === 'constructor' || key === 'prototype';\n}\n\nexport {\n normalizePanopticAddress,\n normalizePanopticDecimalString,\n normalizePanopticHex,\n normalizePanopticSignedDecimalString,\n projectPanopticSerializableRequest,\n projectPanopticSerializableValue,\n utf8ByteLength,\n};\n","import type {\n PanopticAuditEvent,\n PanopticClientCacheOptions,\n PanopticJsonValue as JsonValue,\n PanopticOperationOptions,\n PanopticRpcSource,\n PanopticSourceRegistry,\n PanopticSubgraphSource,\n SourceMeta,\n} from '../panoptic';\nimport type { PanopticCallRequest } from './panopticHostEnvelope';\nimport { sanitizePanopticError } from './panoptic/protocol';\nimport { projectPanopticSerializableValue } from './panopticSerialization';\n\ntype ResolvedPanopticSource = {\n source: PanopticRpcSource;\n chainId: string;\n rpcUrl: string;\n normalizedRpcUrl: string;\n overrideApplied: boolean;\n};\n\ntype PanopticResolvedCallContext = {\n source: ResolvedPanopticSource;\n client: unknown;\n blockNumber: string;\n sourceMeta: SourceMeta;\n};\n\ntype ViemLikeModule = {\n createPublicClient?: (options: Record<string, unknown>) => unknown;\n http?: (url: string) => unknown;\n};\n\nconst DEFAULT_OPERATION_TIMEOUT_MS = 10_000;\nconst DEFAULT_OPERATION_RETRIES = 2;\nconst DEFAULT_CLIENT_CACHE_MAX_ENTRIES = 16;\n\nlet publicClientCache = new Map<string, unknown>();\n\nfunction resolvePanopticSource(\n context: PanopticCallRequest['context'] | undefined,\n registry: PanopticSourceRegistry | undefined,\n): ResolvedPanopticSource {\n if (!context?.sourceId && !context?.chainId && !context?.rpcUrl) {\n throw new Error('Panoptic source context must include sourceId or chainId.');\n }\n\n if (!registry?.sources?.length) {\n throw new Error('Panoptic source registry is not configured.');\n }\n\n const requestedChainId = context.chainId ? normalizeDecimalString(context.chainId, 'chainId') : null;\n const source = selectRegistrySource(context.sourceId, requestedChainId, registry);\n const sourceChainId = normalizeDecimalString(source.chainId, 'source.chainId');\n\n if (requestedChainId && sourceChainId !== requestedChainId) {\n throw new Error(\n `Panoptic source \"${source.sourceId}\" is configured for chain ${sourceChainId}, not requested chain ${requestedChainId}.`,\n );\n }\n\n const registryRpcUrl = normalizeRegistryRpcUrl(source, registry);\n const rpcUrl = context.rpcUrl ? normalizeOverrideRpcUrl(context.rpcUrl, source, registry) : registryRpcUrl;\n\n return {\n source,\n chainId: sourceChainId,\n rpcUrl,\n normalizedRpcUrl: rpcUrl,\n overrideApplied: !!context.rpcUrl && rpcUrl !== registryRpcUrl,\n };\n}\n\nasync function preparePanopticSourceContext(\n request: PanopticCallRequest,\n viemModule: unknown,\n registry: PanopticSourceRegistry | undefined,\n operationOptions: PanopticOperationOptions = {},\n cacheOptions: PanopticClientCacheOptions = {},\n): Promise<PanopticResolvedCallContext> {\n const source = resolvePanopticSource(request.context, registry);\n const client = getPanopticPublicClient(viemModule, source, cacheOptions);\n\n await runPanopticOperation(\n 'Panoptic RPC chain verification',\n () => verifyPanopticSourceChain(client, source.chainId),\n operationOptions,\n );\n\n const blockNumber = request.context?.blockNumber\n ? normalizeDecimalString(request.context.blockNumber, 'blockNumber')\n : await runPanopticOperation('Panoptic RPC block pinning', () => readPanopticBlockNumber(client), operationOptions);\n\n return {\n source,\n client,\n blockNumber,\n sourceMeta: buildSourceMeta(source, blockNumber),\n };\n}\n\nfunction getPanopticPublicClient(\n viemModule: unknown,\n source: ResolvedPanopticSource,\n options: PanopticClientCacheOptions = {},\n): unknown {\n const viem = viemModule as ViemLikeModule;\n\n if (typeof viem.createPublicClient !== 'function' || typeof viem.http !== 'function') {\n throw new Error('Panoptic runtime dependency \"viem\" does not provide createPublicClient and http.');\n }\n\n const maxEntries = normalizeClientCacheMaxEntries(options.maxEntries);\n const cacheKey = buildPublicClientCacheKey(source);\n const cached = publicClientCache.get(cacheKey);\n\n if (cached) {\n publicClientCache.delete(cacheKey);\n publicClientCache.set(cacheKey, cached);\n return cached;\n }\n\n const clientOptions = getNormalizedClientOptions(source);\n const client = viem.createPublicClient({\n ...clientOptions,\n chain: {\n id: Number(source.chainId),\n name: source.source.label || source.source.sourceId,\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: { default: { http: [source.normalizedRpcUrl] } },\n },\n transport: viem.http(source.normalizedRpcUrl),\n });\n\n publicClientCache.set(cacheKey, client);\n evictPublicClientCache(maxEntries);\n\n return client;\n}\n\nasync function verifyPanopticSourceChain(client: unknown, expectedChainId: string): Promise<void> {\n const actualChainId = normalizeChainIdValue(await readPanopticChainId(client), 'rpc.chainId');\n\n if (actualChainId !== expectedChainId) {\n throw new Error(`Panoptic RPC chain mismatch: expected ${expectedChainId}, received ${actualChainId}.`);\n }\n}\n\nasync function readPanopticBlockNumber(client: unknown): Promise<string> {\n const blockNumber = await callClient(client, 'getBlockNumber', { method: 'eth_blockNumber' });\n return normalizeChainIdValue(blockNumber, 'rpc.blockNumber');\n}\n\nfunction buildSourceMeta(source: ResolvedPanopticSource, blockNumber: string): SourceMeta {\n return {\n chainId: source.chainId,\n blockNumber,\n rpcSourceId: source.source.sourceId,\n ...(source.source.subgraph?.sourceId ? { subgraphSourceId: source.source.subgraph.sourceId } : {}),\n };\n}\n\nasync function runPanopticOperation<T>(\n label: string,\n operation: () => Promise<T>,\n options: PanopticOperationOptions = {},\n): Promise<T> {\n const retries = options.retries ?? DEFAULT_OPERATION_RETRIES;\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= retries + 1; attempt++) {\n const startedAt = Date.now();\n\n try {\n throwIfAborted(options.signal);\n const result = await withTimeout(operation(), label, options.timeoutMs ?? DEFAULT_OPERATION_TIMEOUT_MS);\n options.onAudit?.({ label, status: 'success', attempt, durationMs: Date.now() - startedAt });\n return result;\n } catch (error) {\n lastError = error;\n options.onAudit?.({\n label,\n status: 'failure',\n attempt,\n durationMs: Date.now() - startedAt,\n error: sanitizeOperationError(error),\n });\n\n if (attempt > retries || isNonRetryablePanopticOperationError(error)) {\n break;\n }\n }\n }\n\n throw new Error(`${label} failed: ${sanitizeOperationError(lastError)}`);\n}\n\nfunction buildPublicClientCacheKey(source: ResolvedPanopticSource): string {\n return `${source.chainId}:${source.normalizedRpcUrl}:${stableStringify(getNormalizedClientOptions(source))}`;\n}\n\nfunction getNormalizedClientOptions(source: ResolvedPanopticSource): { [key: string]: JsonValue } {\n if (!isJsonObject(source.source.clientOptions)) {\n return {};\n }\n\n const normalized = projectPanopticSerializableValue(\n source.source.clientOptions,\n { maxDepth: 8, maxObjectKeys: 64, maxResponseBytes: 32 * 1024 },\n 'source.clientOptions',\n );\n\n if (!isJsonObject(normalized)) {\n return {};\n }\n\n return normalized;\n}\n\nfunction __resetPanopticSourceStateForTests(): void {\n publicClientCache = new Map<string, unknown>();\n}\n\nfunction selectRegistrySource(\n sourceId: string | undefined,\n requestedChainId: string | null,\n registry: PanopticSourceRegistry,\n): PanopticRpcSource {\n if (sourceId) {\n const source = registry.sources.find((candidate) => candidate.sourceId === sourceId);\n\n if (!source) {\n throw new Error(`Panoptic source \"${sourceId}\" is not configured.`);\n }\n\n return source;\n }\n\n const candidates = registry.sources.filter(\n (source) => normalizeDecimalString(source.chainId, 'source.chainId') === requestedChainId,\n );\n\n if (candidates.length === 0) {\n throw new Error(`No Panoptic source is configured for chain ${requestedChainId}.`);\n }\n\n if (candidates.length > 1) {\n throw new Error(`Multiple Panoptic sources are configured for chain ${requestedChainId}; sourceId is required.`);\n }\n\n return candidates[0];\n}\n\nfunction normalizeOverrideRpcUrl(value: string, source: PanopticRpcSource, registry: PanopticSourceRegistry): string {\n if (!source.overrideable) {\n throw new Error(`Panoptic source \"${source.sourceId}\" does not allow RPC URL overrides.`);\n }\n\n const normalized = normalizeRpcUrl(value);\n const overrideUrl = new URL(normalized);\n const registryUrl = new URL(normalizeRegistryRpcUrl(source, registry));\n const allowLocalhost = !!(registry.devMode && source.allowLocalhostOverrides);\n\n if (isLocalOrPrivateHostname(overrideUrl.hostname) && !allowLocalhost) {\n throw new Error('Panoptic RPC URL override uses a localhost or private host without explicit dev-mode permission.');\n }\n\n if (overrideUrl.protocol !== 'https:' && !(allowLocalhost && overrideUrl.protocol === 'http:')) {\n throw new Error('Panoptic RPC URL override must use https.');\n }\n\n const allowedHosts = new Set([\n registryUrl.hostname.toLowerCase(),\n ...(registry.allowedOverrideHosts || []).map((host) => host.toLowerCase()),\n ...(source.allowedOverrideHosts || []).map((host) => host.toLowerCase()),\n ]);\n\n if (!hostMatchesAllowedList(overrideUrl.hostname, allowedHosts)) {\n throw new Error(`Panoptic RPC URL override host \"${overrideUrl.hostname}\" is not allowed.`);\n }\n\n return normalized;\n}\n\nfunction normalizeRegistryRpcUrl(source: PanopticRpcSource, registry: PanopticSourceRegistry): string {\n const normalized = normalizeRpcUrl(source.rpcUrl);\n const url = new URL(normalized);\n const allowLocalhost = !!(registry.devMode && source.allowLocalhostOverrides);\n\n if (isLocalOrPrivateHostname(url.hostname) && !allowLocalhost) {\n throw new Error('Panoptic registry RPC URL uses a localhost or private host without explicit dev-mode permission.');\n }\n\n if (url.protocol !== 'https:' && !(allowLocalhost && url.protocol === 'http:')) {\n throw new Error('Panoptic registry RPC URL must use https.');\n }\n\n return normalized;\n}\n\nfunction normalizeRpcUrl(value: string): string {\n let url: URL;\n\n try {\n url = new URL(value);\n } catch {\n throw new Error('Panoptic RPC URL must be an absolute URL.');\n }\n\n if (url.protocol !== 'https:' && url.protocol !== 'http:') {\n throw new Error('Panoptic RPC URL must use http or https.');\n }\n\n if (url.hash) {\n throw new Error('Panoptic RPC URL must not include a fragment.');\n }\n\n url.protocol = url.protocol.toLowerCase();\n url.hostname = url.hostname.toLowerCase();\n\n if (url.pathname === '/' && !url.search) {\n return `${url.protocol}//${url.host}`;\n }\n\n return url.toString();\n}\n\nfunction normalizeDecimalString(value: string, fieldName: string): string {\n if (!/^(0|[1-9][0-9]*)$/.test(value)) {\n throw new Error(`Panoptic ${fieldName} must be a decimal string.`);\n }\n\n return BigInt(value).toString(10);\n}\n\nfunction normalizeChainIdValue(value: unknown, fieldName: string): string {\n if (typeof value === 'bigint') {\n return value.toString(10);\n }\n\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return value.toString(10);\n }\n\n if (typeof value === 'string') {\n if (/^0x[0-9a-f]+$/i.test(value)) {\n return BigInt(value).toString(10);\n }\n\n return normalizeDecimalString(value, fieldName);\n }\n\n throw new Error(`Panoptic ${fieldName} must be a decimal string, hex string, bigint, or safe integer.`);\n}\n\nasync function readPanopticChainId(client: unknown): Promise<unknown> {\n return callClient(client, 'getChainId', { method: 'eth_chainId' });\n}\n\nasync function callClient(client: unknown, methodName: string, request: { method: string }): Promise<unknown> {\n if (isRecord(client) && typeof client[methodName] === 'function') {\n return client[methodName]();\n }\n\n if (isRecord(client) && typeof client.request === 'function') {\n return client.request(request);\n }\n\n throw new Error(`Panoptic viem client does not provide ${methodName} or request.`);\n}\n\nfunction evictPublicClientCache(maxEntries: number): void {\n while (publicClientCache.size > maxEntries) {\n const oldestKey = publicClientCache.keys().next().value;\n if (oldestKey === undefined) {\n break;\n }\n publicClientCache.delete(oldestKey);\n }\n}\n\nfunction normalizeClientCacheMaxEntries(maxEntries: number | undefined): number {\n if (maxEntries === undefined) {\n return DEFAULT_CLIENT_CACHE_MAX_ENTRIES;\n }\n\n if (!Number.isInteger(maxEntries) || maxEntries < 1) {\n throw new Error('Panoptic client cache maxEntries must be a positive integer.');\n }\n\n return maxEntries;\n}\n\nfunction hostMatchesAllowedList(hostname: string, allowedHosts: Set<string>): boolean {\n const normalized = hostname.toLowerCase();\n\n for (const allowedHost of allowedHosts) {\n if (allowedHost.startsWith('*.') && normalized.endsWith(allowedHost.slice(1))) {\n return true;\n }\n\n if (normalized === allowedHost) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isLocalOrPrivateHostname(hostname: string): boolean {\n const normalized = hostname.toLowerCase().replace(/^\\[|\\]$/g, '');\n\n if (\n normalized === 'localhost' ||\n normalized === '::' ||\n normalized === '::1' ||\n normalized === '0:0:0:0:0:0:0:0' ||\n normalized === '0:0:0:0:0:0:0:1'\n ) {\n return true;\n }\n\n if (normalized.startsWith('::ffff:')) {\n return true;\n }\n\n const ipv4Parts = normalized.split('.').map((part) => Number(part));\n if (ipv4Parts.length === 4 && ipv4Parts.every((part) => Number.isInteger(part) && part >= 0 && part <= 255)) {\n const [first, second] = ipv4Parts;\n return (\n first === 0 ||\n first === 10 ||\n first === 127 ||\n (first === 172 && second >= 16 && second <= 31) ||\n (first === 192 && second === 168) ||\n (first === 169 && second === 254)\n );\n }\n\n return (\n normalized.startsWith('fc') ||\n normalized.startsWith('fd') ||\n normalized.startsWith('fe8') ||\n normalized.startsWith('fe9') ||\n normalized.startsWith('fea') ||\n normalized.startsWith('feb')\n );\n}\n\nasync function withTimeout<T>(promise: Promise<T>, label: string, timeoutMs: number): Promise<T> {\n let timeout: ReturnType<typeof setTimeout> | null = null;\n\n try {\n return await Promise.race([\n promise,\n new Promise<never>((_, reject) => {\n timeout = setTimeout(() => reject(new Error(`${label} timed out after ${timeoutMs}ms.`)), timeoutMs);\n }),\n ]);\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) {\n throw new Error('Panoptic operation was aborted.');\n }\n}\n\nfunction sanitizeOperationError(error: unknown): string {\n return sanitizePanopticError(error);\n}\n\nfunction isNonRetryablePanopticOperationError(error: unknown): boolean {\n return sanitizeOperationError(error).startsWith('Panoptic runtime dependency \"');\n}\n\nfunction stableStringify(value: JsonValue): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n\n if (isJsonObject(value)) {\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`)\n .join(',')}}`;\n }\n\n return JSON.stringify(value);\n}\n\nfunction isJsonObject(value: unknown): value is { [key: string]: JsonValue } {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, (...args: any[]) => unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport {\n getPanopticPublicClient,\n preparePanopticSourceContext,\n resolvePanopticSource,\n runPanopticOperation,\n __resetPanopticSourceStateForTests,\n};\nexport type {\n PanopticAuditEvent,\n PanopticClientCacheOptions,\n PanopticOperationOptions,\n PanopticResolvedCallContext,\n PanopticRpcSource,\n PanopticSourceRegistry,\n PanopticSubgraphSource,\n SourceMeta,\n};\n","import type { JsonValue } from './panopticHostEnvelope';\n\ntype JsonRecord = { [key: string]: JsonValue };\n\nfunction decimalValue(value: JsonValue | undefined, label: string): bigint {\n if (typeof value !== 'string' || !/^(0|[1-9][0-9]*)$/.test(value)) {\n throw new Error(`Panoptic ${label} must be a decimal string.`);\n }\n\n return BigInt(value);\n}\n\nfunction signedDecimalValue(value: JsonValue | undefined, label: string): bigint {\n if (typeof value !== 'string' || !/^-?(0|[1-9][0-9]*)$/.test(value)) {\n throw new Error(`Panoptic ${label} must be a signed decimal string.`);\n }\n\n return BigInt(value);\n}\n\nfunction stringValue(value: JsonValue | undefined, label: string): string {\n if (typeof value !== 'string') {\n throw new Error(`Panoptic ${label} must be a string.`);\n }\n\n return value;\n}\n\nfunction booleanValue(value: JsonValue | undefined, label: string): boolean {\n if (typeof value !== 'boolean') {\n throw new Error(`Panoptic ${label} must be a boolean.`);\n }\n\n return value;\n}\n\nfunction numberValue(value: JsonValue | undefined, label: string): number {\n if (typeof value !== 'number') {\n throw new Error(`Panoptic ${label} must be a number.`);\n }\n\n return value;\n}\n\nfunction decimalArg(args: JsonRecord, fieldName: string): bigint {\n return decimalValue(args[fieldName], `args.${fieldName}`);\n}\n\nfunction signedDecimalArg(args: JsonRecord, fieldName: string): bigint {\n return signedDecimalValue(args[fieldName], `args.${fieldName}`);\n}\n\nfunction optionalDecimalArg(args: JsonRecord, fieldName: string): bigint | undefined {\n return args[fieldName] === undefined ? undefined : decimalArg(args, fieldName);\n}\n\nfunction optionalSignedDecimalArg(args: JsonRecord, fieldName: string): bigint | undefined {\n return args[fieldName] === undefined ? undefined : signedDecimalArg(args, fieldName);\n}\n\nfunction optionalBooleanArg(args: JsonRecord, fieldName: string): boolean | undefined {\n return args[fieldName] === undefined ? undefined : booleanValue(args[fieldName], `args.${fieldName}`);\n}\n\nfunction optionalStringArg(args: JsonRecord, fieldName: string): string | undefined {\n return args[fieldName] === undefined ? undefined : stringValue(args[fieldName], `args.${fieldName}`);\n}\n\nfunction decimalArrayArg(args: JsonRecord, fieldName: string): bigint[] {\n return decimalArrayValue(args[fieldName], `args.${fieldName}`);\n}\n\nfunction optionalDecimalArrayArg(args: JsonRecord, fieldName: string): bigint[] | undefined {\n return args[fieldName] === undefined ? undefined : decimalArrayArg(args, fieldName);\n}\n\nfunction signedDecimalArrayArg(args: JsonRecord, fieldName: string): bigint[] {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n signedDecimalValue(item, `args.${fieldName}[${index}]`),\n );\n}\n\nfunction decimalMatrixArg(args: JsonRecord, fieldName: string): bigint[][] {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((row, rowIndex) =>\n decimalArrayValue(row, `args.${fieldName}[${rowIndex}]`),\n );\n}\n\nfunction optionalStringArrayArg(args: JsonRecord, fieldName: string): string[] | undefined {\n if (args[fieldName] === undefined) {\n return undefined;\n }\n\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n stringValue(item, `args.${fieldName}[${index}]`),\n );\n}\n\nfunction decimalArrayValue(value: JsonValue | undefined, label: string): bigint[] {\n return arrayValue(value, label).map((item, index) => decimalValue(item, `${label}[${index}]`));\n}\n\nfunction arrayValue(value: JsonValue | undefined, label: string): JsonValue[] {\n if (!Array.isArray(value)) {\n throw new Error(`Panoptic ${label} must be an array.`);\n }\n\n return value;\n}\n\nfunction recordValue(value: JsonValue | undefined, label: string): JsonRecord {\n if (!isJsonRecord(value)) {\n throw new Error(`Panoptic ${label} must be an object.`);\n }\n\n return value;\n}\n\nfunction isJsonRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport {\n arrayValue,\n booleanValue,\n decimalArg,\n decimalArrayArg,\n decimalArrayValue,\n decimalMatrixArg,\n decimalValue,\n isRecord,\n numberValue,\n optionalBooleanArg,\n optionalDecimalArg,\n optionalDecimalArrayArg,\n optionalSignedDecimalArg,\n optionalStringArg,\n optionalStringArrayArg,\n recordValue,\n signedDecimalArg,\n signedDecimalArrayArg,\n signedDecimalValue,\n stringValue,\n};\nexport type { JsonRecord };\n","import {\n arrayValue,\n booleanValue,\n decimalArrayValue,\n decimalValue,\n numberValue,\n recordValue,\n signedDecimalValue,\n stringValue,\n} from './panopticJsonArgs';\nimport type { JsonValue } from './panopticHostEnvelope';\nimport type { JsonRecord } from './panopticJsonArgs';\n\nfunction collateralAddressesValue(value: JsonValue, label: string) {\n const record = recordValue(value, label);\n\n return {\n collateralToken0: stringValue(record.collateralToken0, `${label}.collateralToken0`),\n collateralToken1: stringValue(record.collateralToken1, `${label}.collateralToken1`),\n };\n}\n\nfunction poolInfoArrayArg(args: JsonRecord, fieldName: string) {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n poolInfoValue(item, `args.${fieldName}[${index}]`),\n );\n}\n\nfunction poolInfoValue(value: JsonValue, label: string) {\n const record = recordValue(value, label);\n\n return {\n pool: stringValue(record.pool, `${label}.pool`),\n token0: stringValue(record.token0, `${label}.token0`),\n token1: stringValue(record.token1, `${label}.token1`),\n maxPriceDeviation: numberValue(record.maxPriceDeviation, `${label}.maxPriceDeviation`),\n };\n}\n\nfunction poolMetadataValue(value: JsonValue, label: string) {\n const record = recordValue(value, label);\n\n return {\n poolKeyBytes: stringValue(record.poolKeyBytes, `${label}.poolKeyBytes`),\n poolId: decimalValue(record.poolId, `${label}.poolId`),\n collateralToken0Address: stringValue(record.collateralToken0Address, `${label}.collateralToken0Address`),\n collateralToken1Address: stringValue(record.collateralToken1Address, `${label}.collateralToken1Address`),\n riskEngineAddress: stringValue(record.riskEngineAddress, `${label}.riskEngineAddress`),\n token0Asset: stringValue(record.token0Asset, `${label}.token0Asset`),\n token1Asset: stringValue(record.token1Asset, `${label}.token1Asset`),\n token0Symbol: stringValue(record.token0Symbol, `${label}.token0Symbol`),\n token1Symbol: stringValue(record.token1Symbol, `${label}.token1Symbol`),\n token0Decimals: decimalValue(record.token0Decimals, `${label}.token0Decimals`),\n token1Decimals: decimalValue(record.token1Decimals, `${label}.token1Decimals`),\n token0Name: stringValue(record.token0Name, `${label}.token0Name`),\n token1Name: stringValue(record.token1Name, `${label}.token1Name`),\n underlyingPoolId: stringValue(record.underlyingPoolId, `${label}.underlyingPoolId`),\n isV4: booleanValue(record.isV4, `${label}.isV4`),\n tickSpacing: decimalValue(record.tickSpacing, `${label}.tickSpacing`),\n fee: decimalValue(record.fee, `${label}.fee`),\n sfpmAddress: stringValue(record.sfpmAddress, `${label}.sfpmAddress`),\n };\n}\n\nfunction tokenIdLegArrayArg(args: JsonRecord, fieldName: string) {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n tokenIdLegValue(item, `args.${fieldName}[${index}]`),\n );\n}\n\nfunction tokenIdLegValue(value: JsonValue, label: string) {\n const record = recordValue(value, label);\n\n return {\n index: decimalValue(record.index, `${label}.index`),\n asset: decimalValue(record.asset, `${label}.asset`),\n optionRatio: decimalValue(record.optionRatio, `${label}.optionRatio`),\n isLong: booleanValue(record.isLong, `${label}.isLong`),\n tokenType: decimalValue(record.tokenType, `${label}.tokenType`),\n riskPartner: decimalValue(record.riskPartner, `${label}.riskPartner`),\n strike: signedDecimalValue(record.strike, `${label}.strike`),\n width: decimalValue(record.width, `${label}.width`),\n tickLower: signedDecimalValue(record.tickLower, `${label}.tickLower`),\n tickUpper: signedDecimalValue(record.tickUpper, `${label}.tickUpper`),\n };\n}\n\nfunction storedPositionArrayArg(args: JsonRecord, fieldName: string) {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n storedPositionValue(item, `args.${fieldName}[${index}]`),\n );\n}\n\nfunction storedPositionValue(value: JsonValue, label: string) {\n const record = recordValue(value, label);\n\n return {\n tokenId: decimalValue(record.tokenId, `${label}.tokenId`),\n legs: arrayValue(record.legs, `${label}.legs`).map((leg, index) => tokenIdLegValue(leg, `${label}.legs[${index}]`)),\n tickAtMint: signedDecimalValue(record.tickAtMint, `${label}.tickAtMint`),\n positionSize: decimalValue(record.positionSize, `${label}.positionSize`),\n };\n}\n\nfunction vaultCandidatesByPoolArrayArg(args: JsonRecord, fieldName: string) {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n vaultCandidatesByPoolValue(item, `args.${fieldName}[${index}]`),\n );\n}\n\nfunction vaultCandidatesByPoolValue(value: JsonValue, label: string) {\n const record = recordValue(value, label);\n\n return {\n poolAddress: stringValue(record.poolAddress, `${label}.poolAddress`),\n candidates: decimalArrayValue(record.candidates, `${label}.candidates`),\n };\n}\n\nfunction uniswapAddressesValue(value: JsonValue, label: string) {\n const record = recordValue(value, label);\n\n return {\n universalRouter: stringValue(record.universalRouter, `${label}.universalRouter`),\n v4Quoter: stringValue(record.v4Quoter, `${label}.v4Quoter`),\n poolManager: stringValue(record.poolManager, `${label}.poolManager`),\n permit2: stringValue(record.permit2, `${label}.permit2`),\n };\n}\n\nexport {\n collateralAddressesValue,\n poolInfoArrayArg,\n poolMetadataValue,\n storedPositionArrayArg,\n tokenIdLegArrayArg,\n uniswapAddressesValue,\n vaultCandidatesByPoolArrayArg,\n};\n","import type { JsonValue } from './panopticHostEnvelope';\nimport type { JsonRecord } from './panopticJsonArgs';\n\nconst UINT48_MAX = (BigInt(1) << BigInt(48)) - BigInt(1);\nconst UINT128_MAX = (BigInt(1) << BigInt(128)) - BigInt(1);\nconst UINT160_MAX = (BigInt(1) << BigInt(160)) - BigInt(1);\nconst UINT256_MAX = (BigInt(1) << BigInt(256)) - BigInt(1);\nconst INT24_MIN = -(BigInt(1) << BigInt(23));\nconst INT24_MAX = (BigInt(1) << BigInt(23)) - BigInt(1);\n\nfunction uint48Arg(args: JsonRecord, fieldName: string): bigint {\n return unsignedDecimalValue(args[fieldName], `args.${fieldName}`, UINT48_MAX, 'uint48');\n}\n\nfunction uint128Arg(args: JsonRecord, fieldName: string): bigint {\n return unsignedDecimalValue(args[fieldName], `args.${fieldName}`, UINT128_MAX, 'uint128');\n}\n\nfunction uint160Arg(args: JsonRecord, fieldName: string): bigint {\n return unsignedDecimalValue(args[fieldName], `args.${fieldName}`, UINT160_MAX, 'uint160');\n}\n\nfunction uint256Arg(args: JsonRecord, fieldName: string): bigint {\n return unsignedDecimalValue(args[fieldName], `args.${fieldName}`, UINT256_MAX, 'uint256');\n}\n\nfunction optionalUint256Arg(args: JsonRecord, fieldName: string): bigint | undefined {\n return args[fieldName] === undefined\n ? undefined\n : unsignedDecimalValue(args[fieldName], `args.${fieldName}`, UINT256_MAX, 'uint256');\n}\n\nfunction uint256ArrayArg(args: JsonRecord, fieldName: string): bigint[] {\n const value = args[fieldName];\n\n if (!Array.isArray(value)) {\n throw new Error(`Panoptic args.${fieldName} must be an array.`);\n }\n\n return value.map((item, index) => unsignedDecimalValue(item, `args.${fieldName}[${index}]`, UINT256_MAX, 'uint256'));\n}\n\nfunction int24Arg(args: JsonRecord, fieldName: string): bigint {\n return signedDecimalValue(args[fieldName], `args.${fieldName}`, INT24_MIN, INT24_MAX, 'int24');\n}\n\nfunction optionalInt24Arg(args: JsonRecord, fieldName: string): bigint | undefined {\n return args[fieldName] === undefined\n ? undefined\n : signedDecimalValue(args[fieldName], `args.${fieldName}`, INT24_MIN, INT24_MAX, 'int24');\n}\n\nfunction unsignedDecimalValue(\n value: JsonValue | undefined,\n label: string,\n maxValue: bigint,\n rangeLabel: string,\n): bigint {\n if (typeof value !== 'string' || !/^(0|[1-9][0-9]*)$/.test(value)) {\n throw new Error(`Panoptic ${label} must be an unsigned decimal string.`);\n }\n\n const parsed = BigInt(value);\n\n if (parsed > maxValue) {\n throw new Error(`Panoptic ${label} exceeds ${rangeLabel} range.`);\n }\n\n return parsed;\n}\n\nfunction signedDecimalValue(\n value: JsonValue | undefined,\n label: string,\n minValue: bigint,\n maxValue: bigint,\n rangeLabel: string,\n): bigint {\n if (typeof value !== 'string' || !/^-?(0|[1-9][0-9]*)$/.test(value)) {\n throw new Error(`Panoptic ${label} must be a signed decimal string.`);\n }\n\n const parsed = BigInt(value);\n\n if (parsed < minValue || parsed > maxValue) {\n throw new Error(`Panoptic ${label} exceeds ${rangeLabel} range.`);\n }\n\n return parsed;\n}\n\nexport {\n int24Arg,\n optionalInt24Arg,\n optionalUint256Arg,\n uint48Arg,\n uint128Arg,\n uint160Arg,\n uint256Arg,\n uint256ArrayArg,\n};\n","import type { JsonValue, PanopticCallRequest } from './protocol';\nimport { preparePanopticSourceContext, type PanopticResolvedCallContext } from '../panopticSources';\n\nfunction rejectContext(request: PanopticCallRequest, method: string): void {\n if (request.context !== undefined) {\n throw new Error(`Panoptic ${method} is a pure method and does not accept runtime context.`);\n }\n}\n\nfunction requireSourceContext(request: PanopticCallRequest, method: string): void {\n if (request.context) {\n rejectExtraContextKeys(request, method);\n }\n\n if (!request.context?.sourceId && !request.context?.chainId) {\n throw new Error(`Panoptic ${method} requires context.sourceId or context.chainId.`);\n }\n}\n\nfunction rejectExtraContextKeys(request: PanopticCallRequest, method: string): void {\n const context = request.context;\n\n if (!context) {\n return;\n }\n\n const allowed = new Set(['chainId', 'sourceId', 'blockNumber', 'account', 'panopticSubgraphId', 'rpcUrl']);\n\n for (const key of Object.keys(context)) {\n if (!allowed.has(key)) {\n throw new Error(`Panoptic ${method} context.${key} is not supported by the schema.`);\n }\n }\n}\n\nfunction rejectExtraKeys(args: { [key: string]: JsonValue }, allowedKeys: readonly string[], method: string): void {\n const allowed = new Set(allowedKeys);\n\n for (const key of Object.keys(args)) {\n if (!allowed.has(key)) {\n throw new Error(`Panoptic ${method} args.${key} is not supported by the schema.`);\n }\n }\n}\n\nfunction requireString(value: unknown, label: string): string {\n if (typeof value !== 'string') {\n throw new Error(`Panoptic ${label} must be a string.`);\n }\n\n return value;\n}\n\nfunction requirePlainResult(value: unknown, label: string): Record<string, unknown> {\n if (!isRecord(value)) {\n throw new Error(`Panoptic ${label} must be an object.`);\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new Error(`Panoptic ${label} must be a plain object.`);\n }\n\n return value;\n}\n\nfunction requireSdkFunction(\n sdkModule: Record<string, unknown>,\n name: string,\n label: string,\n): (...args: unknown[]) => unknown {\n const defaultExport = isRecord(sdkModule.default) ? sdkModule.default : undefined;\n const sdkExport = sdkModule[name] ?? defaultExport?.[name];\n\n if (typeof sdkExport !== 'function') {\n throw new Error(`Panoptic runtime dependency \"${label}\" does not provide ${name}.`);\n }\n\n return sdkExport as (...args: unknown[]) => unknown;\n}\n\nasync function prepareRuntimeSourceContext(\n deps: { viem: () => Promise<Record<string, unknown>> },\n request: PanopticCallRequest,\n options: {\n sourceRegistry?: Parameters<typeof preparePanopticSourceContext>[2];\n operation?: Parameters<typeof preparePanopticSourceContext>[3];\n clientCache?: Parameters<typeof preparePanopticSourceContext>[4];\n },\n): Promise<PanopticResolvedCallContext> {\n return preparePanopticSourceContext(\n request,\n await deps.viem(),\n options.sourceRegistry,\n options.operation,\n options.clientCache,\n );\n}\n\nfunction withSource(\n value: unknown,\n sourceContext: PanopticResolvedCallContext,\n blockNumberRole: 'pinned' | 'sdkResult' | 'preflight' | 'staticReference',\n label: string,\n blockNumber?: string,\n reconciled?: boolean,\n): Record<string, unknown> {\n const projectedValue = omitSdkMeta(requirePlainResult(value, label));\n const sourceMeta = buildMethodSourceMeta(sourceContext, blockNumberRole, blockNumber, reconciled);\n\n return {\n ...projectedValue,\n source: sourceMeta,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction omitSdkMeta(value: Record<string, unknown>): Record<string, unknown> {\n const { _meta: _ignored, ...publicValue } = value;\n void _ignored;\n return publicValue;\n}\n\nfunction buildMethodSourceMeta(\n sourceContext: PanopticResolvedCallContext,\n blockNumberRole: 'pinned' | 'sdkResult' | 'preflight' | 'staticReference',\n blockNumber?: string,\n reconciled?: boolean,\n): Record<string, unknown> {\n const { blockNumber: preparedBlockNumber, ...baseMeta } = sourceContext.sourceMeta;\n const sourceBlockNumber = blockNumber || preparedBlockNumber;\n\n return {\n ...baseMeta,\n ...(blockNumberRole === 'preflight'\n ? { preflightBlockNumber: sourceBlockNumber }\n : { blockNumber: sourceBlockNumber }),\n blockNumberRole,\n ...(reconciled === undefined ? {} : { reconciled }),\n };\n}\n\nexport {\n isRecord,\n prepareRuntimeSourceContext,\n rejectContext,\n rejectExtraKeys,\n requireSdkFunction,\n requireSourceContext,\n requireString,\n withSource,\n};\nexport type { PanopticResolvedCallContext };\n","import { collateralAddressesValue, poolMetadataValue } from '../../panopticDtos';\nimport { optionalBooleanArg, optionalSignedDecimalArg, signedDecimalArrayArg } from '../../panopticJsonArgs';\nimport { normalizePanopticAddress, normalizePanopticHex } from '../../panopticSerialization';\nimport { uint256Arg, uint256ArrayArg } from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport {\n type PanopticResolvedCallContext,\n prepareRuntimeSourceContext,\n rejectExtraKeys,\n requireSdkFunction,\n requireSourceContext,\n withSource,\n} from '../support';\n\ntype AccountReadInput = {\n account: string;\n poolAddress: string;\n};\n\nasync function getPosition({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseTokenIdRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetPosition = await loadSdkV2Function(deps, 'getPosition');\n\n return withSource(\n await sdkGetPosition({\n ...ownerReadParams(sourceContext, input.account),\n poolAddress: input.poolAddress,\n tokenId: input.tokenId,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function getPositions({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseTokenIdsRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetPositions = await loadSdkV2Function(deps, 'getPositions');\n\n return withSource(\n await sdkGetPositions({\n ...ownerReadParams(sourceContext, input.account),\n poolAddress: input.poolAddress,\n tokenIds: input.tokenIds,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function getOpenPositionIds({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseOpenPositionIdsRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetOpenPositionIds = await loadSdkV2Function(deps, 'getOpenPositionIds');\n const tokenIds = await sdkGetOpenPositionIds({\n client: sourceContext.client,\n chainId: BigInt(sourceContext.source.chainId),\n poolAddress: input.poolAddress,\n account: input.account,\n lastDispatchTxHash: input.lastDispatchTxHash,\n });\n\n return withSource({ tokenIds }, sourceContext, 'preflight', `${method} result`, undefined, false);\n}\n\nasync function getAccountCollateral({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseAccountCollateralRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetAccountCollateral = await loadSdkV2Function(deps, 'getAccountCollateral');\n\n return withSource(\n await sdkGetAccountCollateral({\n ...accountReadParams(sourceContext, input.account),\n poolAddress: input.poolAddress,\n collateralAddresses: input.collateralAddresses,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function getAccountSummaryBasic({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseAccountSummaryBasicRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetAccountSummaryBasic = await loadSdkV2Function(deps, 'getAccountSummaryBasic');\n\n return withSource(\n await sdkGetAccountSummaryBasic({\n ...accountReadParams(sourceContext, input.account, true),\n poolAddress: input.poolAddress,\n tokenIds: input.tokenIds,\n poolMetadata: input.poolMetadata,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function getAccountSummaryRisk({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseAccountSummaryRiskRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetAccountSummaryRisk = await loadSdkV2Function(deps, 'getAccountSummaryRisk');\n\n return withSource(\n await sdkGetAccountSummaryRisk({\n ...accountReadParams(sourceContext, input.account, true),\n poolAddress: input.poolAddress,\n tokenIds: input.tokenIds,\n queryAddress: input.queryAddress,\n atTick: input.atTick,\n includePendingPremium: input.includePendingPremium,\n poolMetadata: input.poolMetadata,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function getNetLiquidationValue({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseNetLiquidationValueRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetNetLiquidationValue = await loadSdkV2Function(deps, 'getNetLiquidationValue');\n\n return withSource(\n await sdkGetNetLiquidationValue({\n ...accountReadParams(sourceContext, input.account),\n poolAddress: input.poolAddress,\n tokenIds: input.tokenIds,\n queryAddress: input.queryAddress,\n atTick: input.atTick,\n includePendingPremium: input.includePendingPremium,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function getNetLiquidationValues({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseNetLiquidationValuesRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetNetLiquidationValues = await loadSdkV2Function(deps, 'getNetLiquidationValues');\n\n return withSource(\n await sdkGetNetLiquidationValues({\n ...accountReadParams(sourceContext, input.account),\n poolAddress: input.poolAddress,\n tokenIds: input.tokenIds,\n queryAddress: input.queryAddress,\n atTicks: input.atTicks,\n includePendingPremium: input.includePendingPremium,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function getLiquidationPrices({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseLiquidationPricesRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetLiquidationPrices = await loadSdkV2Function(deps, 'getLiquidationPrices');\n\n return withSource(\n await sdkGetLiquidationPrices({\n ...accountReadParams(sourceContext, input.account),\n poolAddress: input.poolAddress,\n tokenIds: input.tokenIds,\n queryAddress: input.queryAddress,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nfunction parseTokenIdRequest(request: PanopticCallRequest, method: string): AccountReadInput & { tokenId: bigint } {\n const { account, args } = accountArgs(request, method, ['poolAddress', 'tokenId']);\n return { account, poolAddress: poolAddress(args.poolAddress, method), tokenId: uint256Arg(args, 'tokenId') };\n}\n\nfunction parseTokenIdsRequest(request: PanopticCallRequest, method: string): AccountReadInput & { tokenIds: bigint[] } {\n const { account, args } = accountArgs(request, method, ['poolAddress', 'tokenIds']);\n return { account, poolAddress: poolAddress(args.poolAddress, method), tokenIds: uint256ArrayArg(args, 'tokenIds') };\n}\n\nfunction parseOpenPositionIdsRequest(\n request: PanopticCallRequest,\n method: string,\n): AccountReadInput & { lastDispatchTxHash: string } {\n rejectLatestOnlyBlockNumber(request, method);\n const { account, args } = accountArgs(request, method, ['poolAddress', 'lastDispatchTxHash']);\n return {\n account,\n poolAddress: poolAddress(args.poolAddress, method),\n lastDispatchTxHash: normalizePanopticHex(\n requireArgString(args, 'lastDispatchTxHash', method),\n `${method} args.lastDispatchTxHash`,\n ),\n };\n}\n\nfunction parseAccountCollateralRequest(\n request: PanopticCallRequest,\n method: string,\n): AccountReadInput & { collateralAddresses?: unknown } {\n const { account, args } = accountArgs(request, method, ['poolAddress', 'collateralAddresses']);\n return {\n account,\n poolAddress: poolAddress(args.poolAddress, method),\n ...(args.collateralAddresses === undefined\n ? {}\n : {\n collateralAddresses: collateralAddressesValue(args.collateralAddresses, `${method} args.collateralAddresses`),\n }),\n };\n}\n\nfunction parseAccountSummaryBasicRequest(\n request: PanopticCallRequest,\n method: string,\n): AccountReadInput & { tokenIds: bigint[]; poolMetadata?: unknown } {\n const { account, args } = accountArgs(request, method, ['poolAddress', 'tokenIds', 'poolMetadata']);\n return {\n account,\n poolAddress: poolAddress(args.poolAddress, method),\n tokenIds: uint256ArrayArg(args, 'tokenIds'),\n ...(args.poolMetadata === undefined\n ? {}\n : { poolMetadata: poolMetadataValue(args.poolMetadata, `${method} args.poolMetadata`) }),\n };\n}\n\nfunction parseAccountSummaryRiskRequest(\n request: PanopticCallRequest,\n method: string,\n): {\n account: string;\n poolAddress: string;\n tokenIds: bigint[];\n queryAddress: string;\n atTick?: bigint;\n includePendingPremium?: boolean;\n poolMetadata?: unknown;\n} {\n const { account, args } = accountArgs(request, method, [\n 'poolAddress',\n 'tokenIds',\n 'queryAddress',\n 'atTick',\n 'includePendingPremium',\n 'poolMetadata',\n ]);\n return {\n account,\n poolAddress: poolAddress(args.poolAddress, method),\n tokenIds: uint256ArrayArg(args, 'tokenIds'),\n queryAddress: normalizePanopticAddress(args.queryAddress, `${method} args.queryAddress`),\n atTick: optionalSignedDecimalArg(args, 'atTick'),\n includePendingPremium: optionalBooleanArg(args, 'includePendingPremium'),\n ...(args.poolMetadata === undefined\n ? {}\n : { poolMetadata: poolMetadataValue(args.poolMetadata, `${method} args.poolMetadata`) }),\n };\n}\n\nfunction parseNetLiquidationValueRequest(\n request: PanopticCallRequest,\n method: string,\n): AccountReadInput & { tokenIds: bigint[]; queryAddress: string; atTick?: bigint; includePendingPremium?: boolean } {\n const { account, args } = accountArgs(request, method, [\n 'poolAddress',\n 'tokenIds',\n 'queryAddress',\n 'atTick',\n 'includePendingPremium',\n ]);\n return {\n account,\n poolAddress: poolAddress(args.poolAddress, method),\n tokenIds: uint256ArrayArg(args, 'tokenIds'),\n queryAddress: normalizePanopticAddress(args.queryAddress, `${method} args.queryAddress`),\n atTick: optionalSignedDecimalArg(args, 'atTick'),\n includePendingPremium: optionalBooleanArg(args, 'includePendingPremium'),\n };\n}\n\nfunction parseNetLiquidationValuesRequest(\n request: PanopticCallRequest,\n method: string,\n): AccountReadInput & { tokenIds: bigint[]; queryAddress: string; atTicks: bigint[]; includePendingPremium?: boolean } {\n const { account, args } = accountArgs(request, method, [\n 'poolAddress',\n 'tokenIds',\n 'queryAddress',\n 'atTicks',\n 'includePendingPremium',\n ]);\n return {\n account,\n poolAddress: poolAddress(args.poolAddress, method),\n tokenIds: uint256ArrayArg(args, 'tokenIds'),\n queryAddress: normalizePanopticAddress(args.queryAddress, `${method} args.queryAddress`),\n atTicks: signedDecimalArrayArg(args, 'atTicks'),\n includePendingPremium: optionalBooleanArg(args, 'includePendingPremium'),\n };\n}\n\nfunction parseLiquidationPricesRequest(\n request: PanopticCallRequest,\n method: string,\n): AccountReadInput & { tokenIds: bigint[]; queryAddress: string } {\n const { account, args } = accountArgs(request, method, ['poolAddress', 'tokenIds', 'queryAddress']);\n return {\n account,\n poolAddress: poolAddress(args.poolAddress, method),\n tokenIds: uint256ArrayArg(args, 'tokenIds'),\n queryAddress: normalizePanopticAddress(args.queryAddress, `${method} args.queryAddress`),\n };\n}\n\nfunction accountArgs(request: PanopticCallRequest, method: string, allowedKeys: readonly string[]) {\n requireSourceContext(request, method);\n const account = requireAccount(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, allowedKeys, method);\n return { account, args };\n}\n\nfunction requireAccount(request: PanopticCallRequest | undefined, method: string): string {\n const account = request?.context?.account;\n if (!account) {\n throw new Error(`Panoptic ${method} requires context.account.`);\n }\n\n return normalizePanopticAddress(account, `${method} context.account`);\n}\n\nfunction rejectLatestOnlyBlockNumber(request: PanopticCallRequest, method: string): void {\n if (request.context?.blockNumber !== undefined) {\n throw new Error(`Panoptic ${method} does not accept context.blockNumber because its block policy is latestOnly.`);\n }\n}\n\nfunction ownerReadParams(sourceContext: PanopticResolvedCallContext, account: string): Record<string, unknown> {\n return { client: sourceContext.client, blockNumber: BigInt(sourceContext.blockNumber), owner: account };\n}\n\nfunction accountReadParams(\n sourceContext: PanopticResolvedCallContext,\n account: string,\n includeChainId = false,\n): Record<string, unknown> {\n return {\n client: sourceContext.client,\n ...(includeChainId ? { chainId: BigInt(sourceContext.source.chainId) } : {}),\n blockNumber: BigInt(sourceContext.blockNumber),\n account,\n };\n}\n\nasync function loadSdkV2Function(\n deps: { sdkV2: () => Promise<Record<string, unknown>> },\n name: string,\n): Promise<(...args: unknown[]) => unknown> {\n return requireSdkFunction(await deps.sdkV2(), name, '@panoptic-eng/sdk/v2');\n}\n\nfunction poolAddress(value: unknown, method: string): string {\n return normalizePanopticAddress(value, `${method} args.poolAddress`);\n}\n\nfunction requireArgString(args: Record<string, unknown>, fieldName: string, method: string): string {\n const value = args[fieldName];\n if (value === undefined) {\n throw new Error(`Panoptic ${method} args.${fieldName} is required.`);\n }\n if (typeof value !== 'string') {\n throw new Error(`Panoptic ${method} args.${fieldName} must be a string.`);\n }\n\n return value;\n}\n\nexport {\n getAccountCollateral,\n getAccountSummaryBasic,\n getAccountSummaryRisk,\n getLiquidationPrices,\n getNetLiquidationValue,\n getNetLiquidationValues,\n getOpenPositionIds,\n getPosition,\n getPositions,\n};\n","import { normalizePanopticAddress } from '../../panopticSerialization';\nimport { storedPositionArrayArg, tokenIdLegArrayArg } from '../../panopticDtos';\nimport {\n decimalArg,\n isRecord,\n optionalBooleanArg,\n optionalDecimalArg,\n optionalDecimalArrayArg,\n optionalSignedDecimalArg,\n signedDecimalArg,\n signedDecimalArrayArg,\n} from '../../panopticJsonArgs';\nimport { uint256Arg } from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport {\n prepareRuntimeSourceContext,\n rejectContext,\n rejectExtraKeys,\n requireSdkFunction,\n requireSourceContext,\n withSource,\n} from '../support';\n\nasync function getPositionGreeks({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseGetPositionGreeksRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetPositionGreeks = await loadSdkFunction(deps, 'getPositionGreeks');\n const rawResult = await sdkGetPositionGreeks({\n client: sourceContext.client,\n blockNumber: BigInt(sourceContext.blockNumber),\n poolAddress: input.poolAddress,\n owner: input.account,\n tokenId: input.tokenId,\n atTick: input.atTick,\n });\n\n return withSource(rawResult, sourceContext, 'pinned', 'greeks.getPositionGreeks result');\n}\n\nasync function calculatePositionGreeks({ deps, method, request }: Parameters<PanopticHandler>[0]): Promise<unknown> {\n const input = parseCalculatePositionGreeksRequest(request, method) as Record<string, unknown> & {\n swapAtMint?: boolean;\n };\n const sdkV2 = await deps.sdkV2();\n const sdkCalculatePositionGreeks = requireSdkFunction(sdkV2, 'calculatePositionGreeks', '@panoptic-eng/sdk/v2');\n const result = await sdkCalculatePositionGreeks(input);\n\n if (input.swapAtMint !== undefined) {\n const calculatePositionDeltaWithSwap = requireSdkFunction(\n sdkV2,\n 'calculatePositionDeltaWithSwap',\n '@panoptic-eng/sdk/v2',\n );\n const delta = await calculatePositionDeltaWithSwap(input);\n\n if (isRecord(result)) {\n return { ...result, delta };\n }\n }\n\n return result;\n}\n\nasync function calculateAccountGreeksPure({ deps, method, request }: Parameters<PanopticHandler>[0]): Promise<unknown> {\n const input = parseCalculateAccountGreeksPureRequest(request, method);\n const sdkCalculateAccountGreeksPure = await loadSdkFunction(deps, 'calculateAccountGreeksPure');\n\n return sdkCalculateAccountGreeksPure(input);\n}\n\nfunction parseGetPositionGreeksRequest(\n request: PanopticCallRequest,\n method: string,\n): { account: string; poolAddress: string; tokenId: bigint; atTick?: bigint } {\n requireSourceContext(request, method);\n const account = requireAccount(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['poolAddress', 'tokenId', 'atTick'], method);\n\n return {\n account,\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n tokenId: uint256Arg(args, 'tokenId'),\n atTick: optionalSignedDecimalArg(args, 'atTick'),\n };\n}\n\nfunction parseCalculatePositionGreeksRequest(request: PanopticCallRequest, method: string): Record<string, unknown> {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(\n args,\n ['legs', 'currentTick', 'mintTick', 'positionSize', 'poolTickSpacing', 'assetIndex', 'swapAtMint'],\n method,\n );\n\n return {\n legs: tokenIdLegArrayArg(args, 'legs'),\n currentTick: signedDecimalArg(args, 'currentTick'),\n mintTick: signedDecimalArg(args, 'mintTick'),\n positionSize: decimalArg(args, 'positionSize'),\n poolTickSpacing: decimalArg(args, 'poolTickSpacing'),\n ...(args.assetIndex === undefined ? {} : { assetIndex: optionalDecimalArg(args, 'assetIndex') }),\n ...(args.swapAtMint === undefined ? {} : { swapAtMint: optionalBooleanArg(args, 'swapAtMint') }),\n };\n}\n\nfunction parseCalculateAccountGreeksPureRequest(request: PanopticCallRequest, method: string): Record<string, unknown> {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['positions', 'tickSpacing', 'atTicks', 'collateralAssets', 'assetIndex'], method);\n\n return {\n positions: storedPositionArrayArg(args, 'positions'),\n tickSpacing: decimalArg(args, 'tickSpacing'),\n atTicks: signedDecimalArrayArg(args, 'atTicks'),\n ...(args.collateralAssets === undefined\n ? {}\n : { collateralAssets: optionalDecimalArrayArg(args, 'collateralAssets') }),\n ...(args.assetIndex === undefined ? {} : { assetIndex: optionalDecimalArg(args, 'assetIndex') }),\n };\n}\n\nasync function loadSdkFunction(deps: { sdkV2: () => Promise<Record<string, unknown>> }, name: string) {\n return requireSdkFunction(await deps.sdkV2(), name, '@panoptic-eng/sdk/v2');\n}\n\nfunction requireAccount(request: PanopticCallRequest, method: string): string {\n const account = request.context?.account;\n if (!account) {\n throw new Error(`Panoptic ${method} requires context.account.`);\n }\n\n return normalizePanopticAddress(account, `${method} context.account`);\n}\n\nexport { calculateAccountGreeksPure, calculatePositionGreeks, getPositionGreeks };\n","import { normalizePanopticAddress, normalizePanopticHex } from '../../panopticSerialization';\nimport { poolInfoArrayArg, vaultCandidatesByPoolArrayArg } from '../../panopticDtos';\nimport { decimalMatrixArg, optionalStringArrayArg } from '../../panopticJsonArgs';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport {\n isRecord,\n prepareRuntimeSourceContext,\n rejectExtraKeys,\n requireSdkFunction,\n requireSourceContext,\n withSource,\n} from '../support';\n\nasync function buildVaultManagerInputAtBlock({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseBuildVaultManagerInputAtBlockRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkBuildManagerInputAtBlock = requireSdkFunction(\n await deps.sdk(),\n 'buildManagerInputAtBlock',\n '@panoptic-eng/sdk',\n );\n const managerInput = await sdkBuildManagerInputAtBlock({\n viemClient: sourceContext.client,\n poolInfos: input.poolInfos,\n tokenIds: input.tokenIds,\n underlyingToken: input.underlyingToken,\n wethAddress: input.wethAddress,\n blockNumber: BigInt(sourceContext.blockNumber),\n erc4626Vaults: input.erc4626Vaults,\n });\n\n return withSource({ managerInput }, sourceContext, 'pinned', 'hypovault.buildVaultManagerInputAtBlock result');\n}\n\nasync function verifyVaultOpenTokenIdsAtBlock({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseVerifyVaultOpenTokenIdsAtBlockRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkVerifyVaultOpenTokenIdsAtBlock = requireSdkFunction(\n await deps.sdk(),\n 'verifyVaultOpenTokenIdsAtBlock',\n '@panoptic-eng/sdk',\n );\n const tokenIdsByPool = await sdkVerifyVaultOpenTokenIdsAtBlock({\n viemClient: sourceContext.client,\n vaultAddress: input.vaultAddress,\n candidatesByPool: input.candidatesByPool,\n blockNumber: BigInt(sourceContext.blockNumber),\n });\n\n return withSource({ tokenIdsByPool }, sourceContext, 'pinned', 'hypovault.verifyVaultOpenTokenIdsAtBlock result');\n}\n\nasync function getOpenPositionIds({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseGetOpenPositionIdsRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetOpenPositionIds = requireSdkFunction(await deps.sdkV2(), 'getOpenPositionIds', '@panoptic-eng/sdk/v2');\n const tokenIds = await sdkGetOpenPositionIds({\n client: sourceContext.client,\n chainId: BigInt(sourceContext.source.chainId),\n poolAddress: input.poolAddress,\n account: input.account,\n lastDispatchTxHash: input.lastDispatchTxHash,\n });\n\n return withSource({ tokenIds }, sourceContext, 'preflight', 'hypovault.getOpenPositionIds result', undefined, false);\n}\n\nasync function getEpochContext({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseGetEpochContextRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const readContract = readContractFunction(sourceContext.client, method);\n const [depositEpoch, withdrawalEpoch, totalSupply] = await Promise.all([\n readContract({\n address: input.vaultAddress,\n abi: HYPOVAULT_READ_ABI,\n functionName: 'depositEpoch',\n args: [],\n blockNumber: BigInt(sourceContext.blockNumber),\n }),\n readContract({\n address: input.vaultAddress,\n abi: HYPOVAULT_READ_ABI,\n functionName: 'withdrawalEpoch',\n args: [],\n blockNumber: BigInt(sourceContext.blockNumber),\n }),\n readContract({\n address: input.vaultAddress,\n abi: HYPOVAULT_READ_ABI,\n functionName: 'totalSupply',\n args: [],\n blockNumber: BigInt(sourceContext.blockNumber),\n }),\n ]);\n const depositEpochNumber = toBigInt(depositEpoch, `${method} depositEpoch`);\n const withdrawalEpochNumber = toBigInt(withdrawalEpoch, `${method} withdrawalEpoch`);\n const [depositState, withdrawalState, queuedDeposit, queuedWithdrawal, block] = await Promise.all([\n readContract({\n address: input.vaultAddress,\n abi: HYPOVAULT_READ_ABI,\n functionName: 'depositEpochState',\n args: [depositEpochNumber],\n blockNumber: BigInt(sourceContext.blockNumber),\n }),\n readContract({\n address: input.vaultAddress,\n abi: HYPOVAULT_READ_ABI,\n functionName: 'withdrawalEpochState',\n args: [withdrawalEpochNumber],\n blockNumber: BigInt(sourceContext.blockNumber),\n }),\n input.account\n ? readContract({\n address: input.vaultAddress,\n abi: HYPOVAULT_READ_ABI,\n functionName: 'queuedDeposit',\n args: [input.account, depositEpochNumber],\n blockNumber: BigInt(sourceContext.blockNumber),\n })\n : undefined,\n input.account\n ? readContract({\n address: input.vaultAddress,\n abi: HYPOVAULT_READ_ABI,\n functionName: 'queuedWithdrawal',\n args: [input.account, withdrawalEpochNumber],\n blockNumber: BigInt(sourceContext.blockNumber),\n })\n : undefined,\n getBlockIfAvailable(sourceContext.client, sourceContext.blockNumber),\n ]);\n const deposit = depositEpochState(depositState, method);\n const withdrawal = withdrawalEpochState(withdrawalState, method);\n\n return withSource(\n {\n vaultAddress: input.vaultAddress,\n ...(input.account === undefined ? {} : { account: input.account }),\n totalSupply: toBigInt(totalSupply, `${method} totalSupply`).toString(10),\n ...(block?.timestamp === undefined ? {} : { currentTimestamp: block.timestamp.toString(10) }),\n deposit: {\n epoch: depositEpochNumber.toString(10),\n ...deposit,\n pendingValue: nonnegativeDifference(deposit.assetsDeposited, deposit.assetsFulfilled).toString(10),\n ...(queuedDeposit === undefined\n ? {}\n : { queuedDeposit: toBigInt(queuedDeposit, `${method} queuedDeposit`).toString(10) }),\n },\n withdrawal: {\n epoch: withdrawalEpochNumber.toString(10),\n ...withdrawal,\n pendingShares: nonnegativeDifference(withdrawal.sharesWithdrawn, withdrawal.sharesFulfilled).toString(10),\n ...(queuedWithdrawal === undefined\n ? {}\n : { queuedWithdrawal: queuedWithdrawalState(queuedWithdrawal, method) }),\n },\n },\n sourceContext,\n 'pinned',\n 'hypovault.getEpochContext result',\n );\n}\n\nasync function getPositionsHashStatus({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseGetPositionsHashStatusRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const readContract = readContractFunction(sourceContext.client, method);\n const positionsHash = normalizePanopticHex(\n await readContract({\n address: input.poolAddress,\n abi: PANOPTIC_POOL_READ_ABI,\n functionName: 'positionsHash',\n args: [input.account],\n blockNumber: BigInt(sourceContext.blockNumber),\n }),\n `${method} positionsHash`,\n );\n const tokenIds = input.tokenIds ?? (await recoverTokenIds(deps, sourceContext, input, method));\n const computedHash =\n tokenIds === undefined ? undefined : await computePositionsHash(await deps.viem(), tokenIds, method);\n\n return withSource(\n {\n account: input.account,\n poolAddress: input.poolAddress,\n positionsHash,\n ...(tokenIds === undefined ? {} : { tokenIds }),\n ...(computedHash === undefined ? {} : { computedHash, valid: computedHash === positionsHash }),\n },\n sourceContext,\n 'pinned',\n 'hypovault.getPositionsHashStatus result',\n );\n}\n\nfunction parseBuildVaultManagerInputAtBlockRequest(request: PanopticCallRequest, method: string) {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(\n args,\n ['vaultAddress', 'underlyingToken', 'poolInfos', 'tokenIds', 'managerAddress', 'wethAddress', 'erc4626Vaults'],\n method,\n );\n\n return {\n vaultAddress: normalizePanopticAddress(args.vaultAddress, `${method} args.vaultAddress`),\n underlyingToken: normalizePanopticAddress(args.underlyingToken, `${method} args.underlyingToken`),\n poolInfos: poolInfoArrayArg(args, 'poolInfos'),\n tokenIds: decimalMatrixArg(args, 'tokenIds'),\n ...(args.wethAddress === undefined\n ? {}\n : { wethAddress: normalizePanopticAddress(args.wethAddress, `${method} args.wethAddress`) }),\n ...(args.erc4626Vaults === undefined ? {} : { erc4626Vaults: optionalStringArrayArg(args, 'erc4626Vaults') }),\n };\n}\n\nfunction parseVerifyVaultOpenTokenIdsAtBlockRequest(request: PanopticCallRequest, method: string) {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['vaultAddress', 'candidatesByPool'], method);\n\n return {\n vaultAddress: normalizePanopticAddress(args.vaultAddress, `${method} args.vaultAddress`),\n candidatesByPool: vaultCandidatesByPoolArrayArg(args, 'candidatesByPool'),\n };\n}\n\nfunction parseGetOpenPositionIdsRequest(\n request: PanopticCallRequest,\n method: string,\n): { account: string; poolAddress: string; lastDispatchTxHash: string } {\n requireSourceContext(request, method);\n rejectLatestOnlyBlockNumber(request, method);\n const account = requireAccount(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['poolAddress', 'lastDispatchTxHash'], method);\n\n return {\n account,\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n lastDispatchTxHash: normalizePanopticHex(\n requireArgString(args, 'lastDispatchTxHash', method),\n `${method} args.lastDispatchTxHash`,\n ),\n };\n}\n\nfunction parseGetEpochContextRequest(request: PanopticCallRequest, method: string) {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['vaultAddress', 'account'], method);\n\n return {\n vaultAddress: normalizePanopticAddress(args.vaultAddress, `${method} args.vaultAddress`),\n ...(args.account === undefined\n ? {}\n : { account: normalizePanopticAddress(args.account, `${method} args.account`) }),\n };\n}\n\nfunction parseGetPositionsHashStatusRequest(request: PanopticCallRequest, method: string) {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['poolAddress', 'account', 'tokenIds', 'lastDispatchTxHash'], method);\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n account: normalizePanopticAddress(args.account ?? request.context?.account, `${method} args.account`),\n ...(args.tokenIds === undefined\n ? {}\n : { tokenIds: decimalMatrixArg({ tokenIds: [args.tokenIds] }, 'tokenIds')[0].map((id) => id.toString(10)) }),\n ...(args.lastDispatchTxHash === undefined\n ? {}\n : {\n lastDispatchTxHash: normalizePanopticHex(\n requireArgString(args, 'lastDispatchTxHash', method),\n `${method} args.lastDispatchTxHash`,\n ),\n }),\n };\n}\n\nfunction requireAccount(request: PanopticCallRequest, method: string): string {\n const account = request.context?.account;\n if (!account) {\n throw new Error(`Panoptic ${method} requires context.account.`);\n }\n\n return normalizePanopticAddress(account, `${method} context.account`);\n}\n\nfunction requireArgString(args: Record<string, unknown>, fieldName: string, method: string): string {\n const value = args[fieldName];\n if (value === undefined) {\n throw new Error(`Panoptic ${method} args.${fieldName} is required.`);\n }\n if (typeof value !== 'string') {\n throw new Error(`Panoptic ${method} args.${fieldName} must be a string.`);\n }\n\n return value;\n}\n\nfunction rejectLatestOnlyBlockNumber(request: PanopticCallRequest, method: string): void {\n if (request.context?.blockNumber !== undefined) {\n throw new Error(`Panoptic ${method} does not accept context.blockNumber because its block policy is latestOnly.`);\n }\n}\n\ntype ReadContract = (input: Record<string, unknown>) => Promise<unknown>;\n\nconst HYPOVAULT_READ_ABI = [\n { type: 'function', name: 'depositEpoch', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint128' }] },\n { type: 'function', name: 'withdrawalEpoch', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint128' }] },\n { type: 'function', name: 'totalSupply', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },\n {\n type: 'function',\n name: 'depositEpochState',\n stateMutability: 'view',\n inputs: [{ type: 'uint256' }],\n outputs: [\n { name: 'assetsDeposited', type: 'uint128' },\n { name: 'assetsFulfilled', type: 'uint128' },\n { name: 'sharesReceived', type: 'uint128' },\n ],\n },\n {\n type: 'function',\n name: 'withdrawalEpochState',\n stateMutability: 'view',\n inputs: [{ type: 'uint256' }],\n outputs: [\n { name: 'sharesWithdrawn', type: 'uint128' },\n { name: 'sharesFulfilled', type: 'uint128' },\n { name: 'assetsPaid', type: 'uint128' },\n ],\n },\n {\n type: 'function',\n name: 'queuedDeposit',\n stateMutability: 'view',\n inputs: [{ type: 'address' }, { type: 'uint256' }],\n outputs: [{ type: 'uint128' }],\n },\n {\n type: 'function',\n name: 'queuedWithdrawal',\n stateMutability: 'view',\n inputs: [{ type: 'address' }, { type: 'uint256' }],\n outputs: [\n { name: 'amount', type: 'uint128' },\n { name: 'basis', type: 'uint128' },\n { name: 'shouldRedeposit', type: 'bool' },\n ],\n },\n] as const;\n\nconst PANOPTIC_POOL_READ_ABI = [\n {\n type: 'function',\n name: 'positionsHash',\n stateMutability: 'view',\n inputs: [{ type: 'address' }],\n outputs: [{ type: 'bytes32' }],\n },\n] as const;\n\nfunction readContractFunction(client: unknown, method: string): ReadContract {\n if (!isRecord(client) || typeof client.readContract !== 'function') {\n throw new Error(`Panoptic ${method} requires a viem public client with readContract.`);\n }\n\n return client.readContract as ReadContract;\n}\n\nasync function getBlockIfAvailable(client: unknown, blockNumber: string): Promise<{ timestamp?: bigint } | undefined> {\n if (!isRecord(client) || typeof client.getBlock !== 'function') {\n return undefined;\n }\n\n const block = await (client.getBlock as (input: Record<string, unknown>) => Promise<unknown>)({\n blockNumber: BigInt(blockNumber),\n });\n if (!isRecord(block) || block.timestamp === undefined) {\n return undefined;\n }\n\n return { timestamp: toBigInt(block.timestamp, 'block.timestamp') };\n}\n\nfunction depositEpochState(value: unknown, method: string) {\n return {\n assetsDeposited: tupleBigInt(value, 'assetsDeposited', 0, `${method} depositEpochState`).toString(10),\n assetsFulfilled: tupleBigInt(value, 'assetsFulfilled', 1, `${method} depositEpochState`).toString(10),\n sharesReceived: tupleBigInt(value, 'sharesReceived', 2, `${method} depositEpochState`).toString(10),\n };\n}\n\nfunction withdrawalEpochState(value: unknown, method: string) {\n return {\n sharesWithdrawn: tupleBigInt(value, 'sharesWithdrawn', 0, `${method} withdrawalEpochState`).toString(10),\n sharesFulfilled: tupleBigInt(value, 'sharesFulfilled', 1, `${method} withdrawalEpochState`).toString(10),\n assetsPaid: tupleBigInt(value, 'assetsPaid', 2, `${method} withdrawalEpochState`).toString(10),\n };\n}\n\nfunction queuedWithdrawalState(value: unknown, method: string) {\n return {\n amount: tupleBigInt(value, 'amount', 0, `${method} queuedWithdrawal`).toString(10),\n basis: tupleBigInt(value, 'basis', 1, `${method} queuedWithdrawal`).toString(10),\n shouldRedeposit: tupleBoolean(value, 'shouldRedeposit', 2, `${method} queuedWithdrawal`),\n };\n}\n\nfunction tupleBigInt(value: unknown, field: string, index: number, label: string): bigint {\n if (Array.isArray(value)) {\n return toBigInt(value[index], `${label}[${index}]`);\n }\n if (isRecord(value)) {\n return toBigInt(value[field], `${label}.${field}`);\n }\n throw new Error(`Panoptic ${label} must be a tuple-like value.`);\n}\n\nfunction tupleBoolean(value: unknown, field: string, index: number, label: string): boolean {\n const raw = Array.isArray(value) ? value[index] : isRecord(value) ? value[field] : undefined;\n if (typeof raw !== 'boolean') {\n throw new Error(`Panoptic ${label}.${field} must be a boolean.`);\n }\n return raw;\n}\n\nfunction toBigInt(value: unknown, label: string): bigint {\n if (typeof value === 'bigint') return value;\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) return BigInt(value);\n if (typeof value === 'string' && /^(0|[1-9][0-9]*)$/.test(value)) return BigInt(value);\n throw new Error(`Panoptic ${label} must be a uint-like value.`);\n}\n\nfunction nonnegativeDifference(left: string, right: string): bigint {\n const difference = BigInt(left) - BigInt(right);\n return difference < BigInt(0) ? BigInt(0) : difference;\n}\n\nasync function recoverTokenIds(\n deps: Parameters<PanopticHandler>[0]['deps'],\n sourceContext: Awaited<ReturnType<typeof prepareRuntimeSourceContext>>,\n input: ReturnType<typeof parseGetPositionsHashStatusRequest>,\n method: string,\n): Promise<string[] | undefined> {\n if (!input.lastDispatchTxHash) return undefined;\n const sdkGetOpenPositionIds = requireSdkFunction(await deps.sdkV2(), 'getOpenPositionIds', '@panoptic-eng/sdk/v2');\n const tokenIds = await sdkGetOpenPositionIds({\n client: sourceContext.client,\n chainId: BigInt(sourceContext.source.chainId),\n poolAddress: input.poolAddress,\n account: input.account,\n lastDispatchTxHash: input.lastDispatchTxHash,\n });\n if (!Array.isArray(tokenIds)) {\n throw new Error(`Panoptic ${method} getOpenPositionIds result must be an array.`);\n }\n return tokenIds.map((tokenId, index) => toBigInt(tokenId, `${method} tokenIds[${index}]`).toString(10));\n}\n\nasync function computePositionsHash(\n viem: Record<string, unknown>,\n tokenIds: string[],\n method: string,\n): Promise<string> {\n const keccak256 = requireSdkFunction(viem, 'keccak256', 'viem');\n let hash = BigInt(0);\n\n for (const [index, tokenId] of tokenIds.entries()) {\n const encodedTokenId = `0x${BigInt(tokenId).toString(16).padStart(64, '0')}`;\n const tokenHash = normalizePanopticHex(await keccak256(encodedTokenId), `${method} tokenIds[${index}] hash`);\n hash ^= BigInt(tokenHash);\n }\n\n return `0x${hash.toString(16).padStart(64, '0')}`;\n}\n\nexport {\n buildVaultManagerInputAtBlock,\n getEpochContext,\n getOpenPositionIds,\n getPositionsHashStatus,\n verifyVaultOpenTokenIdsAtBlock,\n};\n","import { normalizePanopticAddress } from '../../panopticSerialization';\nimport { collateralAddressesValue, poolMetadataValue } from '../../panopticDtos';\nimport { signedDecimalValue } from '../../panopticJsonArgs';\nimport { optionalUint256Arg, uint256Arg } from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport {\n rejectContext,\n rejectExtraKeys,\n isRecord,\n prepareRuntimeSourceContext,\n requireSdkFunction,\n requireSourceContext,\n withSource,\n} from '../support';\n\ntype PoolGetPoolParsed = {\n poolAddress: string;\n poolMetadata?: unknown;\n stateViewAddress?: string;\n};\n\nasync function getPool({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseGetPoolRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetPool = await loadSdkFunction(deps, 'getPool');\n const rawResult = await sdkGetPool({\n client: sourceContext.client,\n chainId: BigInt(sourceContext.source.chainId),\n blockNumber: BigInt(sourceContext.blockNumber),\n poolAddress: input.poolAddress,\n poolMetadata: input.poolMetadata,\n stateViewAddress: input.stateViewAddress,\n });\n\n return withSource(rawResult, sourceContext, 'pinned', 'pool.getPool result');\n}\n\nasync function fetchPoolId({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parsePoolAddressRequest(['poolAddress'])(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkFetchPoolId = await loadSdkFunction(deps, 'fetchPoolId');\n const rawResult = await sdkFetchPoolId({ client: sourceContext.client, poolAddress: input.poolAddress });\n const sdkBlockNumber = readSdkResultBlockNumber(rawResult);\n\n return withSource(\n rawResult,\n sourceContext,\n sdkBlockNumber ? 'sdkResult' : 'preflight',\n 'pool.fetchPoolId result',\n sdkBlockNumber || undefined,\n sdkBlockNumber ? undefined : false,\n );\n}\n\nasync function getPoolMetadata({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parsePoolAddressRequest(['poolAddress'])(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetPoolMetadata = await loadSdkFunction(deps, 'getPoolMetadata');\n\n return withSource(\n await sdkGetPoolMetadata({ client: sourceContext.client, poolAddress: input.poolAddress }),\n sourceContext,\n 'staticReference',\n 'pool.getPoolMetadata result',\n );\n}\n\nasync function getRiskParameters({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseRiskParametersRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetRiskParameters = await loadSdkFunction(deps, 'getRiskParameters');\n\n return withSource(\n await sdkGetRiskParameters({\n client: sourceContext.client,\n blockNumber: BigInt(sourceContext.blockNumber),\n poolAddress: input.poolAddress,\n builderCode: input.builderCode,\n riskEngineAddress: input.riskEngineAddress,\n }),\n sourceContext,\n 'pinned',\n 'pool.getRiskParameters result',\n );\n}\n\nasync function getUtilization({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseUtilizationRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetUtilization = await loadSdkFunction(deps, 'getUtilization');\n\n return withSource(\n await sdkGetUtilization({\n client: sourceContext.client,\n blockNumber: BigInt(sourceContext.blockNumber),\n poolAddress: input.poolAddress,\n collateralAddresses: input.collateralAddresses,\n }),\n sourceContext,\n 'pinned',\n 'pool.getUtilization result',\n );\n}\n\nasync function getOracleState({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parsePoolAddressRequest(['poolAddress'])(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkGetOracleState = await loadSdkFunction(deps, 'getOracleState');\n\n return withSource(\n await sdkGetOracleState({\n client: sourceContext.client,\n blockNumber: BigInt(sourceContext.blockNumber),\n poolAddress: input.poolAddress,\n }),\n sourceContext,\n 'pinned',\n 'pool.getOracleState result',\n );\n}\n\nasync function getTickSpacing({ deps, method, request }: Parameters<PanopticHandler>[0]): Promise<unknown> {\n const input = parseGetTickSpacingRequest(request, method);\n const sdkGetTickSpacing = await loadSdkFunction(deps, 'getTickSpacing');\n\n return sdkGetTickSpacing(input.feeBps);\n}\n\nasync function getPricesAtTick({ deps, method, request }: Parameters<PanopticHandler>[0]): Promise<unknown> {\n const input = parsePricesAtTickRequest(request, method);\n const sdkGetPricesAtTick = await loadSdkFunction(deps, 'getPricesAtTick');\n\n return sdkGetPricesAtTick(input.tick, input.decimals0, input.decimals1, input.precision);\n}\n\nfunction parseGetTickSpacingRequest(request: PanopticCallRequest, method: string): { feeBps: bigint } {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['feeBps'], method);\n return { feeBps: uint256Arg(args, 'feeBps') };\n}\n\nfunction parseGetPoolRequest(request: PanopticCallRequest, method: string): PoolGetPoolParsed {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['poolAddress', 'poolMetadata', 'stateViewAddress'], method);\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n ...(args.poolMetadata === undefined\n ? {}\n : { poolMetadata: poolMetadataValue(args.poolMetadata, `${method} args.poolMetadata`) }),\n ...(args.stateViewAddress === undefined\n ? {}\n : { stateViewAddress: normalizePanopticAddress(args.stateViewAddress, `${method} args.stateViewAddress`) }),\n };\n}\n\nfunction parsePoolAddressRequest(\n allowedKeys: readonly string[],\n): (request: PanopticCallRequest, method: string) => { poolAddress: string } {\n return (request, method) => {\n requireSourceContext(request, method);\n rejectLatestOnlyBlockNumber(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, allowedKeys, method);\n\n return { poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`) };\n };\n}\n\nfunction parseRiskParametersRequest(\n request: PanopticCallRequest,\n method: string,\n): { poolAddress: string; builderCode?: bigint; riskEngineAddress?: string } {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['poolAddress', 'builderCode', 'riskEngineAddress'], method);\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n builderCode: optionalUint256Arg(args, 'builderCode'),\n ...(args.riskEngineAddress === undefined\n ? {}\n : { riskEngineAddress: normalizePanopticAddress(args.riskEngineAddress, `${method} args.riskEngineAddress`) }),\n };\n}\n\nfunction parseUtilizationRequest(\n request: PanopticCallRequest,\n method: string,\n): { poolAddress: string; collateralAddresses?: unknown } {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['poolAddress', 'collateralAddresses'], method);\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n ...(args.collateralAddresses === undefined\n ? {}\n : {\n collateralAddresses: collateralAddressesValue(args.collateralAddresses, `${method} args.collateralAddresses`),\n }),\n };\n}\n\nfunction parsePricesAtTickRequest(\n request: PanopticCallRequest,\n method: string,\n): { tick: bigint; decimals0: bigint; decimals1: bigint; precision: bigint } {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['tick', 'decimals0', 'decimals1', 'precision'], method);\n\n return {\n tick: signedDecimalValue(args.tick, `${method} args.tick`),\n decimals0: uint256Arg(args, 'decimals0'),\n decimals1: uint256Arg(args, 'decimals1'),\n precision: uint256Arg(args, 'precision'),\n };\n}\n\nasync function loadSdkFunction(\n deps: { sdkV2: () => Promise<Record<string, unknown>> },\n name: string,\n): Promise<(...args: unknown[]) => unknown> {\n return requireSdkFunction(await deps.sdkV2(), name, '@panoptic-eng/sdk/v2');\n}\n\nfunction rejectLatestOnlyBlockNumber(request: PanopticCallRequest, method: string): void {\n if (method === 'pool.fetchPoolId' && request.context?.blockNumber !== undefined) {\n throw new Error(`Panoptic ${method} does not accept context.blockNumber because its block policy is latestOnly.`);\n }\n}\n\nfunction readSdkResultBlockNumber(value: unknown): string | null {\n if (!isRecord(value) || !isRecord(value._meta)) {\n return null;\n }\n\n return normalizeBlockNumberValue(value._meta.blockNumber);\n}\n\nfunction normalizeBlockNumberValue(value: unknown): string | null {\n if (typeof value === 'bigint') {\n return value.toString(10);\n }\n\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return value.toString(10);\n }\n\n if (typeof value === 'string') {\n if (/^0x[0-9a-f]+$/i.test(value)) {\n return BigInt(value).toString(10);\n }\n\n if (/^(0|[1-9][0-9]*)$/.test(value)) {\n return BigInt(value).toString(10);\n }\n }\n\n return null;\n}\n\nexport {\n fetchPoolId,\n getOracleState,\n getPool,\n getPoolMetadata,\n getPricesAtTick,\n getRiskParameters,\n getTickSpacing,\n getUtilization,\n};\n","import { uniswapAddressesValue } from '../../panopticDtos';\nimport { decimalArg } from '../../panopticJsonArgs';\nimport { normalizePanopticAddress } from '../../panopticSerialization';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport {\n type PanopticResolvedCallContext,\n prepareRuntimeSourceContext,\n rejectExtraKeys,\n requireSdkFunction,\n requireSourceContext,\n withSource,\n} from '../support';\n\nasync function resolveSwapRoute({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseResolveSwapRouteRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkResolveSwapRoute = await loadUniswapFunction(deps, 'resolveSwapRoute');\n\n return withSource(\n await sdkResolveSwapRoute({\n ...pinnedParams(sourceContext),\n poolAddress: input.poolAddress,\n tokenIn: input.tokenIn,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function quoteSwapExactInViaRouter({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseQuoteSwapExactInRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkQuoteSwapExactInViaRouter = await loadUniswapFunction(deps, 'quoteSwapExactInViaRouter');\n\n return withSource(\n await sdkQuoteSwapExactInViaRouter({\n ...pinnedParams(sourceContext),\n poolAddress: input.poolAddress,\n tokenIn: input.tokenIn,\n amountIn: input.amountIn,\n slippageBps: input.slippageBps,\n addresses: input.addresses,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function quoteSwapExactOutViaRouter({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseQuoteSwapExactOutRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkQuoteSwapExactOutViaRouter = await loadUniswapFunction(deps, 'quoteSwapExactOutViaRouter');\n\n return withSource(\n await sdkQuoteSwapExactOutViaRouter({\n ...pinnedParams(sourceContext),\n poolAddress: input.poolAddress,\n tokenIn: input.tokenIn,\n amountOut: input.amountOut,\n slippageBps: input.slippageBps,\n addresses: input.addresses,\n }),\n sourceContext,\n 'pinned',\n `${method} result`,\n );\n}\n\nasync function checkRouterApproval({\n deps,\n method,\n request,\n options,\n}: Parameters<PanopticHandler>[0]): Promise<Record<string, unknown>> {\n const input = parseCheckApprovalRequest(request, method);\n const sourceContext = await prepareRuntimeSourceContext(deps, request, options);\n const sdkCheckRouterApproval = await loadUniswapFunction(deps, 'checkRouterApproval');\n\n return withSource(\n await sdkCheckRouterApproval({\n client: sourceContext.client,\n chainId: BigInt(sourceContext.source.chainId),\n tokenIn: input.tokenIn,\n owner: input.owner,\n amount: input.amount,\n addresses: input.addresses,\n }),\n sourceContext,\n 'preflight',\n `${method} result`,\n undefined,\n false,\n );\n}\n\nfunction parseResolveSwapRouteRequest(request: PanopticCallRequest, method: string) {\n const args = readArgs(request, method, ['poolAddress', 'tokenIn']);\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n tokenIn: normalizePanopticAddress(args.tokenIn, `${method} args.tokenIn`),\n };\n}\n\nfunction parseQuoteSwapExactInRequest(request: PanopticCallRequest, method: string) {\n const args = readArgs(request, method, ['poolAddress', 'tokenIn', 'amountIn', 'slippageBps', 'addresses']);\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n tokenIn: normalizePanopticAddress(args.tokenIn, `${method} args.tokenIn`),\n amountIn: decimalArg(args, 'amountIn'),\n slippageBps: decimalArg(args, 'slippageBps'),\n ...(args.addresses === undefined\n ? {}\n : { addresses: uniswapAddressesValue(args.addresses, `${method} args.addresses`) }),\n };\n}\n\nfunction parseQuoteSwapExactOutRequest(request: PanopticCallRequest, method: string) {\n const args = readArgs(request, method, ['poolAddress', 'tokenIn', 'amountOut', 'slippageBps', 'addresses']);\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n tokenIn: normalizePanopticAddress(args.tokenIn, `${method} args.tokenIn`),\n amountOut: decimalArg(args, 'amountOut'),\n slippageBps: decimalArg(args, 'slippageBps'),\n ...(args.addresses === undefined\n ? {}\n : { addresses: uniswapAddressesValue(args.addresses, `${method} args.addresses`) }),\n };\n}\n\nfunction parseCheckApprovalRequest(request: PanopticCallRequest, method: string) {\n requireSourceContext(request, method);\n rejectLatestOnlyBlockNumber(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['tokenIn', 'owner', 'amount', 'addresses'], method);\n\n return {\n tokenIn: normalizePanopticAddress(args.tokenIn, `${method} args.tokenIn`),\n owner: normalizePanopticAddress(args.owner, `${method} args.owner`),\n amount: decimalArg(args, 'amount'),\n ...(args.addresses === undefined\n ? {}\n : { addresses: uniswapAddressesValue(args.addresses, `${method} args.addresses`) }),\n };\n}\n\nfunction readArgs(request: PanopticCallRequest, method: string, allowedKeys: readonly string[]) {\n requireSourceContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, allowedKeys, method);\n\n return args;\n}\n\nfunction pinnedParams(sourceContext: PanopticResolvedCallContext): Record<string, unknown> {\n return {\n client: sourceContext.client,\n chainId: BigInt(sourceContext.source.chainId),\n blockNumber: BigInt(sourceContext.blockNumber),\n };\n}\n\nfunction rejectLatestOnlyBlockNumber(request: PanopticCallRequest, method: string): void {\n if (request.context?.blockNumber !== undefined) {\n throw new Error(`Panoptic ${method} does not accept context.blockNumber because its block policy is latestOnly.`);\n }\n}\n\nasync function loadUniswapFunction(\n deps: { uniswap: () => Promise<Record<string, unknown>> },\n name: string,\n): Promise<(...args: unknown[]) => unknown> {\n return requireSdkFunction(await deps.uniswap(), name, '@panoptic-eng/sdk/uniswap');\n}\n\nexport { checkRouterApproval, quoteSwapExactInViaRouter, quoteSwapExactOutViaRouter, resolveSwapRoute };\n","import {\n normalizePanopticAddress,\n normalizePanopticDecimalString,\n normalizePanopticHex,\n} from '../../panopticSerialization';\n\ntype DynamicJobFragment = {\n target: string;\n userProvidedData: string;\n strategyProvidedData: string;\n value: string;\n};\n\nfunction makeDynamicJobFragment(input: DynamicJobFragment): DynamicJobFragment {\n return validateDynamicJobFragment(input, 'fragment');\n}\n\nfunction validateDynamicJobFragment(value: unknown, label: string): DynamicJobFragment {\n if (!isRecord(value)) {\n throw new Error(`Panoptic ${label} must be an object.`);\n }\n\n rejectExtraKeys(value, ['target', 'userProvidedData', 'strategyProvidedData', 'value'], label);\n\n const fragment = {\n target: normalizePanopticAddress(value.target, `${label}.target`),\n userProvidedData: normalizePanopticHex(value.userProvidedData, `${label}.userProvidedData`),\n strategyProvidedData: normalizePanopticHex(value.strategyProvidedData, `${label}.strategyProvidedData`),\n value: normalizePanopticDecimalString(value.value, `${label}.value`),\n };\n\n if (fragment.userProvidedData.length < 10 || (fragment.userProvidedData.length - 10) % 64 !== 0) {\n throw new Error(`Panoptic ${label}.userProvidedData must be a 4-byte selector followed by zero or more ABI words.`);\n }\n\n if (fragment.value !== '0') {\n throw new Error(`Panoptic ${label}.value must be 0 because DynamicJobs.executeJob does not forward native value.`);\n }\n\n return fragment;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction rejectExtraKeys(value: Record<string, unknown>, allowedKeys: readonly string[], label: string): void {\n const allowed = new Set(allowedKeys);\n\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) {\n throw new Error(`Panoptic ${label}.${key} is not supported by DynamicJobFragment.`);\n }\n }\n}\n\nexport { makeDynamicJobFragment, validateDynamicJobFragment };\nexport type { DynamicJobFragment };\n","import { normalizePanopticAddress, normalizePanopticHex } from '../../panopticSerialization';\n\ntype SplitCalldataOptions = {\n expectedSelector?: string;\n staticArgWords?: number;\n requireStrategyData?: boolean;\n};\n\ntype SplitCalldataResult = {\n calldata: string;\n userProvidedData: string;\n strategyProvidedData: string;\n target?: string;\n};\n\nfunction splitCalldata(value: unknown, method: string, options: SplitCalldataOptions = {}): SplitCalldataResult {\n const record = isRecord(value) ? value : undefined;\n const rawCalldata = record ? record.data : value;\n const calldata = normalizePanopticHex(rawCalldata, `${method} calldata`).toLowerCase();\n const target = record?.to === undefined ? undefined : normalizePanopticAddress(record.to, `${method} SDK target`);\n\n const staticArgWords = options.staticArgWords || 0;\n const prefixLength = 10 + staticArgWords * 64;\n\n if (calldata.length < 10) {\n throw new Error(`Panoptic ${method} calldata must include a selector.`);\n }\n\n const selector = calldata.slice(0, 10);\n const expectedSelector = options.expectedSelector?.toLowerCase();\n\n if (expectedSelector && selector !== expectedSelector) {\n throw new Error(\n `Panoptic ${method} calldata selector ${selector} does not match expected selector ${expectedSelector}.`,\n );\n }\n\n if (calldata.length < prefixLength) {\n throw new Error(`Panoptic ${method} calldata must include ${staticArgWords} static argument word(s).`);\n }\n\n const userProvidedData = calldata.slice(0, prefixLength);\n const strategyProvidedData = `0x${calldata.slice(prefixLength)}`;\n\n if (options.requireStrategyData !== false && strategyProvidedData === '0x') {\n throw new Error(`Panoptic ${method} calldata must include ABI-encoded arguments.`);\n }\n\n return target\n ? { calldata, userProvidedData, strategyProvidedData, target }\n : { calldata, userProvidedData, strategyProvidedData };\n}\n\nfunction assertUserProvidedData(value: string, expected: string, method: string): void {\n if (value.toLowerCase() !== expected.toLowerCase()) {\n throw new Error(`Panoptic ${method} generated calldata does not match the requested static argument prefix.`);\n }\n}\n\nfunction addressAbiWord(address: string): string {\n return address.slice(2).toLowerCase().padStart(64, '0');\n}\n\nfunction uint256AbiWord(value: bigint): string {\n if (value < BigInt(0) || value >= BigInt(1) << BigInt(256)) {\n throw new Error('Panoptic ABI uint256 value exceeds range.');\n }\n\n return value.toString(16).padStart(64, '0');\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport { addressAbiWord, assertUserProvidedData, splitCalldata, uint256AbiWord };\n","import { normalizePanopticAddress } from '../../panopticSerialization';\nimport { uint256Arg } from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys, requireSdkFunction } from '../support';\nimport { makeDynamicJobFragment } from '../dynamicJobs/fragments';\nimport { addressAbiWord, assertUserProvidedData, splitCalldata } from './support';\n\ntype Erc20ApproveInput = {\n token: string;\n spender: string;\n amount: bigint;\n};\n\nconst ERC20_APPROVE_SELECTOR = '0x095ea7b3';\n\nasync function approveFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseApproveRequest(request, method);\n const encodeApproveFunctionData = requireSdkFunction(\n await deps.sdk(),\n 'encodeApproveFunctionData',\n '@panoptic-eng/sdk',\n );\n const calldata = await encodeApproveFunctionData({\n spender: input.spender,\n amount: input.amount,\n });\n const split = splitCalldata(calldata, method, {\n expectedSelector: ERC20_APPROVE_SELECTOR,\n staticArgWords: 1,\n });\n assertUserProvidedData(split.userProvidedData, `${ERC20_APPROVE_SELECTOR}${addressAbiWord(input.spender)}`, method);\n\n return makeDynamicJobFragment({\n target: input.token,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nfunction parseApproveRequest(request: PanopticCallRequest, method: string): Erc20ApproveInput {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['token', 'spender', 'amount'], method);\n return {\n token: normalizePanopticAddress(args.token, `${method} args.token`),\n spender: normalizePanopticAddress(args.spender, `${method} args.spender`),\n amount: uint256Arg(args, 'amount'),\n };\n}\n\nexport { approveFragment };\n","import { normalizePanopticAddress } from '../../panopticSerialization';\nimport { uint256Arg, uint256ArrayArg } from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys, requireSdkFunction } from '../support';\nimport { makeDynamicJobFragment } from '../dynamicJobs/fragments';\nimport { splitCalldata } from './support';\n\nconst DEPOSIT_SELECTOR = '0x6e553f65';\nconst WITHDRAW_SELECTOR = '0xb460af94';\nconst WITHDRAW_WITH_POSITIONS_SELECTOR = '0xe51161ba';\nconst WITHDRAW_WITH_POSITIONS_ABI = [\n {\n type: 'function',\n name: 'withdraw',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'assets', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n { name: 'owner', type: 'address' },\n { name: 'positionIdList', type: 'uint256[]' },\n { name: 'usePremiaAsCollateral', type: 'bool' },\n ],\n outputs: [{ name: 'shares', type: 'uint256' }],\n },\n] as const;\n\nasync function depositFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseDepositRequest(request, method);\n const encodeDepositFunctionData = requireSdkFunction(\n await deps.sdk(),\n 'encodeDepositFunctionData',\n '@panoptic-eng/sdk',\n );\n const split = splitCalldata(\n await encodeDepositFunctionData({\n assets: input.assets,\n receiver: input.receiver,\n }),\n method,\n { expectedSelector: DEPOSIT_SELECTOR },\n );\n\n return makeDynamicJobFragment({\n target: input.collateralTracker,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function withdrawFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseWithdrawRequest(request, method);\n const encodeWithdrawFunctionData = requireSdkFunction(\n await deps.sdk(),\n 'encodeWithdrawFunctionData',\n '@panoptic-eng/sdk',\n );\n const split = splitCalldata(\n await encodeWithdrawFunctionData({\n assets: input.assets,\n receiver: input.receiver,\n owner: input.owner,\n }),\n method,\n { expectedSelector: WITHDRAW_SELECTOR },\n );\n\n return makeDynamicJobFragment({\n target: input.collateralTracker,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function withdrawWithPositionsFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseWithdrawWithPositionsRequest(request, method);\n const encodeFunctionData = requireSdkFunction(await deps.viem(), 'encodeFunctionData', 'viem');\n const split = splitCalldata(\n await encodeFunctionData({\n abi: WITHDRAW_WITH_POSITIONS_ABI,\n functionName: 'withdraw',\n args: [input.assets, input.receiver, input.owner, input.positionIdList, input.usePremiaAsCollateral],\n }),\n method,\n { expectedSelector: WITHDRAW_WITH_POSITIONS_SELECTOR },\n );\n\n return makeDynamicJobFragment({\n target: input.collateralTracker,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nfunction parseDepositRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['collateralTracker', 'assets', 'receiver'], method);\n\n return {\n collateralTracker: normalizePanopticAddress(args.collateralTracker, `${method} args.collateralTracker`),\n assets: uint256Arg(args, 'assets'),\n receiver: normalizePanopticAddress(args.receiver, `${method} args.receiver`),\n };\n}\n\nfunction parseWithdrawRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['collateralTracker', 'assets', 'receiver', 'owner'], method);\n\n return {\n collateralTracker: normalizePanopticAddress(args.collateralTracker, `${method} args.collateralTracker`),\n assets: uint256Arg(args, 'assets'),\n receiver: normalizePanopticAddress(args.receiver, `${method} args.receiver`),\n owner: normalizePanopticAddress(args.owner, `${method} args.owner`),\n };\n}\n\nfunction parseWithdrawWithPositionsRequest(request: PanopticCallRequest, method: string) {\n const input = parseWithdrawWithPositionBase(request, method);\n const { args, ...base } = input;\n\n return {\n ...base,\n positionIdList: uint256ArrayArg(args, 'positionIdList'),\n usePremiaAsCollateral: booleanArg(args.usePremiaAsCollateral, `${method} args.usePremiaAsCollateral`),\n };\n}\n\nfunction parseWithdrawWithPositionBase(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(\n args,\n ['collateralTracker', 'assets', 'receiver', 'owner', 'positionIdList', 'usePremiaAsCollateral'],\n method,\n );\n\n return {\n args,\n collateralTracker: normalizePanopticAddress(args.collateralTracker, `${method} args.collateralTracker`),\n assets: uint256Arg(args, 'assets'),\n receiver: normalizePanopticAddress(args.receiver, `${method} args.receiver`),\n owner: normalizePanopticAddress(args.owner, `${method} args.owner`),\n };\n}\n\nfunction booleanArg(value: unknown, label: string): boolean {\n if (typeof value !== 'boolean') {\n throw new Error(`Panoptic ${label} must be a boolean.`);\n }\n\n return value;\n}\n\nexport { depositFragment, withdrawFragment, withdrawWithPositionsFragment };\n","import { normalizePanopticAddress, normalizePanopticHex } from '../../panopticSerialization';\nimport { uint256Arg } from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys, requireSdkFunction } from '../support';\nimport { makeDynamicJobFragment } from '../dynamicJobs/fragments';\nimport { splitCalldata } from './support';\n\ntype FulfillDepositsInput = {\n vaultManager: string;\n assetsToFulfill: bigint;\n managerInput: string;\n};\n\ntype FulfillWithdrawalsInput = {\n vaultManager: string;\n sharesToFulfill: bigint;\n maxAssetsReceived: bigint;\n managerInput: string;\n};\n\ntype ManageInput = {\n manager?: string;\n innerTarget: string;\n innerData: string;\n value: bigint;\n};\n\nconst FULFILL_DEPOSITS_SELECTOR = '0x50dcdee9';\nconst FULFILL_WITHDRAWALS_SELECTOR = '0x69838516';\nconst MANAGE_SELECTOR = '0xf6e715d0';\nconst MANAGE_ABI = [\n {\n type: 'function',\n name: 'manage',\n stateMutability: 'payable',\n inputs: [\n { name: 'target', type: 'address' },\n { name: 'data', type: 'bytes' },\n { name: 'value', type: 'uint256' },\n ],\n outputs: [],\n },\n] as const;\n\nasync function fulfillDepositsFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseFulfillDepositsRequest(request, method);\n const encodeFulfillDepositsFunctionData = requireSdkFunction(\n await deps.sdk(),\n 'encodeFulfillDepositsFunctionData',\n '@panoptic-eng/sdk',\n );\n const split = splitCalldata(\n await encodeFulfillDepositsFunctionData({\n assetsToFulfill: input.assetsToFulfill,\n managerInput: input.managerInput,\n }),\n method,\n { expectedSelector: FULFILL_DEPOSITS_SELECTOR },\n );\n return makeDynamicJobFragment({\n target: input.vaultManager,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function fulfillWithdrawalsFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseFulfillWithdrawalsRequest(request, method);\n const encodeFulfillWithdrawalsFunctionData = requireSdkFunction(\n await deps.sdk(),\n 'encodeFulfillWithdrawalsFunctionData',\n '@panoptic-eng/sdk',\n );\n const split = splitCalldata(\n await encodeFulfillWithdrawalsFunctionData({\n sharesToFulfill: input.sharesToFulfill,\n maxAssetsReceived: input.maxAssetsReceived,\n managerInput: input.managerInput,\n }),\n method,\n { expectedSelector: FULFILL_WITHDRAWALS_SELECTOR },\n );\n return makeDynamicJobFragment({\n target: input.vaultManager,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function manageCalldataParts({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseManageRequest(request, method, false);\n const split = splitCalldata(await encodeManageCalldata(deps, input), method, { expectedSelector: MANAGE_SELECTOR });\n\n return {\n functionName: 'manage',\n calldata: split.calldata,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n };\n}\n\nasync function manageFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseManageRequest(request, method, true);\n const split = splitCalldata(await encodeManageCalldata(deps, input), method, { expectedSelector: MANAGE_SELECTOR });\n\n return makeDynamicJobFragment({\n target: input.manager as string,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function encodeManageCalldata(\n deps: Parameters<PanopticHandler>[0]['deps'],\n input: ManageInput,\n): Promise<unknown> {\n const encodeFunctionData = requireSdkFunction(await deps.viem(), 'encodeFunctionData', 'viem');\n\n return encodeFunctionData({\n abi: MANAGE_ABI,\n functionName: 'manage',\n args: [input.innerTarget, input.innerData, input.value],\n });\n}\n\nfunction parseFulfillDepositsRequest(request: PanopticCallRequest, method: string): FulfillDepositsInput {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['vaultManager', 'assetsToFulfill', 'managerInput'], method);\n\n return {\n vaultManager: normalizePanopticAddress(args.vaultManager, `${method} args.vaultManager`),\n assetsToFulfill: uint256Arg(args, 'assetsToFulfill'),\n managerInput: normalizePanopticHex(args.managerInput, `${method} args.managerInput`),\n };\n}\n\nfunction parseFulfillWithdrawalsRequest(request: PanopticCallRequest, method: string): FulfillWithdrawalsInput {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['vaultManager', 'sharesToFulfill', 'maxAssetsReceived', 'managerInput'], method);\n\n return {\n vaultManager: normalizePanopticAddress(args.vaultManager, `${method} args.vaultManager`),\n sharesToFulfill: uint256Arg(args, 'sharesToFulfill'),\n maxAssetsReceived: uint256Arg(args, 'maxAssetsReceived'),\n managerInput: normalizePanopticHex(args.managerInput, `${method} args.managerInput`),\n };\n}\n\nfunction parseManageRequest(request: PanopticCallRequest, method: string, requireManager: boolean): ManageInput {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(\n args,\n requireManager ? ['manager', 'innerTarget', 'innerData', 'value'] : ['innerTarget', 'innerData', 'value'],\n method,\n );\n\n return {\n ...(requireManager ? { manager: normalizePanopticAddress(args.manager, `${method} args.manager`) } : {}),\n innerTarget: normalizePanopticAddress(args.innerTarget, `${method} args.innerTarget`),\n innerData: normalizePanopticHex(args.innerData, `${method} args.innerData`),\n value: args.value === undefined ? BigInt(0) : uint256Arg(args, 'value'),\n };\n}\n\nexport { fulfillDepositsFragment, fulfillWithdrawalsFragment, manageCalldataParts, manageFragment };\n","import { normalizePanopticAddress, normalizePanopticHex } from '../../panopticSerialization';\nimport { arrayValue, decimalValue, recordValue, stringValue } from '../../panopticJsonArgs';\nimport type { JsonRecord } from '../../panopticJsonArgs';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys, requireSdkFunction } from '../support';\nimport { makeDynamicJobFragment } from '../dynamicJobs/fragments';\nimport { splitCalldata } from './support';\n\nconst MANAGE_VAULT_WITH_MERKLE_VERIFICATION_SELECTOR = '0x244b0f6a';\nconst MANAGE_VAULT_WITH_MERKLE_VERIFICATION_ABI = [\n {\n type: 'function',\n name: 'manageVaultWithMerkleVerification',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'manageProofs', type: 'bytes32[][]' },\n { name: 'decodersAndSanitizers', type: 'address[]' },\n { name: 'targets', type: 'address[]' },\n { name: 'targetData', type: 'bytes[]' },\n { name: 'values', type: 'uint256[]' },\n ],\n outputs: [],\n },\n] as const;\n\nasync function manageVaultWithVerificationFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseManageVaultWithVerificationRequest(request, method);\n const encodeFunctionData = requireSdkFunction(await deps.viem(), 'encodeFunctionData', 'viem');\n const split = splitCalldata(\n await encodeFunctionData({\n abi: MANAGE_VAULT_WITH_MERKLE_VERIFICATION_ABI,\n functionName: 'manageVaultWithMerkleVerification',\n args: [input.proofs, input.decoders, input.innerTargets, input.innerDatas, input.values],\n }),\n method,\n { expectedSelector: MANAGE_VAULT_WITH_MERKLE_VERIFICATION_SELECTOR },\n );\n\n return makeDynamicJobFragment({\n target: input.manager,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nfunction findLeaf({ request, method }: Parameters<PanopticHandler>[0]) {\n const input = parseFindLeafRequest(request, method);\n const leaf = findArtifactLeaf(input.artifact, input.query, method);\n\n return projectLeafWithProof(input.artifact, leaf, method);\n}\n\nfunction buildManageArgs({ request, method }: Parameters<PanopticHandler>[0]) {\n const input = parseBuildManageArgsRequest(request, method);\n const proofs: string[][] = [];\n const decoders: string[] = [];\n const innerTargets: string[] = [];\n const innerDatas: string[] = [];\n const values: bigint[] = [];\n const leaves: Record<string, unknown>[] = [];\n\n for (const [index, action] of input.actions.entries()) {\n const label = `${method} args.actions[${index}]`;\n const leaf = findArtifactLeaf(input.artifact, action.query, label);\n const projected = projectLeafWithProof(input.artifact, leaf, label);\n\n proofs.push(projected.proof);\n decoders.push(projected.decoder);\n innerTargets.push(projected.target);\n innerDatas.push(action.data);\n values.push(action.value);\n leaves.push(projected);\n }\n\n return {\n proofs,\n decoders,\n innerTargets,\n innerDatas,\n values,\n leaves,\n };\n}\n\nfunction parseManageVaultWithVerificationRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['manager', 'proofs', 'decoders', 'innerTargets', 'innerDatas', 'values'], method);\n\n const proofs = bytes32MatrixArg(args, 'proofs', method);\n const decoders = addressArrayArg(args, 'decoders', method);\n const innerTargets = addressArrayArg(args, 'innerTargets', method);\n const innerDatas = hexArrayArg(args, 'innerDatas', method);\n const values = uint256Array(args, 'values');\n const length = proofs.length;\n\n for (const [field, value] of [\n ['decoders', decoders],\n ['innerTargets', innerTargets],\n ['innerDatas', innerDatas],\n ['values', values],\n ] as const) {\n if (value.length !== length) {\n throw new Error(`Panoptic ${method} args.${field} length must match args.proofs length.`);\n }\n }\n\n if (length === 0) {\n throw new Error(`Panoptic ${method} args.proofs must include at least one proof.`);\n }\n\n return {\n manager: normalizePanopticAddress(args.manager, `${method} args.manager`),\n proofs,\n decoders,\n innerTargets,\n innerDatas,\n values,\n };\n}\n\nfunction parseFindLeafRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(\n args,\n ['artifact', 'action', 'description', 'functionSignature', 'functionSelector', 'target'],\n method,\n );\n\n return {\n artifact: recordValue(args.artifact, `args.artifact`),\n query: parseLeafQuery(args, method, 'args'),\n };\n}\n\nfunction parseBuildManageArgsRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['artifact', 'actions'], method);\n\n return {\n artifact: recordValue(args.artifact, `args.artifact`),\n actions: arrayValue(args.actions, 'args.actions').map((item, index) => {\n const action = recordValue(item, `args.actions[${index}]`);\n rejectExtraKeys(\n action,\n ['action', 'description', 'functionSignature', 'functionSelector', 'target', 'data', 'value'],\n method,\n );\n\n return {\n query: parseLeafQuery(action, method, `args.actions[${index}]`),\n data: normalizePanopticHex(action.data, `${method} args.actions[${index}].data`),\n value: action.value === undefined ? BigInt(0) : decimalValue(action.value, `args.actions[${index}].value`),\n };\n }),\n };\n}\n\ntype LeafQuery = {\n action?: string;\n description?: string;\n functionSignature?: string;\n functionSelector?: string;\n target?: string;\n};\n\nfunction parseLeafQuery(args: JsonRecord, method: string, label: string): LeafQuery {\n const query = {\n ...(args.action === undefined ? {} : { action: stringValue(args.action, `${label}.action`) }),\n ...(args.description === undefined ? {} : { description: stringValue(args.description, `${label}.description`) }),\n ...(args.functionSignature === undefined\n ? {}\n : { functionSignature: stringValue(args.functionSignature, `${label}.functionSignature`) }),\n ...(args.functionSelector === undefined\n ? {}\n : { functionSelector: normalizePanopticHex(args.functionSelector, `${method} ${label}.functionSelector`) }),\n ...(args.target === undefined\n ? {}\n : { target: normalizePanopticAddress(args.target, `${method} ${label}.target`) }),\n };\n\n if (Object.keys(query).length === 0) {\n throw new Error(`Panoptic ${method} ${label} must include at least one leaf selector.`);\n }\n\n return query;\n}\n\nfunction findArtifactLeaf(artifact: JsonRecord, query: LeafQuery, method: string): JsonRecord {\n const leaves = artifactLeafs(artifact, method);\n const matches = leaves.filter((leaf) => leafMatches(leaf, query, method));\n\n if (matches.length === 0) {\n throw new Error(`Panoptic ${method} could not find a matching Merkle leaf.`);\n }\n if (matches.length > 1) {\n throw new Error(`Panoptic ${method} found multiple matching Merkle leaves; provide a more specific selector.`);\n }\n\n return matches[0];\n}\n\nfunction artifactLeafs(artifact: JsonRecord, method: string): JsonRecord[] {\n const rawLeaves =\n artifact.leafs ?? artifact.uniqueLeafs ?? (isJsonRecord(artifact.artifact) ? artifact.artifact.leafs : undefined);\n\n return arrayValue(rawLeaves, `${method} artifact.leafs`).map((item, index) =>\n recordValue(item, `${method} artifact.leafs[${index}]`),\n );\n}\n\nfunction leafMatches(leaf: JsonRecord, query: LeafQuery, method: string): boolean {\n if (query.action !== undefined && leafString(leaf, 'Action', method) !== query.action) return false;\n if (query.description !== undefined && leafString(leaf, 'Description', method) !== query.description) return false;\n if (\n query.functionSignature !== undefined &&\n leafString(leaf, 'FunctionSignature', method) !== query.functionSignature\n )\n return false;\n if (\n query.functionSelector !== undefined &&\n normalizePanopticHex(leaf.FunctionSelector, `${method} leaf.FunctionSelector`) !== query.functionSelector\n )\n return false;\n if (\n query.target !== undefined &&\n normalizePanopticAddress(leaf.TargetAddress, `${method} leaf.TargetAddress`) !== query.target\n )\n return false;\n return true;\n}\n\nfunction projectLeafWithProof(artifact: JsonRecord, leaf: JsonRecord, method: string) {\n const action = leafString(leaf, 'Action', method);\n const leafDigest = normalizePanopticHex(leaf.LeafDigest, `${method} leaf.LeafDigest`);\n\n return {\n action,\n description: leafString(leaf, 'Description', method),\n leafDigest,\n decoder: normalizePanopticAddress(leaf.DecoderAndSanitizerAddress, `${method} leaf.DecoderAndSanitizerAddress`),\n target: normalizePanopticAddress(leaf.TargetAddress, `${method} leaf.TargetAddress`),\n functionSignature: leafString(leaf, 'FunctionSignature', method),\n functionSelector: normalizePanopticHex(leaf.FunctionSelector, `${method} leaf.FunctionSelector`),\n canSendValue: leaf.CanSendValue === true,\n proof: proofForLeaf(artifact, action, leafDigest, method),\n };\n}\n\nfunction proofForLeaf(artifact: JsonRecord, action: string, leafDigest: string, method: string): string[] {\n const byAction = isJsonRecord(artifact.proofsByAction) ? artifact.proofsByAction[action] : undefined;\n const byDigest = isJsonRecord(artifact.proofsByDigest) ? artifact.proofsByDigest[leafDigest] : undefined;\n const proof = byAction ?? byDigest;\n\n return proof === undefined\n ? []\n : arrayValue(proof, `${method} proof`).map((item, index) => bytes32Value(item, `${method} proof[${index}]`));\n}\n\nfunction leafString(leaf: JsonRecord, field: string, method: string): string {\n return stringValue(leaf[field], `${method} leaf.${field}`);\n}\n\nfunction bytes32Value(value: unknown, label: string): string {\n const hex = normalizePanopticHex(value, label);\n if (hex.length !== 66) {\n throw new Error(`Panoptic ${label} must be bytes32.`);\n }\n return hex;\n}\n\nfunction bytes32MatrixArg(args: JsonRecord, fieldName: string, method: string): string[][] {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((row, rowIndex) =>\n arrayValue(row, `args.${fieldName}[${rowIndex}]`).map((item, index) => {\n const proof = normalizePanopticHex(item, `${method} args.${fieldName}[${rowIndex}][${index}]`);\n if (proof.length !== 66) {\n throw new Error(`Panoptic ${method} args.${fieldName}[${rowIndex}][${index}] must be bytes32.`);\n }\n return proof;\n }),\n );\n}\n\nfunction addressArrayArg(args: JsonRecord, fieldName: string, method: string): string[] {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n normalizePanopticAddress(item, `${method} args.${fieldName}[${index}]`),\n );\n}\n\nfunction hexArrayArg(args: JsonRecord, fieldName: string, method: string): string[] {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n normalizePanopticHex(item, `${method} args.${fieldName}[${index}]`),\n );\n}\n\nfunction uint256Array(args: JsonRecord, fieldName: string): bigint[] {\n return arrayValue(args[fieldName], `args.${fieldName}`).map((item, index) =>\n decimalValue(item, `args.${fieldName}[${index}]`),\n );\n}\n\nfunction isJsonRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport { buildManageArgs, findLeaf, manageVaultWithVerificationFragment };\n","import { normalizePanopticAddress } from '../../panopticSerialization';\nimport {\n int24Arg,\n optionalInt24Arg,\n optionalUint256Arg,\n uint128Arg,\n uint256Arg,\n uint256ArrayArg,\n} from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type JsonValue, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys, requireSdkFunction, requireString } from '../support';\nimport { makeDynamicJobFragment } from '../dynamicJobs/fragments';\nimport { splitCalldata } from './support';\n\ntype PanopticDispatchParsed = {\n poolAddress: string;\n existingPositionIds: bigint[];\n tokenId: bigint;\n positionSize: bigint;\n tickLimitLow: bigint;\n tickLimitHigh: bigint;\n spreadLimit?: bigint;\n swapAtMint?: boolean;\n usePremiaAsCollateral?: boolean;\n builderCode?: bigint;\n};\n\ntype SplitDispatchCalldata = {\n target?: string;\n calldata: string;\n userProvidedData: string;\n strategyProvidedData: string;\n};\n\nconst PANOPTIC_DISPATCH_SELECTOR = '0xc25813aa';\nconst MAX_EXISTING_POSITION_IDS = 64;\nconst UINT128_MAX = (BigInt(1) << BigInt(128)) - BigInt(1);\nconst INT24_MIN = -(BigInt(1) << BigInt(23));\nconst INT24_MAX = (BigInt(1) << BigInt(23)) - BigInt(1);\nconst DISPATCH_EXPLICIT_ABI = [\n {\n type: 'function',\n name: 'dispatch',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'positionIdList', type: 'uint256[]' },\n { name: 'finalPositionIdList', type: 'uint256[]' },\n { name: 'positionSizes', type: 'uint128[]' },\n { name: 'tickAndSpreadLimits', type: 'int24[3][]' },\n { name: 'usePremiaAsCollateral', type: 'bool' },\n { name: 'builderCode', type: 'uint256' },\n ],\n outputs: [],\n },\n] as const;\n\nasync function dispatchCalldataParts({ deps, request, method }: Parameters<PanopticHandler>[0]) {\n const input = parseDispatchRequest(request, method);\n const sdkV2 = await deps.sdkV2();\n const buildOpenPositionCalldata = requireSdkFunction(sdkV2, 'buildOpenPositionCalldata', '@panoptic-eng/sdk/v2');\n const poolAddress = requireString(input.poolAddress, `${method} args.poolAddress`);\n const split = splitDispatchCalldata(\n await buildOpenPositionCalldata(buildOpenPositionParams(input, poolAddress)),\n method,\n );\n\n return {\n functionName: 'dispatch',\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n calldata: split.calldata,\n };\n}\n\nasync function dispatchFragment({ deps, request, options, method }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseDispatchRequest(request, method);\n const sdkV2 = await deps.sdkV2();\n const buildOpenPositionCalldata = requireSdkFunction(sdkV2, 'buildOpenPositionCalldata', '@panoptic-eng/sdk/v2');\n const targetAddress = input.poolAddress;\n const split = splitDispatchCalldata(\n await buildOpenPositionCalldata(buildOpenPositionParams(input, input.poolAddress)),\n method,\n );\n\n if (split.target && split.target !== targetAddress) {\n throw new Error(`Panoptic ${method} SDK returned a target that does not match args.poolAddress.`);\n }\n\n return makeDynamicJobFragment({\n target: targetAddress,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function dispatchExplicitCalldataParts({ deps, request, method }: Parameters<PanopticHandler>[0]) {\n const input = parseExplicitDispatchRequest(request, method);\n const split = splitDispatchCalldata(await encodeExplicitDispatchCalldata(deps, input), method);\n\n return {\n functionName: 'dispatch',\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n calldata: split.calldata,\n value: '0',\n };\n}\n\nasync function dispatchExplicitFragment({ deps, request, options, method }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseExplicitDispatchRequest(request, method);\n const split = splitDispatchCalldata(await encodeExplicitDispatchCalldata(deps, input), method);\n\n return makeDynamicJobFragment({\n target: input.poolAddress,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function encodeExplicitDispatchCalldata(\n deps: Parameters<PanopticHandler>[0]['deps'],\n input: ReturnType<typeof parseExplicitDispatchRequest>,\n): Promise<unknown> {\n const encodeFunctionData = requireSdkFunction(await deps.viem(), 'encodeFunctionData', 'viem');\n\n return encodeFunctionData({\n abi: DISPATCH_EXPLICIT_ABI,\n functionName: 'dispatch',\n args: [\n input.positionIdList,\n input.finalPositionIdList,\n input.positionSizes,\n input.tickAndSpreadLimits,\n input.usePremiaAsCollateral,\n input.builderCode,\n ],\n });\n}\n\nfunction parseDispatchRequest(request: PanopticCallRequest, method: string): PanopticDispatchParsed {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, dispatchKeys, method);\n\n return parseDispatchCommon(args, method);\n}\n\nfunction parseExplicitDispatchRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, explicitDispatchKeys, method);\n const positionIdList = positionIdsArg(args, 'positionIdList', method);\n const positionSizes = uint128ArrayArg(args, 'positionSizes', method);\n const tickAndSpreadLimits = int24TripleArrayArg(args.tickAndSpreadLimits, `${method} args.tickAndSpreadLimits`);\n\n if (positionSizes.length !== positionIdList.length) {\n throw new Error(`Panoptic ${method} args.positionSizes length must match args.positionIdList length.`);\n }\n\n if (tickAndSpreadLimits.length !== positionIdList.length) {\n throw new Error(`Panoptic ${method} args.tickAndSpreadLimits length must match args.positionIdList length.`);\n }\n\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n positionIdList,\n finalPositionIdList: uint256ArrayArg(args, 'finalPositionIdList'),\n positionSizes,\n tickAndSpreadLimits,\n usePremiaAsCollateral: requiredBooleanArg(args.usePremiaAsCollateral, `${method} args.usePremiaAsCollateral`),\n builderCode: optionalUint256Arg(args, 'builderCode') ?? BigInt(0),\n };\n}\n\nfunction parseDispatchCommon(args: { [key: string]: JsonValue }, method: string): PanopticDispatchParsed {\n return {\n poolAddress: normalizePanopticAddress(args.poolAddress, `${method} args.poolAddress`),\n existingPositionIds: positionIdsArg(args, 'existingPositionIds', method),\n tokenId: uint256Arg(args, 'tokenId'),\n positionSize: uint128Arg(args, 'positionSize'),\n tickLimitLow: int24Arg(args, 'tickLimitLow'),\n tickLimitHigh: int24Arg(args, 'tickLimitHigh'),\n spreadLimit: optionalInt24Arg(args, 'spreadLimit'),\n swapAtMint: optionalBooleanArg(args, 'swapAtMint', method),\n usePremiaAsCollateral: optionalBooleanArg(args, 'usePremiaAsCollateral', method),\n builderCode: optionalUint256Arg(args, 'builderCode'),\n };\n}\n\nfunction buildOpenPositionParams(input: PanopticDispatchParsed, poolAddress: string): Record<string, unknown> {\n return {\n poolAddress,\n existingPositionIds: input.existingPositionIds,\n tokenId: input.tokenId,\n positionSize: input.positionSize,\n tickLimitLow: input.tickLimitLow,\n tickLimitHigh: input.tickLimitHigh,\n spreadLimit: input.spreadLimit,\n swapAtMint: input.swapAtMint,\n usePremiaAsCollateral: input.usePremiaAsCollateral,\n builderCode: input.builderCode,\n };\n}\n\nfunction positionIdsArg(args: { [key: string]: JsonValue }, fieldName: string, method: string): bigint[] {\n const positionIds = uint256ArrayArg(args, fieldName);\n\n if (positionIds.length > MAX_EXISTING_POSITION_IDS) {\n throw new Error(`Panoptic ${method} args.${fieldName} must contain at most ${MAX_EXISTING_POSITION_IDS} items.`);\n }\n\n return positionIds;\n}\n\nfunction splitDispatchCalldata(value: unknown, method: string): SplitDispatchCalldata {\n return splitCalldata(value, method, { expectedSelector: PANOPTIC_DISPATCH_SELECTOR });\n}\n\nfunction optionalBooleanArg(\n args: { [key: string]: JsonValue },\n fieldName: string,\n method: string,\n): boolean | undefined {\n const value = args[fieldName];\n\n if (value === undefined) {\n return undefined;\n }\n\n if (typeof value !== 'boolean') {\n throw new Error(`Panoptic ${method} args.${fieldName} must be a boolean.`);\n }\n\n return value;\n}\n\nfunction requiredBooleanArg(value: JsonValue | undefined, label: string): boolean {\n if (typeof value !== 'boolean') {\n throw new Error(`Panoptic ${label} must be a boolean.`);\n }\n\n return value;\n}\n\nfunction uint128ArrayArg(args: { [key: string]: JsonValue }, fieldName: string, method: string): bigint[] {\n const values = uint256ArrayArg(args, fieldName);\n\n for (const [index, value] of values.entries()) {\n if (value > UINT128_MAX) {\n throw new Error(`Panoptic ${method} args.${fieldName}[${index}] exceeds uint128 range.`);\n }\n }\n\n return values;\n}\n\nfunction int24TripleArrayArg(value: JsonValue | undefined, label: string): bigint[][] {\n if (!Array.isArray(value)) {\n throw new Error(`Panoptic ${label} must be an array.`);\n }\n\n return value.map((row, rowIndex) => {\n if (!Array.isArray(row) || row.length !== 3) {\n throw new Error(`Panoptic ${label}[${rowIndex}] must be an int24 triple.`);\n }\n\n return row.map((item, index) => signedInt24Value(item, `${label}[${rowIndex}][${index}]`));\n });\n}\n\nfunction signedInt24Value(value: JsonValue | undefined, label: string): bigint {\n if (typeof value !== 'string' || !/^-?(0|[1-9][0-9]*)$/.test(value)) {\n throw new Error(`Panoptic ${label} must be a signed decimal string.`);\n }\n\n const parsed = BigInt(value);\n\n if (parsed < INT24_MIN || parsed > INT24_MAX) {\n throw new Error(`Panoptic ${label} exceeds int24 range.`);\n }\n\n return parsed;\n}\n\nconst dispatchKeys = [\n 'poolAddress',\n 'existingPositionIds',\n 'tokenId',\n 'positionSize',\n 'tickLimitLow',\n 'tickLimitHigh',\n 'spreadLimit',\n 'swapAtMint',\n 'usePremiaAsCollateral',\n 'builderCode',\n] as const;\n\nconst explicitDispatchKeys = [\n 'poolAddress',\n 'positionIdList',\n 'finalPositionIdList',\n 'positionSizes',\n 'tickAndSpreadLimits',\n 'usePremiaAsCollateral',\n 'builderCode',\n] as const;\n\nexport { dispatchCalldataParts, dispatchExplicitCalldataParts, dispatchExplicitFragment, dispatchFragment };\n","import { normalizePanopticAddress } from '../../panopticSerialization';\nimport { uint48Arg, uint160Arg } from '../../panopticScalars';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys, requireSdkFunction } from '../support';\nimport { makeDynamicJobFragment } from '../dynamicJobs/fragments';\nimport { addressAbiWord, assertUserProvidedData, splitCalldata } from './support';\n\ntype Permit2ApproveInput = {\n permit2: string;\n token: string;\n spender: string;\n amount: bigint;\n expiration: bigint;\n};\n\nconst PERMIT2_APPROVE_ABI = [\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'token', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n ],\n outputs: [],\n },\n] as const;\n\nconst PERMIT2_APPROVE_SELECTOR = '0x87517c45';\n\nasync function approveFragment({ deps, method, request, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseApproveRequest(request, method);\n const encodeFunctionData = requireSdkFunction(await deps.viem(), 'encodeFunctionData', 'viem');\n const calldata = await encodeFunctionData({\n abi: PERMIT2_APPROVE_ABI,\n functionName: 'approve',\n args: [input.token, input.spender, input.amount, input.expiration],\n });\n const split = splitCalldata(calldata, method, {\n expectedSelector: PERMIT2_APPROVE_SELECTOR,\n staticArgWords: 2,\n });\n assertUserProvidedData(\n split.userProvidedData,\n `${PERMIT2_APPROVE_SELECTOR}${addressAbiWord(input.token)}${addressAbiWord(input.spender)}`,\n method,\n );\n\n return makeDynamicJobFragment({\n target: input.permit2,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nfunction parseApproveRequest(request: PanopticCallRequest, method: string): Permit2ApproveInput {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['permit2', 'token', 'spender', 'amount', 'expiration'], method);\n return {\n permit2: normalizePanopticAddress(args.permit2, `${method} args.permit2`),\n token: normalizePanopticAddress(args.token, `${method} args.token`),\n spender: normalizePanopticAddress(args.spender, `${method} args.spender`),\n amount: uint160Arg(args, 'amount'),\n expiration: uint48Arg(args, 'expiration'),\n };\n}\n\nexport { approveFragment };\n","import { booleanValue, decimalValue, optionalDecimalArg } from '../../panopticJsonArgs';\nimport type { JsonValue } from '../../panopticHostEnvelope';\nimport { normalizePanopticAddress } from '../../panopticSerialization';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys, requireSdkFunction } from '../support';\nimport { makeDynamicJobFragment } from '../dynamicJobs/fragments';\nimport { splitCalldata } from './support';\n\ntype V3ExactInInput = {\n router?: string;\n tokenIn: string;\n tokenOut: string;\n fee: bigint;\n recipient: string;\n amountIn: bigint;\n amountOutMin: bigint;\n payerIsUser: boolean;\n deadline?: bigint;\n};\n\nconst UNIVERSAL_ROUTER_EXECUTE_SELECTOR = '0x24856bc3';\nconst UNIVERSAL_ROUTER_EXECUTE_DEADLINE_SELECTOR = '0x3593564c';\nconst V3_SWAP_EXACT_IN_COMMAND = '0x00';\nconst V3_EXACT_IN_INPUT_ABI = [\n { name: 'recipient', type: 'address' },\n { name: 'amountIn', type: 'uint256' },\n { name: 'amountOutMinimum', type: 'uint256' },\n { name: 'path', type: 'bytes' },\n { name: 'payerIsUser', type: 'bool' },\n] as const;\nconst UNIVERSAL_ROUTER_EXECUTE_ABI = [\n {\n type: 'function',\n name: 'execute',\n stateMutability: 'payable',\n inputs: [\n { name: 'commands', type: 'bytes' },\n { name: 'inputs', type: 'bytes[]' },\n ],\n outputs: [],\n },\n] as const;\nconst UNIVERSAL_ROUTER_EXECUTE_DEADLINE_ABI = [\n {\n type: 'function',\n name: 'execute',\n stateMutability: 'payable',\n inputs: [\n { name: 'commands', type: 'bytes' },\n { name: 'inputs', type: 'bytes[]' },\n { name: 'deadline', type: 'uint256' },\n ],\n outputs: [],\n },\n] as const;\n\nasync function buildV3ExactInExecuteCalldataParts({ deps, request, method, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseV3ExactInRequest(request, method);\n const calldata = await buildV3ExactInCalldata(deps, input);\n const split = splitCalldata(calldata, method, {\n expectedSelector:\n input.deadline === undefined ? UNIVERSAL_ROUTER_EXECUTE_SELECTOR : UNIVERSAL_ROUTER_EXECUTE_DEADLINE_SELECTOR,\n });\n\n return {\n functionName: input.deadline === undefined ? 'execute(bytes,bytes[])' : 'execute(bytes,bytes[],uint256)',\n calldata: split.calldata,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n };\n}\n\nasync function buildV3ExactInExecuteFragment({ deps, request, method, options }: Parameters<PanopticHandler>[0]) {\n void options;\n const input = parseV3ExactInRequest(request, method);\n\n if (!input.router) {\n throw new Error(`Panoptic ${method} requires args.router.`);\n }\n\n const calldata = await buildV3ExactInCalldata(deps, input);\n const split = splitCalldata(calldata, method, {\n expectedSelector:\n input.deadline === undefined ? UNIVERSAL_ROUTER_EXECUTE_SELECTOR : UNIVERSAL_ROUTER_EXECUTE_DEADLINE_SELECTOR,\n });\n\n return makeDynamicJobFragment({\n target: input.router,\n userProvidedData: split.userProvidedData,\n strategyProvidedData: split.strategyProvidedData,\n value: '0',\n });\n}\n\nasync function buildV3ExactInCalldata(\n deps: Parameters<PanopticHandler>[0]['deps'],\n input: V3ExactInInput,\n): Promise<unknown> {\n const viem = await deps.viem();\n const encodeAbiParameters = requireSdkFunction(viem, 'encodeAbiParameters', 'viem');\n const encodeFunctionData = requireSdkFunction(viem, 'encodeFunctionData', 'viem');\n const path = encodeV3Path(input.tokenIn, input.fee, input.tokenOut);\n const exactInInput = await encodeAbiParameters(V3_EXACT_IN_INPUT_ABI, [\n input.recipient,\n input.amountIn,\n input.amountOutMin,\n path,\n input.payerIsUser,\n ]);\n\n if (input.deadline === undefined) {\n return encodeFunctionData({\n abi: UNIVERSAL_ROUTER_EXECUTE_ABI,\n functionName: 'execute',\n args: [V3_SWAP_EXACT_IN_COMMAND, [exactInInput]],\n });\n }\n\n return encodeFunctionData({\n abi: UNIVERSAL_ROUTER_EXECUTE_DEADLINE_ABI,\n functionName: 'execute',\n args: [V3_SWAP_EXACT_IN_COMMAND, [exactInInput], input.deadline],\n });\n}\n\nfunction parseV3ExactInRequest(request: PanopticCallRequest, method: string): V3ExactInInput {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(\n args,\n ['router', 'tokenIn', 'tokenOut', 'fee', 'recipient', 'amountIn', 'amountOutMin', 'payerIsUser', 'deadline'],\n method,\n );\n\n return {\n ...(args.router === undefined ? {} : { router: normalizePanopticAddress(args.router, `${method} args.router`) }),\n tokenIn: normalizePanopticAddress(args.tokenIn, `${method} args.tokenIn`),\n tokenOut: normalizePanopticAddress(args.tokenOut, `${method} args.tokenOut`),\n fee: uint24Arg(args.fee, `${method} args.fee`),\n recipient: normalizePanopticAddress(args.recipient, `${method} args.recipient`),\n amountIn: decimalValue(args.amountIn, 'args.amountIn'),\n amountOutMin: decimalValue(args.amountOutMin, 'args.amountOutMin'),\n payerIsUser: booleanValue(args.payerIsUser, 'args.payerIsUser'),\n deadline: optionalDecimalArg(args, 'deadline'),\n };\n}\n\nfunction uint24Arg(value: JsonValue | undefined, label: string): bigint {\n const parsed = decimalValue(value, label);\n\n if (parsed > BigInt(16_777_215)) {\n throw new Error(`Panoptic ${label} exceeds uint24 range.`);\n }\n\n return parsed;\n}\n\nfunction encodeV3Path(tokenIn: string, fee: bigint, tokenOut: string): string {\n return `0x${tokenIn.slice(2)}${fee.toString(16).padStart(6, '0')}${tokenOut.slice(2)}`.toLowerCase();\n}\n\nexport { buildV3ExactInExecuteCalldataParts, buildV3ExactInExecuteFragment };\n","import { uint256Arg } from '../../panopticScalars';\nimport { normalizePanopticAddress } from '../../panopticSerialization';\nimport type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectContext, rejectExtraKeys } from '../support';\nimport { uint256AbiWord } from './support';\n\ntype WethCalldataParts = {\n functionName: 'deposit' | 'withdraw';\n calldata: string;\n userProvidedData: string;\n strategyProvidedData: string;\n value: string;\n};\n\ntype HypovaultWethInnerCall = {\n functionName: 'deposit' | 'withdraw';\n target: string;\n data: string;\n value: string;\n};\n\nconst WETH_DEPOSIT_SELECTOR = '0xd0e30db0';\nconst WETH_WITHDRAW_SELECTOR = '0x2e1a7d4d';\n\nfunction depositCalldataParts({ request, method }: Parameters<PanopticHandler>[0]): WethCalldataParts {\n const input = parseAmountRequest(request, method);\n\n return {\n functionName: 'deposit',\n calldata: WETH_DEPOSIT_SELECTOR,\n userProvidedData: WETH_DEPOSIT_SELECTOR,\n strategyProvidedData: '0x',\n value: input.amount.toString(10),\n };\n}\n\nfunction withdrawCalldataParts({ request, method }: Parameters<PanopticHandler>[0]): WethCalldataParts {\n const input = parseAmountRequest(request, method);\n const strategyProvidedData = `0x${uint256AbiWord(input.amount)}`;\n\n return {\n functionName: 'withdraw',\n calldata: `${WETH_WITHDRAW_SELECTOR}${strategyProvidedData.slice(2)}`,\n userProvidedData: WETH_WITHDRAW_SELECTOR,\n strategyProvidedData,\n value: '0',\n };\n}\n\nfunction hypovaultWethDepositInnerCall({ request, method }: Parameters<PanopticHandler>[0]): HypovaultWethInnerCall {\n const input = parseWethTargetAmountRequest(request, method);\n\n return {\n functionName: 'deposit',\n target: input.weth,\n data: WETH_DEPOSIT_SELECTOR,\n value: input.amount.toString(10),\n };\n}\n\nfunction hypovaultWethWithdrawInnerCall({ request, method }: Parameters<PanopticHandler>[0]): HypovaultWethInnerCall {\n const input = parseWethTargetAmountRequest(request, method);\n const data = `${WETH_WITHDRAW_SELECTOR}${uint256AbiWord(input.amount)}`;\n\n return {\n functionName: 'withdraw',\n target: input.weth,\n data,\n value: '0',\n };\n}\n\nfunction parseAmountRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['amount'], method);\n\n return { amount: uint256Arg(args, 'amount') };\n}\n\nfunction parseWethTargetAmountRequest(request: PanopticCallRequest, method: string) {\n rejectContext(request, method);\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['weth', 'amount'], method);\n\n return {\n weth: normalizePanopticAddress(args.weth, `${method} args.weth`),\n amount: uint256Arg(args, 'amount'),\n };\n}\n\nexport { depositCalldataParts, hypovaultWethDepositInnerCall, hypovaultWethWithdrawInnerCall, withdrawCalldataParts };\n","import type { PanopticHandler } from '../handlers';\nimport { requestArgs, type PanopticCallRequest } from '../protocol';\nimport { rejectExtraKeys } from '../support';\nimport { validateDynamicJobFragment, type DynamicJobFragment } from './fragments';\n\ntype RenderExecuteJobParsed = {\n fragments: DynamicJobFragment[];\n};\n\ntype DynamicJobExecutePayload = {\n functionName: 'executeJob(address[],bytes[],bytes[])';\n typesArray: string[];\n valuesArray: string[][];\n};\n\nfunction renderExecuteJob({ request, method }: Parameters<PanopticHandler>[0]): DynamicJobExecutePayload {\n const { fragments } = parseRenderExecuteJobRequest(request, method);\n\n return {\n functionName: 'executeJob(address[],bytes[],bytes[])',\n typesArray: ['address[]', 'bytes[]', 'bytes[]'],\n valuesArray: [\n fragments.map((fragment) => fragment.target),\n fragments.map((fragment) => fragment.userProvidedData),\n fragments.map((fragment) => fragment.strategyProvidedData),\n ],\n };\n}\n\nfunction parseRenderExecuteJobRequest(request: PanopticCallRequest, method: string): RenderExecuteJobParsed {\n const args = requestArgs(request, method);\n rejectExtraKeys(args, ['fragments'], method);\n\n if (!Array.isArray(args.fragments)) {\n throw new Error(`Panoptic ${method} args.fragments must be an array.`);\n }\n\n if (args.fragments.length === 0) {\n throw new Error(`Panoptic ${method} args.fragments must include at least one fragment.`);\n }\n\n if (args.fragments.length > 64) {\n throw new Error(`Panoptic ${method} args.fragments exceeds maximum array length 64.`);\n }\n\n return {\n fragments: args.fragments.map((fragment, index) =>\n validateDynamicJobFragment(fragment, `${method} args.fragments[${index}]`),\n ),\n };\n}\n\nexport { renderExecuteJob };\n","import { projectPanopticSerializableValue } from '../panopticSerialization';\nimport type { PanopticRuntimeOptions } from '../../panoptic';\nimport type { PanopticOperationOptions } from '../panopticSources';\nimport { runPanopticOperation } from '../panopticSources';\nimport type { PanopticDependencies } from './deps';\nimport { panopticSuccess, type PanopticCallRequest, type PanopticCallResponse } from './protocol';\nimport {\n getAccountCollateral,\n getAccountSummaryBasic,\n getAccountSummaryRisk,\n getLiquidationPrices,\n getNetLiquidationValue,\n getNetLiquidationValues,\n getOpenPositionIds as getAccountOpenPositionIds,\n getPosition,\n getPositions,\n} from './reads/account';\nimport { calculateAccountGreeksPure, calculatePositionGreeks, getPositionGreeks } from './reads/greeks';\nimport {\n buildVaultManagerInputAtBlock,\n getEpochContext,\n getOpenPositionIds as getHypovaultOpenPositionIds,\n getPositionsHashStatus,\n verifyVaultOpenTokenIdsAtBlock,\n} from './reads/hypovault';\nimport {\n fetchPoolId,\n getOracleState,\n getPool,\n getPoolMetadata,\n getPricesAtTick,\n getRiskParameters,\n getTickSpacing,\n getUtilization,\n} from './reads/pool';\nimport {\n checkRouterApproval,\n quoteSwapExactInViaRouter,\n quoteSwapExactOutViaRouter,\n resolveSwapRoute,\n} from './reads/uniswap';\nimport { approveFragment as erc20ApproveFragment } from './fragments/erc20';\nimport {\n depositFragment as collateralDepositFragment,\n withdrawFragment as collateralWithdrawFragment,\n withdrawWithPositionsFragment as collateralWithdrawWithPositionsFragment,\n} from './fragments/collateral';\nimport {\n fulfillDepositsFragment,\n fulfillWithdrawalsFragment,\n manageCalldataParts,\n manageFragment,\n} from './fragments/hypovault';\nimport { buildManageArgs, findLeaf, manageVaultWithVerificationFragment } from './fragments/merkle';\nimport {\n dispatchCalldataParts,\n dispatchExplicitCalldataParts,\n dispatchExplicitFragment,\n dispatchFragment,\n} from './fragments/panoptic';\nimport { approveFragment as permit2ApproveFragment } from './fragments/permit2';\nimport { buildV3ExactInExecuteCalldataParts, buildV3ExactInExecuteFragment } from './fragments/uniswap';\nimport {\n depositCalldataParts as wethDepositCalldataParts,\n hypovaultWethDepositInnerCall,\n hypovaultWethWithdrawInnerCall,\n withdrawCalldataParts as wethWithdrawCalldataParts,\n} from './fragments/weth';\nimport { renderExecuteJob } from './dynamicJobs/renderExecuteJob';\n\ntype PanopticHandlerContext = {\n deps: PanopticDependencies;\n method: string;\n request: PanopticCallRequest;\n options: PanopticRuntimeOptions;\n operationOptions?: PanopticOperationOptions;\n};\n\ntype PanopticHandler = (context: PanopticHandlerContext) => Promise<unknown> | unknown;\n\ntype ExecutePanopticHandlerInput = {\n method: string;\n handler: PanopticHandler;\n request: PanopticCallRequest;\n deps: PanopticDependencies;\n options?: PanopticRuntimeOptions;\n operationOptions?: PanopticOperationOptions;\n responseLimits?: Parameters<typeof projectPanopticSerializableValue>[1];\n};\n\nconst RPC_HANDLERS: Record<string, PanopticHandler> = Object.freeze({\n 'account.getAccountCollateral': getAccountCollateral,\n 'account.getAccountSummaryBasic': getAccountSummaryBasic,\n 'account.getAccountSummaryRisk': getAccountSummaryRisk,\n 'account.getLiquidationPrices': getLiquidationPrices,\n 'account.getNetLiquidationValue': getNetLiquidationValue,\n 'account.getNetLiquidationValues': getNetLiquidationValues,\n 'account.getOpenPositionIds': getAccountOpenPositionIds,\n 'account.getPosition': getPosition,\n 'account.getPositions': getPositions,\n 'greeks.getPositionGreeks': getPositionGreeks,\n 'hypovault.buildVaultManagerInputAtBlock': buildVaultManagerInputAtBlock,\n 'hypovault.getEpochContext': getEpochContext,\n 'hypovault.getOpenPositionIds': getHypovaultOpenPositionIds,\n 'hypovault.getPositionsHashStatus': getPositionsHashStatus,\n 'hypovault.verifyVaultOpenTokenIdsAtBlock': verifyVaultOpenTokenIdsAtBlock,\n 'pool.fetchPoolId': fetchPoolId,\n 'pool.getOracleState': getOracleState,\n 'pool.getPool': getPool,\n 'pool.getPoolMetadata': getPoolMetadata,\n 'pool.getRiskParameters': getRiskParameters,\n 'pool.getUtilization': getUtilization,\n 'uniswap.checkRouterApproval': checkRouterApproval,\n 'uniswap.quoteSwapExactInViaRouter': quoteSwapExactInViaRouter,\n 'uniswap.quoteSwapExactOutViaRouter': quoteSwapExactOutViaRouter,\n 'uniswap.resolveSwapRoute': resolveSwapRoute,\n});\n\nconst LOCAL_HANDLERS: Record<string, PanopticHandler> = Object.freeze({\n 'collateral.depositFragment': collateralDepositFragment,\n 'collateral.withdrawFragment': collateralWithdrawFragment,\n 'collateral.withdrawWithPositionsFragment': collateralWithdrawWithPositionsFragment,\n 'dynamicJobs.renderExecuteJob': renderExecuteJob,\n 'erc20.approveFragment': erc20ApproveFragment,\n 'greeks.calculateAccountGreeksPure': calculateAccountGreeksPure,\n 'greeks.calculatePositionGreeks': calculatePositionGreeks,\n 'hypovault.fulfillDepositsFragment': fulfillDepositsFragment,\n 'hypovault.fulfillWithdrawalsFragment': fulfillWithdrawalsFragment,\n 'hypovault.manageCalldataParts': manageCalldataParts,\n 'hypovault.manageFragment': manageFragment,\n 'hypovault.wethDepositInnerCall': hypovaultWethDepositInnerCall,\n 'hypovault.wethWithdrawInnerCall': hypovaultWethWithdrawInnerCall,\n 'merkle.buildManageArgs': buildManageArgs,\n 'merkle.findLeaf': findLeaf,\n 'merkle.manageVaultWithVerificationFragment': manageVaultWithVerificationFragment,\n 'panoptic.dispatchCalldataParts': dispatchCalldataParts,\n 'panoptic.dispatchExplicitCalldataParts': dispatchExplicitCalldataParts,\n 'panoptic.dispatchExplicitFragment': dispatchExplicitFragment,\n 'panoptic.dispatchFragment': dispatchFragment,\n 'permit2.approveFragment': permit2ApproveFragment,\n 'pool.getPricesAtTick': getPricesAtTick,\n 'pool.getTickSpacing': getTickSpacing,\n 'uniswap.buildV3ExactInExecuteCalldataParts': buildV3ExactInExecuteCalldataParts,\n 'uniswap.buildV3ExactInExecuteFragment': buildV3ExactInExecuteFragment,\n 'weth.depositCalldataParts': wethDepositCalldataParts,\n 'weth.withdrawCalldataParts': wethWithdrawCalldataParts,\n});\n\nconst HANDLERS: Record<string, PanopticHandler> = Object.freeze({\n ...RPC_HANDLERS,\n ...LOCAL_HANDLERS,\n});\n\nconst STABLE_PANOPTIC_METHOD_NAMES = Object.freeze(Object.keys(HANDLERS).sort());\n\nfunction getPanopticHandler(method: string): PanopticHandler | undefined {\n return Object.prototype.hasOwnProperty.call(HANDLERS, method) ? HANDLERS[method] : undefined;\n}\n\nfunction getPanopticHandlerNames(): string[] {\n return [...STABLE_PANOPTIC_METHOD_NAMES].sort();\n}\n\nasync function executePanopticHandler(input: ExecutePanopticHandlerInput): Promise<PanopticCallResponse> {\n const runHandler = () =>\n Promise.resolve(\n input.handler({\n deps: input.deps,\n method: input.method,\n request: input.request,\n options: input.options || {},\n operationOptions: input.operationOptions,\n }),\n );\n const rawResult = Object.prototype.hasOwnProperty.call(RPC_HANDLERS, input.method)\n ? await runPanopticOperation(`Panoptic handler ${input.method}`, runHandler, input.operationOptions)\n : await runHandler();\n const result = projectPanopticSerializableValue(rawResult, input.responseLimits, `${input.method} result`);\n\n return panopticSuccess(result);\n}\n\nexport { executePanopticHandler, getPanopticHandler, getPanopticHandlerNames };\nexport type { PanopticHandler };\n","import type { PanopticRuntimeOptions } from '../panoptic';\nimport type { PanopticCallRequest, PanopticCallResponse } from './panopticHostEnvelope';\nimport {\n PANOPTIC_MODULE_SPECIFIERS,\n __resetPanopticRuntimeForTests,\n __setPanopticRuntimeImportForTests,\n createPanopticDependencies,\n loadPanopticModule,\n type RuntimeImport,\n} from './panoptic/deps';\nimport { executePanopticHandler, getPanopticHandler, getPanopticHandlerNames } from './panoptic/handlers';\nconst PANOPTIC_RUNTIME_METHOD_NAMES = Object.freeze(getPanopticHandlerNames());\nconst RENAMED_METHODS = new Map([\n ['dynamicJobs.renderRegisteredExecuteJob', 'dynamicJobs.renderExecuteJob'],\n ['hypovault.encodeFulfillDeposits', 'hypovault.fulfillDepositsFragment'],\n ['hypovault.encodeFulfillWithdrawals', 'hypovault.fulfillWithdrawalsFragment'],\n ['router.checkApproval', 'uniswap.checkRouterApproval'],\n ['panoptic.dispatchArgs', 'panoptic.dispatchCalldataParts'],\n]);\nconst UNSUPPORTED_PLANNED_METHODS = new Map<string, string>([\n ['greeks.getAccountGreeks', 'requires a serializable storage snapshot DTO'],\n ['hypovault.resolveVaultHistoricalCandidatesByPool', 'requires host-owned subgraph paging and reconciliation policy'],\n ['merkle.encodeManageVaultWithMerkleVerification', 'requires Merkle artifact provenance and nested target policy'],\n]);\n\nfor (const method of PANOPTIC_RUNTIME_METHOD_NAMES) {\n if (!getPanopticHandler(method)) {\n throw new Error(`Panoptic stable runtime method is not backed by a handler: ${method}`);\n }\n}\n\n/**\n * Node/root Panoptic adapter skeleton. Source/client context is prepared before\n * method implementations land in later phases.\n */\nasync function callNodePanoptic(\n method: string,\n request: PanopticCallRequest,\n options: PanopticRuntimeOptions = {},\n): Promise<PanopticCallResponse> {\n const handler = getPanopticHandler(method);\n\n if (handler) {\n return executePanopticHandler({\n method,\n handler,\n request,\n deps: createPanopticDependencies(),\n options,\n operationOptions: options.operation,\n });\n }\n\n if (isLegacyCalldataMethod(method)) {\n throw new Error(\n `Panoptic runtime method is not part of the stable DynamicJobs RuntimeAdapter API: ${method}. Use protocol fragment namespaces instead.`,\n );\n }\n\n const renamedMethod = RENAMED_METHODS.get(method);\n if (renamedMethod) {\n throw new Error(\n `Panoptic runtime method has been renamed for the stable DynamicJobs RuntimeAdapter API: ${method}. Use ${renamedMethod}.`,\n );\n }\n\n const unsupportedReason = UNSUPPORTED_PLANNED_METHODS.get(method);\n if (unsupportedReason) {\n throw new Error(\n `Panoptic runtime method is not part of the stable DynamicJobs RuntimeAdapter API: ${method} (${unsupportedReason}).`,\n );\n }\n\n throw new Error(`Unsupported Panoptic runtime method: ${method}`);\n}\n\nfunction createNodePanopticAdapter(\n options: PanopticRuntimeOptions = {},\n): (method: string, request: PanopticCallRequest) => Promise<PanopticCallResponse> {\n return (method, request) => callNodePanoptic(method, request, options);\n}\n\nfunction isLegacyCalldataMethod(method: string): boolean {\n return method.startsWith('calldata.');\n}\n\nexport {\n PANOPTIC_MODULE_SPECIFIERS,\n PANOPTIC_RUNTIME_METHOD_NAMES,\n callNodePanoptic,\n createNodePanopticAdapter,\n loadPanopticModule,\n __resetPanopticRuntimeForTests,\n __setPanopticRuntimeImportForTests,\n};\nexport type { PanopticRuntimeOptions, RuntimeImport };\n"],"mappings":"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","names":["module","pointer","DEFAULT_MAX_REQUEST_BYTES","utf8ByteLength","DEFAULT_MAX_REQUEST_BYTES","isJsonObject","isRecord","isJsonObject","isJsonRecord","isRecord","signedDecimalValue","isRecord","isRecord","requireAccount","getOpenPositionIds","rejectLatestOnlyBlockNumber","requireAccount","requireArgString","isRecord","loadSdkFunction","rejectLatestOnlyBlockNumber","isRecord","rejectLatestOnlyBlockNumber","isRecord","rejectExtraKeys","isRecord","isJsonRecord","UINT128_MAX","INT24_MIN","INT24_MAX","poolAddress","optionalBooleanArg","approveFragment","parseApproveRequest","getOpenPositionIds","approveFragment","module","ccxt"]}
|