@qntx/wallet-engine 0.6.0 → 0.7.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.
@@ -1,4 +1,3 @@
1
- //#region src/networks/registry.d.ts
2
1
  /**
3
2
  * Built-in EVM network registry: the 8 mainnets from chains.mdx plus their main testnets. Each
4
3
  * chain id was checked against the chain's official documentation (source URL per entry).
@@ -20,6 +19,5 @@ declare const NETWORKS: ReadonlyArray<NetworkInfo>;
20
19
  declare const networkById: (id: string) => NetworkInfo | undefined;
21
20
  declare const BITCOIN_NETWORKS: ReadonlyArray<NetworkInfo>;
22
21
  declare const SOLANA_NETWORKS: ReadonlyArray<NetworkInfo>;
23
- //#endregion
24
22
  export { networkById as a, SOLANA_NETWORKS as i, NETWORKS as n, NetworkInfo as r, BITCOIN_NETWORKS as t };
25
- //# sourceMappingURL=registry-9oeWs_yZ.d.mts.map
23
+ //# sourceMappingURL=registry-LcFSPrE1.d.mts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qntx/wallet-engine",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "qntx/wallet engine primitives: controllers, events and encrypted engine storage",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "author": "QuantX <x@qntx.org>",
@@ -52,9 +52,9 @@
52
52
  "@solana-program/system": "0.16.0",
53
53
  "@solana-program/token": "0.18.0",
54
54
  "@solana/kit": "8.5.0",
55
- "viem": "2.57.8",
55
+ "viem": "2.57.12",
56
56
  "zod": "^4.6.7",
57
- "zustand": "^5.0.15"
57
+ "zustand": "^5.0.16"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@arethetypeswrong/cli": "0.18.5",
@@ -62,9 +62,9 @@
62
62
  "@qntx/nostr": "0.15.3",
63
63
  "@qntx/spark": "0.5.2",
64
64
  "@qntx/spark-wasm": "0.5.2",
65
- "@qntx/wallet": "0.6.0",
66
- "@qntx/wallet-chains": "0.6.0",
67
- "@qntx/wallet-worker": "0.6.0",
65
+ "@qntx/wallet": "0.7.0",
66
+ "@qntx/wallet-chains": "0.7.0",
67
+ "@qntx/wallet-worker": "0.7.0",
68
68
  "@solana-program/token-2022": "0.20.0",
69
69
  "fake-indexeddb": "6.2.6",
70
70
  "publint": "0.3.25"
@@ -72,8 +72,8 @@
72
72
  "peerDependencies": {
73
73
  "@qntx/nostr": "^0.15.0",
74
74
  "@qntx/spark": "^0.5.0",
75
- "@qntx/wallet": "0.6.0",
76
- "@qntx/wallet-chains": "0.6.0"
75
+ "@qntx/wallet": "0.7.0",
76
+ "@qntx/wallet-chains": "0.7.0"
77
77
  },
78
78
  "devEngines": {
79
79
  "packageManager": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"contract-D5pguqiZ.mjs","names":[],"sources":["../src/gateway/contract/primitives.ts","../src/gateway/contract/endpoint.ts","../src/gateway/contract/health.ts","../src/gateway/contract/rpc.ts","../src/gateway/contract/esplora.ts","../src/networks/registry.ts","../src/gateway/contract/served.ts"],"sourcesContent":["import * as z from \"zod/mini\";\n\nexport const INSTALL_ID_HEADER = \"x-install-id\";\nexport const PROVIDERS_HEADER = \"x-gateway-providers\";\n\n/** 128 random bits as lowercase hex — generated once per install, unrelated to wallet secrets. */\nexport const installId = z.string().check(z.regex(/^[0-9a-f]{32}$/));\n\n/** CAIP-2 chain id: `namespace:reference`. */\nexport const caip2 = z.string().check(z.regex(/^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}$/));\n\nexport type Caip2 = z.infer<typeof caip2>;\nexport type InstallId = z.infer<typeof installId>;\n\nexport const GATEWAY_ERRORS = [\n \"invalid-request\",\n \"unknown-network\",\n \"not-found\",\n \"rate-limited\",\n \"unavailable\",\n \"internal\",\n] as const;\n\nexport const gatewayError = z.object({ error: z.enum(GATEWAY_ERRORS) });\n\nexport type GatewayErrorCode = (typeof GATEWAY_ERRORS)[number];\n","import * as z from \"zod/mini\";\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"DELETE\";\n\nexport type Endpoint<Req extends z.ZodMiniType, Res extends z.ZodMiniType> = {\n readonly method: HttpMethod;\n readonly path: string;\n readonly request: Req;\n readonly response: Res;\n};\n\n/** One gateway route: its verb, versioned path template, and request/response schemas. */\nexport function endpoint<Req extends z.ZodMiniType, Res extends z.ZodMiniType>(\n method: HttpMethod,\n path: `/v1/${string}`,\n request: Req,\n response: Res,\n): Endpoint<Req, Res> {\n return { method, path, request, response };\n}\n\n/** `value` typed by `schema`, or `undefined` when it does not satisfy it. */\nexport function parseWith<S extends z.ZodMiniType>(\n schema: S,\n value: unknown,\n): z.output<S> | undefined {\n const result = z.safeParse(schema, value);\n return result.success ? result.data : undefined;\n}\n\n/** Whether `value` satisfies `schema` — lets consumers validate without importing zod. */\nexport function accepts(schema: z.ZodMiniType, value: unknown): boolean {\n return z.safeParse(schema, value).success;\n}\n","import * as z from \"zod/mini\";\n\nimport { endpoint } from \"./endpoint.ts\";\n\nexport const healthRequest = z.undefined();\nexport const healthResponse = z.object({ status: z.literal(\"ok\") });\n\nexport const health = endpoint(\"GET\", \"/v1/health\", healthRequest, healthResponse);\n","import * as z from \"zod/mini\";\n\nimport { endpoint } from \"./endpoint.ts\";\n\n/** One JSON-RPC call plus nothing else: batches may carry at most this many entries. */\nexport const RPC_BATCH_MAX = 20;\n\n/** Read-only EVM methods plus `eth_sendRawTransaction`. Anything not listed is rejected. */\nexport const EVM_RPC_METHODS = [\n \"eth_blobBaseFee\",\n \"eth_blockNumber\",\n \"eth_call\",\n \"eth_chainId\",\n \"eth_createAccessList\",\n \"eth_estimateGas\",\n \"eth_feeHistory\",\n \"eth_gasPrice\",\n \"eth_getBalance\",\n \"eth_getBlockByHash\",\n \"eth_getBlockByNumber\",\n \"eth_getBlockReceipts\",\n \"eth_getBlockTransactionCountByHash\",\n \"eth_getBlockTransactionCountByNumber\",\n \"eth_getCode\",\n \"eth_getProof\",\n \"eth_getStorageAt\",\n \"eth_getTransactionByBlockHashAndIndex\",\n \"eth_getTransactionByBlockNumberAndIndex\",\n \"eth_getTransactionByHash\",\n \"eth_getTransactionCount\",\n \"eth_getTransactionReceipt\",\n \"eth_maxPriorityFeePerGas\",\n \"eth_sendRawTransaction\",\n \"net_version\",\n \"web3_clientVersion\",\n] as const;\n\n/** Read-only Solana methods plus `sendTransaction`. Anything not listed is rejected. */\nexport const SOLANA_RPC_METHODS = [\n \"getAccountInfo\",\n \"getBalance\",\n \"getBlock\",\n \"getBlockHeight\",\n \"getBlockTime\",\n \"getEpochInfo\",\n \"getFeeForMessage\",\n \"getGenesisHash\",\n \"getLatestBlockhash\",\n \"getMinimumBalanceForRentExemption\",\n \"getMultipleAccounts\",\n \"getRecentPrioritizationFees\",\n \"getSignatureStatuses\",\n \"getSignaturesForAddress\",\n \"getSlot\",\n \"getTokenAccountBalance\",\n \"getTokenAccountsByOwner\",\n \"getTokenSupply\",\n \"getTransaction\",\n \"getVersion\",\n \"isBlockhashValid\",\n \"sendTransaction\",\n \"simulateTransaction\",\n] as const;\n\nexport type EvmRpcMethod = (typeof EVM_RPC_METHODS)[number];\nexport type SolanaRpcMethod = (typeof SOLANA_RPC_METHODS)[number];\n\nexport const jsonRpcId = z.union([z.string(), z.number(), z.null()]);\n\nconst jsonRpcParams = z.optional(\n z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]),\n);\n\nconst callSchema = <M extends z.ZodMiniType<string>>(method: M) =>\n z.object({ jsonrpc: z.literal(\"2.0\"), id: jsonRpcId, method, params: jsonRpcParams });\n\nconst bodySchema = <C extends z.ZodMiniType>(call: C) =>\n z.union([call, z.array(call).check(z.minLength(1), z.maxLength(RPC_BATCH_MAX))]);\n\n/** Method-agnostic wire shape of a call or batch (the gateway narrows by family). */\nexport const rpcRequest = bodySchema(callSchema(z.string()));\n\nexport const evmRpcRequest = bodySchema(callSchema(z.enum(EVM_RPC_METHODS)));\nexport const solanaRpcRequest = bodySchema(callSchema(z.enum(SOLANA_RPC_METHODS)));\n\nconst successResponse = z.object({\n jsonrpc: z.literal(\"2.0\"),\n id: jsonRpcId,\n result: z.unknown(),\n});\nconst errorResponse = z.object({\n jsonrpc: z.literal(\"2.0\"),\n id: jsonRpcId,\n error: z.object({ code: z.int(), message: z.string(), data: z.optional(z.unknown()) }),\n});\n\nexport const jsonRpcResponse = z.union([successResponse, errorResponse]);\nexport const rpcResponse = z.union([jsonRpcResponse, z.array(jsonRpcResponse)]);\n\nexport const rpc = endpoint(\"POST\", \"/v1/rpc/:caip2\", rpcRequest, rpcResponse);\n\n/** The JSON-RPC URL path for one network. */\nexport const rpcPath = (caip2: string): string => rpc.path.replace(\":caip2\", caip2);\n","import * as z from \"zod/mini\";\n\nimport { endpoint } from \"./endpoint.ts\";\n\nconst HEX64 = \"[0-9a-f]{64}\";\n\ntype EsploraRoute = { readonly method: \"GET\" | \"POST\"; readonly pattern: RegExp };\n\n/** The Esplora surface the engine uses; every other path is rejected. */\nexport const ESPLORA_ROUTES: ReadonlyArray<EsploraRoute> = [\n { method: \"GET\", pattern: /^\\/block-height\\/\\d{1,10}$/ },\n { method: \"GET\", pattern: /^\\/fee-estimates$/ },\n { method: \"GET\", pattern: new RegExp(`^/scripthash/${HEX64}/txs$`) },\n { method: \"GET\", pattern: new RegExp(`^/scripthash/${HEX64}/utxo$`) },\n { method: \"GET\", pattern: new RegExp(`^/tx/${HEX64}/hex$`) },\n { method: \"GET\", pattern: new RegExp(`^/tx/${HEX64}/status$`) },\n { method: \"POST\", pattern: /^\\/tx$/ },\n];\n\n/** `path` is the Esplora path after `/v1/esplora/:caip2`, with a leading slash and no query. */\nexport const esploraPathAllowed = (method: string, path: string): boolean =>\n ESPLORA_ROUTES.some((route) => route.method === method && route.pattern.test(path));\n\nexport const esploraGet = endpoint(\"GET\", \"/v1/esplora/:caip2/*\", z.undefined(), z.unknown());\n\n/** The Esplora base path for one network; allow-listed paths are appended to it. */\nexport const esploraBasePath = (caip2: string): string =>\n esploraGet.path.replace(\":caip2\", caip2).replace(/\\/\\*$/, \"\");\nexport const esploraPost = endpoint(\"POST\", \"/v1/esplora/:caip2/tx\", z.string(), z.string());\n","/**\n * Built-in EVM network registry: the 8 mainnets from chains.mdx plus their main testnets. Each\n * chain id was checked against the chain's official documentation (source URL per entry).\n * Signing-time chainId always comes from this table, never from an RPC endpoint.\n */\n\nexport type NetworkInfo = {\n readonly id: string; // CAIP-2 eip155:<chainId>\n readonly chainId: number;\n readonly name: string;\n readonly symbol: string;\n readonly multicall3?: string;\n /** CAIP-2 family — `solana:<ref>` networks are validated against genesis-hash, not chainId. */\n readonly family: \"evm\" | \"solana\" | \"bitcoin\";\n readonly genesisHash?: string;\n readonly decimals: number;\n readonly testnet: boolean;\n};\n\nconst entry = (\n chainId: number,\n name: string,\n symbol: string,\n testnet: boolean,\n _source: string,\n): NetworkInfo => ({\n id: `eip155:${chainId}`,\n chainId,\n name,\n symbol,\n decimals: 18,\n testnet,\n family: \"evm\",\n // Canonical Multicall3 — https://github.com/mds1/multicall3 deployments (all entries below).\n multicall3: \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n});\n\nexport const NETWORKS: ReadonlyArray<NetworkInfo> = [\n // https://chainlist.org + https://ethereum.org (Ethereum mainnet chainId 1)\n entry(1, \"Ethereum\", \"ETH\", false, \"https://ethereum.org/en/developers/docs/networks/\"),\n // https://docs.base.org — Base Sepolia 84532\n entry(8453, \"Base\", \"ETH\", false, \"https://docs.base.org/docs/network-information\"),\n // https://docs.arbitrum.io — Arbitrum Sepolia 421614\n entry(\n 42161,\n \"Arbitrum One\",\n \"ETH\",\n false,\n \"https://docs.arbitrum.io/for-devs/dev-tools-and-resources/chain-info\",\n ),\n // https://docs.optimism.io — OP Sepolia 11155420\n entry(10, \"OP Mainnet\", \"ETH\", false, \"https://docs.optimism.io/chain/networks\"),\n // https://docs.polygon.technology — Amoy 80002\n entry(\n 137,\n \"Polygon\",\n \"POL\",\n false,\n \"https://docs.polygon.technology/pos/reference/rpc-endpoints/\",\n ),\n // https://docs.bnbchain.org — BSC testnet 97\n entry(\n 56,\n \"BNB Smart Chain\",\n \"BNB\",\n false,\n \"https://docs.bnbchain.org/bnb-smart-chain/developers/json_rpc/\",\n ),\n // https://hyperliquid.gitbook.io — HyperEVM testnet 998\n entry(\n 999,\n \"HyperEVM\",\n \"HYPE\",\n false,\n \"https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm\",\n ),\n // https://build.avax.network — Fuji 43113\n entry(\n 43114,\n \"Avalanche C-Chain\",\n \"AVAX\",\n false,\n \"https://build.avax.network/docs/tooling/rpc-providers\",\n ),\n entry(11155111, \"Sepolia\", \"ETH\", true, \"https://ethereum.org/en/developers/docs/networks/\"),\n entry(84532, \"Base Sepolia\", \"ETH\", true, \"https://docs.base.org/docs/network-information\"),\n entry(\n 421614,\n \"Arbitrum Sepolia\",\n \"ETH\",\n true,\n \"https://docs.arbitrum.io/for-devs/dev-tools-and-resources/chain-info\",\n ),\n entry(11155420, \"OP Sepolia\", \"ETH\", true, \"https://docs.optimism.io/chain/networks\"),\n entry(\n 80002,\n \"Polygon Amoy\",\n \"POL\",\n true,\n \"https://docs.polygon.technology/pos/reference/rpc-endpoints/\",\n ),\n entry(\n 97,\n \"BNB Smart Chain Testnet\",\n \"tBNB\",\n true,\n \"https://docs.bnbchain.org/bnb-smart-chain/developers/json_rpc/\",\n ),\n entry(\n 998,\n \"HyperEVM Testnet\",\n \"HYPE\",\n true,\n \"https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm\",\n ),\n entry(\n 43113,\n \"Avalanche Fuji\",\n \"AVAX\",\n true,\n \"https://build.avax.network/docs/tooling/rpc-providers\",\n ),\n];\n\nexport const networkById = (id: string): NetworkInfo | undefined =>\n [...NETWORKS, ...SOLANA_NETWORKS, ...BITCOIN_NETWORKS].find((n) => n.id === id);\nexport const BITCOIN_NETWORKS: ReadonlyArray<NetworkInfo> = [\n {\n id: \"bip122:000000000019d6689c085ae165831e93\",\n chainId: 0,\n name: \"Bitcoin\",\n symbol: \"BTC\",\n decimals: 8,\n testnet: false,\n family: \"bitcoin\",\n genesisHash: \"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f\",\n },\n {\n id: \"bip122:00000000da84f2bafbbc53dee25a72ae\",\n chainId: 0,\n name: \"Bitcoin Testnet4\",\n symbol: \"tBTC\",\n decimals: 8,\n testnet: true,\n family: \"bitcoin\",\n genesisHash: \"00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043\",\n },\n {\n id: \"bip122:00000008819873e925422c1ff0f99f7c\",\n chainId: 0,\n name: \"Bitcoin Signet\",\n symbol: \"sBTC\",\n decimals: 8,\n testnet: true,\n family: \"bitcoin\",\n genesisHash: \"00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6\",\n },\n {\n id: \"bip122:0f9188f13cb7b2c71f2a335e3a4fc328\",\n chainId: 0,\n name: \"Bitcoin Regtest\",\n symbol: \"rBTC\",\n decimals: 8,\n testnet: true,\n family: \"bitcoin\",\n genesisHash: \"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206\",\n },\n];\n\nexport const SOLANA_NETWORKS: ReadonlyArray<NetworkInfo> = [\n {\n id: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n chainId: 0,\n name: \"Solana\",\n symbol: \"SOL\",\n decimals: 9,\n testnet: false,\n family: \"solana\",\n // https://solana.com/docs/references/clusters (mainnet genesis hash)\n genesisHash: \"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d\",\n },\n {\n id: \"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1\",\n chainId: 0,\n name: \"Solana Devnet\",\n symbol: \"SOL\",\n decimals: 9,\n testnet: true,\n family: \"solana\",\n genesisHash: \"EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG\",\n },\n];\n","import * as z from \"zod/mini\";\n\nimport { endpoint } from \"./endpoint.ts\";\nimport { caip2 } from \"./primitives.ts\";\n\nexport const servedNetworksRequest = z.undefined();\n/** The networks the gateway actually serves, in its configured order. */\nexport const servedNetworksResponse = z.object({ networks: z.array(caip2) });\n\nexport const servedNetworks = endpoint(\n \"GET\",\n \"/v1/networks\",\n servedNetworksRequest,\n servedNetworksResponse,\n);\n\nexport const networksPath: string = servedNetworks.path;\n"],"mappings":"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"}