@use-stellar/vue 0.0.0-stage → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +134 -0
- package/README.md +187 -2
- package/dist/chunk-7ROX7ZPL.mjs +123 -0
- package/dist/chunk-7ROX7ZPL.mjs.map +1 -0
- package/dist/index.d.mts +212 -0
- package/dist/index.d.ts +212 -0
- package/dist/index.js +829 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +713 -0
- package/dist/index.mjs.map +1 -0
- package/dist/nuxt/module.d.mts +15 -0
- package/dist/nuxt/module.d.ts +15 -0
- package/dist/nuxt/module.js +29 -0
- package/dist/nuxt/module.js.map +1 -0
- package/dist/nuxt/module.mjs +23 -0
- package/dist/nuxt/module.mjs.map +1 -0
- package/dist/nuxt/runtime/plugin.d.mts +24 -0
- package/dist/nuxt/runtime/plugin.d.ts +24 -0
- package/dist/nuxt/runtime/plugin.js +140 -0
- package/dist/nuxt/runtime/plugin.js.map +1 -0
- package/dist/nuxt/runtime/plugin.mjs +28 -0
- package/dist/nuxt/runtime/plugin.mjs.map +1 -0
- package/dist/plugin-bXIRDH8_.d.mts +84 -0
- package/dist/plugin-bXIRDH8_.d.ts +84 -0
- package/dist/test-utils.d.mts +27 -0
- package/dist/test-utils.d.ts +27 -0
- package/dist/test-utils.js +97 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/test-utils.mjs +22 -0
- package/dist/test-utils.mjs.map +1 -0
- package/package.json +132 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/plugin.ts","../src/internal/useQuery.ts","../src/useBalance.ts","../src/useSorobanContract.ts","../src/useContractEvents.ts","../src/useSendPayment.ts","../src/useAddTrustline.ts","../src/usePathPayment.ts","../src/useClaimableBalance.ts","../src/usePayments.ts","../src/usePaymentHistory.ts","../src/store.ts"],"names":["shallowRef","QueryStore","inject","ref","computed","toValue","createQueryObserver","watch","serializeKey","getCurrentInstance","onScopeDispose","accountKey","fetchAccount","toRaw","ANONYMOUS_SIMULATION_SOURCE","sorobanContractKey","argsKey","simulateContractCall","toStellarError","DEFAULT_POLL_INTERVAL","DEFAULT_BUFFER_SIZE","createContractEventPoller","onlineManager","offlineError","sendPayment","SendPaymentAbortedError","isPreflightError","runAddTrustline","AddTrustlineAbortedError","isAddTrustlinePreflightError","runPathPayment","isPathPaymentPreflightError","claimableBalanceKey","fetchClaimableBalances","paymentsKey","fetchPaymentsPage","normalizePayment","filterPayments","reactive"],"mappings":"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","file":"index.js","sourcesContent":["// packages/vue/src/types.ts\n//\n// A small, self-contained type set for the Vue adapter. Deliberately not\n// imported from the `use-stellar` (React) package: that package declares\n// `react` as a required peer dependency, and pulling any part of it in here\n// would put a React peer-dependency warning in front of every Vue user who\n// installs this package — the exact installation friction `rn-03` fixed for\n// React Native. Custom networks aren't supported yet; only the three SDF\n// defaults are.\n\nexport type StellarNetwork = \"testnet\" | \"mainnet\" | \"futurenet\"\n\nexport interface NetworkConfig {\n network: StellarNetwork\n horizonUrl: string\n sorobanUrl: string\n networkPassphrase: string\n}\n\nexport type Asset = \"XLM\" | { code: string; issuer: string }\n\nexport type Balance =\n | { asset: \"XLM\"; balance: string }\n | { asset: { code: string; issuer: string }; balance: string; limit?: string }\n | { asset: \"liquidity_pool_shares\"; balance: string; liquidityPoolId: string }\n\nconst NETWORK_PASSPHRASES: Record<StellarNetwork, string> = {\n testnet: \"Test SDF Network ; September 2015\",\n mainnet: \"Public Global Stellar Network ; September 2015\",\n futurenet: \"Test SDF Future Network ; October 2022\",\n}\n\nexport const NETWORK_CONFIGS: Record<StellarNetwork, NetworkConfig> = {\n testnet: {\n network: \"testnet\",\n horizonUrl: \"https://horizon-testnet.stellar.org\",\n sorobanUrl: \"https://soroban-testnet.stellar.org\",\n networkPassphrase: NETWORK_PASSPHRASES.testnet,\n },\n mainnet: {\n network: \"mainnet\",\n horizonUrl: \"https://horizon.stellar.org\",\n sorobanUrl: \"https://soroban.stellar.org\",\n networkPassphrase: NETWORK_PASSPHRASES.mainnet,\n },\n futurenet: {\n network: \"futurenet\",\n horizonUrl: \"https://horizon-futurenet.stellar.org\",\n sorobanUrl: \"https://rpc-futurenet.stellar.org\",\n networkPassphrase: NETWORK_PASSPHRASES.futurenet,\n },\n}\n","// packages/vue/src/plugin.ts\n\nimport { inject, shallowRef, type App, type InjectionKey, type Ref } from \"vue\"\nimport {\n QueryStore,\n getWalletAdapter,\n readWalletSession,\n type QueryConfig,\n type WalletState,\n} from \"use-stellar/core\"\nimport { NETWORK_CONFIGS, type NetworkConfig, type StellarNetwork } from \"./types\"\n\nexport interface StellarPluginOptions {\n /** Defaults to `\"testnet\"`. */\n network?: StellarNetwork\n /** Override the built-in Horizon/Soroban endpoints for `network`. Any field left out keeps the default. */\n networkConfig?: Partial<Pick<NetworkConfig, \"horizonUrl\" | \"sorobanUrl\" | \"networkPassphrase\">>\n /** Cache configuration shared by every composable. */\n queryConfig?: QueryConfig\n /** Initial connected wallet address, primarily for restored client sessions. */\n walletAddress?: string | null\n}\n\nexport interface StellarRuntime {\n network: StellarNetwork\n networkConfig: NetworkConfig\n /** One query cache per app, shared by every composable. */\n queryStore: QueryStore\n /** The wallet connection the write composables sign with. */\n wallet: WalletState\n /** Replaces the wallet state, and keeps `walletAddress` in step with it. */\n setWallet: (wallet: WalletState) => void\n /** The address read composables default to when given none. */\n walletAddress: Ref<string | null>\n setWalletAddress: (address: string | null) => void\n}\n\nexport const STELLAR_RUNTIME_KEY: InjectionKey<StellarRuntime> = Symbol(\"use-stellar/vue:runtime\")\n\nconst DISCONNECTED_WALLET: WalletState = {\n connected: false,\n connecting: false,\n address: null,\n network: null,\n wallet: null,\n walletName: null,\n error: null,\n walletNetwork: null,\n walletNetworkPassphrase: null,\n}\n\nfunction resolveNetworkConfig(\n network: StellarNetwork,\n override: StellarPluginOptions[\"networkConfig\"]\n): NetworkConfig {\n const builtIn = NETWORK_CONFIGS[network]\n if (!override) return builtIn\n\n return {\n network,\n horizonUrl: override.horizonUrl ?? builtIn.horizonUrl,\n sorobanUrl: override.sorobanUrl ?? builtIn.sorobanUrl,\n networkPassphrase: override.networkPassphrase ?? builtIn.networkPassphrase,\n }\n}\n\n/**\n * Builds a Stellar runtime without installing it as a plugin. Used by\n * {@link createStellarPlugin} itself, and by the test harness in\n * `use-stellar/vue/test-utils` to provide a runtime without a real app.\n */\nexport function createStellarRuntime(options: StellarPluginOptions = {}): StellarRuntime {\n const network = options.network ?? \"testnet\"\n const walletAddress = shallowRef(options.walletAddress ?? null)\n\n const runtime: StellarRuntime = {\n network,\n networkConfig: resolveNetworkConfig(network, options.networkConfig),\n queryStore: new QueryStore(options.queryConfig),\n wallet: { ...DISCONNECTED_WALLET, address: options.walletAddress ?? null },\n setWallet(wallet): void {\n runtime.wallet = wallet\n walletAddress.value = wallet.address\n },\n walletAddress,\n setWalletAddress(address: string | null): void {\n walletAddress.value = address\n },\n }\n return runtime\n}\n\n/** Restores a persisted wallet without ever prompting during server rendering. */\nexport async function restoreWalletSession(\n runtime: StellarRuntime,\n storage: \"local\" | \"session\" = \"local\"\n): Promise<void> {\n const session = await readWalletSession(storage)\n if (!session) return\n\n try {\n const adapter = getWalletAdapter(session.wallet)\n const available = await adapter.isAvailable()\n if (!available) return\n\n const canReconnect = adapter.canAutoConnect\n ? await adapter.canAutoConnect(runtime.network)\n : false\n if (!canReconnect) {\n runtime.setWallet({\n ...runtime.wallet,\n wallet: session.wallet,\n walletName: adapter.metadata.name,\n address: session.address ?? null,\n })\n return\n }\n\n const connection = await adapter.connect(runtime.network)\n const network = await adapter.getNetworkDetails(runtime.network)\n runtime.setWallet({\n connected: true,\n connecting: false,\n address: connection.address,\n network: runtime.network,\n wallet: connection.wallet,\n walletName: adapter.metadata.name,\n error: null,\n walletNetwork: network.network,\n walletNetworkPassphrase: network.networkPassphrase,\n })\n } catch {\n // Session restoration is best-effort; a normal disconnected app remains usable.\n }\n}\n\n/**\n * Vue plugin that installs the Stellar runtime — resolved network config plus\n * one shared query cache — so every composable in this package reads and\n * writes through the same instance.\n *\n * @example\n * import { createApp } from \"vue\"\n * import { createStellarPlugin } from \"@use-stellar/vue\"\n *\n * createApp(App).use(createStellarPlugin({ network: \"testnet\" })).mount(\"#app\")\n */\nexport function createStellarPlugin(options: StellarPluginOptions = {}) {\n return {\n install(app: App): void {\n app.provide(STELLAR_RUNTIME_KEY, createStellarRuntime(options))\n },\n }\n}\n\n/**\n * Reads the installed Stellar runtime.\n *\n * @throws {Error} when called outside a component tree the plugin was\n * installed on (or outside `app.runWithContext()` in tests).\n */\nexport function useStellarRuntime(): StellarRuntime {\n const runtime = inject(STELLAR_RUNTIME_KEY)\n if (!runtime) {\n throw new Error(\n \"@use-stellar/vue: no plugin installed. Call \" +\n \"app.use(createStellarPlugin()) before using any composable.\"\n )\n }\n return runtime\n}\n","import {\n computed,\n getCurrentInstance,\n onMounted,\n onScopeDispose,\n ref,\n shallowRef,\n toValue,\n watch,\n type ComputedRef,\n type MaybeRefOrGetter,\n type Ref,\n} from \"vue\"\nimport {\n createQueryObserver,\n serializeKey,\n type QueryObserver,\n type QueryStore,\n} from \"use-stellar/core\"\n\nexport interface UseQueryOptions<T> {\n queryKey: () => readonly unknown[]\n queryFn: () => Promise<T>\n store: QueryStore\n enabled?: () => boolean\n staleTime?: MaybeRefOrGetter<number | undefined>\n maxRetries?: MaybeRefOrGetter<number | undefined>\n /** Explicitly opt into server-side fetching. Disabled by default. */\n ssr?: boolean\n}\n\nexport interface UseQueryReturn<T> {\n data: Ref<T | null>\n loading: Ref<boolean>\n error: Ref<unknown>\n updatedAt: Ref<number | null>\n rateLimitedUntil: ComputedRef<number | null>\n refetch: () => Promise<void>\n}\n\n/** Projects the framework-neutral query observer into Vue refs. */\nexport function useQuery<T>(options: UseQueryOptions<T>): UseQueryReturn<T> {\n const data = shallowRef<T | null>(null)\n const loading = ref(false)\n const error = shallowRef<unknown>(null)\n const updatedAt = ref<number | null>(null)\n let observer: QueryObserver<T> | null = null\n let unsubscribe: (() => void) | null = null\n\n const resolved = computed(() => ({\n queryKey: options.queryKey(),\n queryFn: options.queryFn,\n store: options.store,\n enabled: options.enabled?.() ?? true,\n staleTime: toValue(options.staleTime),\n maxRetries: toValue(options.maxRetries),\n }))\n\n function project(snapshot: ReturnType<QueryObserver<T>[\"getSnapshot\"]>): void {\n data.value = snapshot.data\n loading.value = snapshot.loading\n error.value = snapshot.error\n updatedAt.value = snapshot.updatedAt\n }\n\n function start(): void {\n if (observer) return\n observer = createQueryObserver<T>(resolved.value)\n unsubscribe = observer.subscribe(project)\n project(observer.getSnapshot())\n }\n\n watch(\n () => [\n serializeKey(resolved.value.queryKey),\n resolved.value.enabled,\n resolved.value.staleTime,\n resolved.value.maxRetries,\n ],\n () => {\n observer?.setOptions(resolved.value)\n if (observer) project(observer.getSnapshot())\n }\n // Batched (the default \"pre\" flush), not \"sync\": inputs that change in\n // the same tick — a contract id and a method, say — must produce one\n // query for the final combination, not an extra request for every\n // half-updated one in between.\n )\n\n // Component setup is deferred until mount so SSR performs no request and\n // client hydration starts from the same idle projection. Test/effect scopes\n // have no component lifecycle, so they start immediately.\n if (getCurrentInstance()) {\n if (typeof (globalThis as { window?: unknown }).window === \"undefined\" && options.ssr) start()\n else onMounted(start)\n } else {\n start()\n }\n\n onScopeDispose(() => {\n unsubscribe?.()\n observer?.destroy()\n unsubscribe = null\n observer = null\n })\n\n return {\n data,\n loading,\n error,\n updatedAt,\n rateLimitedUntil: computed(() => observer?.getRateLimitedUntil() ?? null),\n refetch: () => observer?.fetch({ force: true }) ?? Promise.resolve(),\n }\n}\n","import { computed, toValue, type ComputedRef, type MaybeRefOrGetter } from \"vue\"\nimport {\n accountKey,\n fetchAccount,\n type Asset,\n type Balance,\n type StellarError,\n} from \"use-stellar/core\"\nimport { useQuery } from \"./internal/useQuery\"\nimport { useStellarRuntime } from \"./plugin\"\nexport type { MaybeRefOrGetter } from \"vue\"\n\nexport interface UseBalanceOptions {\n address: MaybeRefOrGetter<string | null | undefined>\n asset?: Asset\n staleTime?: MaybeRefOrGetter<number | undefined>\n /**\n * Retries after a rate limit (429), honouring `Retry-After`. Defaults to 3,\n * as in the React hook; 0 disables retrying.\n */\n maxRetries?: MaybeRefOrGetter<number | undefined>\n}\n\nexport interface UseBalanceReturn {\n balance: ComputedRef<string | null>\n balances: ComputedRef<Balance[]>\n loading: ComputedRef<boolean>\n error: ComputedRef<StellarError | null>\n refetch: () => Promise<void>\n}\n\nfunction matchesAsset(balance: Balance, asset: Asset): boolean {\n if (asset === \"XLM\") return balance.asset === \"XLM\"\n if (typeof asset !== \"object\") return balance.asset === asset\n return (\n typeof balance.asset === \"object\" &&\n balance.asset.code === asset.code &&\n balance.asset.issuer === asset.issuer\n )\n}\n\nexport function useBalance(options: UseBalanceOptions): UseBalanceReturn {\n const runtime = useStellarRuntime()\n const address = computed(() => toValue(options.address)?.trim() || null)\n const asset = options.asset ?? \"XLM\"\n\n const query = useQuery({\n store: runtime.queryStore,\n queryKey: () =>\n accountKey(\n runtime.networkConfig.horizonUrl,\n runtime.networkConfig.network,\n address.value ?? \"\"\n ),\n queryFn: () => fetchAccount(runtime.networkConfig, { address: address.value! }),\n enabled: () => address.value !== null,\n staleTime: options.staleTime,\n maxRetries: options.maxRetries,\n })\n\n const balances = computed<Balance[]>(() => query.data.value?.balances ?? [])\n return {\n balance: computed(\n () => balances.value.find(item => matchesAsset(item, asset))?.balance ?? null\n ),\n balances,\n loading: computed(() => query.loading.value),\n error: computed(() => query.error.value as StellarError | null),\n refetch: query.refetch,\n }\n}\n","import { computed, toRaw, toValue, type ComputedRef } from \"vue\"\nimport {\n ANONYMOUS_SIMULATION_SOURCE,\n argsKey,\n simulateContractCall,\n sorobanContractKey,\n toStellarError,\n type ContractSpecLike,\n type StellarError,\n} from \"use-stellar/core\"\nimport { useQuery } from \"./internal/useQuery\"\nimport { useStellarRuntime } from \"./plugin\"\nimport type { MaybeRefOrGetter } from \"./useBalance\"\n\nexport { ANONYMOUS_SIMULATION_SOURCE }\n\nexport interface UseSorobanContractOptions {\n contractId: MaybeRefOrGetter<string | null | undefined>\n method: MaybeRefOrGetter<string | null | undefined>\n args?: MaybeRefOrGetter<readonly unknown[] | null | undefined>\n spec?: MaybeRefOrGetter<ContractSpecLike | null | undefined>\n sourceAccount?: MaybeRefOrGetter<string | null | undefined>\n staleTime?: number\n}\n\nexport interface UseSorobanContractReturn<T = unknown> {\n data: ComputedRef<T | null>\n loading: ComputedRef<boolean>\n error: ComputedRef<StellarError | null>\n refetch: () => void\n}\n\ninterface ResolvedCall {\n contractId: string\n method: string\n args: unknown[]\n spec?: ContractSpecLike\n sourceAccount: string\n}\n\nfunction unwrapArgs(value: readonly unknown[] | null | undefined): unknown[] {\n if (!value) return []\n const raw = toRaw(value)\n return raw.map(argument =>\n argument !== null && typeof argument === \"object\" ? toRaw(argument) : argument\n )\n}\n\n/**\n * Simulates a read-only Soroban contract call through the shared core query.\n * Every input may be static or reactive; cache identity follows the canonical\n * serialized arguments rather than Vue proxy identity.\n */\nexport function useSorobanContract<T = unknown>(\n options: UseSorobanContractOptions\n): UseSorobanContractReturn<T> {\n const { networkConfig, queryStore } = useStellarRuntime()\n\n // The call the inputs currently describe, or null while contract or method\n // is missing. Unwrapped from Vue proxies, so the SDK sees plain values.\n const call = computed<ResolvedCall | null>(() => {\n const contractId = toValue(options.contractId)?.trim() ?? \"\"\n const method = toValue(options.method)?.trim() ?? \"\"\n if (!contractId || !method) return null\n\n const spec = options.spec === undefined ? undefined : toValue(options.spec)\n const sourceAccount =\n (options.sourceAccount === undefined ? undefined : toValue(options.sourceAccount))?.trim() ||\n ANONYMOUS_SIMULATION_SOURCE\n\n return {\n contractId,\n method,\n args: unwrapArgs(options.args === undefined ? [] : toValue(options.args)),\n spec: spec ? toRaw(spec as ContractSpecLike) : undefined,\n sourceAccount,\n }\n })\n\n const query = useQuery<T>({\n store: queryStore,\n queryKey: () => {\n const current = call.value\n if (!current) return [\"soroban\", \"disabled\"]\n return sorobanContractKey(\n networkConfig.sorobanUrl,\n networkConfig.network,\n current.contractId,\n current.method,\n argsKey(current.args),\n current.sourceAccount,\n current.spec ? \"spec\" : \"raw\"\n )\n },\n queryFn: () => simulateContractCall<T>(networkConfig, call.value!),\n enabled: () => call.value !== null,\n staleTime: options.staleTime,\n })\n\n return {\n data: computed(() => query.data.value),\n loading: computed(() => query.loading.value),\n error: computed<StellarError | null>(() =>\n query.error.value ? toStellarError(query.error.value) : null\n ),\n refetch: () => {\n void query.refetch()\n },\n }\n}\n","import {\n computed,\n onScopeDispose,\n ref,\n shallowRef,\n toValue,\n watch,\n type ComputedRef,\n type ShallowRef,\n} from \"vue\"\nimport {\n createContractEventPoller,\n DEFAULT_BUFFER_SIZE,\n DEFAULT_POLL_INTERVAL,\n type ContractEvent,\n type ContractEventPoller,\n type StellarError,\n} from \"use-stellar/core\"\nimport { useStellarRuntime } from \"./plugin\"\nimport type { MaybeRefOrGetter } from \"./useBalance\"\n\nexport interface UseContractEventsOptions {\n contractIds: MaybeRefOrGetter<readonly string[]>\n topics?: MaybeRefOrGetter<readonly (readonly string[])[] | undefined>\n startLedger?: MaybeRefOrGetter<number | undefined>\n interval?: MaybeRefOrGetter<number | undefined>\n bufferSize?: MaybeRefOrGetter<number | undefined>\n enabled?: MaybeRefOrGetter<boolean | undefined>\n}\n\nexport interface UseContractEventsReturn {\n events: ShallowRef<ContractEvent[]>\n latestLedger: ComputedRef<number | null>\n loading: ComputedRef<boolean>\n error: ComputedRef<StellarError | null>\n clear: () => void\n}\n\n/**\n * Polls Soroban contract events through the framework-neutral core poller and\n * binds its lifetime to the current Vue effect scope.\n */\nexport function useContractEvents(options: UseContractEventsOptions): UseContractEventsReturn {\n const { networkConfig } = useStellarRuntime()\n const events = shallowRef<ContractEvent[]>([])\n const latestLedgerState = ref<number | null>(null)\n const loadingState = ref(false)\n const errorState = shallowRef<StellarError | null>(null)\n let activePoller: ContractEventPoller | null = null\n let activeUnsubscribe: (() => void) | null = null\n\n const input = computed(() => {\n const contractIds = [...toValue(options.contractIds)]\n const rawTopics = options.topics === undefined ? undefined : toValue(options.topics)\n const topics = rawTopics?.map(topic => [...topic])\n\n return {\n contractIds,\n contractKey: JSON.stringify(contractIds),\n topics,\n topicKey: JSON.stringify(topics ?? []),\n startLedger: options.startLedger === undefined ? undefined : toValue(options.startLedger),\n interval:\n (options.interval === undefined ? undefined : toValue(options.interval)) ??\n DEFAULT_POLL_INTERVAL,\n bufferSize:\n (options.bufferSize === undefined ? undefined : toValue(options.bufferSize)) ??\n DEFAULT_BUFFER_SIZE,\n enabled: (options.enabled === undefined ? undefined : toValue(options.enabled)) ?? true,\n }\n })\n\n function stopActivePoller(): void {\n activeUnsubscribe?.()\n activeUnsubscribe = null\n activePoller?.stop()\n activePoller = null\n }\n\n watch(\n () =>\n [\n input.value.contractKey,\n input.value.topicKey,\n input.value.startLedger,\n input.value.interval,\n input.value.bufferSize,\n input.value.enabled,\n ] as const,\n () => {\n stopActivePoller()\n const current = input.value\n\n if (!current.enabled || current.contractIds.length === 0) {\n events.value = []\n latestLedgerState.value = null\n loadingState.value = false\n errorState.value = null\n return\n }\n\n const poller = createContractEventPoller(\n { sorobanUrl: networkConfig.sorobanUrl },\n {\n contractIds: current.contractIds,\n topics: current.topics,\n startLedger: current.startLedger,\n interval: current.interval,\n bufferSize: current.bufferSize,\n }\n )\n activePoller = poller\n activeUnsubscribe = poller.subscribe(snapshot => {\n events.value = snapshot.events\n latestLedgerState.value = snapshot.latestLedger\n loadingState.value = snapshot.loading\n errorState.value = snapshot.error\n })\n poller.start()\n },\n { immediate: true }\n )\n\n onScopeDispose(stopActivePoller)\n\n const latestLedger = computed(() => latestLedgerState.value)\n const loading = computed(() => loadingState.value)\n const error = computed(() => errorState.value)\n\n function clear(): void {\n activePoller?.clear()\n }\n\n return { events, latestLedger, loading, error, clear }\n}\n","import { onScopeDispose, ref, shallowRef, type Ref, type ShallowRef } from \"vue\"\nimport {\n isPreflightError,\n offlineError,\n onlineManager,\n sendPayment,\n SendPaymentAbortedError,\n type SendPaymentOptions,\n type SendPaymentResult,\n type StellarError,\n} from \"use-stellar/core\"\nimport { useStellarRuntime } from \"./plugin\"\n\nexport interface UseSendPaymentReturn {\n send: (options: SendPaymentOptions) => Promise<SendPaymentResult & { error?: string }>\n loading: Ref<boolean>\n error: ShallowRef<StellarError | null>\n result: ShallowRef<SendPaymentResult | null>\n reset: () => void\n}\n\n/**\n * Sends a Stellar payment through the framework-neutral core action while\n * keeping Vue state scoped to the calling component.\n */\nexport function useSendPayment(): UseSendPaymentReturn {\n const runtime = useStellarRuntime()\n const loading = ref(false)\n const error = shallowRef<StellarError | null>(null)\n const result = shallowRef<SendPaymentResult | null>(null)\n let operationId = 0\n let disposed = false\n\n const isCurrent = (id: number): boolean => !disposed && id === operationId\n\n async function send(\n options: SendPaymentOptions\n ): Promise<SendPaymentResult & { error?: string }> {\n if (!onlineManager.isOnline()) throw offlineError()\n\n const id = ++operationId\n const previousError = error.value\n const previousResult = result.value\n loading.value = true\n error.value = null\n result.value = null\n\n try {\n const outcome = await sendPayment(\n {\n network: runtime.network,\n networkConfig: runtime.networkConfig,\n wallet: runtime.wallet,\n queryStore: runtime.queryStore,\n },\n options\n )\n if (isCurrent(id)) result.value = outcome\n return outcome\n } catch (caught) {\n if (caught instanceof SendPaymentAbortedError) {\n return { hash: \"\", status: \"failed\", error: caught.message }\n }\n\n if (isPreflightError(caught)) {\n if (isCurrent(id)) {\n error.value = previousError\n result.value = previousResult\n }\n throw caught\n }\n\n const stellarError = caught as StellarError\n if (isCurrent(id)) {\n if (stellarError.code === \"TX_TIMEOUT\") {\n result.value = { hash: stellarError.hash ?? \"\", status: \"pending\" }\n } else if (\n (stellarError as StellarError & { isSubmissionFailure?: boolean }).isSubmissionFailure\n ) {\n result.value = { hash: stellarError.hash ?? \"\", status: \"failed\" }\n }\n error.value = stellarError\n }\n throw caught\n } finally {\n if (isCurrent(id)) loading.value = false\n }\n }\n\n function reset(): void {\n operationId += 1\n loading.value = false\n error.value = null\n result.value = null\n }\n\n onScopeDispose(() => {\n disposed = true\n operationId += 1\n })\n\n return { send, loading, error, result, reset }\n}\n","import { onScopeDispose, ref, shallowRef, type Ref, type ShallowRef } from \"vue\"\nimport {\n addTrustline as runAddTrustline,\n AddTrustlineAbortedError,\n isAddTrustlinePreflightError,\n offlineError,\n onlineManager,\n type AddTrustlineOptions,\n type StellarError,\n type TransactionResult,\n} from \"use-stellar/core\"\nimport { useStellarRuntime } from \"./plugin\"\n\nexport interface UseAddTrustlineReturn {\n addTrustline: (options: AddTrustlineOptions) => Promise<TransactionResult>\n loading: Ref<boolean>\n error: ShallowRef<StellarError | null>\n result: ShallowRef<TransactionResult | null>\n reset: () => void\n}\n\n/** Adds an issued-asset trustline through the shared core transaction action. */\nexport function useAddTrustline(): UseAddTrustlineReturn {\n const runtime = useStellarRuntime()\n const loading = ref(false)\n const error = shallowRef<StellarError | null>(null)\n const result = shallowRef<TransactionResult | null>(null)\n let operationId = 0\n let disposed = false\n\n const isCurrent = (id: number): boolean => !disposed && id === operationId\n\n async function addTrustline(options: AddTrustlineOptions): Promise<TransactionResult> {\n if (!onlineManager.isOnline()) throw offlineError()\n\n const id = ++operationId\n const previousError = error.value\n const previousResult = result.value\n loading.value = true\n error.value = null\n result.value = null\n\n try {\n const outcome = await runAddTrustline(\n {\n network: runtime.network,\n networkConfig: runtime.networkConfig,\n wallet: runtime.wallet,\n queryStore: runtime.queryStore,\n },\n options\n )\n if (isCurrent(id)) result.value = outcome\n return outcome\n } catch (caught) {\n if (caught instanceof AddTrustlineAbortedError) {\n return { hash: \"\", status: \"failed\" }\n }\n\n if (isAddTrustlinePreflightError(caught)) {\n if (isCurrent(id)) {\n error.value = previousError\n result.value = previousResult\n }\n throw caught\n }\n\n const stellarError = caught as StellarError\n if (isCurrent(id)) {\n if (stellarError.code === \"TX_TIMEOUT\") {\n result.value = { hash: stellarError.hash ?? \"\", status: \"pending\" }\n } else if (\n (stellarError as StellarError & { isSubmissionFailure?: boolean }).isSubmissionFailure\n ) {\n result.value = { hash: stellarError.hash ?? \"\", status: \"failed\" }\n }\n error.value = stellarError\n }\n throw caught\n } finally {\n if (isCurrent(id)) loading.value = false\n }\n }\n\n function reset(): void {\n operationId += 1\n loading.value = false\n error.value = null\n result.value = null\n }\n\n onScopeDispose(() => {\n disposed = true\n operationId += 1\n })\n\n return { addTrustline, loading, error, result, reset }\n}\n","import { onScopeDispose, ref, shallowRef, type Ref, type ShallowRef } from \"vue\"\nimport {\n isPathPaymentPreflightError,\n offlineError,\n onlineManager,\n pathPayment as runPathPayment,\n type PathPaymentOptions,\n type StellarError,\n type TransactionResult,\n} from \"use-stellar/core\"\nimport { useStellarRuntime } from \"./plugin\"\n\nexport interface UsePathPaymentReturn {\n pathPayment: (options: PathPaymentOptions) => Promise<TransactionResult>\n loading: Ref<boolean>\n error: ShallowRef<StellarError | null>\n result: ShallowRef<TransactionResult | null>\n reset: () => void\n}\n\n/** Submits a slippage-bounded path payment through the shared core action. */\nexport function usePathPayment(): UsePathPaymentReturn {\n const runtime = useStellarRuntime()\n const loading = ref(false)\n const error = shallowRef<StellarError | null>(null)\n const result = shallowRef<TransactionResult | null>(null)\n let operationId = 0\n let disposed = false\n\n const isCurrent = (id: number): boolean => !disposed && id === operationId\n\n async function pathPayment(options: PathPaymentOptions): Promise<TransactionResult> {\n if (!onlineManager.isOnline()) throw offlineError()\n\n const id = ++operationId\n const previousError = error.value\n const previousResult = result.value\n loading.value = true\n error.value = null\n result.value = null\n\n try {\n const outcome = await runPathPayment(\n {\n network: runtime.network,\n networkConfig: runtime.networkConfig,\n wallet: runtime.wallet,\n queryStore: runtime.queryStore,\n },\n options\n )\n if (isCurrent(id)) result.value = outcome\n return outcome\n } catch (caught) {\n if (isPathPaymentPreflightError(caught)) {\n if (isCurrent(id)) {\n error.value = previousError\n result.value = previousResult\n }\n throw caught\n }\n\n if (isCurrent(id)) error.value = caught as StellarError\n throw caught\n } finally {\n if (isCurrent(id)) loading.value = false\n }\n }\n\n function reset(): void {\n operationId += 1\n loading.value = false\n error.value = null\n result.value = null\n }\n\n onScopeDispose(() => {\n disposed = true\n operationId += 1\n })\n\n return { pathPayment, loading, error, result, reset }\n}\n","import { computed, toValue, type ComputedRef, type MaybeRefOrGetter } from \"vue\"\nimport {\n claimableBalanceKey,\n fetchClaimableBalances,\n type ClaimableBalance,\n type StellarError,\n} from \"use-stellar/core\"\nimport { useQuery } from \"./internal/useQuery\"\nimport { useStellarRuntime } from \"./plugin\"\n\nexport interface UseClaimableBalanceOptions {\n address?: MaybeRefOrGetter<string | null | undefined>\n staleTime?: MaybeRefOrGetter<number | undefined>\n}\n\nexport interface UseClaimableBalanceReturn {\n balances: ComputedRef<ClaimableBalance[]>\n loading: ComputedRef<boolean>\n error: ComputedRef<StellarError | null>\n refetch: () => Promise<void>\n}\n\nexport function useClaimableBalance(\n options: UseClaimableBalanceOptions = {}\n): UseClaimableBalanceReturn {\n const runtime = useStellarRuntime()\n const address = computed(() => {\n const value =\n options.address === undefined ? runtime.walletAddress.value : toValue(options.address)\n return value?.trim() || null\n })\n const query = useQuery({\n store: runtime.queryStore,\n queryKey: () =>\n claimableBalanceKey(\n runtime.networkConfig.horizonUrl,\n runtime.networkConfig.network,\n address.value ?? \"\"\n ),\n queryFn: () => fetchClaimableBalances(runtime.networkConfig, { address: address.value! }),\n enabled: () => address.value !== null,\n staleTime: options.staleTime,\n })\n\n return {\n balances: computed(() => query.data.value ?? []),\n loading: computed(() => query.loading.value),\n error: computed(() => query.error.value as StellarError | null),\n refetch: query.refetch,\n }\n}\n","import {\n computed,\n ref,\n shallowRef,\n toValue,\n watch,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\"\nimport {\n fetchPaymentsPage,\n normalizePayment,\n paymentsKey,\n serializeKey,\n toStellarError,\n type NormalizedPayment,\n type PaymentsPageResult,\n type StellarError,\n} from \"use-stellar/core\"\nimport { useQuery } from \"./internal/useQuery\"\nimport { useStellarRuntime } from \"./plugin\"\n\nexport interface UsePaymentsOptions {\n address?: MaybeRefOrGetter<string | null | undefined>\n limit?: MaybeRefOrGetter<number | undefined>\n order?: MaybeRefOrGetter<\"asc\" | \"desc\" | undefined>\n cursor?: MaybeRefOrGetter<string | undefined>\n maxRetries?: MaybeRefOrGetter<number | undefined>\n}\n\nexport interface UsePaymentsReturn {\n payments: ComputedRef<NormalizedPayment[]>\n loading: ComputedRef<boolean>\n error: ComputedRef<StellarError | null>\n isStale: ComputedRef<boolean>\n refetch: () => Promise<void>\n fetchNext: () => Promise<void>\n fetchPrev: () => Promise<void>\n hasNext: ComputedRef<boolean>\n hasPrev: ComputedRef<boolean>\n}\n\nexport function usePayments(options: UsePaymentsOptions = {}): UsePaymentsReturn {\n const runtime = useStellarRuntime()\n const address = computed(() => {\n const value =\n options.address === undefined ? runtime.walletAddress.value : toValue(options.address)\n return value?.trim() || null\n })\n const limit = computed(() => toValue(options.limit) ?? 10)\n const order = computed(() => toValue(options.order) ?? \"desc\")\n const inputCursor = computed(() => toValue(options.cursor))\n const activeCursor = ref<string | undefined>(inputCursor.value)\n\n watch(inputCursor, cursor => (activeCursor.value = cursor), { flush: \"sync\" })\n watch(\n [address, limit, order],\n (_next, previous) => {\n if (previous.length > 0) activeCursor.value = undefined\n },\n { flush: \"sync\" }\n )\n\n const queryKey = computed(() =>\n address.value\n ? paymentsKey(\n runtime.networkConfig.horizonUrl,\n runtime.networkConfig.network,\n address.value,\n limit.value,\n order.value,\n activeCursor.value\n )\n : ([\"payments\", \"disabled\"] as const)\n )\n const query = useQuery<PaymentsPageResult>({\n store: runtime.queryStore,\n queryKey: () => queryKey.value,\n queryFn: () =>\n fetchPaymentsPage(runtime.networkConfig, {\n address: address.value!,\n limit: limit.value,\n order: order.value,\n cursor: activeCursor.value,\n }),\n enabled: () => address.value !== null,\n maxRetries: options.maxRetries,\n })\n\n const displayed = shallowRef<NormalizedPayment[]>([])\n const nextPage = shallowRef<PaymentsPageResult[\"nextCursor\"] | null>(null)\n const prevPage = shallowRef<PaymentsPageResult[\"prevCursor\"] | null>(null)\n const pageHasNext = ref(false)\n const pageHasPrev = ref(false)\n const pageLoading = ref(false)\n const pageError = shallowRef<StellarError | null>(null)\n let requestId = 0\n\n function install(page: PaymentsPageResult): void {\n displayed.value = page.records\n nextPage.value = page.nextCursor\n prevPage.value = page.prevCursor\n pageHasNext.value = page.hasNext\n pageHasPrev.value = page.hasPrev\n pageError.value = null\n }\n\n watch(\n query.data,\n page => {\n requestId += 1\n pageLoading.value = false\n if (page) install(page)\n else {\n displayed.value = []\n nextPage.value = null\n prevPage.value = null\n pageHasNext.value = false\n pageHasPrev.value = false\n pageError.value = null\n }\n },\n { immediate: true, flush: \"sync\" }\n )\n\n watch(\n () => serializeKey(queryKey.value),\n () => {\n requestId += 1\n displayed.value = []\n nextPage.value = null\n prevPage.value = null\n pageHasNext.value = false\n pageHasPrev.value = false\n pageLoading.value = false\n pageError.value = null\n },\n { flush: \"sync\" }\n )\n\n async function navigate(direction: \"next\" | \"prev\"): Promise<void> {\n const load = direction === \"next\" ? nextPage.value : prevPage.value\n if (!load || !address.value) return\n const id = ++requestId\n pageLoading.value = true\n pageError.value = null\n try {\n const response = await load()\n if (id !== requestId || !address.value) return\n const hasMore = response.records.length > limit.value\n const records = hasMore ? response.records.slice(0, limit.value) : response.records\n const normalized = records.map(record => normalizePayment(record, address.value!))\n if (normalized.length > 0) displayed.value = normalized\n nextPage.value = () => response.next()\n prevPage.value = () => response.prev()\n pageHasNext.value = direction === \"next\" ? hasMore : true\n pageHasPrev.value = direction === \"prev\" ? hasMore : true\n } catch (cause) {\n if (id !== requestId) return\n pageError.value = toStellarError(cause)\n } finally {\n if (id === requestId) pageLoading.value = false\n }\n }\n\n async function refetch(): Promise<void> {\n requestId += 1\n pageError.value = null\n await query.refetch()\n }\n\n const error = computed(() => pageError.value ?? (query.error.value as StellarError | null))\n return {\n payments: computed(() => displayed.value),\n loading: computed(() => pageLoading.value || query.loading.value),\n error,\n isStale: computed(() => error.value !== null && displayed.value.length > 0),\n refetch,\n fetchNext: () => navigate(\"next\"),\n fetchPrev: () => navigate(\"prev\"),\n hasNext: computed(() => pageHasNext.value),\n hasPrev: computed(() => pageHasPrev.value),\n }\n}\n","import { computed, toValue, type ComputedRef, type MaybeRefOrGetter } from \"vue\"\nimport {\n filterPayments,\n type Asset,\n type NormalizedPayment,\n type StellarError,\n} from \"use-stellar/core\"\nimport { usePayments, type UsePaymentsOptions } from \"./usePayments\"\n\nexport interface UsePaymentHistoryOptions extends UsePaymentsOptions {\n direction?: MaybeRefOrGetter<\"incoming\" | \"outgoing\" | \"all\" | undefined>\n asset?: MaybeRefOrGetter<Asset | \"all\" | undefined>\n}\n\nexport interface UsePaymentHistoryReturn {\n payments: ComputedRef<NormalizedPayment[]>\n loading: ComputedRef<boolean>\n error: ComputedRef<StellarError | null>\n isStale: ComputedRef<boolean>\n refetch: () => Promise<void>\n fetchNext: () => Promise<void>\n fetchPrev: () => Promise<void>\n hasNext: ComputedRef<boolean>\n hasPrev: ComputedRef<boolean>\n}\n\n/**\n * Filters the current `usePayments` page without issuing another request.\n * Filtering is intentionally page-local; pagination continues to follow the\n * unfiltered Horizon result set.\n */\nexport function usePaymentHistory(options: UsePaymentHistoryOptions = {}): UsePaymentHistoryReturn {\n const payments = usePayments({\n address: options.address,\n limit: options.limit,\n order: options.order,\n cursor: options.cursor,\n maxRetries: options.maxRetries,\n })\n\n return {\n ...payments,\n payments: computed(() =>\n filterPayments(payments.payments.value, {\n direction: toValue(options.direction) ?? \"all\",\n asset: toValue(options.asset) ?? \"all\",\n })\n ),\n }\n}\n","// packages/vue/src/store.ts\n//\n// A Vue-native counterpart to the core package's QueryStore: one instance per\n// installed plugin, shared by every composable that reads through it. This is\n// the one shared cache for a Vue app — composables must never keep a private\n// cache of their own, the same way every React hook shares the one QueryStore\n// a StellarProvider creates.\n\nimport { reactive } from \"vue\"\n\nfunction normalizeKey(key: string | readonly unknown[]): string {\n return typeof key === \"string\" ? key : JSON.stringify(key)\n}\n\nexport interface QueryStoreConfig {\n /** How long (ms) data is considered fresh. Defaults to 30 000 (30s). */\n staleTime?: number\n /** How long (ms) an entry is kept after its last subscriber leaves. Defaults to 300 000 (5min). */\n gcTime?: number\n}\n\n/** The reactive shape a composable reads. Mutating it directly is not supported — go through the store. */\nexport interface QueryEntry<T = unknown> {\n data: T | null\n updatedAt: number | null\n loading: boolean\n error: unknown\n}\n\ninterface InternalEntry<T> extends QueryEntry<T> {\n promise: Promise<T> | null\n subscribers: number\n gcTimer: ReturnType<typeof setTimeout> | null\n}\n\nconst DEFAULT_STALE_TIME = 30_000\nconst DEFAULT_GC_TIME = 300_000\n\nexport interface RunOptions {\n /** Overrides the store's default staleTime for this call. */\n staleTime?: number\n /** Bypasses both the in-flight dedup check and the staleTime check. */\n force?: boolean\n}\n\nexport class VueQueryStore {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private entries = reactive(new Map<string, InternalEntry<any>>())\n private staleTime: number\n private gcTime: number\n\n constructor(config: QueryStoreConfig = {}) {\n this.staleTime = config.staleTime ?? DEFAULT_STALE_TIME\n this.gcTime = config.gcTime ?? DEFAULT_GC_TIME\n }\n\n private ensure<T>(key: string): InternalEntry<T> {\n const existing = this.entries.get(key) as InternalEntry<T> | undefined\n if (existing) return existing\n\n const entry: InternalEntry<T> = {\n data: null,\n updatedAt: null,\n loading: false,\n error: null,\n promise: null,\n subscribers: 0,\n gcTimer: null,\n }\n this.entries.set(key, entry)\n return entry\n }\n\n /**\n * The live, reactive entry for a key. Read its fields inside a `computed`\n * or `watchEffect` — Vue tracks the read and re-runs when the store writes\n * to it.\n */\n getEntry<T>(key: string): QueryEntry<T> {\n return this.ensure<T>(key)\n }\n\n /**\n * Registers a subscriber for `key` and cancels any pending GC eviction.\n * Returns the unsubscribe function — call it from `onCleanup` /\n * `onScopeDispose` so an idle entry is eventually evicted.\n */\n subscribe(key: string): () => void {\n const entry = this.ensure(key)\n entry.subscribers += 1\n if (entry.gcTimer !== null) {\n clearTimeout(entry.gcTimer)\n entry.gcTimer = null\n }\n\n return () => {\n entry.subscribers = Math.max(0, entry.subscribers - 1)\n if (entry.subscribers === 0) this.scheduleGc(key, entry)\n }\n }\n\n /** Number of active subscribers for a key. Exposed for tests. */\n subscriberCount(key: string): number {\n return this.entries.get(key)?.subscribers ?? 0\n }\n\n private scheduleGc(key: string, entry: InternalEntry<unknown>): void {\n if (this.gcTime === 0) {\n this.entries.delete(key)\n return\n }\n entry.gcTimer = setTimeout(() => {\n if (entry.subscribers === 0) this.entries.delete(key)\n }, this.gcTime)\n }\n\n isFresh(key: string, staleTime?: number): boolean {\n const entry = this.entries.get(key)\n if (!entry?.updatedAt) return false\n return Date.now() - entry.updatedAt < (staleTime ?? this.staleTime)\n }\n\n /**\n * Runs `queryFn` for `key`, deduplicated: a call made while a fetch for the\n * same key is already in flight awaits that same promise instead of\n * issuing a second request — this is what lets two Vue scopes reading the\n * same query share one network call. Skipped entirely when cached data is\n * still within `staleTime`, unless `force` is set.\n */\n run<T>(key: string, queryFn: () => Promise<T>, opts: RunOptions = {}): Promise<T> {\n const entry = this.ensure<T>(key)\n\n if (!opts.force) {\n if (entry.promise) return entry.promise\n if (entry.data !== null && this.isFresh(key, opts.staleTime)) {\n return Promise.resolve(entry.data)\n }\n }\n\n entry.loading = true\n entry.error = null\n\n const promise = queryFn().then(\n data => {\n entry.data = data\n entry.updatedAt = Date.now()\n entry.loading = false\n entry.error = null\n entry.promise = null\n return data\n },\n err => {\n entry.loading = false\n entry.error = err\n entry.promise = null\n throw err\n }\n )\n\n entry.promise = promise\n return promise\n }\n\n /** Marks a cached query stale so its next read fetches fresh data. */\n invalidate(key: string | readonly unknown[]): void {\n const entry = this.entries.get(normalizeKey(key))\n if (entry) entry.updatedAt = null\n }\n\n /** Empties the store. Useful in tests; not meant for app code. */\n clear(): void {\n for (const entry of this.entries.values()) {\n if (entry.gcTimer !== null) clearTimeout(entry.gcTimer)\n }\n this.entries.clear()\n }\n}\n"]}
|