@arkade-os/sdk 0.5.0-rc.12 → 0.5.0-rc.13
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 +1 -1
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/{asyncStorageTaskQueue-ZJ0uB_km.d.cts → asyncStorageTaskQueue-0EeSeCAt.d.cts} +1 -1
- package/dist/{asyncStorageTaskQueue-DDVTySuO.d.ts → asyncStorageTaskQueue-DV94jhwq.d.ts} +1 -1
- package/dist/{chunk-KBXBS4WO.js → chunk-3JLYJ5KZ.js} +3 -3
- package/dist/{chunk-KBXBS4WO.js.map → chunk-3JLYJ5KZ.js.map} +1 -1
- package/dist/{chunk-C7ARQI5U.js → chunk-4EU2Q6YT.js} +4 -4
- package/dist/{chunk-C7ARQI5U.js.map → chunk-4EU2Q6YT.js.map} +1 -1
- package/dist/{chunk-6ZBLIJ3N.cjs → chunk-7BACS4XK.cjs} +10 -10
- package/dist/{chunk-6ZBLIJ3N.cjs.map → chunk-7BACS4XK.cjs.map} +1 -1
- package/dist/{chunk-VKM6VUOZ.cjs → chunk-7NK6XFC3.cjs} +3 -3
- package/dist/{chunk-VKM6VUOZ.cjs.map → chunk-7NK6XFC3.cjs.map} +1 -1
- package/dist/{chunk-XDT24LBQ.cjs → chunk-BFQX2KS3.cjs} +18 -18
- package/dist/{chunk-XDT24LBQ.cjs.map → chunk-BFQX2KS3.cjs.map} +1 -1
- package/dist/{chunk-QD3N3ZS7.js → chunk-D7JLTHSZ.js} +4 -4
- package/dist/{chunk-QD3N3ZS7.js.map → chunk-D7JLTHSZ.js.map} +1 -1
- package/dist/{chunk-2G3XR3E7.js → chunk-EJYWGTZ7.js} +3 -3
- package/dist/{chunk-2G3XR3E7.js.map → chunk-EJYWGTZ7.js.map} +1 -1
- package/dist/{chunk-73NPW5LY.cjs → chunk-FDQQOF3F.cjs} +47 -47
- package/dist/{chunk-73NPW5LY.cjs.map → chunk-FDQQOF3F.cjs.map} +1 -1
- package/dist/{chunk-HQTM6HLJ.cjs → chunk-I4YBVHAK.cjs} +457 -456
- package/dist/chunk-I4YBVHAK.cjs.map +1 -0
- package/dist/{chunk-F5P5V3XR.js → chunk-IV2252XM.js} +11 -10
- package/dist/chunk-IV2252XM.js.map +1 -0
- package/dist/{chunk-6UKMLPWP.js → chunk-JOUPIZ32.js} +3 -3
- package/dist/{chunk-6UKMLPWP.js.map → chunk-JOUPIZ32.js.map} +1 -1
- package/dist/{chunk-LG4B4CFA.cjs → chunk-RDQSVIXD.cjs} +15 -15
- package/dist/{chunk-LG4B4CFA.cjs.map → chunk-RDQSVIXD.cjs.map} +1 -1
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate--_TwHqAa.d.cts → delegate-BgpUJW5B.d.cts} +1 -1
- package/dist/{delegate-DbYSf9lY.d.ts → delegate-BuagcGnG.d.ts} +1 -1
- package/dist/{index-D-zl1tea.d.cts → index-CKmB14Yu.d.cts} +7 -2
- package/dist/{index-D-zl1tea.d.ts → index-CKmB14Yu.d.ts} +7 -2
- package/dist/{index--rMssbOo.d.cts → index-D0BuYwhF.d.cts} +2 -2
- package/dist/{index-BwYXDgZM.d.ts → index-DbzyrqK7.d.ts} +2 -2
- package/dist/index.cjs +305 -305
- package/dist/index.d.cts +12 -12
- package/dist/index.d.ts +12 -12
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +36 -36
- package/dist/repositories/realm/index.cjs.map +1 -1
- package/dist/repositories/realm/index.d.cts +4 -4
- package/dist/repositories/realm/index.d.ts +4 -4
- package/dist/repositories/realm/index.js +7 -7
- package/dist/repositories/realm/index.js.map +1 -1
- package/dist/repositories/sqlite/index.cjs +34 -34
- package/dist/repositories/sqlite/index.cjs.map +1 -1
- package/dist/repositories/sqlite/index.d.cts +4 -4
- package/dist/repositories/sqlite/index.d.ts +4 -4
- package/dist/repositories/sqlite/index.js +7 -7
- package/dist/repositories/sqlite/index.js.map +1 -1
- package/dist/{taskRunner-ChQpqvfy.d.ts → taskRunner-BX-pB0sv.d.ts} +1 -1
- package/dist/{taskRunner-DjzP-n_3.d.cts → taskRunner-DJrFFyus.d.cts} +1 -1
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +14 -14
- package/dist/wallet/expo/index.d.cts +4 -4
- package/dist/wallet/expo/index.d.ts +4 -4
- package/dist/wallet/expo/index.js +5 -5
- package/dist/{wallet-DfYA1QzQ.d.cts → wallet-BsL2G3Qb.d.cts} +2 -2
- package/dist/{wallet-BwCcOWEI.d.ts → wallet-DXNiCmq8.d.ts} +2 -2
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-F5P5V3XR.js.map +0 -1
- package/dist/chunk-HQTM6HLJ.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/repositories/realm/walletRepository.ts","../../../src/repositories/realm/contractRepository.ts","../../../src/repositories/realm/intentRepository.ts","../../../src/repositories/realm/virtualTxRepository.ts","../../../src/repositories/realm/schemas.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { ArkTransaction, ExtendedCoin, ExtendedVirtualCoin } from \"../../wallet\";\nimport type { Outpoint } from \"../../wallet\";\nimport {\n WalletRepository,\n WalletState,\n VtxoRepositoryKey,\n assertHistoryPageFilter,\n compareHistoryCursors,\n type TransactionHistoryPageFilter,\n type TransactionHistoryPageCursor,\n type ScriptVtxoCursor,\n type StoredVtxo,\n type ScriptVtxoPageOptions,\n} from \"../walletRepository\";\nimport { assertPageRequest, pageResult, type PageRequest, type PageResult } from \"../page\";\nimport {\n serializeVtxo,\n serializeUtxo,\n deserializeVtxo,\n deserializeUtxo,\n serializeAssets,\n deserializeAssets,\n SerializedTapLeaf,\n createdAtToIso,\n} from \"../serialization\";\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\nimport { checkSaveVtxosForScript } from \"../../contracts/vtxoOwnership\";\nimport { isVtxoSpent } from \"../../wallet/vtxo\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of WalletRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmWalletRepository implements WalletRepository {\n readonly version = 1 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVtxo\"));\n this.realm.delete(this.realm.objects(\"ArkUtxo\"));\n this.realm.delete(this.realm.objects(\"ArkTransaction\"));\n this.realm.delete(this.realm.objects(\"ArkWalletState\"));\n });\n }\n\n // ── VTXO management ────────────────────────────────────────────────\n\n async getVtxosPage(\n address: string,\n page: PageRequest<Outpoint>,\n ): Promise<PageResult<ExtendedVirtualCoin, Outpoint>> {\n return this.pageByAddress(\"ArkVtxo\", address, page, vtxoObjectToDomain);\n }\n\n async saveVtxos(address: string, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const vtxo of vtxos) {\n const s = serializeVtxo(vtxo);\n this.realm.create(\n \"ArkVtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n createdAt: createdAtToIso(s.createdAt),\n isUnrolled: s.isUnrolled ?? false,\n isSpent: s.isSpent === undefined ? null : s.isSpent,\n isSwept: s.isSwept === undefined ? null : s.isSwept,\n isPreconfirmed: s.isPreconfirmed === undefined ? null : s.isPreconfirmed,\n commitmentTxIdsJson: s.commitmentTxIds\n ? JSON.stringify(s.commitmentTxIds)\n : null,\n expiresAt:\n s.expiresAt === undefined ? null : new Date(s.expiresAt).toISOString(),\n expiresAtHeight: s.expiresAtHeight ?? null,\n spentBy: s.spentBy ?? null,\n settledBy: s.settledBy ?? null,\n arkTxId: s.arkTxId ?? null,\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n assetsJson: s.assets ? JSON.stringify(s.assets) : null,\n script: s.script ?? null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteVtxos(address: string): Promise<void> {\n return this.deleteWhere(\"ArkVtxo\", \"address\", address);\n }\n\n async getVtxosForScriptPage(\n script: string,\n page: PageRequest<ScriptVtxoCursor>,\n options?: ScriptVtxoPageOptions,\n ): Promise<PageResult<StoredVtxo, ScriptVtxoCursor>> {\n assertPageRequest(page);\n await this.ensureInit();\n let results = this.realm\n .objects<{ address: string; txid: string; vout: number }>(\"ArkVtxo\")\n .filtered(\"script == $0\", script);\n if (options?.unspentOnly) {\n results = results.filtered(\n \"(isSpent == null OR isSpent == $0) AND (spentBy == null OR spentBy == $1) AND (settledBy == null OR settledBy == $1)\",\n false,\n \"\",\n );\n }\n if (page.after) {\n results = results.filtered(\n \"address > $0 OR (address == $0 AND (txid > $1 OR (txid == $1 AND vout > $2)))\",\n page.after.address,\n page.after.txid,\n page.after.vout,\n );\n }\n const rows: StoredVtxo[] = [];\n for (const row of results.sorted([\n [\"address\", false],\n [\"txid\", false],\n [\"vout\", false],\n ])) {\n rows.push({ address: row.address, vtxo: vtxoObjectToDomain(row) });\n if (rows.length > page.limit) break;\n }\n const result = pageResult(rows, page.limit, (row) => ({\n address: row.address,\n txid: row.vtxo.txid,\n vout: row.vtxo.vout,\n }));\n return options?.unspentOnly\n ? { ...result, items: result.items.filter((row) => !isVtxoSpent(row.vtxo)) }\n : result;\n }\n\n async saveVtxosForScript(key: VtxoRepositoryKey, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n return this.saveVtxos(checkSaveVtxosForScript(\"RealmWalletRepository\", key, vtxos), vtxos);\n }\n\n async deleteVtxosForScript(script: string): Promise<void> {\n return this.deleteWhere(\"ArkVtxo\", \"script\", script);\n }\n\n // ── UTXO management ────────────────────────────────────────────────\n\n async getUtxosPage(\n address: string,\n page: PageRequest<Outpoint>,\n ): Promise<PageResult<ExtendedCoin, Outpoint>> {\n return this.pageByAddress(\"ArkUtxo\", address, page, utxoObjectToDomain);\n }\n\n private async pageByAddress<Item>(\n schema: string,\n address: string,\n page: PageRequest<Outpoint>,\n deserialize: (row: any) => Item,\n ): Promise<PageResult<Item, Outpoint>> {\n assertPageRequest(page);\n await this.ensureInit();\n let results = this.realm\n .objects<{ txid: string; vout: number }>(schema)\n .filtered(\"address == $0\", address);\n if (page.after) {\n results = results.filtered(\n \"txid > $0 OR (txid == $0 AND vout > $1)\",\n page.after.txid,\n page.after.vout,\n );\n }\n const rows: { key: Outpoint; item: Item }[] = [];\n for (const row of results.sorted([\n [\"txid\", false],\n [\"vout\", false],\n ])) {\n rows.push({ key: { txid: row.txid, vout: row.vout }, item: deserialize(row) });\n if (rows.length > page.limit) break;\n }\n const result = pageResult(rows, page.limit, (row) => row.key);\n return { items: result.items.map((row) => row.item), nextCursor: result.nextCursor };\n }\n\n async saveUtxos(address: string, utxos: ExtendedCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const utxo of utxos) {\n const s = serializeUtxo(utxo);\n this.realm.create(\n \"ArkUtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteUtxos(address: string): Promise<void> {\n return this.deleteWhere(\"ArkUtxo\", \"address\", address);\n }\n\n // ── Transaction history ────────────────────────────────────────────\n\n async getTransactionHistoryPage(\n filter: TransactionHistoryPageFilter,\n page: PageRequest<TransactionHistoryPageCursor>,\n ): Promise<PageResult<ArkTransaction, TransactionHistoryPageCursor>> {\n assertPageRequest(page);\n assertHistoryPageFilter(filter);\n let results = this.realm\n .objects(\"ArkTransaction\")\n .filtered(\"address == $0\", filter.address);\n results = results.filtered(\n \"createdAt >= $0\",\n Math.max(filter.since ?? 0, page.after?.createdAt ?? 0),\n );\n const rows: ArkTransaction[] = [];\n for (const row of results.sorted([\n [\"createdAt\", false],\n [\"boardingTxid\", false],\n [\"commitmentTxid\", false],\n [\"arkTxid\", false],\n ])) {\n const tx = txObjectToDomain(row);\n if (\n page.after !== undefined &&\n compareHistoryCursors({ createdAt: tx.createdAt, key: tx.key }, page.after) <= 0\n )\n continue;\n rows.push(tx);\n if (rows.length > page.limit) break;\n }\n return pageResult(rows, page.limit, (tx) => ({ createdAt: tx.createdAt, key: tx.key }));\n }\n\n async saveTransactions(address: string, txs: ArkTransaction[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const tx of txs) {\n this.realm.create(\n \"ArkTransaction\",\n {\n pk: `${address}:${tx.key.boardingTxid}:${tx.key.commitmentTxid}:${tx.key.arkTxid}`,\n address,\n boardingTxid: tx.key.boardingTxid,\n commitmentTxid: tx.key.commitmentTxid,\n arkTxid: tx.key.arkTxid,\n type: tx.type,\n amount: tx.amount,\n settled: tx.settled,\n createdAt: tx.createdAt,\n assetsJson: tx.assets ? JSON.stringify(serializeAssets(tx.assets)) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteTransactions(address: string): Promise<void> {\n return this.deleteWhere(\"ArkTransaction\", \"address\", address);\n }\n\n private async deleteWhere(objectType: string, field: string, value: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(objectType).filtered(`${field} == $0`, value);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Wallet state ───────────────────────────────────────────────────\n\n async getWalletState(): Promise<WalletState | null> {\n await this.ensureInit();\n const results = this.realm\n .objects<WalletStateObject>(\"ArkWalletState\")\n .filtered(\"key == $0\", \"state\");\n const items = [...results];\n if (items.length === 0) return null;\n\n const obj = items[0];\n const state: WalletState = {};\n if (obj.settingsJson) {\n state.settings = JSON.parse(obj.settingsJson);\n }\n state.lastSyncTime = obj.lastSyncTime ?? undefined;\n return state;\n }\n\n async saveWalletState(state: WalletState): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkWalletState\",\n {\n key: \"state\",\n lastSyncTime: state.lastSyncTime,\n settingsJson: state.settings ? JSON.stringify(state.settings) : null,\n },\n \"modified\",\n );\n });\n }\n}\n\ninterface WalletStateObject {\n key: string;\n lastSyncTime: number | null;\n settingsJson: string | null;\n}\n\n// ── Realm object → Domain converters ─────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction vtxoObjectToDomain(obj: any): ExtendedVirtualCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n createdAt: new Date(obj.createdAt),\n isUnrolled: obj.isUnrolled,\n isSpent: obj.isSpent === null ? undefined : obj.isSpent,\n isSwept: obj.isSwept == null ? undefined : obj.isSwept,\n isPreconfirmed: obj.isPreconfirmed == null ? undefined : obj.isPreconfirmed,\n commitmentTxIds: obj.commitmentTxIdsJson ? JSON.parse(obj.commitmentTxIdsJson) : undefined,\n expiresAt: obj.expiresAt ? new Date(obj.expiresAt) : undefined,\n expiresAtHeight: obj.expiresAtHeight ?? undefined,\n spentBy: obj.spentBy ?? undefined,\n settledBy: obj.settledBy ?? undefined,\n arkTxId: obj.arkTxId ?? undefined,\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n assets: obj.assetsJson ? JSON.parse(obj.assetsJson) : undefined,\n // Post-migration every row has `script`, but the backfill is\n // idempotent: derive from `address` if the legacy column is still\n // null (e.g. the migration hasn't run yet on this handle).\n script: obj.script ?? scriptFromArkAddress(obj.address),\n };\n\n return deserializeVtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction utxoObjectToDomain(obj: any): ExtendedCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n };\n\n return deserializeUtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction txObjectToDomain(obj: any): ArkTransaction {\n const tx: ArkTransaction = {\n key: {\n boardingTxid: obj.boardingTxid,\n commitmentTxid: obj.commitmentTxid,\n arkTxid: obj.arkTxid,\n },\n type: obj.type as ArkTransaction[\"type\"],\n amount: obj.amount,\n settled: obj.settled,\n createdAt: obj.createdAt,\n };\n if (obj.assetsJson) {\n tx.assets = deserializeAssets(JSON.parse(obj.assetsJson));\n }\n return tx;\n}\n","import { Contract, ContractState, ContractWatchState } from \"../../contracts/types\";\nimport {\n contractFilterMatchesNothing,\n ContractFilter,\n ContractRepository,\n} from \"../contractRepository\";\nimport { assertPageRequest, pageResult, type PageRequest, type PageResult } from \"../page\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of ContractRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmContractRepository implements ContractRepository {\n readonly version = 2 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkContract\"));\n });\n }\n\n // ── Contract management ────────────────────────────────────────────\n\n async getContractsPage(\n filter: ContractFilter | undefined,\n page: PageRequest,\n ): Promise<PageResult<Contract>> {\n assertPageRequest(page);\n if (contractFilterMatchesNothing(filter)) return { items: [] };\n let results = this.realm.objects(\"ArkContract\");\n const parts: string[] = [];\n const args: unknown[] = [];\n let argIndex = 0;\n if (filter) {\n argIndex = this.addFilterCondition(parts, args, \"script\", filter.script, argIndex);\n argIndex = this.addFilterCondition(parts, args, \"state\", filter.state, argIndex);\n argIndex = this.addFilterCondition(parts, args, \"type\", filter.type, argIndex);\n argIndex = this.addWatchCondition(parts, args, filter.watch, argIndex);\n }\n if (page.after !== undefined) {\n parts.push(`script > $${argIndex}`);\n args.push(page.after);\n }\n if (parts.length) results = results.filtered(parts.join(\" AND \"), ...args);\n const rows: Contract[] = [];\n for (const row of results.sorted(\"script\")) {\n rows.push(contractObjectToDomain(row));\n if (rows.length > page.limit) break;\n }\n return pageResult(rows, page.limit, (contract) => contract.script);\n }\n\n async saveContract(contract: Contract): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkContract\",\n {\n script: contract.script,\n address: contract.address,\n type: contract.type,\n state: contract.state,\n paramsJson: JSON.stringify(contract.params),\n createdAt: contract.createdAt,\n label: contract.label ?? null,\n metadataJson: contract.metadata ? JSON.stringify(contract.metadata) : null,\n watch: contract.watch ?? null,\n },\n \"modified\",\n );\n });\n }\n\n async deleteContract(script: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkContract\").filtered(\"script == $0\", script);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────\n\n private addFilterCondition(\n parts: string[],\n args: unknown[],\n column: string,\n value: string | string[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n if (Array.isArray(value)) {\n if (value.length === 0) return argIndex;\n const conditions = value.map((_, i) => {\n return `${column} == $${argIndex + i}`;\n });\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...value);\n return argIndex + value.length;\n } else {\n parts.push(`${column} == $${argIndex}`);\n args.push(value);\n return argIndex + 1;\n }\n }\n\n /**\n * Same as {@link addFilterCondition}, except a row predating the\n * property stores null and must match `\"watched\"`.\n */\n private addWatchCondition(\n parts: string[],\n args: unknown[],\n value: ContractWatchState | ContractWatchState[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n const wanted = Array.isArray(value) ? value : [value];\n if (wanted.length === 0) return argIndex;\n\n const conditions = wanted.map((_, i) => `watch == $${argIndex + i}`);\n if (wanted.includes(\"watched\")) conditions.push(\"watch == null\");\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...wanted);\n return argIndex + wanted.length;\n }\n}\n\n// ── Realm object → Domain converter ──────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction contractObjectToDomain(obj: any): Contract {\n const contract: Contract = {\n script: obj.script,\n address: obj.address,\n type: obj.type,\n state: obj.state as ContractState,\n params: JSON.parse(obj.paramsJson),\n createdAt: obj.createdAt,\n };\n\n if (obj.label !== null && obj.label !== undefined) {\n contract.label = obj.label;\n }\n if (obj.metadataJson !== null && obj.metadataJson !== undefined) {\n contract.metadata = JSON.parse(obj.metadataJson);\n }\n if (obj.watch !== null && obj.watch !== undefined) {\n contract.watch = obj.watch as ContractWatchState;\n }\n\n return contract;\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ArkIntent,\n ArkIntentState,\n assertIntentIdUnique,\n IntentPageFilter,\n IntentRepository,\n intentMatchesFilter,\n isTerminalIntentState,\n} from \"../intentRepository\";\nimport { assertPageRequest, pageResult, type PageRequest, type PageResult } from \"../page\";\nimport { RealmLike } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toIntent(o: any): ArkIntent {\n return {\n intentTxId: o.intentTxId,\n intentId: o.intentId ?? undefined,\n state: o.state as ArkIntentState,\n validFrom: o.validFrom ?? undefined,\n validUntil: o.validUntil ?? undefined,\n createdAt: o.createdAt,\n updatedAt: o.updatedAt,\n registerProof: o.registerProof,\n registerProofMessage: o.registerProofMessage,\n deleteProof: o.deleteProof,\n deleteProofMessage: o.deleteProofMessage,\n batchId: o.batchId ?? undefined,\n commitmentTransactionId: o.commitmentTransactionId ?? undefined,\n cancellationReason: o.cancellationReason ?? undefined,\n partialForfeits: JSON.parse(o.partialForfeitsJson),\n signerDescriptor: o.signerDescriptor ?? undefined,\n intentVtxos: JSON.parse(o.intentVtxosJson),\n };\n}\n\nexport class RealmIntentRepository implements IntentRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkIntent\"));\n });\n }\n\n async saveIntent(intent: ArkIntent): Promise<void> {\n this.realm.write(() => {\n if (intent.intentId != null) {\n const clashes = [\n ...this.realm.objects(\"ArkIntent\").filtered(\"intentId == $0\", intent.intentId),\n ].map(toIntent);\n assertIntentIdUnique(intent, clashes);\n }\n this.realm.create(\n \"ArkIntent\",\n {\n intentTxId: intent.intentTxId,\n intentId: intent.intentId ?? null,\n state: intent.state,\n validFrom: intent.validFrom ?? null,\n validUntil: intent.validUntil ?? null,\n createdAt: intent.createdAt,\n updatedAt: Date.now(),\n registerProof: intent.registerProof,\n registerProofMessage: intent.registerProofMessage,\n deleteProof: intent.deleteProof,\n deleteProofMessage: intent.deleteProofMessage,\n batchId: intent.batchId ?? null,\n commitmentTransactionId: intent.commitmentTransactionId ?? null,\n cancellationReason: intent.cancellationReason ?? null,\n partialForfeitsJson: JSON.stringify(intent.partialForfeits),\n signerDescriptor: intent.signerDescriptor ?? null,\n intentVtxosJson: JSON.stringify(intent.intentVtxos),\n },\n \"modified\",\n );\n });\n }\n\n async getIntentsPage(\n filter: IntentPageFilter | undefined,\n page: PageRequest,\n ): Promise<PageResult<ArkIntent>> {\n assertPageRequest(page);\n let results = this.realm.objects(\"ArkIntent\");\n if (page.after !== undefined) results = results.filtered(\"intentTxId > $0\", page.after);\n const rows: ArkIntent[] = [];\n for (const row of results.sorted(\"intentTxId\")) {\n const intent = toIntent(row);\n if (filter && !intentMatchesFilter(intent, filter)) continue;\n rows.push(intent);\n if (rows.length > page.limit) break;\n }\n return pageResult(rows, page.limit, (intent) => intent.intentTxId);\n }\n\n async getLockedVtxoOutpoints(): Promise<Outpoint[]> {\n const out: Outpoint[] = [];\n for (const o of [...this.realm.objects(\"ArkIntent\")].map(toIntent))\n if (!isTerminalIntentState(o.state)) out.push(...o.intentVtxos);\n return out;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ChainedTxType,\n mergeChainedTxType,\n VirtualTx,\n VirtualTxRepository,\n VtxoBranch,\n} from \"../virtualTxRepository\";\nimport { RealmLike } from \"./types\";\n\nconst vtxoKey = (o: Outpoint) => `${o.txid}:${o.vout}`;\nconst branchPk = (b: VtxoBranch) => `${b.vtxoTxid}:${b.vtxoVout}:${b.position}`;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toTx(o: any): VirtualTx {\n return {\n txid: o.txid,\n psbt: o.psbt ?? null,\n expiresAt: o.expiresAt ?? null,\n type: (o.type ?? ChainedTxType.Unspecified) as ChainedTxType,\n };\n}\n\nexport class RealmVirtualTxRepository implements VirtualTxRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVirtualTx\"));\n this.realm.delete(this.realm.objects(\"ArkVtxoBranch\"));\n });\n }\n\n async upsertVirtualTxs(txs: VirtualTx[]): Promise<void> {\n this.realm.write(() => {\n for (const t of txs) {\n const prev = [\n ...this.realm.objects<VirtualTx>(\"ArkVirtualTx\").filtered(\"txid == $0\", t.txid),\n ].at(0);\n this.realm.create(\n \"ArkVirtualTx\",\n {\n txid: t.txid,\n psbt: t.psbt ?? prev?.psbt ?? null,\n expiresAt: t.expiresAt ?? prev?.expiresAt ?? null,\n type: mergeChainedTxType(t.type, prev?.type),\n },\n \"modified\",\n );\n }\n });\n }\n\n async getVirtualTx(txid: string): Promise<VirtualTx | null> {\n const r = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", txid)];\n return r.length ? toTx(r[0]) : null;\n }\n\n async setBranch(vtxo: Outpoint, branch: VtxoBranch[]): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(\n this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n );\n for (const b of branch)\n this.realm.create(\n \"ArkVtxoBranch\",\n {\n pk: branchPk(b),\n vtxoKey: `${b.vtxoTxid}:${b.vtxoVout}`,\n vtxoTxid: b.vtxoTxid,\n vtxoVout: b.vtxoVout,\n virtualTxid: b.virtualTxid,\n position: b.position,\n },\n \"modified\",\n );\n });\n }\n\n async getBranch(vtxo: Outpoint): Promise<VirtualTx[]> {\n const rows = [\n ...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ] as any[];\n rows.sort((a, b) => a.position - b.position);\n const out: VirtualTx[] = [];\n for (const b of rows) {\n const t = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", b.virtualTxid)];\n if (t.length) out.push(toTx(t[0]));\n }\n return out;\n }\n\n async hasBranch(vtxo: Outpoint): Promise<boolean> {\n return (\n [...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo))]\n .length > 0\n );\n }\n\n async pruneForSpentVtxo(vtxo: Outpoint): Promise<void> {\n this.realm.write(() => {\n const branchRows = this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"vtxoKey == $0\", vtxoKey(vtxo));\n // Snapshot the referenced txids into plain strings BEFORE deleting.\n // Real Realm invalidates deleted objects, so reading `virtualTxid`\n // off them after `delete` throws (\"Accessing object which has been\n // invalidated\") — which would roll back the whole write() and make\n // prune a permanent no-op on React Native.\n const virtualTxids = [\n ...new Set(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [...branchRows].map((e: any) => e.virtualTxid as string),\n ),\n ];\n this.realm.delete(branchRows);\n for (const virtualTxid of virtualTxids) {\n const stillRef = [\n ...this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"virtualTxid == $0\", virtualTxid),\n ];\n if (stillRef.length === 0)\n this.realm.delete(\n this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", virtualTxid),\n );\n }\n });\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","/**\n * Realm object schemas for the Arkade wallet.\n *\n * All schema names are prefixed with \"Ark\" to avoid collisions with\n * other Realm schemas in the consuming application.\n *\n * Since `realm` is a peer dependency (not installed in this package),\n * schemas are defined as plain JS objects conforming to Realm's\n * ObjectSchema shape.\n */\n\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\nimport { legacyVtxoFacts } from \"../legacyVtxoFacts\";\n\nexport const ArkVtxoSchema = {\n name: \"ArkVtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n spentBy: \"string?\",\n settledBy: \"string?\",\n arkTxId: \"string?\",\n createdAt: \"string\", // ISO 8601\n isUnrolled: \"bool\",\n isSpent: \"bool?\",\n isSwept: \"bool?\",\n isPreconfirmed: \"bool?\",\n commitmentTxIdsJson: \"string?\",\n expiresAt: \"string?\", // ISO 8601\n expiresAtHeight: \"int?\",\n assetsJson: \"string?\",\n // scriptPubKey (hex) locking this VTXO, indexed so contract-scoped\n // queries can resolve ownership without touching address mapping.\n // Required as of schema v2; legacy rows are backfilled from `address`\n // during migration (see `runArkRealmMigrations`).\n script: { type: \"string\", indexed: true },\n },\n} as const;\n\nexport const ArkUtxoSchema = {\n name: \"ArkUtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n },\n} as const;\n\nexport const ArkTransactionSchema = {\n name: \"ArkTransaction\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${address}:${boardingTxid}:${commitmentTxid}:${arkTxid}`\n address: { type: \"string\", indexed: true },\n boardingTxid: \"string\",\n commitmentTxid: \"string\",\n arkTxid: \"string\",\n type: \"string\",\n amount: \"int\",\n settled: \"bool\",\n createdAt: \"int\",\n assetsJson: \"string?\",\n },\n} as const;\n\nexport const ArkWalletStateSchema = {\n name: \"ArkWalletState\",\n primaryKey: \"key\",\n properties: {\n key: \"string\",\n lastSyncTime: \"int?\",\n settingsJson: \"string?\",\n },\n} as const;\n\nexport const ArkContractSchema = {\n name: \"ArkContract\",\n primaryKey: \"script\",\n properties: {\n script: \"string\",\n address: \"string\",\n type: { type: \"string\", indexed: true },\n state: { type: \"string\", indexed: true },\n paramsJson: \"string\",\n createdAt: \"int\",\n expiresAt: \"int?\",\n label: \"string?\",\n metadataJson: \"string?\",\n watch: { type: \"string\", optional: true, indexed: true },\n },\n} as const;\n\nexport const ArkIntentSchema = {\n name: \"ArkIntent\",\n primaryKey: \"intentTxId\",\n properties: {\n intentTxId: \"string\",\n intentId: \"string?\",\n state: { type: \"string\", indexed: true },\n validFrom: \"int?\",\n validUntil: \"int?\",\n createdAt: \"int\",\n updatedAt: \"int\",\n registerProof: \"string\",\n registerProofMessage: \"string\",\n deleteProof: \"string\",\n deleteProofMessage: \"string\",\n batchId: \"string?\",\n commitmentTransactionId: \"string?\",\n cancellationReason: \"string?\",\n partialForfeitsJson: \"string\",\n signerDescriptor: \"string?\",\n intentVtxosJson: \"string\",\n },\n} as const;\n\nexport const ArkVirtualTxSchema = {\n name: \"ArkVirtualTx\",\n primaryKey: \"txid\",\n properties: {\n txid: \"string\",\n psbt: \"string?\",\n expiresAt: \"int?\",\n type: \"int\",\n },\n} as const;\n\nexport const ArkVtxoBranchSchema = {\n name: \"ArkVtxoBranch\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // `${vtxoTxid}:${vtxoVout}:${position}`\n vtxoKey: { type: \"string\", indexed: true }, // `${vtxoTxid}:${vtxoVout}`\n vtxoTxid: \"string\",\n vtxoVout: \"int\",\n virtualTxid: { type: \"string\", indexed: true },\n position: \"int\",\n },\n} as const;\n\n/**\n * All Realm schemas needed by the Arkade wallet repositories.\n * Pass this array to your Realm configuration's `schema` property.\n */\nexport const ArkRealmSchemas = [\n ArkVtxoSchema,\n ArkUtxoSchema,\n ArkTransactionSchema,\n ArkWalletStateSchema,\n ArkContractSchema,\n];\n\n/**\n * @experimental Schemas for the inert intent/virtualtx persistence layer.\n *\n * Deliberately kept OUT of {@link ArkRealmSchemas} and {@link\n * ARK_REALM_SCHEMA_VERSION} so upgrading the SDK never migrates an existing\n * consumer's Realm. A consumer opting in must register these schemas and bump\n * their own `schemaVersion` themselves:\n *\n * ```ts\n * schema: [...ArkRealmSchemas, ...ArkExperimentalRealmSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION + 1, yourSchemaVersion),\n * ```\n */\nexport const ArkExperimentalRealmSchemas = [\n ArkIntentSchema,\n ArkVirtualTxSchema,\n ArkVtxoBranchSchema,\n];\n\n/**\n * Current Realm schema version for the Arkade wallet.\n *\n * Consumers opening Realm must pass a `schemaVersion` at least this high so\n * legacy databases get migrated; merge it with your own app's version:\n *\n * ```ts\n * await Realm.open({\n * schema: [...ArkRealmSchemas, ...yourSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION, yourSchemaVersion),\n * onMigration: (oldRealm, newRealm) => {\n * runArkRealmMigrations(oldRealm, newRealm);\n * // your own migrations\n * },\n * });\n * ```\n *\n * History:\n * - v1: initial ArkVtxo/ArkUtxo/... schemas, `script` nullable.\n * - v2: ArkVtxo.script becomes required; NULL values are backfilled from\n * the owning Ark address during migration.\n * - v3: ArkContract.watch added (nullable). No data migration: a row\n * without one reads as `watched`, which is the coverage every\n * existing contract has today.\n * - v4: ArkVtxo.virtualStatusJson removed.\n * - v5: ArkVtxo stores the canonical VTXO facts that blob used to project —\n * `isSwept`, `isPreconfirmed`, `commitmentTxIdsJson`, `expiresAt`,\n * `expiresAtHeight` — backfilled from it during migration.\n *\n * The intent/virtualtx schemas ({@link ArkExperimentalRealmSchemas}) are NOT\n * counted here: they are experimental and inert, so they never move the\n * advertised version on their own. `runArkRealmMigrations` still carries the\n * intent-schema migration steps (guarded per-schema) for consumers who opt in\n * and bump their own version.\n */\nexport const ARK_REALM_SCHEMA_VERSION = 5;\n\n/**\n * Run every Arkade schema migration applicable to the open Realm.\n *\n * Designed to be composed with the consumer's own migrations inside a single\n * `onMigration` callback. Each migration step does a per-row check so it\n * remains idempotent and independent of the app's global `schemaVersion` —\n * a consumer whose app is already at version 10 can still trigger the\n * Arkade v1→v2 script backfill when the row has never been populated.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function runArkRealmMigrations(oldRealm: any, newRealm: any): void {\n // v4 → v5: the canonical facts used to live inside `virtualStatusJson`, which v4 drops. Realm\n // deletes a removed property from the new realm, so the old one is the only place left to read\n // it from — and without the copy a swept row comes back `isSwept: false`, spendable, until the\n // first indexer sync. Keyed by `pk` rather than by position: the two collections are parallel\n // in practice, but a mismatch here would write one row's state onto another's.\n const legacyByPk = new Map<string, unknown>();\n const oldVtxos = oldRealm?.objects?.(\"ArkVtxo\") ?? [];\n for (let i = 0; i < oldVtxos.length; i++) {\n const raw = oldVtxos[i].virtualStatusJson;\n if (raw) legacyByPk.set(oldVtxos[i].pk, raw);\n }\n\n const newVtxos = newRealm.objects(\"ArkVtxo\");\n for (let i = 0; i < newVtxos.length; i++) {\n const newVtxo = newVtxos[i];\n if (!newVtxo.script) {\n newVtxo.script = scriptFromArkAddress(newVtxo.address);\n }\n\n const facts = legacyVtxoFacts(legacyByPk.get(newVtxo.pk));\n // Only fill blanks: a row the new code has already written carries the authoritative value,\n // and the legacy projection is the lossier of the two.\n if (facts) {\n if (newVtxo.isSpent == null) newVtxo.isSpent = facts.isSpent;\n if (newVtxo.isSwept == null) newVtxo.isSwept = facts.isSwept;\n if (newVtxo.isPreconfirmed == null) newVtxo.isPreconfirmed = facts.isPreconfirmed;\n if (newVtxo.commitmentTxIdsJson == null && facts.commitmentTxIds) {\n newVtxo.commitmentTxIdsJson = JSON.stringify(facts.commitmentTxIds);\n }\n if (newVtxo.expiresAt == null && facts.expiresAt) {\n newVtxo.expiresAt = facts.expiresAt.toISOString();\n }\n if (newVtxo.expiresAtHeight == null && facts.expiresAtHeight !== undefined) {\n newVtxo.expiresAtHeight = facts.expiresAtHeight;\n }\n }\n }\n\n // ArkVirtualTx.hex was renamed to psbt (both hold the same serialized tx\n // payload). A rename is drop-old + add-new, so the value would be lost\n // unless we copy it across. The step is versioned by the consumer's own\n // counter, not by ARK_REALM_SCHEMA_VERSION: these schemas are opt-in and\n // never move it. Guard on the old schema actually defining ArkVirtualTx —\n // a realm that never opted in doesn't have it, and reading objects of an\n // unknown type throws.\n const oldHasVirtualTx =\n Array.isArray(oldRealm?.schema) &&\n oldRealm.schema.some((s: { name: string }) => s.name === \"ArkVirtualTx\");\n if (oldHasVirtualTx) {\n const oldTxs = oldRealm.objects(\"ArkVirtualTx\");\n const newTxs = newRealm.objects(\"ArkVirtualTx\");\n for (let i = 0; i < newTxs.length; i++) {\n if (newTxs[i].psbt == null && oldTxs[i].hex != null) {\n newTxs[i].psbt = oldTxs[i].hex;\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/repositories/realm/walletRepository.ts","../../../src/repositories/realm/contractRepository.ts","../../../src/repositories/realm/intentRepository.ts","../../../src/repositories/realm/virtualTxRepository.ts","../../../src/repositories/realm/schemas.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { ArkTransaction, ExtendedCoin, ExtendedVirtualCoin } from \"../../wallet\";\nimport type { Outpoint } from \"../../wallet\";\nimport {\n WalletRepository,\n WalletState,\n VtxoRepositoryKey,\n assertHistoryPageFilter,\n compareHistoryCursors,\n type TransactionHistoryPageFilter,\n type TransactionHistoryPageCursor,\n type ScriptVtxoCursor,\n type StoredVtxo,\n type ScriptVtxoPageOptions,\n} from \"../walletRepository\";\nimport { assertPageRequest, pageResult, type PageRequest, type PageResult } from \"../page\";\nimport {\n serializeVtxo,\n serializeUtxo,\n deserializeVtxo,\n deserializeUtxo,\n serializeAssets,\n deserializeAssets,\n SerializedTapLeaf,\n createdAtToIso,\n} from \"../serialization\";\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\nimport { checkSaveVtxosForScript } from \"../../contracts/vtxoOwnership\";\nimport { isVtxoSpent } from \"../../wallet/vtxo\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of WalletRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmWalletRepository implements WalletRepository {\n readonly version = 2 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVtxo\"));\n this.realm.delete(this.realm.objects(\"ArkUtxo\"));\n this.realm.delete(this.realm.objects(\"ArkTransaction\"));\n this.realm.delete(this.realm.objects(\"ArkWalletState\"));\n });\n }\n\n // ── VTXO management ────────────────────────────────────────────────\n\n async getVtxosPage(\n address: string,\n page: PageRequest<Outpoint>,\n ): Promise<PageResult<ExtendedVirtualCoin, Outpoint>> {\n return this.pageByAddress(\"ArkVtxo\", address, page, vtxoObjectToDomain);\n }\n\n async saveVtxos(address: string, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const vtxo of vtxos) {\n const s = serializeVtxo(vtxo);\n this.realm.create(\n \"ArkVtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n createdAt: createdAtToIso(s.createdAt),\n isUnrolled: s.isUnrolled ?? false,\n isSpent: s.isSpent === undefined ? null : s.isSpent,\n isSwept: s.isSwept === undefined ? null : s.isSwept,\n isPreconfirmed: s.isPreconfirmed === undefined ? null : s.isPreconfirmed,\n commitmentTxIdsJson: s.commitmentTxIds\n ? JSON.stringify(s.commitmentTxIds)\n : null,\n expiresAt:\n s.expiresAt === undefined ? null : new Date(s.expiresAt).toISOString(),\n expiresAtHeight: s.expiresAtHeight ?? null,\n spentBy: s.spentBy ?? null,\n settledBy: s.settledBy ?? null,\n arkTxId: s.arkTxId ?? null,\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n assetsJson: s.assets ? JSON.stringify(s.assets) : null,\n script: s.script ?? null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteVtxos(address: string): Promise<void> {\n return this.deleteWhere(\"ArkVtxo\", \"address\", address);\n }\n\n async getVtxosForScriptPage(\n script: string,\n page: PageRequest<ScriptVtxoCursor>,\n options?: ScriptVtxoPageOptions,\n ): Promise<PageResult<StoredVtxo, ScriptVtxoCursor>> {\n assertPageRequest(page);\n await this.ensureInit();\n let results = this.realm\n .objects<{ address: string; txid: string; vout: number }>(\"ArkVtxo\")\n .filtered(\"script == $0\", script);\n if (options?.unspentOnly) {\n results = results.filtered(\n \"(isSpent == null OR isSpent == $0) AND (spentBy == null OR spentBy == $1) AND (settledBy == null OR settledBy == $1)\",\n false,\n \"\",\n );\n }\n if (page.after) {\n results = results.filtered(\n \"address > $0 OR (address == $0 AND (txid > $1 OR (txid == $1 AND vout > $2)))\",\n page.after.address,\n page.after.txid,\n page.after.vout,\n );\n }\n const rows: StoredVtxo[] = [];\n for (const row of results.sorted([\n [\"address\", false],\n [\"txid\", false],\n [\"vout\", false],\n ])) {\n rows.push({ address: row.address, vtxo: vtxoObjectToDomain(row) });\n if (rows.length > page.limit) break;\n }\n const result = pageResult(rows, page.limit, (row) => ({\n address: row.address,\n txid: row.vtxo.txid,\n vout: row.vtxo.vout,\n }));\n return options?.unspentOnly\n ? { ...result, items: result.items.filter((row) => !isVtxoSpent(row.vtxo)) }\n : result;\n }\n\n async saveVtxosForScript(key: VtxoRepositoryKey, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n return this.saveVtxos(checkSaveVtxosForScript(\"RealmWalletRepository\", key, vtxos), vtxos);\n }\n\n async deleteVtxosForScript(script: string): Promise<void> {\n return this.deleteWhere(\"ArkVtxo\", \"script\", script);\n }\n\n // ── UTXO management ────────────────────────────────────────────────\n\n async getUtxosPage(\n address: string,\n page: PageRequest<Outpoint>,\n ): Promise<PageResult<ExtendedCoin, Outpoint>> {\n return this.pageByAddress(\"ArkUtxo\", address, page, utxoObjectToDomain);\n }\n\n private async pageByAddress<Item>(\n schema: string,\n address: string,\n page: PageRequest<Outpoint>,\n deserialize: (row: any) => Item,\n ): Promise<PageResult<Item, Outpoint>> {\n assertPageRequest(page);\n await this.ensureInit();\n let results = this.realm\n .objects<{ txid: string; vout: number }>(schema)\n .filtered(\"address == $0\", address);\n if (page.after) {\n results = results.filtered(\n \"txid > $0 OR (txid == $0 AND vout > $1)\",\n page.after.txid,\n page.after.vout,\n );\n }\n const rows: { key: Outpoint; item: Item }[] = [];\n for (const row of results.sorted([\n [\"txid\", false],\n [\"vout\", false],\n ])) {\n rows.push({ key: { txid: row.txid, vout: row.vout }, item: deserialize(row) });\n if (rows.length > page.limit) break;\n }\n const result = pageResult(rows, page.limit, (row) => row.key);\n return { items: result.items.map((row) => row.item), nextCursor: result.nextCursor };\n }\n\n async saveUtxos(address: string, utxos: ExtendedCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const utxo of utxos) {\n const s = serializeUtxo(utxo);\n this.realm.create(\n \"ArkUtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteUtxos(address: string): Promise<void> {\n return this.deleteWhere(\"ArkUtxo\", \"address\", address);\n }\n\n // ── Transaction history ────────────────────────────────────────────\n\n async getTransactionHistoryPage(\n filter: TransactionHistoryPageFilter,\n page: PageRequest<TransactionHistoryPageCursor>,\n ): Promise<PageResult<ArkTransaction, TransactionHistoryPageCursor>> {\n assertPageRequest(page);\n assertHistoryPageFilter(filter);\n let results = this.realm\n .objects(\"ArkTransaction\")\n .filtered(\"address == $0\", filter.address);\n results = results.filtered(\n \"createdAt >= $0\",\n Math.max(filter.since ?? 0, page.after?.createdAt ?? 0),\n );\n const rows: ArkTransaction[] = [];\n for (const row of results.sorted([\n [\"createdAt\", false],\n [\"boardingTxid\", false],\n [\"commitmentTxid\", false],\n [\"arkTxid\", false],\n ])) {\n const tx = txObjectToDomain(row);\n if (\n page.after !== undefined &&\n compareHistoryCursors({ createdAt: tx.createdAt, key: tx.key }, page.after) <= 0\n )\n continue;\n rows.push(tx);\n if (rows.length > page.limit) break;\n }\n return pageResult(rows, page.limit, (tx) => ({ createdAt: tx.createdAt, key: tx.key }));\n }\n\n async saveTransactions(address: string, txs: ArkTransaction[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const tx of txs) {\n this.realm.create(\n \"ArkTransaction\",\n {\n pk: `${address}:${tx.key.boardingTxid}:${tx.key.commitmentTxid}:${tx.key.arkTxid}`,\n address,\n boardingTxid: tx.key.boardingTxid,\n commitmentTxid: tx.key.commitmentTxid,\n arkTxid: tx.key.arkTxid,\n type: tx.type,\n amount: tx.amount,\n settled: tx.settled,\n createdAt: tx.createdAt,\n assetsJson: tx.assets ? JSON.stringify(serializeAssets(tx.assets)) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteTransactions(address: string): Promise<void> {\n return this.deleteWhere(\"ArkTransaction\", \"address\", address);\n }\n\n private async deleteWhere(objectType: string, field: string, value: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(objectType).filtered(`${field} == $0`, value);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Wallet state ───────────────────────────────────────────────────\n\n async getWalletState(): Promise<WalletState | null> {\n await this.ensureInit();\n const results = this.realm\n .objects<WalletStateObject>(\"ArkWalletState\")\n .filtered(\"key == $0\", \"state\");\n const items = [...results];\n if (items.length === 0) return null;\n\n const obj = items[0];\n const state: WalletState = {};\n if (obj.settingsJson) {\n state.settings = JSON.parse(obj.settingsJson);\n }\n state.lastSyncTime = obj.lastSyncTime ?? undefined;\n return state;\n }\n\n async saveWalletState(state: WalletState): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkWalletState\",\n {\n key: \"state\",\n lastSyncTime: state.lastSyncTime,\n settingsJson: state.settings ? JSON.stringify(state.settings) : null,\n },\n \"modified\",\n );\n });\n }\n}\n\ninterface WalletStateObject {\n key: string;\n lastSyncTime: number | null;\n settingsJson: string | null;\n}\n\n// ── Realm object → Domain converters ─────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction vtxoObjectToDomain(obj: any): ExtendedVirtualCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n createdAt: new Date(obj.createdAt),\n isUnrolled: obj.isUnrolled,\n isSpent: obj.isSpent === null ? undefined : obj.isSpent,\n isSwept: obj.isSwept == null ? undefined : obj.isSwept,\n isPreconfirmed: obj.isPreconfirmed == null ? undefined : obj.isPreconfirmed,\n commitmentTxIds: obj.commitmentTxIdsJson ? JSON.parse(obj.commitmentTxIdsJson) : undefined,\n expiresAt: obj.expiresAt ? new Date(obj.expiresAt) : undefined,\n expiresAtHeight: obj.expiresAtHeight ?? undefined,\n spentBy: obj.spentBy ?? undefined,\n settledBy: obj.settledBy ?? undefined,\n arkTxId: obj.arkTxId ?? undefined,\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n assets: obj.assetsJson ? JSON.parse(obj.assetsJson) : undefined,\n // Post-migration every row has `script`, but the backfill is\n // idempotent: derive from `address` if the legacy column is still\n // null (e.g. the migration hasn't run yet on this handle).\n script: obj.script ?? scriptFromArkAddress(obj.address),\n };\n\n return deserializeVtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction utxoObjectToDomain(obj: any): ExtendedCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n };\n\n return deserializeUtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction txObjectToDomain(obj: any): ArkTransaction {\n const tx: ArkTransaction = {\n key: {\n boardingTxid: obj.boardingTxid,\n commitmentTxid: obj.commitmentTxid,\n arkTxid: obj.arkTxid,\n },\n type: obj.type as ArkTransaction[\"type\"],\n amount: obj.amount,\n settled: obj.settled,\n createdAt: obj.createdAt,\n };\n if (obj.assetsJson) {\n tx.assets = deserializeAssets(JSON.parse(obj.assetsJson));\n }\n return tx;\n}\n","import { Contract, ContractState, ContractWatchState } from \"../../contracts/types\";\nimport {\n contractFilterMatchesNothing,\n ContractFilter,\n ContractRepository,\n} from \"../contractRepository\";\nimport { assertPageRequest, pageResult, type PageRequest, type PageResult } from \"../page\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of ContractRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmContractRepository implements ContractRepository {\n readonly version = 3 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkContract\"));\n });\n }\n\n // ── Contract management ────────────────────────────────────────────\n\n async getContractsPage(\n filter: ContractFilter | undefined,\n page: PageRequest,\n ): Promise<PageResult<Contract>> {\n assertPageRequest(page);\n if (contractFilterMatchesNothing(filter)) return { items: [] };\n let results = this.realm.objects(\"ArkContract\");\n const parts: string[] = [];\n const args: unknown[] = [];\n let argIndex = 0;\n if (filter) {\n argIndex = this.addFilterCondition(parts, args, \"script\", filter.script, argIndex);\n argIndex = this.addFilterCondition(parts, args, \"state\", filter.state, argIndex);\n argIndex = this.addFilterCondition(parts, args, \"type\", filter.type, argIndex);\n argIndex = this.addWatchCondition(parts, args, filter.watch, argIndex);\n }\n if (page.after !== undefined) {\n parts.push(`script > $${argIndex}`);\n args.push(page.after);\n }\n if (parts.length) results = results.filtered(parts.join(\" AND \"), ...args);\n const rows: Contract[] = [];\n for (const row of results.sorted(\"script\")) {\n rows.push(contractObjectToDomain(row));\n if (rows.length > page.limit) break;\n }\n return pageResult(rows, page.limit, (contract) => contract.script);\n }\n\n async saveContract(contract: Contract): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkContract\",\n {\n script: contract.script,\n address: contract.address,\n type: contract.type,\n state: contract.state,\n paramsJson: JSON.stringify(contract.params),\n createdAt: contract.createdAt,\n label: contract.label ?? null,\n metadataJson: contract.metadata ? JSON.stringify(contract.metadata) : null,\n watch: contract.watch ?? null,\n },\n \"modified\",\n );\n });\n }\n\n async deleteContract(script: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkContract\").filtered(\"script == $0\", script);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────\n\n private addFilterCondition(\n parts: string[],\n args: unknown[],\n column: string,\n value: string | string[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n if (Array.isArray(value)) {\n if (value.length === 0) return argIndex;\n const conditions = value.map((_, i) => {\n return `${column} == $${argIndex + i}`;\n });\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...value);\n return argIndex + value.length;\n } else {\n parts.push(`${column} == $${argIndex}`);\n args.push(value);\n return argIndex + 1;\n }\n }\n\n /**\n * Same as {@link addFilterCondition}, except a row predating the\n * property stores null and must match `\"watched\"`.\n */\n private addWatchCondition(\n parts: string[],\n args: unknown[],\n value: ContractWatchState | ContractWatchState[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n const wanted = Array.isArray(value) ? value : [value];\n if (wanted.length === 0) return argIndex;\n\n const conditions = wanted.map((_, i) => `watch == $${argIndex + i}`);\n if (wanted.includes(\"watched\")) conditions.push(\"watch == null\");\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...wanted);\n return argIndex + wanted.length;\n }\n}\n\n// ── Realm object → Domain converter ──────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction contractObjectToDomain(obj: any): Contract {\n const contract: Contract = {\n script: obj.script,\n address: obj.address,\n type: obj.type,\n state: obj.state as ContractState,\n params: JSON.parse(obj.paramsJson),\n createdAt: obj.createdAt,\n };\n\n if (obj.label !== null && obj.label !== undefined) {\n contract.label = obj.label;\n }\n if (obj.metadataJson !== null && obj.metadataJson !== undefined) {\n contract.metadata = JSON.parse(obj.metadataJson);\n }\n if (obj.watch !== null && obj.watch !== undefined) {\n contract.watch = obj.watch as ContractWatchState;\n }\n\n return contract;\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ArkIntent,\n ArkIntentState,\n assertIntentIdUnique,\n IntentPageFilter,\n IntentRepository,\n intentMatchesFilter,\n isTerminalIntentState,\n} from \"../intentRepository\";\nimport { assertPageRequest, pageResult, type PageRequest, type PageResult } from \"../page\";\nimport { RealmLike } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toIntent(o: any): ArkIntent {\n return {\n intentTxId: o.intentTxId,\n intentId: o.intentId ?? undefined,\n state: o.state as ArkIntentState,\n validFrom: o.validFrom ?? undefined,\n validUntil: o.validUntil ?? undefined,\n createdAt: o.createdAt,\n updatedAt: o.updatedAt,\n registerProof: o.registerProof,\n registerProofMessage: o.registerProofMessage,\n deleteProof: o.deleteProof,\n deleteProofMessage: o.deleteProofMessage,\n batchId: o.batchId ?? undefined,\n commitmentTransactionId: o.commitmentTransactionId ?? undefined,\n cancellationReason: o.cancellationReason ?? undefined,\n partialForfeits: JSON.parse(o.partialForfeitsJson),\n signerDescriptor: o.signerDescriptor ?? undefined,\n intentVtxos: JSON.parse(o.intentVtxosJson),\n };\n}\n\nexport class RealmIntentRepository implements IntentRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkIntent\"));\n });\n }\n\n async saveIntent(intent: ArkIntent): Promise<void> {\n this.realm.write(() => {\n if (intent.intentId != null) {\n const clashes = [\n ...this.realm.objects(\"ArkIntent\").filtered(\"intentId == $0\", intent.intentId),\n ].map(toIntent);\n assertIntentIdUnique(intent, clashes);\n }\n this.realm.create(\n \"ArkIntent\",\n {\n intentTxId: intent.intentTxId,\n intentId: intent.intentId ?? null,\n state: intent.state,\n validFrom: intent.validFrom ?? null,\n validUntil: intent.validUntil ?? null,\n createdAt: intent.createdAt,\n updatedAt: Date.now(),\n registerProof: intent.registerProof,\n registerProofMessage: intent.registerProofMessage,\n deleteProof: intent.deleteProof,\n deleteProofMessage: intent.deleteProofMessage,\n batchId: intent.batchId ?? null,\n commitmentTransactionId: intent.commitmentTransactionId ?? null,\n cancellationReason: intent.cancellationReason ?? null,\n partialForfeitsJson: JSON.stringify(intent.partialForfeits),\n signerDescriptor: intent.signerDescriptor ?? null,\n intentVtxosJson: JSON.stringify(intent.intentVtxos),\n },\n \"modified\",\n );\n });\n }\n\n async getIntentsPage(\n filter: IntentPageFilter | undefined,\n page: PageRequest,\n ): Promise<PageResult<ArkIntent>> {\n assertPageRequest(page);\n let results = this.realm.objects(\"ArkIntent\");\n if (page.after !== undefined) results = results.filtered(\"intentTxId > $0\", page.after);\n const rows: ArkIntent[] = [];\n for (const row of results.sorted(\"intentTxId\")) {\n const intent = toIntent(row);\n if (filter && !intentMatchesFilter(intent, filter)) continue;\n rows.push(intent);\n if (rows.length > page.limit) break;\n }\n return pageResult(rows, page.limit, (intent) => intent.intentTxId);\n }\n\n async getLockedVtxoOutpoints(): Promise<Outpoint[]> {\n const out: Outpoint[] = [];\n for (const o of [...this.realm.objects(\"ArkIntent\")].map(toIntent))\n if (!isTerminalIntentState(o.state)) out.push(...o.intentVtxos);\n return out;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ChainedTxType,\n mergeChainedTxType,\n VirtualTx,\n VirtualTxRepository,\n VtxoBranch,\n} from \"../virtualTxRepository\";\nimport { RealmLike } from \"./types\";\n\nconst vtxoKey = (o: Outpoint) => `${o.txid}:${o.vout}`;\nconst branchPk = (b: VtxoBranch) => `${b.vtxoTxid}:${b.vtxoVout}:${b.position}`;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toTx(o: any): VirtualTx {\n return {\n txid: o.txid,\n psbt: o.psbt ?? null,\n expiresAt: o.expiresAt ?? null,\n type: (o.type ?? ChainedTxType.Unspecified) as ChainedTxType,\n };\n}\n\nexport class RealmVirtualTxRepository implements VirtualTxRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVirtualTx\"));\n this.realm.delete(this.realm.objects(\"ArkVtxoBranch\"));\n });\n }\n\n async upsertVirtualTxs(txs: VirtualTx[]): Promise<void> {\n this.realm.write(() => {\n for (const t of txs) {\n const prev = [\n ...this.realm.objects<VirtualTx>(\"ArkVirtualTx\").filtered(\"txid == $0\", t.txid),\n ].at(0);\n this.realm.create(\n \"ArkVirtualTx\",\n {\n txid: t.txid,\n psbt: t.psbt ?? prev?.psbt ?? null,\n expiresAt: t.expiresAt ?? prev?.expiresAt ?? null,\n type: mergeChainedTxType(t.type, prev?.type),\n },\n \"modified\",\n );\n }\n });\n }\n\n async getVirtualTx(txid: string): Promise<VirtualTx | null> {\n const r = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", txid)];\n return r.length ? toTx(r[0]) : null;\n }\n\n async setBranch(vtxo: Outpoint, branch: VtxoBranch[]): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(\n this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n );\n for (const b of branch)\n this.realm.create(\n \"ArkVtxoBranch\",\n {\n pk: branchPk(b),\n vtxoKey: `${b.vtxoTxid}:${b.vtxoVout}`,\n vtxoTxid: b.vtxoTxid,\n vtxoVout: b.vtxoVout,\n virtualTxid: b.virtualTxid,\n position: b.position,\n },\n \"modified\",\n );\n });\n }\n\n async getBranch(vtxo: Outpoint): Promise<VirtualTx[]> {\n const rows = [\n ...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ] as any[];\n rows.sort((a, b) => a.position - b.position);\n const out: VirtualTx[] = [];\n for (const b of rows) {\n const t = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", b.virtualTxid)];\n if (t.length) out.push(toTx(t[0]));\n }\n return out;\n }\n\n async hasBranch(vtxo: Outpoint): Promise<boolean> {\n return (\n [...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo))]\n .length > 0\n );\n }\n\n async pruneForSpentVtxo(vtxo: Outpoint): Promise<void> {\n this.realm.write(() => {\n const branchRows = this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"vtxoKey == $0\", vtxoKey(vtxo));\n // Snapshot the referenced txids into plain strings BEFORE deleting.\n // Real Realm invalidates deleted objects, so reading `virtualTxid`\n // off them after `delete` throws (\"Accessing object which has been\n // invalidated\") — which would roll back the whole write() and make\n // prune a permanent no-op on React Native.\n const virtualTxids = [\n ...new Set(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [...branchRows].map((e: any) => e.virtualTxid as string),\n ),\n ];\n this.realm.delete(branchRows);\n for (const virtualTxid of virtualTxids) {\n const stillRef = [\n ...this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"virtualTxid == $0\", virtualTxid),\n ];\n if (stillRef.length === 0)\n this.realm.delete(\n this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", virtualTxid),\n );\n }\n });\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","/**\n * Realm object schemas for the Arkade wallet.\n *\n * All schema names are prefixed with \"Ark\" to avoid collisions with\n * other Realm schemas in the consuming application.\n *\n * Since `realm` is a peer dependency (not installed in this package),\n * schemas are defined as plain JS objects conforming to Realm's\n * ObjectSchema shape.\n */\n\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\nimport { legacyVtxoFacts } from \"../legacyVtxoFacts\";\n\nexport const ArkVtxoSchema = {\n name: \"ArkVtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n spentBy: \"string?\",\n settledBy: \"string?\",\n arkTxId: \"string?\",\n createdAt: \"string\", // ISO 8601\n isUnrolled: \"bool\",\n isSpent: \"bool?\",\n isSwept: \"bool?\",\n isPreconfirmed: \"bool?\",\n commitmentTxIdsJson: \"string?\",\n expiresAt: \"string?\", // ISO 8601\n expiresAtHeight: \"int?\",\n assetsJson: \"string?\",\n // scriptPubKey (hex) locking this VTXO, indexed so contract-scoped\n // queries can resolve ownership without touching address mapping.\n // Required as of schema v2; legacy rows are backfilled from `address`\n // during migration (see `runArkRealmMigrations`).\n script: { type: \"string\", indexed: true },\n },\n} as const;\n\nexport const ArkUtxoSchema = {\n name: \"ArkUtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n },\n} as const;\n\nexport const ArkTransactionSchema = {\n name: \"ArkTransaction\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${address}:${boardingTxid}:${commitmentTxid}:${arkTxid}`\n address: { type: \"string\", indexed: true },\n boardingTxid: \"string\",\n commitmentTxid: \"string\",\n arkTxid: \"string\",\n type: \"string\",\n amount: \"int\",\n settled: \"bool\",\n createdAt: \"int\",\n assetsJson: \"string?\",\n },\n} as const;\n\nexport const ArkWalletStateSchema = {\n name: \"ArkWalletState\",\n primaryKey: \"key\",\n properties: {\n key: \"string\",\n lastSyncTime: \"int?\",\n settingsJson: \"string?\",\n },\n} as const;\n\nexport const ArkContractSchema = {\n name: \"ArkContract\",\n primaryKey: \"script\",\n properties: {\n script: \"string\",\n address: \"string\",\n type: { type: \"string\", indexed: true },\n state: { type: \"string\", indexed: true },\n paramsJson: \"string\",\n createdAt: \"int\",\n expiresAt: \"int?\",\n label: \"string?\",\n metadataJson: \"string?\",\n watch: { type: \"string\", optional: true, indexed: true },\n },\n} as const;\n\nexport const ArkIntentSchema = {\n name: \"ArkIntent\",\n primaryKey: \"intentTxId\",\n properties: {\n intentTxId: \"string\",\n intentId: \"string?\",\n state: { type: \"string\", indexed: true },\n validFrom: \"int?\",\n validUntil: \"int?\",\n createdAt: \"int\",\n updatedAt: \"int\",\n registerProof: \"string\",\n registerProofMessage: \"string\",\n deleteProof: \"string\",\n deleteProofMessage: \"string\",\n batchId: \"string?\",\n commitmentTransactionId: \"string?\",\n cancellationReason: \"string?\",\n partialForfeitsJson: \"string\",\n signerDescriptor: \"string?\",\n intentVtxosJson: \"string\",\n },\n} as const;\n\nexport const ArkVirtualTxSchema = {\n name: \"ArkVirtualTx\",\n primaryKey: \"txid\",\n properties: {\n txid: \"string\",\n psbt: \"string?\",\n expiresAt: \"int?\",\n type: \"int\",\n },\n} as const;\n\nexport const ArkVtxoBranchSchema = {\n name: \"ArkVtxoBranch\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // `${vtxoTxid}:${vtxoVout}:${position}`\n vtxoKey: { type: \"string\", indexed: true }, // `${vtxoTxid}:${vtxoVout}`\n vtxoTxid: \"string\",\n vtxoVout: \"int\",\n virtualTxid: { type: \"string\", indexed: true },\n position: \"int\",\n },\n} as const;\n\n/**\n * All Realm schemas needed by the Arkade wallet repositories.\n * Pass this array to your Realm configuration's `schema` property.\n */\nexport const ArkRealmSchemas = [\n ArkVtxoSchema,\n ArkUtxoSchema,\n ArkTransactionSchema,\n ArkWalletStateSchema,\n ArkContractSchema,\n];\n\n/**\n * @experimental Schemas for the inert intent/virtualtx persistence layer.\n *\n * Deliberately kept OUT of {@link ArkRealmSchemas} and {@link\n * ARK_REALM_SCHEMA_VERSION} so upgrading the SDK never migrates an existing\n * consumer's Realm. A consumer opting in must register these schemas and bump\n * their own `schemaVersion` themselves:\n *\n * ```ts\n * schema: [...ArkRealmSchemas, ...ArkExperimentalRealmSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION + 1, yourSchemaVersion),\n * ```\n */\nexport const ArkExperimentalRealmSchemas = [\n ArkIntentSchema,\n ArkVirtualTxSchema,\n ArkVtxoBranchSchema,\n];\n\n/**\n * Current Realm schema version for the Arkade wallet.\n *\n * Consumers opening Realm must pass a `schemaVersion` at least this high so\n * legacy databases get migrated; merge it with your own app's version:\n *\n * ```ts\n * await Realm.open({\n * schema: [...ArkRealmSchemas, ...yourSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION, yourSchemaVersion),\n * onMigration: (oldRealm, newRealm) => {\n * runArkRealmMigrations(oldRealm, newRealm);\n * // your own migrations\n * },\n * });\n * ```\n *\n * History:\n * - v1: initial ArkVtxo/ArkUtxo/... schemas, `script` nullable.\n * - v2: ArkVtxo.script becomes required; NULL values are backfilled from\n * the owning Ark address during migration.\n * - v3: ArkContract.watch added (nullable). No data migration: a row\n * without one reads as `watched`, which is the coverage every\n * existing contract has today.\n * - v4: ArkVtxo.virtualStatusJson removed.\n * - v5: ArkVtxo stores the canonical VTXO facts that blob used to project —\n * `isSwept`, `isPreconfirmed`, `commitmentTxIdsJson`, `expiresAt`,\n * `expiresAtHeight` — backfilled from it during migration.\n *\n * The intent/virtualtx schemas ({@link ArkExperimentalRealmSchemas}) are NOT\n * counted here: they are experimental and inert, so they never move the\n * advertised version on their own. `runArkRealmMigrations` still carries the\n * intent-schema migration steps (guarded per-schema) for consumers who opt in\n * and bump their own version.\n */\nexport const ARK_REALM_SCHEMA_VERSION = 5;\n\n/**\n * Run every Arkade schema migration applicable to the open Realm.\n *\n * Designed to be composed with the consumer's own migrations inside a single\n * `onMigration` callback. Each migration step does a per-row check so it\n * remains idempotent and independent of the app's global `schemaVersion` —\n * a consumer whose app is already at version 10 can still trigger the\n * Arkade v1→v2 script backfill when the row has never been populated.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function runArkRealmMigrations(oldRealm: any, newRealm: any): void {\n // v4 → v5: the canonical facts used to live inside `virtualStatusJson`, which v4 drops. Realm\n // deletes a removed property from the new realm, so the old one is the only place left to read\n // it from — and without the copy a swept row comes back `isSwept: false`, spendable, until the\n // first indexer sync. Keyed by `pk` rather than by position: the two collections are parallel\n // in practice, but a mismatch here would write one row's state onto another's.\n const legacyByPk = new Map<string, unknown>();\n const oldVtxos = oldRealm?.objects?.(\"ArkVtxo\") ?? [];\n for (let i = 0; i < oldVtxos.length; i++) {\n const raw = oldVtxos[i].virtualStatusJson;\n if (raw) legacyByPk.set(oldVtxos[i].pk, raw);\n }\n\n const newVtxos = newRealm.objects(\"ArkVtxo\");\n for (let i = 0; i < newVtxos.length; i++) {\n const newVtxo = newVtxos[i];\n if (!newVtxo.script) {\n newVtxo.script = scriptFromArkAddress(newVtxo.address);\n }\n\n const facts = legacyVtxoFacts(legacyByPk.get(newVtxo.pk));\n // Only fill blanks: a row the new code has already written carries the authoritative value,\n // and the legacy projection is the lossier of the two.\n if (facts) {\n if (newVtxo.isSpent == null) newVtxo.isSpent = facts.isSpent;\n if (newVtxo.isSwept == null) newVtxo.isSwept = facts.isSwept;\n if (newVtxo.isPreconfirmed == null) newVtxo.isPreconfirmed = facts.isPreconfirmed;\n if (newVtxo.commitmentTxIdsJson == null && facts.commitmentTxIds) {\n newVtxo.commitmentTxIdsJson = JSON.stringify(facts.commitmentTxIds);\n }\n if (newVtxo.expiresAt == null && facts.expiresAt) {\n newVtxo.expiresAt = facts.expiresAt.toISOString();\n }\n if (newVtxo.expiresAtHeight == null && facts.expiresAtHeight !== undefined) {\n newVtxo.expiresAtHeight = facts.expiresAtHeight;\n }\n }\n }\n\n // ArkVirtualTx.hex was renamed to psbt (both hold the same serialized tx\n // payload). A rename is drop-old + add-new, so the value would be lost\n // unless we copy it across. The step is versioned by the consumer's own\n // counter, not by ARK_REALM_SCHEMA_VERSION: these schemas are opt-in and\n // never move it. Guard on the old schema actually defining ArkVirtualTx —\n // a realm that never opted in doesn't have it, and reading objects of an\n // unknown type throws.\n const oldHasVirtualTx =\n Array.isArray(oldRealm?.schema) &&\n oldRealm.schema.some((s: { name: string }) => s.name === \"ArkVirtualTx\");\n if (oldHasVirtualTx) {\n const oldTxs = oldRealm.objects(\"ArkVirtualTx\");\n const newTxs = newRealm.objects(\"ArkVirtualTx\");\n for (let i = 0; i < newTxs.length; i++) {\n if (newTxs[i].psbt == null && oldTxs[i].hex != null) {\n newTxs[i].psbt = oldTxs[i].hex;\n }\n }\n }\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../../chunk-
|
|
5
|
-
require('../../chunk-
|
|
6
|
-
var
|
|
3
|
+
var chunkI4YBVHAK_cjs = require('../../chunk-I4YBVHAK.cjs');
|
|
4
|
+
require('../../chunk-BFQX2KS3.cjs');
|
|
5
|
+
require('../../chunk-FDQQOF3F.cjs');
|
|
6
|
+
var chunk7NK6XFC3_cjs = require('../../chunk-7NK6XFC3.cjs');
|
|
7
7
|
|
|
8
8
|
// src/repositories/sqlite/transaction.ts
|
|
9
9
|
var writeChains = /* @__PURE__ */ new WeakMap();
|
|
@@ -50,7 +50,7 @@ var SQLiteWalletRepository = class {
|
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
db;
|
|
53
|
-
version =
|
|
53
|
+
version = 2;
|
|
54
54
|
initPromise = null;
|
|
55
55
|
prefix;
|
|
56
56
|
tables;
|
|
@@ -199,7 +199,7 @@ var SQLiteWalletRepository = class {
|
|
|
199
199
|
for (const row of nullRows) {
|
|
200
200
|
await this.db.run(
|
|
201
201
|
`UPDATE ${this.tables.vtxos} SET script = ? WHERE txid = ? AND vout = ?`,
|
|
202
|
-
[
|
|
202
|
+
[chunkI4YBVHAK_cjs.scriptFromArkAddress(row.address), row.txid, row.vout]
|
|
203
203
|
);
|
|
204
204
|
}
|
|
205
205
|
const tempName = `${this.tables.vtxos}__migrate_tmp`;
|
|
@@ -240,7 +240,7 @@ var SQLiteWalletRepository = class {
|
|
|
240
240
|
WHERE virtual_status_json IS NOT NULL AND is_swept IS NULL`
|
|
241
241
|
);
|
|
242
242
|
for (const row of rows) {
|
|
243
|
-
const facts =
|
|
243
|
+
const facts = chunkI4YBVHAK_cjs.legacyVtxoFacts(row.virtual_status_json);
|
|
244
244
|
if (!facts) continue;
|
|
245
245
|
await this.db.run(
|
|
246
246
|
`UPDATE ${this.tables.vtxos}
|
|
@@ -307,7 +307,7 @@ var SQLiteWalletRepository = class {
|
|
|
307
307
|
async saveVtxos(address, vtxos) {
|
|
308
308
|
await this.ensureInit();
|
|
309
309
|
for (const vtxo of vtxos) {
|
|
310
|
-
const s =
|
|
310
|
+
const s = chunkI4YBVHAK_cjs.serializeVtxo(vtxo);
|
|
311
311
|
await this.db.run(
|
|
312
312
|
`INSERT OR REPLACE INTO ${this.tables.vtxos}
|
|
313
313
|
(txid, vout, value, address,
|
|
@@ -333,7 +333,7 @@ var SQLiteWalletRepository = class {
|
|
|
333
333
|
s.intentTapLeafScript.cb,
|
|
334
334
|
s.intentTapLeafScript.s,
|
|
335
335
|
JSON.stringify(s.status),
|
|
336
|
-
|
|
336
|
+
chunkI4YBVHAK_cjs.createdAtToIso(s.createdAt),
|
|
337
337
|
s.isUnrolled ? 1 : 0,
|
|
338
338
|
s.isSpent === void 0 ? null : s.isSpent ? 1 : 0,
|
|
339
339
|
s.isSwept === void 0 ? null : s.isSwept ? 1 : 0,
|
|
@@ -356,7 +356,7 @@ var SQLiteWalletRepository = class {
|
|
|
356
356
|
await this.db.run(`DELETE FROM ${this.tables.vtxos} WHERE address = ?`, [address]);
|
|
357
357
|
}
|
|
358
358
|
async getVtxosForScriptPage(script, page, options) {
|
|
359
|
-
|
|
359
|
+
chunkI4YBVHAK_cjs.assertPageRequest(page);
|
|
360
360
|
await this.ensureInit();
|
|
361
361
|
const after = page.after;
|
|
362
362
|
const rows = await this.db.all(
|
|
@@ -374,15 +374,15 @@ var SQLiteWalletRepository = class {
|
|
|
374
374
|
page.limit + 1
|
|
375
375
|
] : [script, page.limit + 1]
|
|
376
376
|
);
|
|
377
|
-
const result =
|
|
377
|
+
const result = chunkI4YBVHAK_cjs.pageResult(
|
|
378
378
|
rows.map((row) => ({ address: row.address, vtxo: vtxoRowToDomain(row) })),
|
|
379
379
|
page.limit,
|
|
380
380
|
(row) => ({ address: row.address, txid: row.vtxo.txid, vout: row.vtxo.vout })
|
|
381
381
|
);
|
|
382
|
-
return options?.unspentOnly ? { ...result, items: result.items.filter((row) => !
|
|
382
|
+
return options?.unspentOnly ? { ...result, items: result.items.filter((row) => !chunk7NK6XFC3_cjs.isVtxoSpent(row.vtxo)) } : result;
|
|
383
383
|
}
|
|
384
384
|
async saveVtxosForScript(key, vtxos) {
|
|
385
|
-
return this.saveVtxos(
|
|
385
|
+
return this.saveVtxos(chunkI4YBVHAK_cjs.checkSaveVtxosForScript("SQLiteWalletRepository", key, vtxos), vtxos);
|
|
386
386
|
}
|
|
387
387
|
async deleteVtxosForScript(script) {
|
|
388
388
|
await this.ensureInit();
|
|
@@ -393,20 +393,20 @@ var SQLiteWalletRepository = class {
|
|
|
393
393
|
return this.pageByAddress(this.tables.utxos, address, page, utxoRowToDomain);
|
|
394
394
|
}
|
|
395
395
|
async pageByAddress(table, address, page, deserialize) {
|
|
396
|
-
|
|
396
|
+
chunkI4YBVHAK_cjs.assertPageRequest(page);
|
|
397
397
|
await this.ensureInit();
|
|
398
398
|
const rows = await this.db.all(
|
|
399
399
|
`SELECT * FROM ${table} WHERE address = ? AND (txid, vout) > (?, ?)
|
|
400
400
|
ORDER BY txid, vout LIMIT ?`,
|
|
401
401
|
[address, page.after?.txid ?? "", page.after?.vout ?? -1, page.limit + 1]
|
|
402
402
|
);
|
|
403
|
-
const result =
|
|
403
|
+
const result = chunkI4YBVHAK_cjs.pageResult(rows, page.limit, ({ txid, vout }) => ({ txid, vout }));
|
|
404
404
|
return { items: result.items.map(deserialize), nextCursor: result.nextCursor };
|
|
405
405
|
}
|
|
406
406
|
async saveUtxos(address, utxos) {
|
|
407
407
|
await this.ensureInit();
|
|
408
408
|
for (const utxo of utxos) {
|
|
409
|
-
const s =
|
|
409
|
+
const s = chunkI4YBVHAK_cjs.serializeUtxo(utxo);
|
|
410
410
|
await this.db.run(
|
|
411
411
|
`INSERT OR REPLACE INTO ${this.tables.utxos}
|
|
412
412
|
(txid, vout, value, address,
|
|
@@ -437,8 +437,8 @@ var SQLiteWalletRepository = class {
|
|
|
437
437
|
}
|
|
438
438
|
// ── Transaction history ────────────────────────────────────────────
|
|
439
439
|
async getTransactionHistoryPage(filter, page) {
|
|
440
|
-
|
|
441
|
-
|
|
440
|
+
chunkI4YBVHAK_cjs.assertPageRequest(page);
|
|
441
|
+
chunkI4YBVHAK_cjs.assertHistoryPageFilter(filter);
|
|
442
442
|
await this.ensureInit();
|
|
443
443
|
const conditions = ["address = ?"];
|
|
444
444
|
const params = [filter.address];
|
|
@@ -462,7 +462,7 @@ var SQLiteWalletRepository = class {
|
|
|
462
462
|
ORDER BY created_at, boarding_txid, commitment_txid, ark_txid LIMIT ?`,
|
|
463
463
|
[...params, page.limit + 1]
|
|
464
464
|
);
|
|
465
|
-
return
|
|
465
|
+
return chunkI4YBVHAK_cjs.pageResult(rows.map(txRowToDomain), page.limit, (tx) => ({
|
|
466
466
|
createdAt: tx.createdAt,
|
|
467
467
|
key: tx.key
|
|
468
468
|
}));
|
|
@@ -485,7 +485,7 @@ var SQLiteWalletRepository = class {
|
|
|
485
485
|
tx.amount,
|
|
486
486
|
tx.settled ? 1 : 0,
|
|
487
487
|
tx.createdAt,
|
|
488
|
-
tx.assets ? JSON.stringify(
|
|
488
|
+
tx.assets ? JSON.stringify(chunkI4YBVHAK_cjs.serializeAssets(tx.assets)) : null
|
|
489
489
|
]
|
|
490
490
|
);
|
|
491
491
|
}
|
|
@@ -555,9 +555,9 @@ function vtxoRowToDomain(row) {
|
|
|
555
555
|
// Post-migration every row has `script`, but the backfill is
|
|
556
556
|
// idempotent: derive from `address` if the legacy column is still
|
|
557
557
|
// null (e.g. the migration hasn't run yet on this handle).
|
|
558
|
-
script: row.script ??
|
|
558
|
+
script: row.script ?? chunkI4YBVHAK_cjs.scriptFromArkAddress(row.address)
|
|
559
559
|
};
|
|
560
|
-
return
|
|
560
|
+
return chunkI4YBVHAK_cjs.deserializeVtxo(serialized);
|
|
561
561
|
}
|
|
562
562
|
function utxoRowToDomain(row) {
|
|
563
563
|
const serialized = {
|
|
@@ -576,7 +576,7 @@ function utxoRowToDomain(row) {
|
|
|
576
576
|
status: JSON.parse(row.status_json),
|
|
577
577
|
extraWitness: row.extra_witness_json ? JSON.parse(row.extra_witness_json) : void 0
|
|
578
578
|
};
|
|
579
|
-
return
|
|
579
|
+
return chunkI4YBVHAK_cjs.deserializeUtxo(serialized);
|
|
580
580
|
}
|
|
581
581
|
function txRowToDomain(row) {
|
|
582
582
|
const tx = {
|
|
@@ -591,7 +591,7 @@ function txRowToDomain(row) {
|
|
|
591
591
|
createdAt: row.created_at
|
|
592
592
|
};
|
|
593
593
|
if (row.assets_json) {
|
|
594
|
-
tx.assets =
|
|
594
|
+
tx.assets = chunkI4YBVHAK_cjs.deserializeAssets(JSON.parse(row.assets_json));
|
|
595
595
|
}
|
|
596
596
|
return tx;
|
|
597
597
|
}
|
|
@@ -604,7 +604,7 @@ var SQLiteContractRepository = class {
|
|
|
604
604
|
this.table = `${this.prefix}contracts`;
|
|
605
605
|
}
|
|
606
606
|
db;
|
|
607
|
-
version =
|
|
607
|
+
version = 3;
|
|
608
608
|
initPromise = null;
|
|
609
609
|
prefix;
|
|
610
610
|
table;
|
|
@@ -652,9 +652,9 @@ var SQLiteContractRepository = class {
|
|
|
652
652
|
}
|
|
653
653
|
// ── Contract management ────────────────────────────────────────────
|
|
654
654
|
async getContractsPage(filter, page) {
|
|
655
|
-
|
|
655
|
+
chunkI4YBVHAK_cjs.assertPageRequest(page);
|
|
656
656
|
await this.ensureInit();
|
|
657
|
-
if (
|
|
657
|
+
if (chunkI4YBVHAK_cjs.contractFilterMatchesNothing(filter)) return { items: [] };
|
|
658
658
|
const conditions = [];
|
|
659
659
|
const params = [];
|
|
660
660
|
if (filter) {
|
|
@@ -672,7 +672,7 @@ var SQLiteContractRepository = class {
|
|
|
672
672
|
`SELECT * FROM ${this.table}${where} ORDER BY script LIMIT ?`,
|
|
673
673
|
[...params, page.limit + 1]
|
|
674
674
|
);
|
|
675
|
-
return
|
|
675
|
+
return chunkI4YBVHAK_cjs.pageResult(rows.map(contractRowToDomain), page.limit, (contract) => contract.script);
|
|
676
676
|
}
|
|
677
677
|
async saveContract(contract) {
|
|
678
678
|
await this.ensureInit();
|
|
@@ -848,7 +848,7 @@ var SQLiteIntentRepository = class {
|
|
|
848
848
|
});
|
|
849
849
|
}
|
|
850
850
|
async getIntentsPage(filter, page) {
|
|
851
|
-
|
|
851
|
+
chunkI4YBVHAK_cjs.assertPageRequest(page);
|
|
852
852
|
await this.ensureInit();
|
|
853
853
|
if (filter?.states?.length === 0) return { items: [] };
|
|
854
854
|
const stateSql = filter?.states ? ` AND state IN (${filter.states.map(() => "?").join(", ")})` : "";
|
|
@@ -865,19 +865,19 @@ var SQLiteIntentRepository = class {
|
|
|
865
865
|
for (const row of batch) {
|
|
866
866
|
after = row.intent_tx_id;
|
|
867
867
|
const intent = rowToIntent(row);
|
|
868
|
-
if (!filter ||
|
|
868
|
+
if (!filter || chunkI4YBVHAK_cjs.intentMatchesFilter(intent, filter)) rows.push(intent);
|
|
869
869
|
if (rows.length > page.limit) break;
|
|
870
870
|
}
|
|
871
871
|
if (batch.length < batchSize) break;
|
|
872
872
|
}
|
|
873
|
-
return
|
|
873
|
+
return chunkI4YBVHAK_cjs.pageResult(rows, page.limit, (intent) => intent.intentTxId);
|
|
874
874
|
}
|
|
875
875
|
async getLockedVtxoOutpoints() {
|
|
876
876
|
await this.ensureInit();
|
|
877
877
|
const rows = await this.db.all(`SELECT * FROM ${this.t}`);
|
|
878
878
|
const out = [];
|
|
879
879
|
for (const r of rows) {
|
|
880
|
-
if (
|
|
880
|
+
if (chunkI4YBVHAK_cjs.isTerminalIntentState(r.state)) continue;
|
|
881
881
|
for (const o of JSON.parse(r.intent_vtxos_json)) out.push(o);
|
|
882
882
|
}
|
|
883
883
|
return out;
|
|
@@ -964,7 +964,7 @@ var SQLiteVirtualTxRepository = class {
|
|
|
964
964
|
const prev = prevByTxid.get(t.txid);
|
|
965
965
|
const psbt = t.psbt ?? prev?.psbt ?? null;
|
|
966
966
|
const expires = t.expiresAt ?? prev?.expires_at ?? null;
|
|
967
|
-
const type =
|
|
967
|
+
const type = chunkI4YBVHAK_cjs.mergeChainedTxType(t.type, prev?.type);
|
|
968
968
|
await this.db.run(
|
|
969
969
|
`INSERT OR REPLACE INTO ${this.tTx} (txid, psbt, expires_at, type) VALUES (?, ?, ?, ?)`,
|
|
970
970
|
[t.txid, psbt, expires, type]
|
|
@@ -1050,7 +1050,7 @@ function rowToTx(r) {
|
|
|
1050
1050
|
|
|
1051
1051
|
Object.defineProperty(exports, "ChainedTxType", {
|
|
1052
1052
|
enumerable: true,
|
|
1053
|
-
get: function () { return
|
|
1053
|
+
get: function () { return chunkI4YBVHAK_cjs.ChainedTxType; }
|
|
1054
1054
|
});
|
|
1055
1055
|
exports.SQLiteContractRepository = SQLiteContractRepository;
|
|
1056
1056
|
exports.SQLiteIntentRepository = SQLiteIntentRepository;
|