@inodra/sui 0.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/LICENSE +202 -0
- package/README.md +237 -0
- package/bin/inodra-sui.mjs +2 -0
- package/dist/chunk-3CBLVI6J.js +426 -0
- package/dist/chunk-3CBLVI6J.js.map +1 -0
- package/dist/chunk-4HKKW5QN.js +80 -0
- package/dist/chunk-4HKKW5QN.js.map +1 -0
- package/dist/chunk-74XGJJJI.js +33 -0
- package/dist/chunk-74XGJJJI.js.map +1 -0
- package/dist/chunk-D6FZYWG7.js +99 -0
- package/dist/chunk-D6FZYWG7.js.map +1 -0
- package/dist/chunk-LZZMTSLH.js +31 -0
- package/dist/chunk-LZZMTSLH.js.map +1 -0
- package/dist/chunk-M3M2L6BW.js +29 -0
- package/dist/chunk-M3M2L6BW.js.map +1 -0
- package/dist/chunk-NSXRC5XW.js +298 -0
- package/dist/chunk-NSXRC5XW.js.map +1 -0
- package/dist/chunk-OGMBYWTG.js +537 -0
- package/dist/chunk-OGMBYWTG.js.map +1 -0
- package/dist/chunk-U6D5LGNF.js +111 -0
- package/dist/chunk-U6D5LGNF.js.map +1 -0
- package/dist/chunk-ZSW3EWGF.js +539 -0
- package/dist/chunk-ZSW3EWGF.js.map +1 -0
- package/dist/cli.js +665 -0
- package/dist/cli.js.map +1 -0
- package/dist/events.cjs +3273 -0
- package/dist/events.cjs.map +1 -0
- package/dist/events.d.cts +47 -0
- package/dist/events.d.ts +47 -0
- package/dist/events.js +2578 -0
- package/dist/events.js.map +1 -0
- package/dist/graphql.cjs +129 -0
- package/dist/graphql.cjs.map +1 -0
- package/dist/graphql.d.cts +36 -0
- package/dist/graphql.d.ts +36 -0
- package/dist/graphql.js +10 -0
- package/dist/graphql.js.map +1 -0
- package/dist/grpc-web.cjs +129 -0
- package/dist/grpc-web.cjs.map +1 -0
- package/dist/grpc-web.d.cts +31 -0
- package/dist/grpc-web.d.ts +31 -0
- package/dist/grpc-web.js +10 -0
- package/dist/grpc-web.js.map +1 -0
- package/dist/grpc.cjs +131 -0
- package/dist/grpc.cjs.map +1 -0
- package/dist/grpc.d.cts +34 -0
- package/dist/grpc.d.ts +34 -0
- package/dist/grpc.js +10 -0
- package/dist/grpc.js.map +1 -0
- package/dist/index-CGBN_EI5.d.ts +4800 -0
- package/dist/index-CVO2Kj8a.d.cts +4800 -0
- package/dist/index.cjs +4723 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +504 -0
- package/dist/index.d.ts +504 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/manage.cjs +376 -0
- package/dist/manage.cjs.map +1 -0
- package/dist/manage.d.cts +2 -0
- package/dist/manage.d.ts +2 -0
- package/dist/manage.js +8 -0
- package/dist/manage.js.map +1 -0
- package/dist/network-CEg2MJY3.d.cts +60 -0
- package/dist/network-CEg2MJY3.d.ts +60 -0
- package/dist/node.cjs +4759 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.cts +28 -0
- package/dist/node.d.ts +28 -0
- package/dist/node.js +73 -0
- package/dist/node.js.map +1 -0
- package/dist/reflection-Bx44-Fs1.d.ts +4639 -0
- package/dist/reflection-Cf7WFH6H.d.cts +4639 -0
- package/dist/reflection-FEGYA7DU.js +9 -0
- package/dist/reflection-FEGYA7DU.js.map +1 -0
- package/dist/runtime-OWKF3LZ7.js +37 -0
- package/dist/runtime-OWKF3LZ7.js.map +1 -0
- package/dist/warp.cjs +633 -0
- package/dist/warp.cjs.map +1 -0
- package/dist/warp.d.cts +195 -0
- package/dist/warp.d.ts +195 -0
- package/dist/warp.js +12 -0
- package/dist/warp.js.map +1 -0
- package/dist/webhooks.cjs +104 -0
- package/dist/webhooks.cjs.map +1 -0
- package/dist/webhooks.d.cts +35 -0
- package/dist/webhooks.d.ts +35 -0
- package/dist/webhooks.js +7 -0
- package/dist/webhooks.js.map +1 -0
- package/llms.txt +189 -0
- package/package.json +119 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/events/move-types.ts","../src/events/runtime.ts","../src/core/auth.ts","../src/core/network.ts","../src/core/version.ts","../src/events/reflection.ts"],"sourcesContent":["/**\n * inodra-sui — SDK companion CLI.\n *\n * inodra-sui codegen-events <moveEventType...> [options]\n *\n * Generates static zod schemas + TypeScript types for YOUR Move event types\n * (anything not in the curated catalog) by reflecting struct layouts\n * on-chain — the build-time counterpart of `inodra.events.schemaFor()`.\n *\n * Options:\n * -o, --out <file> Write to a file (default: stdout)\n * --network <net> mainnet | testnet (default: mainnet)\n * --url <graphql-url> GraphQL endpoint override\n * --import-from <spec> Import specifier for SDK primitives\n * (default: \"@inodra/sui/events\")\n *\n * Endpoint resolution: --url wins; else Inodra's gateway when\n * INODRA_API_KEY is set; else the public Sui GraphQL for the network.\n *\n * Example:\n * INODRA_API_KEY=... inodra-sui codegen-events \\\n * \"0xpkg::vault::Deposit<0x2::sui::SUI>\" -o src/vault-events.gen.ts\n */\nimport { writeFileSync } from \"node:fs\";\nimport type { InodraNetwork } from \"./core/network.js\";\nimport {\n\tformatMoveType,\n\tparseMoveType,\n\ttype SchemaShape,\n\tshapeToExpr,\n} from \"./events/move-types.js\";\nimport { EventSchemaReflector } from \"./events/reflection.js\";\nimport { SDK_VERSION } from \"./core/version.js\";\n\nfunction fail(message: string): never {\n\tconsole.error(`inodra-sui: ${message}`);\n\tprocess.exit(1);\n}\n\nfunction pascal(value: string): string {\n\tconst name = value\n\t\t.split(/[^a-zA-Z0-9]+/)\n\t\t.filter(Boolean)\n\t\t.map((part) => (part[0]?.toUpperCase() ?? \"\") + part.slice(1))\n\t\t.join(\"\");\n\treturn /^[0-9]/.test(name) ? `_${name}` : name;\n}\n\ninterface Args {\n\ttypes: string[];\n\tout?: string;\n\tnetwork: InodraNetwork;\n\turl?: string;\n\timportFrom: string;\n}\n\nfunction parseArgs(argv: string[]): Args {\n\tconst args: Args = {\n\t\ttypes: [],\n\t\tnetwork: \"mainnet\",\n\t\timportFrom: \"@inodra/sui/events\",\n\t};\n\tfor (let i = 0; i < argv.length; i++) {\n\t\tconst arg = argv[i] as string;\n\t\tswitch (arg) {\n\t\t\tcase \"-o\":\n\t\t\tcase \"--out\":\n\t\t\t\targs.out = argv[++i];\n\t\t\t\tbreak;\n\t\t\tcase \"--network\":\n\t\t\t\targs.network = argv[++i] as InodraNetwork;\n\t\t\t\tbreak;\n\t\t\tcase \"--url\":\n\t\t\t\targs.url = argv[++i];\n\t\t\t\tbreak;\n\t\t\tcase \"--import-from\":\n\t\t\t\targs.importFrom = argv[++i] ?? args.importFrom;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\t\tfail(`unknown option ${arg}`);\n\t\t\t\t}\n\t\t\t\targs.types.push(arg);\n\t\t}\n\t}\n\treturn args;\n}\n\nasync function codegenEvents(args: Args): Promise<void> {\n\tif (args.types.length === 0) {\n\t\tfail(\"pass at least one Move event type\");\n\t}\n\tconst apiKey = process.env.INODRA_API_KEY;\n\tconst url =\n\t\targs.url ??\n\t\t(apiKey ? undefined : `https://graphql.${args.network}.sui.io/graphql`);\n\tconst reflector = new EventSchemaReflector({\n\t\t...(apiKey && !args.url ? { apiKey } : {}),\n\t\tnetwork: args.network,\n\t\turl,\n\t});\n\n\tconst used = new Set<string>();\n\tconst blocks: string[] = [];\n\tconst mapEntries: string[] = [];\n\tconst seenNames = new Map<string, number>();\n\n\tfor (const rawType of args.types) {\n\t\tconst node = parseMoveType(rawType);\n\t\tif (node.kind !== \"struct\") {\n\t\t\tfail(`${rawType} is not a struct event type`);\n\t\t}\n\t\tconst canonical = formatMoveType(node);\n\t\tlet shape: SchemaShape;\n\t\ttry {\n\t\t\tshape = await reflector.shapeFor(canonical);\n\t\t} catch (error) {\n\t\t\tfail(`reflection failed for ${canonical}: ${(error as Error).message}`);\n\t\t}\n\t\tif (shape.kind !== \"object\") {\n\t\t\tfail(`${canonical} did not resolve to a struct on ${args.network}`);\n\t\t}\n\n\t\tlet name = pascal(`${node.module} ${node.name}`);\n\t\tconst clashes = seenNames.get(name) ?? 0;\n\t\tseenNames.set(name, clashes + 1);\n\t\tif (clashes > 0) {\n\t\t\tname = `${name}${clashes + 1}`;\n\t\t}\n\n\t\tblocks.push(\n\t\t\t[\n\t\t\t\t`/** ${canonical} */`,\n\t\t\t\t`export const ${name}Schema = ${shapeToExpr(shape, used)};`,\n\t\t\t\t`export type ${name}Event = z.infer<typeof ${name}Schema>;`,\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t\tmapEntries.push(`\\t${JSON.stringify(canonical)}: ${name}Schema,`);\n\t}\n\n\tconst primitiveImports =\n\t\tused.size > 0\n\t\t\t? `import {\\n\\t${[...used].sort().join(\",\\n\\t\")},\\n} from ${JSON.stringify(args.importFrom)};\\n`\n\t\t\t: \"\";\n\n\tconst source = `// Generated by inodra-sui v${SDK_VERSION} (codegen-events). DO NOT EDIT.\n// Regenerate: inodra-sui codegen-events ${args.types.map((t) => JSON.stringify(t)).join(\" \")}${args.out ? ` -o ${args.out}` : \"\"}\nimport { z } from \"zod\";\n${primitiveImports}\n${blocks.join(\"\\n\\n\")}\n\n/** Reflected schemas keyed by canonical Move event type. */\nexport const reflectedEventSchemas = {\n${mapEntries.join(\"\\n\")}\n} as const;\n`;\n\n\tif (args.out) {\n\t\twriteFileSync(args.out, source);\n\t\tconsole.error(\n\t\t\t`inodra-sui: wrote ${args.out} (${args.types.length} event type(s))`,\n\t\t);\n\t} else {\n\t\tprocess.stdout.write(source);\n\t}\n}\n\nconst [command, ...rest] = process.argv.slice(2);\nswitch (command) {\n\tcase \"codegen-events\":\n\t\tawait codegenEvents(parseArgs(rest));\n\t\tbreak;\n\tcase undefined:\n\tcase \"help\":\n\tcase \"--help\":\n\t\tconsole.log(\n\t\t\t\"Usage: inodra-sui codegen-events <moveEventType...> [-o out.ts] [--network mainnet|testnet] [--url <graphql>] [--import-from <spec>]\",\n\t\t);\n\t\tbreak;\n\tdefault:\n\t\tfail(`unknown command ${command} — try: inodra-sui help`);\n}\n","/**\n * Move type-string parsing and the shared Move→schema mapping used by both\n * runtime reflection (build zod schemas for arbitrary events on the fly) and\n * the codegen CLI (emit source for them).\n *\n * Encoding rules match the generated catalog schemas — see runtime.ts.\n */\nimport { z } from \"zod\";\nimport {\n\tmoveAddress,\n\tmoveBalance,\n\tmoveBool,\n\tmoveBytes,\n\tmoveSmallUint,\n\tmoveString,\n\tmoveTypeName,\n\tmoveUint,\n} from \"./runtime.js\";\n\n// ---------------------------------------------------------------------------\n// Parsing\n// ---------------------------------------------------------------------------\n\nexport type MoveTypeNode =\n\t| { kind: \"prim\"; prim: string }\n\t| { kind: \"vector\"; inner: MoveTypeNode }\n\t| {\n\t\t\tkind: \"struct\";\n\t\t\taddress: string;\n\t\t\tmodule: string;\n\t\t\tname: string;\n\t\t\targs: MoveTypeNode[];\n\t }\n\t/** `$0`-style placeholder in a struct definition (GraphQL OpenMoveType). */\n\t| { kind: \"param\"; index: number }\n\t/** Anything unparseable (bare `T` in hand-written data, malformed input). */\n\t| { kind: \"opaque\"; raw: string };\n\nconst PRIMITIVES = new Set([\n\t\"u8\",\n\t\"u16\",\n\t\"u32\",\n\t\"u64\",\n\t\"u128\",\n\t\"u256\",\n\t\"bool\",\n\t\"address\",\n\t\"signer\",\n]);\n\n/** Split `a, b<c, d>, e` at top-level commas. */\nfunction splitArgs(inner: string): string[] {\n\tconst parts: string[] = [];\n\tlet depth = 0;\n\tlet current = \"\";\n\tfor (const char of inner) {\n\t\tif (char === \"<\") depth++;\n\t\tif (char === \">\") depth--;\n\t\tif (char === \",\" && depth === 0) {\n\t\t\tparts.push(current.trim());\n\t\t\tcurrent = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent += char;\n\t}\n\tif (current.trim()) parts.push(current.trim());\n\treturn parts;\n}\n\nexport function parseMoveType(input: string): MoveTypeNode {\n\tconst type = input.trim();\n\tif (PRIMITIVES.has(type)) {\n\t\treturn { kind: \"prim\", prim: type };\n\t}\n\tif (type.startsWith(\"vector<\") && type.endsWith(\">\")) {\n\t\treturn { kind: \"vector\", inner: parseMoveType(type.slice(7, -1)) };\n\t}\n\tconst param = /^\\$(\\d+)$/.exec(type);\n\tif (param) {\n\t\treturn { kind: \"param\", index: Number(param[1]) };\n\t}\n\tconst generic = type.indexOf(\"<\");\n\tconst base = generic === -1 ? type : type.slice(0, generic);\n\tconst args =\n\t\tgeneric === -1 || !type.endsWith(\">\")\n\t\t\t? []\n\t\t\t: splitArgs(type.slice(generic + 1, -1)).map(parseMoveType);\n\tconst [address, module, name, ...rest] = base.split(\"::\");\n\tif (address?.startsWith(\"0x\") && module && name && rest.length === 0) {\n\t\treturn {\n\t\t\tkind: \"struct\",\n\t\t\taddress: normalizeAddress(address),\n\t\t\tmodule,\n\t\t\tname,\n\t\t\targs,\n\t\t};\n\t}\n\treturn { kind: \"opaque\", raw: type };\n}\n\n/** 0x000…002 → 0x2 */\nexport function normalizeAddress(address: string): string {\n\treturn address.replace(/^0x0+(?=[0-9a-fA-F])/, \"0x\");\n}\n\nexport function formatMoveType(node: MoveTypeNode): string {\n\tswitch (node.kind) {\n\t\tcase \"prim\":\n\t\t\treturn node.prim;\n\t\tcase \"vector\":\n\t\t\treturn `vector<${formatMoveType(node.inner)}>`;\n\t\tcase \"param\":\n\t\t\treturn `$${node.index}`;\n\t\tcase \"opaque\":\n\t\t\treturn node.raw;\n\t\tcase \"struct\": {\n\t\t\tconst base = `${node.address}::${node.module}::${node.name}`;\n\t\t\treturn node.args.length === 0\n\t\t\t\t? base\n\t\t\t\t: `${base}<${node.args.map(formatMoveType).join(\", \")}>`;\n\t\t}\n\t}\n}\n\n/** Replace `$n` placeholders with the instantiation's concrete type args. */\nexport function substituteTypeParams(\n\tnode: MoveTypeNode,\n\targs: MoveTypeNode[],\n): MoveTypeNode {\n\tswitch (node.kind) {\n\t\tcase \"param\":\n\t\t\treturn args[node.index] ?? node;\n\t\tcase \"vector\":\n\t\t\treturn { kind: \"vector\", inner: substituteTypeParams(node.inner, args) };\n\t\tcase \"struct\":\n\t\t\treturn {\n\t\t\t\t...node,\n\t\t\t\targs: node.args.map((a) => substituteTypeParams(a, args)),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn node;\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Schema shapes — the resolved, encoding-aware intermediate form\n// ---------------------------------------------------------------------------\n\nexport type SchemaShape =\n\t| { kind: \"smallUint\" }\n\t| { kind: \"uint\" }\n\t| { kind: \"bool\" }\n\t| { kind: \"address\" }\n\t| { kind: \"string\" }\n\t| { kind: \"typeName\" }\n\t| { kind: \"balance\" }\n\t| { kind: \"bytes\" }\n\t| { kind: \"option\"; inner: SchemaShape }\n\t| { kind: \"vector\"; inner: SchemaShape }\n\t| { kind: \"object\"; fields: { name: string; value: SchemaShape }[] }\n\t| { kind: \"unknown\" };\n\nexport interface StructField {\n\tname: string;\n\t/** Field type as written in the struct definition (may contain `$n`). */\n\ttype: MoveTypeNode;\n}\n\n/** Fetches the field layout of a struct definition (no type args applied). */\nexport type StructResolver = (struct: {\n\taddress: string;\n\tmodule: string;\n\tname: string;\n}) => Promise<StructField[] | undefined>;\n\nconst MAX_DEPTH = 6;\n\n/**\n * Resolve a concrete Move type into a SchemaShape, recursing into nested\n * user structs via `resolveStruct`. Depth-capped and cycle-guarded — anything\n * beyond becomes `unknown` (schemas are loose, so this stays safe).\n */\nexport async function resolveShape(\n\tnode: MoveTypeNode,\n\tresolveStruct: StructResolver,\n\tdepth = 0,\n\tstack: string[] = [],\n): Promise<SchemaShape> {\n\tswitch (node.kind) {\n\t\tcase \"prim\":\n\t\t\tswitch (node.prim) {\n\t\t\t\tcase \"u8\":\n\t\t\t\tcase \"u16\":\n\t\t\t\tcase \"u32\":\n\t\t\t\t\treturn { kind: \"smallUint\" };\n\t\t\t\tcase \"u64\":\n\t\t\t\tcase \"u128\":\n\t\t\t\tcase \"u256\":\n\t\t\t\t\treturn { kind: \"uint\" };\n\t\t\t\tcase \"bool\":\n\t\t\t\t\treturn { kind: \"bool\" };\n\t\t\t\tcase \"address\":\n\t\t\t\tcase \"signer\":\n\t\t\t\t\treturn { kind: \"address\" };\n\t\t\t\tdefault:\n\t\t\t\t\treturn { kind: \"unknown\" };\n\t\t\t}\n\t\tcase \"vector\":\n\t\t\tif (node.inner.kind === \"prim\" && node.inner.prim === \"u8\") {\n\t\t\t\treturn { kind: \"bytes\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"vector\",\n\t\t\t\tinner: await resolveShape(node.inner, resolveStruct, depth, stack),\n\t\t\t};\n\t\tcase \"param\":\n\t\tcase \"opaque\":\n\t\t\treturn { kind: \"unknown\" };\n\t\tcase \"struct\": {\n\t\t\tconst base = `${node.address}::${node.module}::${node.name}`;\n\t\t\tswitch (base) {\n\t\t\t\tcase \"0x1::string::String\":\n\t\t\t\tcase \"0x1::ascii::String\":\n\t\t\t\tcase \"0x2::url::Url\":\n\t\t\t\t\treturn { kind: \"string\" };\n\t\t\t\tcase \"0x1::type_name::TypeName\":\n\t\t\t\t\treturn { kind: \"typeName\" };\n\t\t\t\tcase \"0x2::object::ID\":\n\t\t\t\t\treturn { kind: \"address\" };\n\t\t\t\tcase \"0x2::balance::Balance\":\n\t\t\t\t\treturn { kind: \"balance\" };\n\t\t\t\tcase \"0x1::option::Option\": {\n\t\t\t\t\tconst inner = node.args[0];\n\t\t\t\t\tif (node.args.length === 1 && inner) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkind: \"option\",\n\t\t\t\t\t\t\tinner: await resolveShape(inner, resolveStruct, depth, stack),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"unknown\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst key = formatMoveType(node);\n\t\t\tif (depth >= MAX_DEPTH || stack.includes(key)) {\n\t\t\t\treturn { kind: \"unknown\" };\n\t\t\t}\n\t\t\tconst definition = await resolveStruct(node);\n\t\t\tif (!definition) {\n\t\t\t\treturn { kind: \"unknown\" };\n\t\t\t}\n\t\t\tconst fields = await Promise.all(\n\t\t\t\tdefinition.map(async (field) => ({\n\t\t\t\t\tname: field.name,\n\t\t\t\t\tvalue: await resolveShape(\n\t\t\t\t\t\tsubstituteTypeParams(field.type, node.args),\n\t\t\t\t\t\tresolveStruct,\n\t\t\t\t\t\tdepth + 1,\n\t\t\t\t\t\t[...stack, key],\n\t\t\t\t\t),\n\t\t\t\t})),\n\t\t\t);\n\t\t\treturn { kind: \"object\", fields };\n\t\t}\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Consumers: runtime zod builder + codegen expression emitter\n// ---------------------------------------------------------------------------\n\nexport function shapeToZod(shape: SchemaShape): z.ZodTypeAny {\n\tswitch (shape.kind) {\n\t\tcase \"smallUint\":\n\t\t\treturn moveSmallUint;\n\t\tcase \"uint\":\n\t\t\treturn moveUint;\n\t\tcase \"bool\":\n\t\t\treturn moveBool;\n\t\tcase \"address\":\n\t\t\treturn moveAddress;\n\t\tcase \"string\":\n\t\t\treturn moveString;\n\t\tcase \"typeName\":\n\t\t\treturn moveTypeName;\n\t\tcase \"balance\":\n\t\t\treturn moveBalance;\n\t\tcase \"bytes\":\n\t\t\treturn moveBytes;\n\t\tcase \"option\":\n\t\t\treturn shapeToZod(shape.inner).nullable();\n\t\tcase \"vector\":\n\t\t\treturn z.array(shapeToZod(shape.inner));\n\t\tcase \"object\":\n\t\t\treturn z.looseObject(\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tshape.fields.map((f) => [f.name, shapeToZod(f.value)]),\n\t\t\t\t),\n\t\t\t);\n\t\tcase \"unknown\":\n\t\t\treturn z.unknown();\n\t}\n}\n\nconst PRIMITIVE_EXPRS: Record<string, string> = {\n\tsmallUint: \"moveSmallUint\",\n\tuint: \"moveUint\",\n\tbool: \"moveBool\",\n\taddress: \"moveAddress\",\n\tstring: \"moveString\",\n\ttypeName: \"moveTypeName\",\n\tbalance: \"moveBalance\",\n\tbytes: \"moveBytes\",\n};\n\n/**\n * Emit a zod source expression for a shape (codegen CLI). `used` collects\n * the runtime primitive names the emitted code imports.\n */\nexport function shapeToExpr(\n\tshape: SchemaShape,\n\tused: Set<string>,\n\tindent = \"\",\n): string {\n\tconst primitive = PRIMITIVE_EXPRS[shape.kind];\n\tif (primitive) {\n\t\tused.add(primitive);\n\t\treturn primitive;\n\t}\n\tswitch (shape.kind) {\n\t\tcase \"option\":\n\t\t\treturn `${shapeToExpr(shape.inner, used, indent)}.nullable()`;\n\t\tcase \"vector\":\n\t\t\treturn `z.array(${shapeToExpr(shape.inner, used, indent)})`;\n\t\tcase \"object\": {\n\t\t\tconst lines = [\"z.looseObject({\"];\n\t\t\tfor (const field of shape.fields) {\n\t\t\t\tlines.push(\n\t\t\t\t\t`${indent}\\t${JSON.stringify(field.name)}: ${shapeToExpr(field.value, used, `${indent}\\t`)},`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlines.push(`${indent}})`);\n\t\t\treturn lines.join(\"\\n\");\n\t\t}\n\t\tdefault:\n\t\t\treturn \"z.unknown()\";\n\t}\n}\n","/**\n * Runtime pieces shared by the generated event schemas (`src/generated/events.ts`)\n * and the typed-event helpers: Move-primitive zod schemas and the Warp/webhook\n * delivery envelopes.\n *\n * Encoding notes — decoded Move event JSON as delivered by Inodra:\n * - u8/u16/u32 arrive as JSON numbers; u64/u128/u256 as strings (precision).\n * Some decode paths emit small u64s as numbers, so unsigned ints accept both\n * and normalize to string.\n * - `Option<T>` flattens to `T | null`.\n * - `TypeName` may arrive as `{ name: string }` or a bare string; normalized\n * to string.\n * - `Balance<T>` may arrive as `{ value: string }` or a bare string;\n * normalized to its value string.\n * - `vector<u8>` may arrive as a byte array or a base64/hex string.\n * All object schemas are loose: protocols add fields in package upgrades and\n * unknown keys must never make a consumer pipeline throw.\n */\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Move primitive schemas\n// ---------------------------------------------------------------------------\n\n/** u8 / u16 / u32 — safe as JSON numbers. */\nexport const moveSmallUint = z.number();\n\n/** u64 / u128 / u256 — normalized to decimal string. */\nexport const moveUint = z\n\t.union([z.string(), z.number()])\n\t.transform((value) => String(value));\n\nexport const moveBool = z.boolean();\n\n/** address / 0x2::object::ID — 0x-prefixed hex string. */\nexport const moveAddress = z.string();\n\n/** 0x1::string::String / 0x1::ascii::String */\nexport const moveString = z.string();\n\n/** 0x1::type_name::TypeName — normalized to the type string. */\nexport const moveTypeName = z\n\t.union([z.string(), z.looseObject({ name: z.string() })])\n\t.transform((value) => (typeof value === \"string\" ? value : value.name));\n\n/** 0x2::balance::Balance<T> — normalized to its u64 value string. */\nexport const moveBalance = z\n\t.union([\n\t\tz.string(),\n\t\tz.number(),\n\t\tz.looseObject({ value: z.union([z.string(), z.number()]) }),\n\t])\n\t.transform((value) =>\n\t\ttypeof value === \"object\" ? String(value.value) : String(value),\n\t);\n\n/** vector<u8> — byte array or base64/hex string, left as received. */\nexport const moveBytes = z.union([z.string(), z.array(z.number())]);\n\n// ---------------------------------------------------------------------------\n// Delivery envelopes (Warp SSE/WS + webhooks)\n// ---------------------------------------------------------------------------\n\n/** Move package event as delivered on Warp streams (`type: \"event\"`). */\nexport const warpEventPayloadSchema = z.looseObject({\n\tactivityType: z.literal(\"package_event\"),\n\ttxDigest: z.string(),\n\teventSequence: z.number(),\n\tcheckpoint: z.number(),\n\ttimestamp: z.number(),\n\t/** Full concrete Move event type. */\n\ttype: z.string(),\n\tsender: z.string(),\n\t/** Decoded Move event payload — type with the generated catalog schemas. */\n\tdata: z.unknown(),\n});\nexport type WarpEventPayload = z.infer<typeof warpEventPayloadSchema>;\n\n/** Address activity as delivered on Warp streams (`type: \"address\"`). */\nexport const warpAddressPayloadSchema = z.looseObject({\n\taddress: z.string(),\n\tactivityType: z.string(),\n\ttxDigest: z.string(),\n\tcheckpoint: z.number(),\n\ttimestamp: z.number(),\n\tobjectId: z.string().optional(),\n\tobjectType: z.string().optional(),\n});\nexport type WarpAddressPayload = z.infer<typeof warpAddressPayloadSchema>;\n\n/** Coin/balance change as delivered on Warp streams (`type: \"coin\"`). */\nexport const warpCoinPayloadSchema = z.looseObject({\n\tactivityType: z.literal(\"balance_change\"),\n\taddress: z.string(),\n\tcoin_type: z.string(),\n\t/** Signed amount, string for precision. */\n\tamount: z.string(),\n\ttxDigest: z.string(),\n\tcheckpoint: z.number(),\n\ttimestamp: z.number(),\n});\nexport type WarpCoinPayload = z.infer<typeof warpCoinPayloadSchema>;\n\n/** Object change as delivered on Warp streams (`type: \"object\"`). */\nexport const warpObjectPayloadSchema = z.looseObject({\n\tactivityType: z.literal(\"object_change\"),\n\tobject_id: z.string(),\n\ttransactionDirection: z.string(),\n\twriteKind: z.string(),\n\towner: z.string().optional(),\n\tpreviousOwner: z.string().optional(),\n\ttxDigest: z.string(),\n\tcheckpoint: z.number(),\n\ttimestamp: z.number(),\n});\nexport type WarpObjectPayload = z.infer<typeof warpObjectPayloadSchema>;\n\n/**\n * Webhook delivery body for event webhooks:\n * `{ payloadVersion: 1, payload: { webhookId, ...warp event payload } }`.\n */\nexport const webhookEventBodySchema = z.looseObject({\n\tpayloadVersion: z.number(),\n\tpayload: warpEventPayloadSchema.extend({ webhookId: z.string() }),\n});\nexport type WebhookEventBody = z.infer<typeof webhookEventBodySchema>;\n\n// ---------------------------------------------------------------------------\n// Event-type matching (mirrors the server's catalog matching)\n// ---------------------------------------------------------------------------\n\n/** Strip generic parameters: `a::b::C<...>` → `a::b::C`. */\nexport function baseEventType(eventType: string): string {\n\tconst idx = eventType.indexOf(\"<\");\n\treturn idx === -1 ? eventType : eventType.slice(0, idx);\n}\n\n/** Extract the inner type of a wrapped event: `Outer<Inner>` → `Inner`. */\nexport function innerEventType(eventType: string): string | undefined {\n\tconst start = eventType.indexOf(\"<\");\n\tif (start === -1 || !eventType.endsWith(\">\")) {\n\t\treturn undefined;\n\t}\n\treturn eventType.slice(start + 1, -1);\n}\n\n/** A concrete on-chain deployment of a catalog event. */\nexport interface CatalogDeployment {\n\tnetwork: string;\n\t/** Canonical event type (base form for generic events). */\n\teventType: string;\n\tprimary?: boolean;\n}\n\n/**\n * Whether a raw on-chain event type string matches a deployment.\n * Generic events are cataloged in base form and matched by base type;\n * everything else (including wrapped `Outer<Inner>` events) matches exactly.\n */\nexport function eventTypeMatches(\n\trawEventType: string,\n\tdeployment: CatalogDeployment,\n\tgeneric: boolean,\n): boolean {\n\tif (generic) {\n\t\treturn baseEventType(rawEventType) === deployment.eventType;\n\t}\n\treturn rawEventType === deployment.eventType;\n}\n","/**\n * Pluggable authentication for every Inodra transport.\n *\n * Most users pass an API key. The provider shape exists so future credential\n * types (x402 wallet session tokens, refreshing vault-issued keys) slot in\n * without changing any client constructor.\n */\n\nexport interface AuthCredentials {\n\t/** Sent as HTTP headers (REST, SSE, GraphQL) and gRPC metadata. */\n\theaders: Record<string, string>;\n\t/**\n\t * Sent as URL query parameters on transports that cannot carry headers\n\t * (WebSocket upgrades in browsers). Omit to disallow such transports.\n\t */\n\tqueryParams?: Record<string, string>;\n}\n\nexport type InodraAuth =\n\t| string\n\t| { apiKey: string }\n\t| { sessionToken: string }\n\t| {\n\t\t\tgetCredentials: () => AuthCredentials | Promise<AuthCredentials>;\n\t };\n\n/** Normalized auth handle used internally by every transport. */\nexport interface ResolvedAuth {\n\t/** Resolve credentials. Called per request on REST/SSE, per connect on WS. */\n\tcredentials(): Promise<AuthCredentials>;\n\t/**\n\t * Resolve credentials synchronously, or undefined for dynamic providers.\n\t * Used by clients whose underlying transport takes static headers\n\t * (gRPC, GraphQL).\n\t */\n\tstaticCredentials(): AuthCredentials | undefined;\n}\n\nexport function resolveAuth(auth: InodraAuth): ResolvedAuth {\n\tif (typeof auth === \"string\") {\n\t\treturn staticAuth(apiKeyCredentials(auth));\n\t}\n\tif (\"apiKey\" in auth) {\n\t\treturn staticAuth(apiKeyCredentials(auth.apiKey));\n\t}\n\tif (\"sessionToken\" in auth) {\n\t\treturn staticAuth({\n\t\t\theaders: { authorization: `Bearer ${auth.sessionToken}` },\n\t\t});\n\t}\n\treturn {\n\t\tcredentials: async () => auth.getCredentials(),\n\t\tstaticCredentials: () => undefined,\n\t};\n}\n\n/**\n * Resolve auth from an options bag that accepts both the modern `auth` field\n * and the original `apiKey` shorthand.\n */\nexport function authFromOptions(\n\toptions: { auth?: InodraAuth; apiKey?: string },\n\tcontext: string,\n): ResolvedAuth {\n\tif (options.auth !== undefined) {\n\t\treturn resolveAuth(options.auth);\n\t}\n\tif (options.apiKey) {\n\t\treturn resolveAuth(options.apiKey);\n\t}\n\tthrow new Error(`${context} requires auth (or the apiKey shorthand)`);\n}\n\n/**\n * Headers for clients whose transports take static headers (gRPC, GraphQL).\n * Dynamic providers are rejected: the underlying Mysten clients cannot\n * re-resolve credentials per call, so a snapshot would silently go stale.\n */\nexport function staticAuthHeaders(\n\toptions: { auth?: InodraAuth; apiKey?: string },\n\tcontext: string,\n): Record<string, string> {\n\tconst credentials = authFromOptions(options, context).staticCredentials();\n\tif (!credentials) {\n\t\tthrow new Error(\n\t\t\t`${context} does not support dynamic credential providers — pass an apiKey or sessionToken`,\n\t\t);\n\t}\n\treturn credentials.headers;\n}\n\nfunction apiKeyCredentials(apiKey: string): AuthCredentials {\n\tif (!apiKey) {\n\t\tthrow new Error(\"Inodra auth: apiKey must be a non-empty string\");\n\t}\n\treturn {\n\t\theaders: { \"x-api-key\": apiKey },\n\t\tqueryParams: { api_key: apiKey },\n\t};\n}\n\nfunction staticAuth(credentials: AuthCredentials): ResolvedAuth {\n\treturn {\n\t\tcredentials: async () => credentials,\n\t\tstaticCredentials: () => credentials,\n\t};\n}\n","export type InodraNetwork = \"mainnet\" | \"testnet\";\n\n/**\n * Canonical Inodra endpoints per network and protocol.\n */\nexport const INODRA_ENDPOINTS = {\n\tmainnet: {\n\t\trest: \"https://mainnet-api.inodra.com/v1\",\n\t\tgraphql: \"https://mainnet-api.inodra.com/v1/graphql\",\n\t\t/** host:port for native gRPC transports */\n\t\tgrpc: \"mainnet-grpc.inodra.com:443\",\n\t\t/** base URL for gRPC-Web transports */\n\t\tgrpcWeb: \"https://mainnet-grpc.inodra.com\",\n\t\twarpWs: \"wss://mainnet-api.inodra.com/v1\",\n\t},\n\ttestnet: {\n\t\trest: \"https://testnet-api.inodra.com/v1\",\n\t\tgraphql: \"https://testnet-api.inodra.com/v1/graphql\",\n\t\tgrpc: \"testnet-grpc.inodra.com:443\",\n\t\tgrpcWeb: \"https://testnet-grpc.inodra.com\",\n\t\twarpWs: \"wss://testnet-api.inodra.com/v1\",\n\t},\n} as const satisfies Record<\n\tInodraNetwork,\n\t{ rest: string; graphql: string; grpc: string; grpcWeb: string; warpWs: string }\n>;\n\nexport function restBaseUrl(network: InodraNetwork): string {\n\treturn INODRA_ENDPOINTS[network].rest;\n}\n\nexport function graphqlUrl(network: InodraNetwork): string {\n\treturn INODRA_ENDPOINTS[network].graphql;\n}\n\n/** Base URL for gRPC-Web / Connect transports. */\nexport function grpcBaseUrl(network: InodraNetwork): string {\n\treturn INODRA_ENDPOINTS[network].grpcWeb;\n}\n\n/** host:port for native gRPC transports. */\nexport function grpcHost(network: InodraNetwork): string {\n\treturn INODRA_ENDPOINTS[network].grpc;\n}\n\nexport function warpStreamUrl(\n\tnetwork: InodraNetwork,\n\tsubscriptionId: string,\n): string {\n\treturn `${INODRA_ENDPOINTS[network].rest}/warp/${subscriptionId}/stream`;\n}\n\nexport function warpWebSocketUrl(\n\tnetwork: InodraNetwork,\n\tsubscriptionId: string,\n): string {\n\treturn `${INODRA_ENDPOINTS[network].warpWs}/warp/${subscriptionId}/ws`;\n}\n","export const SDK_VERSION = \"0.1.0\";\n\n/**\n * Identifies the SDK to Inodra on every request, alongside the API key.\n * Sent on REST, GraphQL, SSE (headers) and gRPC (metadata). Browsers cannot\n * attach headers to WebSocket upgrades, so the Warp WS client omits it.\n */\nexport const SDK_HEADER_NAME = \"x-inodra-sdk\";\nexport const SDK_HEADER_VALUE = `inodra-sdk-ts/${SDK_VERSION}`;\n","/**\n * Runtime schema reflection for ARBITRARY Move event types — not just the\n * curated catalog. Fetches struct layouts from Sui GraphQL (Inodra's gateway\n * with your API key, or any Sui GraphQL endpoint), substitutes concrete\n * generics, and builds the same loose, normalizing zod schemas the generated\n * catalog uses.\n *\n * ```ts\n * import { EventSchemaReflector } from \"@inodra/sui/events\";\n *\n * const reflector = new EventSchemaReflector({ apiKey, network: \"mainnet\" });\n * const schema = await reflector.schemaFor(\"0xpkg::vault::Deposit<0x2::sui::SUI>\");\n * const payload = schema.parse(event.data);\n * ```\n */\nimport type { z } from \"zod\";\nimport { authFromOptions, type InodraAuth } from \"../core/auth.js\";\nimport { graphqlUrl, type InodraNetwork } from \"../core/network.js\";\nimport { SDK_HEADER_NAME, SDK_HEADER_VALUE } from \"../core/version.js\";\nimport {\n\tformatMoveType,\n\ttype MoveTypeNode,\n\tparseMoveType,\n\tresolveShape,\n\ttype SchemaShape,\n\tshapeToZod,\n\ttype StructField,\n} from \"./move-types.js\";\nimport { baseEventType } from \"./runtime.js\";\n\nexport interface EventSchemaReflectorOptions {\n\t/** Credentials for Inodra's GraphQL gateway. Omit when using a public url. */\n\tauth?: InodraAuth;\n\t/** Shorthand for `auth: { apiKey }`. */\n\tapiKey?: string;\n\t/** Defaults to \"mainnet\". Ignored when url is set. */\n\tnetwork?: InodraNetwork;\n\t/** GraphQL endpoint override (e.g. a public Sui GraphQL for keyless use). */\n\turl?: string;\n\t/** Custom fetch implementation. */\n\tfetch?: typeof globalThis.fetch;\n}\n\nconst STRUCT_QUERY = `query($pkg: SuiAddress!, $module: String!, $struct: String!) {\n\tpackage(address: $pkg) {\n\t\tmodule(name: $module) { struct(name: $struct) { fields { name type { repr } } } }\n\t}\n}`;\n\ninterface StructQueryResult {\n\tpackage: {\n\t\tmodule: {\n\t\t\tstruct: { fields: { name: string; type: { repr: string } }[] } | null;\n\t\t} | null;\n\t} | null;\n}\n\nexport class EventSchemaReflector {\n\tprivate readonly url: string;\n\tprivate readonly headers: Record<string, string>;\n\tprivate readonly fetchImpl: typeof globalThis.fetch;\n\t/** Struct-definition cache, keyed by `address::module::name`. */\n\tprivate readonly structs = new Map<\n\t\tstring,\n\t\tPromise<StructField[] | undefined>\n\t>();\n\t/** Resolved shape cache, keyed by the canonical concrete type string. */\n\tprivate readonly shapes = new Map<string, Promise<SchemaShape>>();\n\tprivate readonly schemas = new Map<string, Promise<z.ZodTypeAny>>();\n\n\tconstructor(options: EventSchemaReflectorOptions = {}) {\n\t\tthis.url = options.url ?? graphqlUrl(options.network ?? \"mainnet\");\n\t\tthis.fetchImpl = options.fetch ?? globalThis.fetch;\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t[SDK_HEADER_NAME]: SDK_HEADER_VALUE,\n\t\t};\n\t\tif (options.auth !== undefined || options.apiKey) {\n\t\t\tconst credentials = authFromOptions(\n\t\t\t\toptions,\n\t\t\t\t\"EventSchemaReflector\",\n\t\t\t).staticCredentials();\n\t\t\tif (!credentials) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"EventSchemaReflector does not support dynamic credential providers\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tObject.assign(headers, credentials.headers);\n\t\t}\n\t\tthis.headers = headers;\n\t}\n\n\t/**\n\t * Resolved schema shape for a concrete Move type (cached). Useful for\n\t * codegen and introspection; most callers want {@link schemaFor}.\n\t */\n\tshapeFor(type: string): Promise<SchemaShape> {\n\t\tconst node = parseMoveType(type);\n\t\tconst key = formatMoveType(node);\n\t\tlet pending = this.shapes.get(key);\n\t\tif (!pending) {\n\t\t\tpending = resolveShape(node, (struct) => this.structFields(struct));\n\t\t\tthis.shapes.set(key, pending);\n\t\t\tpending.catch(() => this.shapes.delete(key));\n\t\t}\n\t\treturn pending;\n\t}\n\n\t/**\n\t * Build (and cache) a loose, normalizing zod schema for any concrete Move\n\t * event type. Same encoding rules as the generated catalog schemas.\n\t */\n\tschemaFor(type: string): Promise<z.ZodTypeAny> {\n\t\tconst key = formatMoveType(parseMoveType(type));\n\t\tlet pending = this.schemas.get(key);\n\t\tif (!pending) {\n\t\t\tpending = this.shapeFor(type).then((shape) => {\n\t\t\t\tif (shape.kind !== \"object\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${type} did not resolve to a struct — is it a Move event type on this network?`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn shapeToZod(shape);\n\t\t\t});\n\t\t\tthis.schemas.set(key, pending);\n\t\t\tpending.catch(() => this.schemas.delete(key));\n\t\t}\n\t\treturn pending;\n\t}\n\n\t/**\n\t * Validate + normalize an event payload against the reflected schema.\n\t * Accepts a Warp stream message, a bare `{type, data}` event payload, or\n\t * a webhook body. Returns undefined when the message carries a different\n\t * event type; throws when the payload doesn't fit the reflected schema.\n\t *\n\t * Matching: exact when `type` is fully instantiated; base-type when\n\t * `type` has no generics (all instantiations match).\n\t */\n\tasync parseEvent(\n\t\tmessage: unknown,\n\t\ttype: string,\n\t): Promise<Record<string, unknown> | undefined> {\n\t\tconst payload = extractEventPayload(message);\n\t\tif (!payload) {\n\t\t\treturn undefined;\n\t\t}\n\t\t// Canonicalize both sides — on-chain type strings use full-width\n\t\t// addresses (0x000…2::…), user input is usually short-form (0x2::…).\n\t\tconst canonical = (t: string) => formatMoveType(parseMoveType(t));\n\t\tconst requested = canonical(type);\n\t\tconst matches = type.includes(\"<\")\n\t\t\t? canonical(payload.type) === requested\n\t\t\t: canonical(baseEventType(payload.type)) === requested;\n\t\tif (!matches) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst schema = await this.schemaFor(\n\t\t\ttype.includes(\"<\") ? type : payload.type,\n\t\t);\n\t\treturn schema.parse(payload.data) as Record<string, unknown>;\n\t}\n\n\tprivate structFields(struct: {\n\t\taddress: string;\n\t\tmodule: string;\n\t\tname: string;\n\t}): Promise<StructField[] | undefined> {\n\t\tconst key = `${struct.address}::${struct.module}::${struct.name}`;\n\t\tlet pending = this.structs.get(key);\n\t\tif (!pending) {\n\t\t\tpending = this.fetchStruct(struct);\n\t\t\tthis.structs.set(key, pending);\n\t\t\tpending.catch(() => this.structs.delete(key));\n\t\t}\n\t\treturn pending;\n\t}\n\n\tprivate async fetchStruct(struct: {\n\t\taddress: string;\n\t\tmodule: string;\n\t\tname: string;\n\t}): Promise<StructField[] | undefined> {\n\t\tlet lastError: unknown;\n\t\tfor (let attempt = 0; attempt < 3; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst response = await this.fetchImpl(this.url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: this.headers,\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tquery: STRUCT_QUERY,\n\t\t\t\t\t\tvariables: {\n\t\t\t\t\t\t\tpkg: struct.address,\n\t\t\t\t\t\t\tmodule: struct.module,\n\t\t\t\t\t\t\tstruct: struct.name,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`GraphQL reflection failed: HTTP ${response.status}`);\n\t\t\t\t}\n\t\t\t\tconst body = (await response.json()) as {\n\t\t\t\t\tdata?: StructQueryResult;\n\t\t\t\t\terrors?: unknown;\n\t\t\t\t};\n\t\t\t\tif (body.errors) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`GraphQL reflection errors: ${JSON.stringify(body.errors)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst fields = body.data?.package?.module?.struct?.fields;\n\t\t\t\tif (!fields) {\n\t\t\t\t\treturn undefined; // unknown struct — caller maps to z.unknown()\n\t\t\t\t}\n\t\t\t\treturn fields.map((field) => ({\n\t\t\t\t\tname: field.name,\n\t\t\t\t\ttype: parseMoveType(field.type.repr) as MoveTypeNode,\n\t\t\t\t}));\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error;\n\t\t\t\tawait new Promise((r) => setTimeout(r, 300 * 2 ** attempt));\n\t\t\t}\n\t\t}\n\t\tthrow lastError;\n\t}\n}\n\n// Local copy of the delivery-shape extractor (index.ts owns the catalog-typed\n// variant; this one is untyped by design).\nfunction extractEventPayload(\n\tinput: unknown,\n\tdepth = 0,\n): { type: string; data: unknown } | undefined {\n\tif (depth > 3 || typeof input !== \"object\" || input === null) {\n\t\treturn undefined;\n\t}\n\tconst record = input as Record<string, unknown>;\n\tif (\n\t\ttypeof record.type === \"string\" &&\n\t\trecord.type.includes(\"::\") &&\n\t\t\"data\" in record\n\t) {\n\t\treturn { type: record.type, data: record.data };\n\t}\n\treturn (\n\t\textractEventPayload(record.payload, depth + 1) ??\n\t\textractEventPayload(record.data, depth + 1)\n\t);\n}\n"],"mappings":";AAuBA,SAAS,qBAAqB;;;AChB9B,SAAS,KAAAA,UAAS;;;ACWlB,SAAS,SAAS;AAOX,IAAM,gBAAgB,EAAE,OAAO;AAG/B,IAAM,WAAW,EACtB,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAC9B,UAAU,CAAC,UAAU,OAAO,KAAK,CAAC;AAE7B,IAAM,WAAW,EAAE,QAAQ;AAG3B,IAAM,cAAc,EAAE,OAAO;AAG7B,IAAM,aAAa,EAAE,OAAO;AAG5B,IAAM,eAAe,EAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EACvD,UAAU,CAAC,UAAW,OAAO,UAAU,WAAW,QAAQ,MAAM,IAAK;AAGhE,IAAM,cAAc,EACzB,MAAM;AAAA,EACN,EAAE,OAAO;AAAA,EACT,EAAE,OAAO;AAAA,EACT,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC,EACA;AAAA,EAAU,CAAC,UACX,OAAO,UAAU,WAAW,OAAO,MAAM,KAAK,IAAI,OAAO,KAAK;AAC/D;AAGM,IAAM,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAO3D,IAAM,yBAAyB,EAAE,YAAY;AAAA,EACnD,cAAc,EAAE,QAAQ,eAAe;AAAA,EACvC,UAAU,EAAE,OAAO;AAAA,EACnB,eAAe,EAAE,OAAO;AAAA,EACxB,YAAY,EAAE,OAAO;AAAA,EACrB,WAAW,EAAE,OAAO;AAAA;AAAA,EAEpB,MAAM,EAAE,OAAO;AAAA,EACf,QAAQ,EAAE,OAAO;AAAA;AAAA,EAEjB,MAAM,EAAE,QAAQ;AACjB,CAAC;AAIM,IAAM,2BAA2B,EAAE,YAAY;AAAA,EACrD,SAAS,EAAE,OAAO;AAAA,EAClB,cAAc,EAAE,OAAO;AAAA,EACvB,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,WAAW,EAAE,OAAO;AAAA,EACpB,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAY,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAIM,IAAM,wBAAwB,EAAE,YAAY;AAAA,EAClD,cAAc,EAAE,QAAQ,gBAAgB;AAAA,EACxC,SAAS,EAAE,OAAO;AAAA,EAClB,WAAW,EAAE,OAAO;AAAA;AAAA,EAEpB,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,WAAW,EAAE,OAAO;AACrB,CAAC;AAIM,IAAM,0BAA0B,EAAE,YAAY;AAAA,EACpD,cAAc,EAAE,QAAQ,eAAe;AAAA,EACvC,WAAW,EAAE,OAAO;AAAA,EACpB,sBAAsB,EAAE,OAAO;AAAA,EAC/B,WAAW,EAAE,OAAO;AAAA,EACpB,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,WAAW,EAAE,OAAO;AACrB,CAAC;AAOM,IAAM,yBAAyB,EAAE,YAAY;AAAA,EACnD,gBAAgB,EAAE,OAAO;AAAA,EACzB,SAAS,uBAAuB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AACjE,CAAC;AAQM,SAAS,cAAc,WAA2B;AACxD,QAAM,MAAM,UAAU,QAAQ,GAAG;AACjC,SAAO,QAAQ,KAAK,YAAY,UAAU,MAAM,GAAG,GAAG;AACvD;;;ADjGA,IAAM,aAAa,oBAAI,IAAI;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAGD,SAAS,UAAU,OAAyB;AAC3C,QAAM,QAAkB,CAAC;AACzB,MAAI,QAAQ;AACZ,MAAI,UAAU;AACd,aAAW,QAAQ,OAAO;AACzB,QAAI,SAAS,IAAK;AAClB,QAAI,SAAS,IAAK;AAClB,QAAI,SAAS,OAAO,UAAU,GAAG;AAChC,YAAM,KAAK,QAAQ,KAAK,CAAC;AACzB,gBAAU;AACV;AAAA,IACD;AACA,eAAW;AAAA,EACZ;AACA,MAAI,QAAQ,KAAK,EAAG,OAAM,KAAK,QAAQ,KAAK,CAAC;AAC7C,SAAO;AACR;AAEO,SAAS,cAAc,OAA6B;AAC1D,QAAM,OAAO,MAAM,KAAK;AACxB,MAAI,WAAW,IAAI,IAAI,GAAG;AACzB,WAAO,EAAE,MAAM,QAAQ,MAAM,KAAK;AAAA,EACnC;AACA,MAAI,KAAK,WAAW,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG;AACrD,WAAO,EAAE,MAAM,UAAU,OAAO,cAAc,KAAK,MAAM,GAAG,EAAE,CAAC,EAAE;AAAA,EAClE;AACA,QAAM,QAAQ,YAAY,KAAK,IAAI;AACnC,MAAI,OAAO;AACV,WAAO,EAAE,MAAM,SAAS,OAAO,OAAO,MAAM,CAAC,CAAC,EAAE;AAAA,EACjD;AACA,QAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,QAAM,OAAO,YAAY,KAAK,OAAO,KAAK,MAAM,GAAG,OAAO;AAC1D,QAAM,OACL,YAAY,MAAM,CAAC,KAAK,SAAS,GAAG,IACjC,CAAC,IACD,UAAU,KAAK,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,IAAI,aAAa;AAC5D,QAAM,CAAC,SAAS,QAAQ,MAAM,GAAGC,KAAI,IAAI,KAAK,MAAM,IAAI;AACxD,MAAI,SAAS,WAAW,IAAI,KAAK,UAAU,QAAQA,MAAK,WAAW,GAAG;AACrE,WAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS,iBAAiB,OAAO;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACA,SAAO,EAAE,MAAM,UAAU,KAAK,KAAK;AACpC;AAGO,SAAS,iBAAiB,SAAyB;AACzD,SAAO,QAAQ,QAAQ,wBAAwB,IAAI;AACpD;AAEO,SAAS,eAAe,MAA4B;AAC1D,UAAQ,KAAK,MAAM;AAAA,IAClB,KAAK;AACJ,aAAO,KAAK;AAAA,IACb,KAAK;AACJ,aAAO,UAAU,eAAe,KAAK,KAAK,CAAC;AAAA,IAC5C,KAAK;AACJ,aAAO,IAAI,KAAK,KAAK;AAAA,IACtB,KAAK;AACJ,aAAO,KAAK;AAAA,IACb,KAAK,UAAU;AACd,YAAM,OAAO,GAAG,KAAK,OAAO,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI;AAC1D,aAAO,KAAK,KAAK,WAAW,IACzB,OACA,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,cAAc,EAAE,KAAK,IAAI,CAAC;AAAA,IACvD;AAAA,EACD;AACD;AAGO,SAAS,qBACf,MACA,MACe;AACf,UAAQ,KAAK,MAAM;AAAA,IAClB,KAAK;AACJ,aAAO,KAAK,KAAK,KAAK,KAAK;AAAA,IAC5B,KAAK;AACJ,aAAO,EAAE,MAAM,UAAU,OAAO,qBAAqB,KAAK,OAAO,IAAI,EAAE;AAAA,IACxE,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAAA,MACzD;AAAA,IACD;AACC,aAAO;AAAA,EACT;AACD;AAiCA,IAAM,YAAY;AAOlB,eAAsB,aACrB,MACA,eACA,QAAQ,GACR,QAAkB,CAAC,GACI;AACvB,UAAQ,KAAK,MAAM;AAAA,IAClB,KAAK;AACJ,cAAQ,KAAK,MAAM;AAAA,QAClB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACJ,iBAAO,EAAE,MAAM,YAAY;AAAA,QAC5B,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACJ,iBAAO,EAAE,MAAM,OAAO;AAAA,QACvB,KAAK;AACJ,iBAAO,EAAE,MAAM,OAAO;AAAA,QACvB,KAAK;AAAA,QACL,KAAK;AACJ,iBAAO,EAAE,MAAM,UAAU;AAAA,QAC1B;AACC,iBAAO,EAAE,MAAM,UAAU;AAAA,MAC3B;AAAA,IACD,KAAK;AACJ,UAAI,KAAK,MAAM,SAAS,UAAU,KAAK,MAAM,SAAS,MAAM;AAC3D,eAAO,EAAE,MAAM,QAAQ;AAAA,MACxB;AACA,aAAO;AAAA,QACN,MAAM;AAAA,QACN,OAAO,MAAM,aAAa,KAAK,OAAO,eAAe,OAAO,KAAK;AAAA,MAClE;AAAA,IACD,KAAK;AAAA,IACL,KAAK;AACJ,aAAO,EAAE,MAAM,UAAU;AAAA,IAC1B,KAAK,UAAU;AACd,YAAM,OAAO,GAAG,KAAK,OAAO,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI;AAC1D,cAAQ,MAAM;AAAA,QACb,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACJ,iBAAO,EAAE,MAAM,SAAS;AAAA,QACzB,KAAK;AACJ,iBAAO,EAAE,MAAM,WAAW;AAAA,QAC3B,KAAK;AACJ,iBAAO,EAAE,MAAM,UAAU;AAAA,QAC1B,KAAK;AACJ,iBAAO,EAAE,MAAM,UAAU;AAAA,QAC1B,KAAK,uBAAuB;AAC3B,gBAAM,QAAQ,KAAK,KAAK,CAAC;AACzB,cAAI,KAAK,KAAK,WAAW,KAAK,OAAO;AACpC,mBAAO;AAAA,cACN,MAAM;AAAA,cACN,OAAO,MAAM,aAAa,OAAO,eAAe,OAAO,KAAK;AAAA,YAC7D;AAAA,UACD;AACA,iBAAO,EAAE,MAAM,UAAU;AAAA,QAC1B;AAAA,MACD;AACA,YAAM,MAAM,eAAe,IAAI;AAC/B,UAAI,SAAS,aAAa,MAAM,SAAS,GAAG,GAAG;AAC9C,eAAO,EAAE,MAAM,UAAU;AAAA,MAC1B;AACA,YAAM,aAAa,MAAM,cAAc,IAAI;AAC3C,UAAI,CAAC,YAAY;AAChB,eAAO,EAAE,MAAM,UAAU;AAAA,MAC1B;AACA,YAAM,SAAS,MAAM,QAAQ;AAAA,QAC5B,WAAW,IAAI,OAAO,WAAW;AAAA,UAChC,MAAM,MAAM;AAAA,UACZ,OAAO,MAAM;AAAA,YACZ,qBAAqB,MAAM,MAAM,KAAK,IAAI;AAAA,YAC1C;AAAA,YACA,QAAQ;AAAA,YACR,CAAC,GAAG,OAAO,GAAG;AAAA,UACf;AAAA,QACD,EAAE;AAAA,MACH;AACA,aAAO,EAAE,MAAM,UAAU,OAAO;AAAA,IACjC;AAAA,EACD;AACD;AAMO,SAAS,WAAW,OAAkC;AAC5D,UAAQ,MAAM,MAAM;AAAA,IACnB,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO,WAAW,MAAM,KAAK,EAAE,SAAS;AAAA,IACzC,KAAK;AACJ,aAAOC,GAAE,MAAM,WAAW,MAAM,KAAK,CAAC;AAAA,IACvC,KAAK;AACJ,aAAOA,GAAE;AAAA,QACR,OAAO;AAAA,UACN,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC;AAAA,QACtD;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAOA,GAAE,QAAQ;AAAA,EACnB;AACD;AAEA,IAAM,kBAA0C;AAAA,EAC/C,WAAW;AAAA,EACX,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AACR;AAMO,SAAS,YACf,OACA,MACA,SAAS,IACA;AACT,QAAM,YAAY,gBAAgB,MAAM,IAAI;AAC5C,MAAI,WAAW;AACd,SAAK,IAAI,SAAS;AAClB,WAAO;AAAA,EACR;AACA,UAAQ,MAAM,MAAM;AAAA,IACnB,KAAK;AACJ,aAAO,GAAG,YAAY,MAAM,OAAO,MAAM,MAAM,CAAC;AAAA,IACjD,KAAK;AACJ,aAAO,WAAW,YAAY,MAAM,OAAO,MAAM,MAAM,CAAC;AAAA,IACzD,KAAK,UAAU;AACd,YAAM,QAAQ,CAAC,iBAAiB;AAChC,iBAAW,SAAS,MAAM,QAAQ;AACjC,cAAM;AAAA,UACL,GAAG,MAAM,IAAK,KAAK,UAAU,MAAM,IAAI,CAAC,KAAK,YAAY,MAAM,OAAO,MAAM,GAAG,MAAM,GAAI,CAAC;AAAA,QAC3F;AAAA,MACD;AACA,YAAM,KAAK,GAAG,MAAM,IAAI;AACxB,aAAO,MAAM,KAAK,IAAI;AAAA,IACvB;AAAA,IACA;AACC,aAAO;AAAA,EACT;AACD;;;AEpTO,SAAS,YAAY,MAAgC;AAC3D,MAAI,OAAO,SAAS,UAAU;AAC7B,WAAO,WAAW,kBAAkB,IAAI,CAAC;AAAA,EAC1C;AACA,MAAI,YAAY,MAAM;AACrB,WAAO,WAAW,kBAAkB,KAAK,MAAM,CAAC;AAAA,EACjD;AACA,MAAI,kBAAkB,MAAM;AAC3B,WAAO,WAAW;AAAA,MACjB,SAAS,EAAE,eAAe,UAAU,KAAK,YAAY,GAAG;AAAA,IACzD,CAAC;AAAA,EACF;AACA,SAAO;AAAA,IACN,aAAa,YAAY,KAAK,eAAe;AAAA,IAC7C,mBAAmB,MAAM;AAAA,EAC1B;AACD;AAMO,SAAS,gBACf,SACA,SACe;AACf,MAAI,QAAQ,SAAS,QAAW;AAC/B,WAAO,YAAY,QAAQ,IAAI;AAAA,EAChC;AACA,MAAI,QAAQ,QAAQ;AACnB,WAAO,YAAY,QAAQ,MAAM;AAAA,EAClC;AACA,QAAM,IAAI,MAAM,GAAG,OAAO,0CAA0C;AACrE;AAoBA,SAAS,kBAAkB,QAAiC;AAC3D,MAAI,CAAC,QAAQ;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EACjE;AACA,SAAO;AAAA,IACN,SAAS,EAAE,aAAa,OAAO;AAAA,IAC/B,aAAa,EAAE,SAAS,OAAO;AAAA,EAChC;AACD;AAEA,SAAS,WAAW,aAA4C;AAC/D,SAAO;AAAA,IACN,aAAa,YAAY;AAAA,IACzB,mBAAmB,MAAM;AAAA,EAC1B;AACD;;;ACrGO,IAAM,mBAAmB;AAAA,EAC/B,SAAS;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,IAET,MAAM;AAAA;AAAA,IAEN,SAAS;AAAA,IACT,QAAQ;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,EACT;AACD;AASO,SAAS,WAAW,SAAgC;AAC1D,SAAO,iBAAiB,OAAO,EAAE;AAClC;;;ACjCO,IAAM,cAAc;AAOpB,IAAM,kBAAkB;AACxB,IAAM,mBAAmB,iBAAiB,WAAW;;;ACmC5D,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAcd,IAAM,uBAAN,MAA2B;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA,UAAU,oBAAI,IAG7B;AAAA;AAAA,EAEe,SAAS,oBAAI,IAAkC;AAAA,EAC/C,UAAU,oBAAI,IAAmC;AAAA,EAElE,YAAY,UAAuC,CAAC,GAAG;AACtD,SAAK,MAAM,QAAQ,OAAO,WAAW,QAAQ,WAAW,SAAS;AACjE,SAAK,YAAY,QAAQ,SAAS,WAAW;AAC7C,UAAM,UAAkC;AAAA,MACvC,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG;AAAA,IACpB;AACA,QAAI,QAAQ,SAAS,UAAa,QAAQ,QAAQ;AACjD,YAAM,cAAc;AAAA,QACnB;AAAA,QACA;AAAA,MACD,EAAE,kBAAkB;AACpB,UAAI,CAAC,aAAa;AACjB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AACA,aAAO,OAAO,SAAS,YAAY,OAAO;AAAA,IAC3C;AACA,SAAK,UAAU;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,MAAoC;AAC5C,UAAM,OAAO,cAAc,IAAI;AAC/B,UAAM,MAAM,eAAe,IAAI;AAC/B,QAAI,UAAU,KAAK,OAAO,IAAI,GAAG;AACjC,QAAI,CAAC,SAAS;AACb,gBAAU,aAAa,MAAM,CAAC,WAAW,KAAK,aAAa,MAAM,CAAC;AAClE,WAAK,OAAO,IAAI,KAAK,OAAO;AAC5B,cAAQ,MAAM,MAAM,KAAK,OAAO,OAAO,GAAG,CAAC;AAAA,IAC5C;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,MAAqC;AAC9C,UAAM,MAAM,eAAe,cAAc,IAAI,CAAC;AAC9C,QAAI,UAAU,KAAK,QAAQ,IAAI,GAAG;AAClC,QAAI,CAAC,SAAS;AACb,gBAAU,KAAK,SAAS,IAAI,EAAE,KAAK,CAAC,UAAU;AAC7C,YAAI,MAAM,SAAS,UAAU;AAC5B,gBAAM,IAAI;AAAA,YACT,GAAG,IAAI;AAAA,UACR;AAAA,QACD;AACA,eAAO,WAAW,KAAK;AAAA,MACxB,CAAC;AACD,WAAK,QAAQ,IAAI,KAAK,OAAO;AAC7B,cAAQ,MAAM,MAAM,KAAK,QAAQ,OAAO,GAAG,CAAC;AAAA,IAC7C;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,WACL,SACA,MAC+C;AAC/C,UAAM,UAAU,oBAAoB,OAAO;AAC3C,QAAI,CAAC,SAAS;AACb,aAAO;AAAA,IACR;AAGA,UAAM,YAAY,CAAC,MAAc,eAAe,cAAc,CAAC,CAAC;AAChE,UAAM,YAAY,UAAU,IAAI;AAChC,UAAM,UAAU,KAAK,SAAS,GAAG,IAC9B,UAAU,QAAQ,IAAI,MAAM,YAC5B,UAAU,cAAc,QAAQ,IAAI,CAAC,MAAM;AAC9C,QAAI,CAAC,SAAS;AACb,aAAO;AAAA,IACR;AACA,UAAM,SAAS,MAAM,KAAK;AAAA,MACzB,KAAK,SAAS,GAAG,IAAI,OAAO,QAAQ;AAAA,IACrC;AACA,WAAO,OAAO,MAAM,QAAQ,IAAI;AAAA,EACjC;AAAA,EAEQ,aAAa,QAIkB;AACtC,UAAM,MAAM,GAAG,OAAO,OAAO,KAAK,OAAO,MAAM,KAAK,OAAO,IAAI;AAC/D,QAAI,UAAU,KAAK,QAAQ,IAAI,GAAG;AAClC,QAAI,CAAC,SAAS;AACb,gBAAU,KAAK,YAAY,MAAM;AACjC,WAAK,QAAQ,IAAI,KAAK,OAAO;AAC7B,cAAQ,MAAM,MAAM,KAAK,QAAQ,OAAO,GAAG,CAAC;AAAA,IAC7C;AACA,WAAO;AAAA,EACR;AAAA,EAEA,MAAc,YAAY,QAIa;AACtC,QAAI;AACJ,aAAS,UAAU,GAAG,UAAU,GAAG,WAAW;AAC7C,UAAI;AACH,cAAM,WAAW,MAAM,KAAK,UAAU,KAAK,KAAK;AAAA,UAC/C,QAAQ;AAAA,UACR,SAAS,KAAK;AAAA,UACd,MAAM,KAAK,UAAU;AAAA,YACpB,OAAO;AAAA,YACP,WAAW;AAAA,cACV,KAAK,OAAO;AAAA,cACZ,QAAQ,OAAO;AAAA,cACf,QAAQ,OAAO;AAAA,YAChB;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AACD,YAAI,CAAC,SAAS,IAAI;AACjB,gBAAM,IAAI,MAAM,mCAAmC,SAAS,MAAM,EAAE;AAAA,QACrE;AACA,cAAM,OAAQ,MAAM,SAAS,KAAK;AAIlC,YAAI,KAAK,QAAQ;AAChB,gBAAM,IAAI;AAAA,YACT,8BAA8B,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,UAC1D;AAAA,QACD;AACA,cAAM,SAAS,KAAK,MAAM,SAAS,QAAQ,QAAQ;AACnD,YAAI,CAAC,QAAQ;AACZ,iBAAO;AAAA,QACR;AACA,eAAO,OAAO,IAAI,CAAC,WAAW;AAAA,UAC7B,MAAM,MAAM;AAAA,UACZ,MAAM,cAAc,MAAM,KAAK,IAAI;AAAA,QACpC,EAAE;AAAA,MACH,SAAS,OAAO;AACf,oBAAY;AACZ,cAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,MAAM,KAAK,OAAO,CAAC;AAAA,MAC3D;AAAA,IACD;AACA,UAAM;AAAA,EACP;AACD;AAIA,SAAS,oBACR,OACA,QAAQ,GACsC;AAC9C,MAAI,QAAQ,KAAK,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7D,WAAO;AAAA,EACR;AACA,QAAM,SAAS;AACf,MACC,OAAO,OAAO,SAAS,YACvB,OAAO,KAAK,SAAS,IAAI,KACzB,UAAU,QACT;AACD,WAAO,EAAE,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK;AAAA,EAC/C;AACA,SACC,oBAAoB,OAAO,SAAS,QAAQ,CAAC,KAC7C,oBAAoB,OAAO,MAAM,QAAQ,CAAC;AAE5C;;;ANtNA,SAAS,KAAK,SAAwB;AACrC,UAAQ,MAAM,eAAe,OAAO,EAAE;AACtC,UAAQ,KAAK,CAAC;AACf;AAEA,SAAS,OAAO,OAAuB;AACtC,QAAM,OAAO,MACX,MAAM,eAAe,EACrB,OAAO,OAAO,EACd,IAAI,CAAC,UAAU,KAAK,CAAC,GAAG,YAAY,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,EAC5D,KAAK,EAAE;AACT,SAAO,SAAS,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK;AAC3C;AAUA,SAAS,UAAU,MAAsB;AACxC,QAAM,OAAa;AAAA,IAClB,OAAO,CAAC;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,UAAM,MAAM,KAAK,CAAC;AAClB,YAAQ,KAAK;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AACJ,aAAK,MAAM,KAAK,EAAE,CAAC;AACnB;AAAA,MACD,KAAK;AACJ,aAAK,UAAU,KAAK,EAAE,CAAC;AACvB;AAAA,MACD,KAAK;AACJ,aAAK,MAAM,KAAK,EAAE,CAAC;AACnB;AAAA,MACD,KAAK;AACJ,aAAK,aAAa,KAAK,EAAE,CAAC,KAAK,KAAK;AACpC;AAAA,MACD;AACC,YAAI,IAAI,WAAW,GAAG,GAAG;AACxB,eAAK,kBAAkB,GAAG,EAAE;AAAA,QAC7B;AACA,aAAK,MAAM,KAAK,GAAG;AAAA,IACrB;AAAA,EACD;AACA,SAAO;AACR;AAEA,eAAe,cAAc,MAA2B;AACvD,MAAI,KAAK,MAAM,WAAW,GAAG;AAC5B,SAAK,mCAAmC;AAAA,EACzC;AACA,QAAM,SAAS,QAAQ,IAAI;AAC3B,QAAM,MACL,KAAK,QACJ,SAAS,SAAY,mBAAmB,KAAK,OAAO;AACtD,QAAM,YAAY,IAAI,qBAAqB;AAAA,IAC1C,GAAI,UAAU,CAAC,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC;AAAA,IACxC,SAAS,KAAK;AAAA,IACd;AAAA,EACD,CAAC;AAED,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,SAAmB,CAAC;AAC1B,QAAM,aAAuB,CAAC;AAC9B,QAAM,YAAY,oBAAI,IAAoB;AAE1C,aAAW,WAAW,KAAK,OAAO;AACjC,UAAM,OAAO,cAAc,OAAO;AAClC,QAAI,KAAK,SAAS,UAAU;AAC3B,WAAK,GAAG,OAAO,6BAA6B;AAAA,IAC7C;AACA,UAAM,YAAY,eAAe,IAAI;AACrC,QAAI;AACJ,QAAI;AACH,cAAQ,MAAM,UAAU,SAAS,SAAS;AAAA,IAC3C,SAAS,OAAO;AACf,WAAK,yBAAyB,SAAS,KAAM,MAAgB,OAAO,EAAE;AAAA,IACvE;AACA,QAAI,MAAM,SAAS,UAAU;AAC5B,WAAK,GAAG,SAAS,mCAAmC,KAAK,OAAO,EAAE;AAAA,IACnE;AAEA,QAAI,OAAO,OAAO,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI,EAAE;AAC/C,UAAM,UAAU,UAAU,IAAI,IAAI,KAAK;AACvC,cAAU,IAAI,MAAM,UAAU,CAAC;AAC/B,QAAI,UAAU,GAAG;AAChB,aAAO,GAAG,IAAI,GAAG,UAAU,CAAC;AAAA,IAC7B;AAEA,WAAO;AAAA,MACN;AAAA,QACC,OAAO,SAAS;AAAA,QAChB,gBAAgB,IAAI,YAAY,YAAY,OAAO,IAAI,CAAC;AAAA,QACxD,eAAe,IAAI,0BAA0B,IAAI;AAAA,MAClD,EAAE,KAAK,IAAI;AAAA,IACZ;AACA,eAAW,KAAK,IAAK,KAAK,UAAU,SAAS,CAAC,KAAK,IAAI,SAAS;AAAA,EACjE;AAEA,QAAM,mBACL,KAAK,OAAO,IACT;AAAA,GAAe,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,MAAO,CAAC;AAAA,SAAa,KAAK,UAAU,KAAK,UAAU,CAAC;AAAA,IACzF;AAEJ,QAAM,SAAS,+BAA+B,WAAW;AAAA,2CACf,KAAK,MAAM,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,KAAK,MAAM,OAAO,KAAK,GAAG,KAAK,EAAE;AAAA;AAAA,EAE/H,gBAAgB;AAAA,EAChB,OAAO,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,EAInB,WAAW,KAAK,IAAI,CAAC;AAAA;AAAA;AAItB,MAAI,KAAK,KAAK;AACb,kBAAc,KAAK,KAAK,MAAM;AAC9B,YAAQ;AAAA,MACP,qBAAqB,KAAK,GAAG,KAAK,KAAK,MAAM,MAAM;AAAA,IACpD;AAAA,EACD,OAAO;AACN,YAAQ,OAAO,MAAM,MAAM;AAAA,EAC5B;AACD;AAEA,IAAM,CAAC,SAAS,GAAG,IAAI,IAAI,QAAQ,KAAK,MAAM,CAAC;AAC/C,QAAQ,SAAS;AAAA,EAChB,KAAK;AACJ,UAAM,cAAc,UAAU,IAAI,CAAC;AACnC;AAAA,EACD,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACJ,YAAQ;AAAA,MACP;AAAA,IACD;AACA;AAAA,EACD;AACC,SAAK,mBAAmB,OAAO,8BAAyB;AAC1D;","names":["z","rest","z"]}
|