@stridge/kit 0.1.0-alpha.37 → 0.1.0-alpha.39
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/dist/_internal/drivers/stridge/index.d.ts +2 -1
- package/dist/_internal/drivers/stridge/index.js +1 -1
- package/dist/drivers/stridge/catalog.d.ts +54 -0
- package/dist/drivers/stridge/catalog.js +1 -0
- package/dist/drivers/stridge/createStridgeDepositDriver.d.ts +9 -0
- package/dist/drivers/stridge/createStridgeDepositDriver.js +1 -1
- package/dist/drivers/stridge/createStridgeWithdrawDriver.d.ts +8 -0
- package/dist/drivers/stridge/createStridgeWithdrawDriver.js +1 -1
- package/dist/drivers/stridge/internal/retry.js +1 -0
- package/dist/drivers/stridge-mock/createStridgeMockDriver.js +1 -1
- package/dist/drivers/stridge-mock/createStridgeMockWithdrawDriver.js +1 -1
- package/dist/flows/deposit/dialog/DepositDialog.js +1 -1
- package/dist/flows/deposit/dialog/WalletRequiredState.js +1 -0
- package/dist/flows/deposit/dialog/WalletRequiredState.styles.js +1 -0
- package/dist/flows/deposit/driver/types.d.ts +11 -0
- package/dist/flows/deposit/orchestrator/controller.js +1 -1
- package/dist/flows/deposit/orchestrator/useDeposit.d.ts +28 -1
- package/dist/flows/deposit/orchestrator/useDeposit.js +1 -1
- package/dist/flows/withdraw/driver/types.d.ts +7 -0
- package/dist/flows/withdraw/orchestrator/controller.js +1 -1
- package/dist/flows/withdraw/orchestrator/index.d.ts +1 -1
- package/dist/flows/withdraw/orchestrator/useWithdraw.d.ts +19 -1
- package/dist/flows/withdraw/orchestrator/useWithdraw.js +1 -1
- package/dist/i18n/locales/ar.js +1 -1
- package/dist/i18n/locales/es.js +1 -1
- package/dist/i18n/locales/source-keys.d.ts +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1 -1
- package/dist/package.js +1 -1
- package/dist/shared/utils/useDeepMemo.js +1 -0
- package/dist/shared/wallet/ConnectWalletContext.d.ts +17 -0
- package/dist/shared/wallet/ConnectWalletContext.js +1 -0
- package/dist/shared/widgets/asset-picker/compound/components/Asset.d.ts +7 -1
- package/dist/shared/widgets/asset-picker/compound/components/Asset.js +1 -1
- package/dist/stridge/StridgeProvider.d.ts +65 -89
- package/dist/stridge/StridgeProvider.js +1 -1
- package/dist/stridge/depositOwner.js +1 -0
- package/dist/stridge/stubs.js +1 -1
- package/dist/styles/index.css +12 -0
- package/package.json +1 -1
- package/dist/stridge/StridgeContext.d.ts +0 -29
- package/dist/stridge/StridgeContext.js +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { StridgeChainSlug, StridgeRpc, StridgeRpcConfig, StridgeRpcWaitInput, createStridgeRpc } from "../../../drivers/stridge/rpc.js";
|
|
2
2
|
import { STRIDGE_DEFAULT_ENVIRONMENT, StridgeDriverConfig, StridgeDriverDestination, StridgeEnvironment, StridgePollIntervals, StridgeTokenIconResolverEntry } from "../../../drivers/stridge/types.js";
|
|
3
|
+
import { CreateStridgeCatalogInput, StridgeCatalog, createStridgeCatalog } from "../../../drivers/stridge/catalog.js";
|
|
3
4
|
import { CreateStridgeDepositDriverInput, createStridgeDepositDriver } from "../../../drivers/stridge/createStridgeDepositDriver.js";
|
|
4
5
|
import { CreateStridgeWithdrawDriverInput, StridgeWithdrawCurrency, createStridgeWithdrawDriver } from "../../../drivers/stridge/createStridgeWithdrawDriver.js";
|
|
5
6
|
import { GatewayStartResponse, SupportedAssetsResponse } from "@stridge/sdk";
|
|
6
|
-
export { type CreateStridgeDepositDriverInput, type CreateStridgeWithdrawDriverInput, type GatewayStartResponse, STRIDGE_DEFAULT_ENVIRONMENT, type StridgeChainSlug, type StridgeDriverConfig, type StridgeDriverDestination, type StridgeEnvironment, type StridgePollIntervals, type StridgeRpc, type StridgeRpcConfig, type StridgeRpcWaitInput, type StridgeTokenIconResolverEntry, type StridgeWithdrawCurrency, type SupportedAssetsResponse, createStridgeDepositDriver, createStridgeRpc, createStridgeWithdrawDriver };
|
|
7
|
+
export { type CreateStridgeCatalogInput, type CreateStridgeDepositDriverInput, type CreateStridgeWithdrawDriverInput, type GatewayStartResponse, STRIDGE_DEFAULT_ENVIRONMENT, type StridgeCatalog, type StridgeChainSlug, type StridgeDriverConfig, type StridgeDriverDestination, type StridgeEnvironment, type StridgePollIntervals, type StridgeRpc, type StridgeRpcConfig, type StridgeRpcWaitInput, type StridgeTokenIconResolverEntry, type StridgeWithdrawCurrency, type SupportedAssetsResponse, createStridgeCatalog, createStridgeDepositDriver, createStridgeRpc, createStridgeWithdrawDriver };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{STRIDGE_DEFAULT_ENVIRONMENT as e}from"../../../drivers/stridge/types.js";import{
|
|
1
|
+
import{STRIDGE_DEFAULT_ENVIRONMENT as e}from"../../../drivers/stridge/types.js";import{createStridgeCatalog as t}from"../../../drivers/stridge/catalog.js";import{createStridgeRpc as n}from"../../../drivers/stridge/rpc.js";import{createStridgeDepositDriver as r}from"../../../drivers/stridge/createStridgeDepositDriver.js";import{createStridgeWithdrawDriver as i}from"../../../drivers/stridge/createStridgeWithdrawDriver.js";export{e as STRIDGE_DEFAULT_ENVIRONMENT,t as createStridgeCatalog,r as createStridgeDepositDriver,n as createStridgeRpc,i as createStridgeWithdrawDriver};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { StridgeEnvironment } from "./types.js";
|
|
2
|
+
import { ApiClient, SupportedAssetsResponse } from "@stridge/sdk";
|
|
3
|
+
|
|
4
|
+
//#region src/drivers/stridge/catalog.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Provider-scoped shared `Uda.supportedAssets()` cache. Deduplicates the catalog fetch across the
|
|
7
|
+
* deposit and withdraw drivers when both flows are mounted in a single `<StridgeProvider>` — they
|
|
8
|
+
* `await` the same in-flight promise and one network round-trip serves both flows.
|
|
9
|
+
*
|
|
10
|
+
* The catalog never invalidates within a single provider lifecycle — `supportedAssets` is the
|
|
11
|
+
* gateway's catalog of routable chains / assets, which changes on the order of days, not user
|
|
12
|
+
* sessions. Hosts that need to invalidate unmount and remount the provider.
|
|
13
|
+
*
|
|
14
|
+
* BYO-driver hosts using `<KitProvider>` directly are unaffected — both `createStridge*Driver`
|
|
15
|
+
* factories accept `catalog` as an opt-in input and fall back to their own per-driver fetch when
|
|
16
|
+
* none is supplied.
|
|
17
|
+
*/
|
|
18
|
+
interface StridgeCatalog {
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the shared `supportedAssets` cache. First call kicks off the network fetch;
|
|
21
|
+
* subsequent calls return the same in-flight promise (or its resolved value).
|
|
22
|
+
*
|
|
23
|
+
* Resolves with `null` when the fetch fails — every consumer treats a missing catalog as a
|
|
24
|
+
* soft degradation (the deposit driver flips its `target` entity to `error`; the withdraw
|
|
25
|
+
* driver flips `receiveOptions` to `error`; both still issue the initial `balance/onchain`
|
|
26
|
+
* call against the backend's catalog-wide default chain set).
|
|
27
|
+
*/
|
|
28
|
+
getSupportedAssets(): Promise<SupportedAssetsResponse | null>;
|
|
29
|
+
}
|
|
30
|
+
interface CreateStridgeCatalogInput {
|
|
31
|
+
/**
|
|
32
|
+
* Pre-built SDK client. Pass this when the caller already has a client they want the
|
|
33
|
+
* catalog to share (so request headers / dedup behavior stay consistent across calls).
|
|
34
|
+
* Mutually exclusive with `projectKey` / `environment`.
|
|
35
|
+
*/
|
|
36
|
+
sdk?: ApiClient;
|
|
37
|
+
/**
|
|
38
|
+
* Stridge project key. Used to build a dedicated SDK client when `sdk` is not supplied. The
|
|
39
|
+
* key only authenticates `supportedAssets`, which is a gateway-key-readable catalog endpoint.
|
|
40
|
+
*/
|
|
41
|
+
projectKey?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Stridge environment. Used only when `sdk` is not supplied. Defaults to `"production"`.
|
|
44
|
+
*/
|
|
45
|
+
environment?: StridgeEnvironment;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build a {@link StridgeCatalog}. Wraps the `supportedAssets` call in the same one-shot retry
|
|
49
|
+
* helper the driver bootstrap uses so transient 5xx / 429 / network errors don't surface a hard
|
|
50
|
+
* "no catalog" state for the user.
|
|
51
|
+
*/
|
|
52
|
+
declare function createStridgeCatalog(input: CreateStridgeCatalogInput): StridgeCatalog;
|
|
53
|
+
//#endregion
|
|
54
|
+
export { CreateStridgeCatalogInput, StridgeCatalog, createStridgeCatalog };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{resolveSdkEnv as e}from"./internal/env.js";import{withOneShotRetry as t}from"./internal/retry.js";import{createApiClient as n}from"@stridge/sdk";function r(r){let i=r.sdk??n({projectKey:r.projectKey??``,env:e(r.environment)}),a=null;return{getSupportedAssets(){return a??=t(()=>i.uda.supportedAssets()).catch(()=>null),a}}}export{r as createStridgeCatalog};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DepositDriver } from "../../flows/deposit/driver/types.js";
|
|
2
2
|
import { StridgeDriverConfig } from "./types.js";
|
|
3
|
+
import { StridgeCatalog } from "./catalog.js";
|
|
3
4
|
import { I18n } from "@lingui/core";
|
|
4
5
|
|
|
5
6
|
//#region src/drivers/stridge/createStridgeDepositDriver.d.ts
|
|
@@ -13,6 +14,14 @@ interface CreateStridgeDepositDriverInput extends StridgeDriverConfig {
|
|
|
13
14
|
* re-bootstrap. When omitted, falls back to the kit's English-only {@link defaultI18n}.
|
|
14
15
|
*/
|
|
15
16
|
getI18n?: () => I18n;
|
|
17
|
+
/**
|
|
18
|
+
* Provider-scoped shared `supportedAssets` cache. When supplied, the driver awaits this
|
|
19
|
+
* single in-flight promise instead of issuing its own `Uda.supportedAssets()` call —
|
|
20
|
+
* deduplicates the catalog fetch across deposit + withdraw drivers mounted under one
|
|
21
|
+
* `<StridgeProvider>`. When omitted, the driver falls back to its own per-instance fetch
|
|
22
|
+
* (the path BYO-driver hosts using `<KitProvider>` directly take).
|
|
23
|
+
*/
|
|
24
|
+
catalog?: StridgeCatalog;
|
|
16
25
|
}
|
|
17
26
|
/**
|
|
18
27
|
* Builds a Stridge-backed {@link DepositDriver}. Returns the unified driver contract — the kit's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{
|
|
1
|
+
import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{NATIVE_QUOTE_ADDRESS as t,isStablecoinSymbol as n,toBaseUnits as r}from"./internal/encoding.js";import{resolveSdkEnv as i}from"./internal/env.js";import{buildKitMetadata as a}from"./internal/metadata.js";import{pollOnce as o}from"./internal/pollOnce.js";import{buildErc20OrNativeStep as s,signAndConfirm as c}from"./internal/signAndConfirm.js";import{buildEvmChainsParam as l}from"./internal/supportedChains.js";import{withOneShotRetry as u}from"./internal/retry.js";import{pickRelevantSettlement as d}from"../../flows/shared/transformers/pickRelevantSettlement.js";import{formatUsd as f}from"../../shared/format/formatUsd.js";import{balanceToBalancesPayload as p,buildRoutableAllowlist as m}from"../../flows/deposit/driver/transformers/balanceToBalancesPayload.js";import{quoteToPayload as h}from"../../flows/deposit/driver/transformers/quoteToPayload.js";import{settlementToPayload as g}from"../../flows/deposit/driver/transformers/settlementToPayload.js";import{startToAddressesPayload as _}from"../../flows/deposit/driver/transformers/startToAddressesPayload.js";import{startToBrandPayload as v}from"../../flows/deposit/driver/transformers/startToBrandPayload.js";import{startToTargetPayload as y}from"../../flows/deposit/driver/transformers/startToTargetPayload.js";import{walletAddressToWalletPayload as b}from"../../flows/deposit/driver/transformers/walletAddressToWalletPayload.js";import{defaultBlockExplorers as x}from"../../shared/utils/explorers.js";import{createEntityStore as ee}from"../stridge-mock/store.js";import{startPoll as S}from"./poll.js";import{createStridgeRpc as te}from"./rpc.js";import{createWagmiSigner as ne}from"./wagmiSigner.js";import{createApiClient as re}from"@stridge/sdk";function C(C){let w=re({projectKey:C.projectKey,env:i(C.environment)}),T=C.pollIntervals??{},E=T.detectionMs??2e3,D=T.processingMs??2e3,O=T.terminalMs??1e4,k=T.balancesMs??6e4,A=C.minAmountUsd,j=C.maxAmountUsd,M=C.getI18n??(()=>e),N={...x(),...C.explorers??{}},P=C.destination.network_id,F=C.destination.asset_symbol,I=C.destination.to_address??C.userAddress,L=C.wagmiConfig?ne({wagmiConfig:C.wagmiConfig}):void 0,R=C.rpc??te(),z={address:C.userAddress},B=ee({brand:{status:`idle`},target:{status:`idle`},addresses:{status:`idle`},balances:{status:`idle`},quote:{status:`idle`},settlement:{status:`idle`},wallet:{status:`ready`,payload:b(z),raw:z,response:z}}),V,H,U,W;function G(){if(H)return U??=m(H),U}let K=!1,q=Promise.resolve(),J=!1,Y=Promise.resolve(null),X=null;function Z(){K||(K=!0,q=ce(),Y=le())}async function ce(){B.update({brand:{status:`loading`},target:{status:`loading`},addresses:{status:`loading`},balances:{status:`loading`}});try{let[e,t]=await Promise.all([u(()=>w.gateway.start({owner:C.userAddress,destination:{network_id:P,to_address:I,asset_symbol:F},metadata:a({flow:`deposit`,...C.metadata?{hostMetadata:C.metadata}:{},extras:{destination:{networkId:P,assetSymbol:F}}})})),C.catalog?C.catalog.getSupportedAssets():u(()=>w.uda.supportedAssets()).catch(()=>null)]);V=e;let n=e.metadata?.brand_name;typeof n==`string`&&n.trim().length>0&&(W=n.trim());let r=M();if(t&&(H=t,U=void 0),B.update({brand:{status:`ready`,payload:v(e.metadata),raw:e.metadata,response:e},addresses:{status:`ready`,payload:_(e.deposit_addresses,{i18n:r,explorers:N,...t?{chainLogos:ae(t)}:{},...t?{minAmountUsdByEip155Id:se(t,A),nativeAssetByEip155Id:oe(t)}:{}}),raw:e.deposit_addresses,response:e}}),t){let e=y(t,{i18n:r,networkId:P,assetSymbol:F,minAmountUsd:A,...j===void 0?{}:{maxAmountUsd:j}}),n=t.assets.find(e=>String(e.network_id)===P);e&&n?B.update({target:{status:`ready`,payload:e,raw:n,response:t}}):B.update({target:{status:`error`,error:Error(`Destination not found in supportedAssets catalog.`)}})}else B.update({target:{status:`error`,error:Error(`supportedAssets fetch failed.`)}})}catch(e){let t=e instanceof Error?e:Error(String(e));B.update({brand:{status:`error`,error:t},target:{status:`error`,error:t},addresses:{status:`error`,error:t}})}}async function le(){try{await q;let e=l(H),t=await u(()=>w.balance.onchain(C.userAddress,{includeSpam:!1,includeZero:!1,...e?{chains:e}:{}}));X=Date.now();let n=G();if(!n)return B.update({balances:{status:`ready`,payload:[],raw:t,response:t}}),t;let r=p(t,{i18n:M(),routable:n,minAmountUsd:A,...C.resolveTokenIcon?{resolveTokenIcon:C.resolveTokenIcon}:{}});return B.update({balances:{status:`ready`,payload:r,raw:t,response:t},wallet:Q(r,M())}),t}catch(e){let t=e instanceof Error?e:Error(String(e));return B.update({balances:{status:`error`,error:t}}),null}}function Q(e,t){let n=e.reduce((e,t)=>e+(t.amountUsd?.value??0),0);return{status:`ready`,payload:{...b(z),balanceTotalUsd:{value:n,formatted:f(n,t)}},raw:z,response:z}}return{getSnapshot(){return B.getSnapshot()},subscribe(e){return B.subscribe(e)},arm:Z,async requestQuote(e,i){if(Z(),B.update({quote:{status:`loading`}}),await q,i.aborted)return;let a=V;if(!a){B.update({quote:{status:`error`,error:Error(`gateway/start not yet resolved.`)}});return}try{let o=e.sourceChainId,s=e.sourceIsNative?t:e.sourceTokenAddress,c=r(e.amount,e.sourceTokenDecimals),l=await w.uda.quote({fromNetworkId:o,fromAsset:s,toNetworkId:Number(a.destination.eip155_id),toAsset:a.destination.asset_address||`0x0000000000000000000000000000000000000000`,amount:c,fromAddress:C.userAddress,toAddress:I},{signal:i});if(i.aborted)return;let u=M(),d={chainId:o,networkName:ie(o),eip155Id:String(o),symbol:e.sourceTokenSymbol,decimals:e.sourceTokenDecimals,address:e.sourceTokenAddress,isNative:e.sourceIsNative},f={chainId:Number(a.destination.eip155_id),networkName:a.destination.network_name,eip155Id:a.destination.eip155_id,symbol:a.destination.asset_symbol,decimals:a.destination.asset_decimals,address:a.destination.asset_address,isNative:!a.destination.asset_address},p=n(a.destination.asset_symbol)?1:void 0,m=h(l,{i18n:u,sendSide:d,receiveSide:f,sourceAmount:e.amount,now:Date.now(),...e.sourcePriceUsd===void 0?{}:{sendPriceUsd:e.sourcePriceUsd},...p===void 0?{}:{receivePriceUsd:p}});B.update({quote:{status:`ready`,payload:m,raw:l,response:l}})}catch(e){if(i.aborted)return;let t=e instanceof Error?e:Error(String(e));B.update({quote:{status:`error`,error:t}})}},async submitDeposit(e,t){if(!L)throw Error(`Connect a wallet to sign and submit the deposit.`);if(Z(),await q,t.aborted)throw new DOMException(`Aborted`,`AbortError`);let n=V;if(!n)throw Error(`gateway/start not yet resolved.`);let r=n.deposit_addresses.find(t=>Number(t.eip155_id)===Number(e.sourceChainId));if(!r)throw Error(`No Stridge deposit address provisioned on chain ${e.sourceChainId}. Pick a supported source chain.`);return c({signer:L,rpc:R,step:s({chainId:e.sourceChainId,from:C.userAddress,udaDepositAddress:r.address,amount:e.amount,decimals:e.sourceTokenDecimals,isNative:e.sourceIsNative,...e.sourceIsNative?{}:{sourceTokenAddress:e.sourceTokenAddress}}),signal:t,explorers:N,...C.receiptConfirmations===void 0?{}:{receiptConfirmations:C.receiptConfirmations},...C.receiptPollingIntervalMs===void 0?{}:{receiptPollingIntervalMs:C.receiptPollingIntervalMs}})},watchBalances(e,t,n){Z(),S({signal:n,fetch:async e=>{if(!J)return J=!0,Y;if(X!==null&&Date.now()-X<3e4)return B.getSnapshot().balances;try{await q;let t=l(H),n=await w.balance.onchain(C.userAddress,{signal:e,includeSpam:!1,includeZero:!1,...t?{chains:t}:{}});X=Date.now();let r=G();if(!r)return B.update({balances:{status:`ready`,payload:[],raw:n,response:n}}),null;let i=p(n,{i18n:M(),routable:r,minAmountUsd:A,...C.resolveTokenIcon?{resolveTokenIcon:C.resolveTokenIcon}:{}});return B.update({balances:{status:`ready`,payload:i,raw:n,response:n},wallet:Q(i,M())}),n}catch{return null}},listener:()=>{t(B.getSnapshot().balances)},nextIntervalMs:()=>k})},watchSourceTx(e,t,n){Z();let r=new Set,i={current:!1},a=!1;S({signal:n,fetch:e=>o(w,C.userAddress,$(),e),listener:e=>{if(a||!e)return;let n=e.settlements??[];if(!i.current){for(let e of n)r.add(e.id);i.current=!0;return}let o=n.find(e=>!r.has(e.id));if(!o)return;a=!0;let s=Number(o.from?.eip155_id??`0`);t({hash:o.from?.tx_id??``,...N[s]&&o.from?.tx_id?{explorerUrl:`${N[s].replace(/\/+$/,``)}/tx/${o.from.tx_id}`}:{}})},nextIntervalMs:()=>a?0:E})},watchSettlement(e,t,n){let r=e=>o(w,C.userAddress,$(),e),i=!1;S({signal:n,fetch:r,listener:n=>{if(!n)return;let r=d(n,{txHash:e.tx.hash});if(!r)return;let a=g(r,n,{i18n:M(),sourceWallet:{name:`Wallet`,address:C.userAddress},explorers:N,...W?{brandName:W}:{}});a.kind!==`pending`&&(i=!0);let o={status:`ready`,payload:a,raw:r,response:n};B.update({settlement:o}),t(o)},nextIntervalMs:()=>i?O:D})},async fetchActiveSettlement(e,t){let n=await o(w,C.userAddress,$(),t);if(!n)return null;let r=d(n);if(!r)return null;let i=g(r,n,{i18n:M(),sourceWallet:{name:`Wallet`,address:C.userAddress},explorers:N,...W?{brandName:W}:{}});return i.kind===`pending`?{payload:i,raw:r,response:n}:null}};function $(){return{network_id:P,asset_symbol:F,to_address:I}}}function ie(e){switch(e){case 1:return`Ethereum`;case 56:return`BSC`;case 137:return`Polygon`;case 42161:return`Arbitrum`;case 10:return`Optimism`;case 8453:return`Base`;default:return`Chain ${e}`}}function ae(e){let t={};for(let n of e.assets){let e=String(n.eip155_id),r=n.native_currency?.logo;r&&(t[e]=r)}return t}function oe(e){let t={};for(let n of e.assets){let e=n.native_currency;if(!e?.symbol)continue;let r=String(n.eip155_id);t[r]={symbol:e.symbol,address:``,decimals:typeof e.decimals==`number`?e.decimals:18,isNative:!0,...e.logo?{assetLogoUrl:e.logo}:{}}}return t}function se(e,t){let n={};for(let r of e.assets){let e=String(r.eip155_id),i=r.native_currency?.min_deposit_usd,a=typeof i==`string`&&i.trim().length>0?Number.parseFloat(i):NaN;n[e]=Number.isFinite(a)?a:t}return n}export{C as createStridgeDepositDriver};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { WithdrawDriver } from "../../flows/withdraw/driver/types.js";
|
|
2
2
|
import { StridgeRpc } from "./rpc.js";
|
|
3
3
|
import { StridgeEnvironment, StridgePollIntervals, StridgeTokenIconResolverEntry } from "./types.js";
|
|
4
|
+
import { StridgeCatalog } from "./catalog.js";
|
|
4
5
|
import { I18n } from "@lingui/core";
|
|
5
6
|
import { Config } from "wagmi";
|
|
6
7
|
|
|
@@ -105,6 +106,13 @@ interface CreateStridgeWithdrawDriverInput {
|
|
|
105
106
|
* be the only ceiling.
|
|
106
107
|
*/
|
|
107
108
|
maxAmountUsd?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Provider-scoped shared `supportedAssets` cache. When supplied, the driver awaits this
|
|
111
|
+
* single in-flight promise instead of issuing its own `Uda.supportedAssets()` call —
|
|
112
|
+
* deduplicates the catalog fetch across deposit + withdraw drivers mounted under one
|
|
113
|
+
* `<StridgeProvider>`. When omitted, the driver falls back to its own per-instance fetch.
|
|
114
|
+
*/
|
|
115
|
+
catalog?: StridgeCatalog;
|
|
108
116
|
}
|
|
109
117
|
/**
|
|
110
118
|
* Builds a Stridge-backed {@link WithdrawDriver}. Returns the unified driver contract — the kit's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{
|
|
1
|
+
"use client";import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{NATIVE_QUOTE_ADDRESS as t,isStablecoinSymbol as n,toBaseUnits as r}from"./internal/encoding.js";import{resolveSdkEnv as i}from"./internal/env.js";import{buildKitMetadata as a}from"./internal/metadata.js";import{pollOnce as o}from"./internal/pollOnce.js";import{buildEvmChainsParam as s}from"./internal/supportedChains.js";import{withOneShotRetry as c}from"./internal/retry.js";import{pickRelevantSettlement as l}from"../../flows/shared/transformers/pickRelevantSettlement.js";import{formatUsd as u}from"../../shared/format/formatUsd.js";import{defaultBlockExplorers as d}from"../../shared/utils/explorers.js";import{createEntityStore as f}from"../stridge-mock/store.js";import{startPoll as p}from"./poll.js";import{balanceToWithdrawableBalancesPayload as m}from"../../flows/withdraw/driver/transformers/balanceToWithdrawableBalancesPayload.js";import{quoteToWithdrawalPayload as h}from"../../flows/withdraw/driver/transformers/quoteToWithdrawalPayload.js";import{settlementToWithdrawalPayload as g}from"../../flows/withdraw/driver/transformers/settlementToWithdrawalPayload.js";import{supportedAssetsToReceiveOptionsPayload as _}from"../../flows/withdraw/driver/transformers/supportedAssetsToReceiveOptionsPayload.js";import{createApiClient as v}from"@stridge/sdk";function y(y){let b=v({projectKey:y.projectKey,env:i(y.environment)}),x=y.pollIntervals??{},S=x.processingMs??2e3,C=x.terminalMs??1e4,w=x.balancesMs??6e4,T=y.getI18n??(()=>e),E={...d(),...y.explorers??{}},D=T(),O=f({withdrawableBalances:{status:`idle`},receiveOptions:{status:`idle`},quote:{status:`idle`},settlement:{status:`idle`},...y.minAmountUsd===void 0?{}:{minAmountUsd:{value:y.minAmountUsd,formatted:u(y.minAmountUsd,D)}},...y.maxAmountUsd===void 0?{}:{maxAmountUsd:{value:y.maxAmountUsd,formatted:u(y.maxAmountUsd,D)}}}),k,A,j;function M(e){let t=e.assets.find(e=>e.network_id===y.currency.networkId);if(!t)return;let n=y.currency.assetSymbol.toUpperCase(),r=t.native_currency?.symbol?.toUpperCase()===n?t.native_currency:void 0,i=t.assets.find(e=>e.symbol?.toUpperCase()===n),a={networkId:t.network_id,eip155Id:t.eip155_id,networkName:t.network_name,...t.native_currency?.logo?{chainLogoUrl:t.native_currency.logo}:{},decimals:i?.decimals??r?.decimals??18,address:i?.address??``,isNative:!i&&!!r,...i?.logo?{assetLogoUrl:i.logo}:r?.logo?{assetLogoUrl:r.logo}:{}};return i||r?a:void 0}function N(e){let t=T(),n=A,r=m(e,{i18n:t,networkId:y.currency.networkId,assetSymbol:y.currency.assetSymbol,...n?{fallbackMeta:{decimals:n.decimals,address:n.address,isNative:n.isNative,eip155Id:String(n.eip155Id),networkName:n.networkName,...n.chainLogoUrl?{chainLogoUrl:n.chainLogoUrl}:{},...n.assetLogoUrl?{assetLogoUrl:n.assetLogoUrl}:{}}}:{}});O.update({withdrawableBalances:{status:`ready`,payload:r,raw:e,response:e}})}let P=!1,F=Promise.resolve(),I=!1,L=null;function R(){P||(P=!0,F=z())}async function z(){O.update({withdrawableBalances:{status:`loading`},receiveOptions:{status:`loading`}});let e=y.catalog?await y.catalog.getSupportedAssets():await c(()=>b.uda.supportedAssets()).catch(()=>null);if(e){k=e,A=M(e);let t=_(e);O.update({receiveOptions:{status:`ready`,payload:t,raw:e.assets,response:e}})}else O.update({receiveOptions:{status:`error`,error:Error(`supportedAssets fetch failed.`)}});let t=s(e??void 0),n=await c(()=>b.balance.onchain(y.userAddress,{includeSpam:!1,includeZero:!1,...t?{chains:t}:{}})).catch(()=>null);n?(L=Date.now(),N(n)):N({wallet_address:y.userAddress,fetched_at:new Date().toISOString(),total_usd:`0`,chains:[]})}function B(){return a({flow:`withdraw`,...y.metadata?{hostMetadata:y.metadata}:{},extras:{source:{networkId:y.currency.networkId,assetSymbol:y.currency.assetSymbol}}})}function V(e,t){if(!k)return;let n=k.assets.find(t=>t.eip155_id===e);if(!n)return;let r=t.toUpperCase(),i=n.native_currency?.symbol?.toUpperCase()===r?n.native_currency:void 0,a=n.assets.find(e=>e.symbol?.toUpperCase()===r);if(!(!i&&!a))return{chainId:n.eip155_id,symbol:a?.symbol??i?.symbol??t,decimals:a?.decimals??i?.decimals??18,address:a?.address??``,isNative:!a&&!!i,...a?.logo?{assetLogoUrl:a.logo}:i?.logo?{assetLogoUrl:i.logo}:{},networkId:n.network_id,networkName:n.network_name,...i?.logo?{chainLogoUrl:i.logo}:{}}}function H(e){let t=O.getSnapshot().receiveOptions;if(!(t.status!==`ready`&&t.status!==`stale`))return t.payload.find(t=>t.eip155Id===e)}return{getSnapshot(){return O.getSnapshot()},subscribe(e){return O.subscribe(e)},arm:R,async requestQuote(e,i){R(),O.update({quote:{status:`loading`}});try{if(await F,i.aborted)return;let a=A;if(!a)throw Error(`Stridge withdraw driver: source currency ${y.currency.assetSymbol} not found on network ${y.currency.networkId} in supportedAssets.`);let o=V(e.receiveChainId,e.receiveTokenSymbol);if(!o)throw Error(`Stridge withdraw driver: receive asset ${e.receiveTokenSymbol} not found on chain ${e.receiveChainId} in supportedAssets.`);let s=r(e.amount,a.decimals),c=await b.uda.quote({fromNetworkId:a.eip155Id,fromAsset:a.isNative?t:a.address,toNetworkId:o.chainId,toAsset:o.isNative?t:o.address,amount:s,fromAddress:y.userAddress,toAddress:e.recipientAddress},{signal:i});if(i.aborted)return;let l=n(y.currency.assetSymbol)?1:void 0,u=n(o.symbol)?1:void 0,d=h(c,{i18n:T(),receiveSide:o,sourceAmount:e.amount,sendDecimals:a.decimals,sendSymbol:y.currency.assetSymbol,now:Date.now(),...l===void 0?{}:{sendPriceUsd:l},...u===void 0?{}:{receivePriceUsd:u}});O.update({quote:{status:`ready`,payload:d,raw:c,response:c}})}catch(e){if(i.aborted)return;let t=e instanceof Error?e:Error(String(e));O.update({quote:{status:`error`,error:t}})}},async prepareWithdrawal(e,t){if(R(),await F,t.aborted)throw new DOMException(`Aborted`,`AbortError`);let n=A;if(!n)throw Error(`Stridge withdraw driver: source currency ${y.currency.assetSymbol} not found on network ${y.currency.networkId} in supportedAssets.`);let r=V(e.receiveChainId,e.receiveTokenSymbol);if(!r)throw Error(`Stridge withdraw driver: receive asset ${e.receiveTokenSymbol} not found on chain ${e.receiveChainId} in supportedAssets.`);let i=await b.gateway.start({owner:y.userAddress,destination:{network_id:r.networkId??String(e.receiveChainId),asset_symbol:r.symbol,to_address:e.recipientAddress},metadata:B()},{signal:t});if(t.aborted)throw new DOMException(`Aborted`,`AbortError`);let a=i.deposit_addresses.find(e=>Number(e.eip155_id)===n.eip155Id);if(!a)throw Error(`Stridge withdraw driver: no UDA deposit address provisioned on chain ${n.eip155Id} for the brand currency. Check that supportedAssets advertises this chain.`);return j={network_id:r.networkId??String(e.receiveChainId),asset_symbol:r.symbol,to_address:e.recipientAddress},{depositTarget:{address:a.address,chainId:n.eip155Id,tokenSymbol:y.currency.assetSymbol,tokenAddress:n.isNative?``:n.address,tokenDecimals:n.decimals,isNative:n.isNative,amount:e.amount},correlation:{owner:y.userAddress}}},watchSettlement(e,t,n){let i=e=>o(b,y.userAddress,j,e),a=!1;p({signal:n,fetch:i,listener:n=>{if(!n)return;let i=A?r(e.form.amount,A.decimals).toString():void 0,o=e.tx?.hash?l(n,{txHash:e.tx.hash}):l(n,{bestMatch:{destination:{chainId:e.form.receiveChainId,tokenSymbol:e.form.receiveTokenSymbol,recipientAddress:e.form.recipientAddress},submittedAt:e.submittedAt,...i?{sourceAmountBaseUnits:i}:{}}});if(!o)return;let s=T(),c=H(Number(n.destination.eip155_id)),u=c?.tokens.find(e=>e.symbol===n.destination.asset_symbol),d={...c?.chainLogoUrl?{chainLogoUrl:c.chainLogoUrl}:{},...u?.assetLogoUrl?{assetLogoUrl:u.assetLogoUrl}:{},...c?.networkName?{networkName:c.networkName}:{}},f=g(o,n,{i18n:s,explorers:E,...Object.keys(d).length>0?{receiveAssetEnrichment:d}:{},...u?.decimals===void 0?{}:{receiveAssetDecimals:u.decimals}});f.kind!==`pending`&&(a=!0);let p={status:`ready`,payload:f,raw:o,response:n};O.update({settlement:p}),t(p)},nextIntervalMs:()=>a?C:S})},watchWithdrawableBalances(e,t,n){R(),p({signal:n,fetch:async e=>{if(!I){I=!0,await F;let e=O.getSnapshot().withdrawableBalances;return e.status===`ready`||e.status===`stale`?e.response:null}if(L!==null&&Date.now()-L<3e4)return null;try{if(await F,e.aborted)return null;let t=s(k),n=await b.balance.onchain(y.userAddress,{signal:e,includeSpam:!1,includeZero:!1,...t?{chains:t}:{}});return L=Date.now(),n}catch{return null}},listener:e=>{e&&N(e),t(O.getSnapshot().withdrawableBalances)},nextIntervalMs:()=>w})}}}export{y as createStridgeWithdrawDriver};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function e(e,r={}){let i=r.baseDelayMs??500,a=r.jitterMs??250;try{return await e()}catch(r){if(!t(r))throw r;return await n(i+Math.random()*a),await e()}}function t(e){if(!e||typeof e!=`object`)return!0;let t=e;return t.name===`AbortError`?!1:typeof t.status==`number`?t.status>=500||t.status===429:!0}function n(e){return new Promise(t=>setTimeout(t,e))}export{e as withOneShotRetry};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{shortenAddress as t}from"../../shared/format/shortenAddress.js";import{createEntityStore as n}from"./store.js";import{DEFAULT_BRAND_PAYLOAD as r,DEFAULT_WALLET_INFO as i,STUB_DEPOSIT_ADDRESSES_RAW as a,STUB_GATEWAY_POLL_RESPONSE as o,STUB_GATEWAY_SETTLEMENT_DTO as s,STUB_GATEWAY_START_RESPONSE as c,STUB_ONCHAIN_BALANCE_RESPONSE as l,STUB_QUOTE_RESPONSE as u,STUB_SUPPORTED_ASSETS_RESPONSE as d,buildDefaultAddressesPayload as f,buildDefaultBalances as p,buildDefaultFailurePayload as m,buildDefaultPendingPayload as h,buildDefaultQuotePayload as g,buildDefaultSuccessPayload as _,buildDefaultTargetPayload as v,buildDefaultTargetRaw as y,buildDefaultWalletPayload as b,resolveMockAsset as x}from"./fixtures.js";const S={quote:1400,submit:4e3,processingPendingDelay:1500,processingTerminal:3e3,transferDetected:4e3};function C(r={}){let a=r.getI18n??(()=>e),c=r.wallet??i,l=x(r.asset),d=n(w(a(),c,r.minAmountUsd,l,r.initialState)),f={...S,...r.latency??{}},p=r.autoSettleTo??`succeeded`,v=r.pendingTriggerToSuccessMs===void 0?3500:r.pendingTriggerToSuccessMs,y=new Set,b=new Set,C=new Set,E=!1,D,O;function k(){D!==void 0&&(clearTimeout(D),D=void 0),O!==void 0&&(clearTimeout(O),O=void 0),E=!1}function A(){if(E)return;E=!0;let e=a();D=setTimeout(()=>{D=void 0;let t={status:`ready`,payload:h(e,l),raw:s,response:o};d.update({settlement:t});for(let e of y)e(t);O=setTimeout(()=>{if(O=void 0,p===`succeeded`){let t={status:`ready`,payload:_(e,l),raw:s,response:o};d.update({settlement:t});for(let e of y)e(t)}else if(p===`failed`){let t={status:`ready`,payload:m(e,void 0,l),raw:s,response:o};d.update({settlement:t});for(let e of y)e(t)}E=!1},f.processingTerminal)},f.processingPendingDelay)}let j={getSnapshot(){return d.getSnapshot()},subscribe(e){return d.subscribe(e)},async requestQuote(e,t){d.update({quote:{status:`loading`}}),await T(f.quote,t);let n=a(),r=Date.now()+3e4;d.update({quote:{status:`ready`,payload:g(n,r,l),raw:u,response:u}})},async submitDeposit(e,t){return await T(f.submit,t),p!==`none`&&A(),{hash:`0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`,explorerUrl:`https://etherscan.io/tx/0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`}},watchBalances(e,t,n){C.add(t);let r=d.getSnapshot().balances;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>C.delete(t),{once:!0})},watchSourceTx(e,t,n){b.add(t);let r=setTimeout(()=>{n.aborted||t({hash:`0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`,explorerUrl:`https://etherscan.io/tx/0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`})},f.transferDetected);n.addEventListener(`abort`,()=>{clearTimeout(r),b.delete(t)},{once:!0})},watchSettlement(e,t,n){y.add(t);let r=d.getSnapshot().settlement;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>y.delete(t),{once:!0})},async fetchActiveSettlement(e,t){let n=d.getSnapshot().settlement;return n.status!==`ready`||n.payload.kind!==`pending`?null:{payload:n.payload,raw:n.raw,response:n.response}}},M=0,N=null;function P(){N!==null&&(clearTimeout(N),N=null)}function F(e){M+=1;let n=`0x${M.toString(16).padStart(8,`0`)}${e.value.length>10?e.value.slice(10):`0`.repeat(56)}`;return{value:n,formatted:t(n)}}function I(e,t){if(e)return e.replace(/(\/tx\/|\/address\/)(0x[0-9a-fA-F]+)/,(e,n)=>`${n}${t}`)}let L={triggerSettlementPending(e){let t=h(a(),l),n=t.txHash?F(t.txHash):void 0,r=n?I(t.txExplorerUrl,n.value):void 0,i={status:`ready`,payload:{...t,...n?{txHash:n}:{},...r?{txExplorerUrl:r}:{},...e},raw:s,response:o};P(),d.update({settlement:i});for(let e of y)e(i);v!==null&&v>=0&&(N=setTimeout(()=>{N=null,L.triggerSettlementSuccess()},v))},triggerSettlementSuccess(e){P();let t=_(a(),l),n=F(t.depositTx.hash),r=I(t.depositTx.explorerUrl,n.value),i={status:`ready`,payload:{...t,depositTx:{...t.depositTx,hash:n,...r?{explorerUrl:r}:{}},...e},raw:s,response:o};d.update({settlement:i});for(let e of y)e(i)},triggerSettlementFailure(e,t){P();let n=m(a(),e,l),r=F(n.txHash),i=I(n.txExplorerUrl,r.value),c={status:`ready`,payload:{...n,txHash:r,...i?{txExplorerUrl:i}:{},...t},raw:s,response:o};d.update({settlement:c});for(let e of y)e(c)},triggerQuoteFailure(e){d.update({quote:{status:`error`,error:e}})},reset(){P(),k(),d.replace(w(a(),c,r.minAmountUsd,l,r.initialState))}};return{driver:j,triggers:L}}function w(e,t,n,i,o){let s={brand:{status:`ready`,payload:r,raw:c.metadata,response:c},target:{status:`ready`,payload:v(e,n,i),raw:y(i),response:d},addresses:{status:`ready`,payload:f(e,n),raw:a,response:c},balances:{status:`ready`,payload:p(e),raw:l,response:l},quote:{status:`idle`},settlement:{status:`idle`},wallet:{status:`ready`,payload:b(e,t),raw:t,response:t}};return o?{...s,...o}:s}function T(e,t){return new Promise((n,r)=>{if(t.aborted){r(E());return}let i=setTimeout(()=>{t.removeEventListener(`abort`,a),n()},e),a=()=>{clearTimeout(i),r(E())};t.addEventListener(`abort`,a,{once:!0})})}function E(){if(typeof DOMException==`function`)return new DOMException(`Aborted`,`AbortError`);let e=Error(`Aborted`);return e.name=`AbortError`,e}export{C as createStridgeMockDriver};
|
|
1
|
+
import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{shortenAddress as t}from"../../shared/format/shortenAddress.js";import{createEntityStore as n}from"./store.js";import{DEFAULT_BRAND_PAYLOAD as r,DEFAULT_WALLET_INFO as i,STUB_DEPOSIT_ADDRESSES_RAW as a,STUB_GATEWAY_POLL_RESPONSE as o,STUB_GATEWAY_SETTLEMENT_DTO as s,STUB_GATEWAY_START_RESPONSE as c,STUB_ONCHAIN_BALANCE_RESPONSE as l,STUB_QUOTE_RESPONSE as u,STUB_SUPPORTED_ASSETS_RESPONSE as d,buildDefaultAddressesPayload as f,buildDefaultBalances as p,buildDefaultFailurePayload as m,buildDefaultPendingPayload as h,buildDefaultQuotePayload as g,buildDefaultSuccessPayload as _,buildDefaultTargetPayload as v,buildDefaultTargetRaw as y,buildDefaultWalletPayload as b,resolveMockAsset as x}from"./fixtures.js";const S={quote:1400,submit:4e3,processingPendingDelay:1500,processingTerminal:3e3,transferDetected:4e3};function C(r={}){let a=r.getI18n??(()=>e),c=r.wallet??i,l=x(r.asset),d=n(w(a(),c,r.minAmountUsd,l,r.initialState)),f={...S,...r.latency??{}},p=r.autoSettleTo??`succeeded`,v=r.pendingTriggerToSuccessMs===void 0?3500:r.pendingTriggerToSuccessMs,y=new Set,b=new Set,C=new Set,E=!1,D,O;function k(){D!==void 0&&(clearTimeout(D),D=void 0),O!==void 0&&(clearTimeout(O),O=void 0),E=!1}function A(){if(E)return;E=!0;let e=a();D=setTimeout(()=>{D=void 0;let t={status:`ready`,payload:h(e,l),raw:s,response:o};d.update({settlement:t});for(let e of y)e(t);O=setTimeout(()=>{if(O=void 0,p===`succeeded`){let t={status:`ready`,payload:_(e,l),raw:s,response:o};d.update({settlement:t});for(let e of y)e(t)}else if(p===`failed`){let t={status:`ready`,payload:m(e,void 0,l),raw:s,response:o};d.update({settlement:t});for(let e of y)e(t)}E=!1},f.processingTerminal)},f.processingPendingDelay)}let j={getSnapshot(){return d.getSnapshot()},subscribe(e){return d.subscribe(e)},arm(){},async requestQuote(e,t){d.update({quote:{status:`loading`}}),await T(f.quote,t);let n=a(),r=Date.now()+3e4;d.update({quote:{status:`ready`,payload:g(n,r,l),raw:u,response:u}})},async submitDeposit(e,t){return await T(f.submit,t),p!==`none`&&A(),{hash:`0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`,explorerUrl:`https://etherscan.io/tx/0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`}},watchBalances(e,t,n){C.add(t);let r=d.getSnapshot().balances;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>C.delete(t),{once:!0})},watchSourceTx(e,t,n){b.add(t);let r=setTimeout(()=>{n.aborted||t({hash:`0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`,explorerUrl:`https://etherscan.io/tx/0x1d72b900dd9b4f9fb0e11c14978d9cbbff7b47db0b820911839aad7081f6b72a`})},f.transferDetected);n.addEventListener(`abort`,()=>{clearTimeout(r),b.delete(t)},{once:!0})},watchSettlement(e,t,n){y.add(t);let r=d.getSnapshot().settlement;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>y.delete(t),{once:!0})},async fetchActiveSettlement(e,t){let n=d.getSnapshot().settlement;return n.status!==`ready`||n.payload.kind!==`pending`?null:{payload:n.payload,raw:n.raw,response:n.response}}},M=0,N=null;function P(){N!==null&&(clearTimeout(N),N=null)}function F(e){M+=1;let n=`0x${M.toString(16).padStart(8,`0`)}${e.value.length>10?e.value.slice(10):`0`.repeat(56)}`;return{value:n,formatted:t(n)}}function I(e,t){if(e)return e.replace(/(\/tx\/|\/address\/)(0x[0-9a-fA-F]+)/,(e,n)=>`${n}${t}`)}let L={triggerSettlementPending(e){let t=h(a(),l),n=t.txHash?F(t.txHash):void 0,r=n?I(t.txExplorerUrl,n.value):void 0,i={status:`ready`,payload:{...t,...n?{txHash:n}:{},...r?{txExplorerUrl:r}:{},...e},raw:s,response:o};P(),d.update({settlement:i});for(let e of y)e(i);v!==null&&v>=0&&(N=setTimeout(()=>{N=null,L.triggerSettlementSuccess()},v))},triggerSettlementSuccess(e){P();let t=_(a(),l),n=F(t.depositTx.hash),r=I(t.depositTx.explorerUrl,n.value),i={status:`ready`,payload:{...t,depositTx:{...t.depositTx,hash:n,...r?{explorerUrl:r}:{}},...e},raw:s,response:o};d.update({settlement:i});for(let e of y)e(i)},triggerSettlementFailure(e,t){P();let n=m(a(),e,l),r=F(n.txHash),i=I(n.txExplorerUrl,r.value),c={status:`ready`,payload:{...n,txHash:r,...i?{txExplorerUrl:i}:{},...t},raw:s,response:o};d.update({settlement:c});for(let e of y)e(c)},triggerQuoteFailure(e){d.update({quote:{status:`error`,error:e}})},reset(){P(),k(),d.replace(w(a(),c,r.minAmountUsd,l,r.initialState))}};return{driver:j,triggers:L}}function w(e,t,n,i,o){let s={brand:{status:`ready`,payload:r,raw:c.metadata,response:c},target:{status:`ready`,payload:v(e,n,i),raw:y(i),response:d},addresses:{status:`ready`,payload:f(e,n),raw:a,response:c},balances:{status:`ready`,payload:p(e),raw:l,response:l},quote:{status:`idle`},settlement:{status:`idle`},wallet:{status:`ready`,payload:b(e,t),raw:t,response:t}};return o?{...s,...o}:s}function T(e,t){return new Promise((n,r)=>{if(t.aborted){r(E());return}let i=setTimeout(()=>{t.removeEventListener(`abort`,a),n()},e),a=()=>{clearTimeout(i),r(E())};t.addEventListener(`abort`,a,{once:!0})})}function E(){if(typeof DOMException==`function`)return new DOMException(`Aborted`,`AbortError`);let e=Error(`Aborted`);return e.name=`AbortError`,e}export{C as createStridgeMockDriver};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{formatDurationCompact as t}from"../../shared/format/formatDurationCompact.js";import{formatTimestamp as n}from"../../shared/format/formatTimestamp.js";import{formatUsd as r}from"../../shared/format/formatUsd.js";import{shortenAddress as i}from"../../shared/format/shortenAddress.js";import{supportedAssetsToReceiveOptionsPayload as a}from"../../flows/withdraw/driver/transformers/supportedAssetsToReceiveOptionsPayload.js";import{DEFAULT_MOCK_ASSET as o,buildDefaultSupportedAssetsResponse as s,resolveMockAsset as c}from"./fixtures.js";const l=`0x32995Fb47918BD37133dB46F21c5Ed906140Dd41`,u=`0xd41f5e9e5b1c2c4d8e7a0bf3a9e6c1d2b8f5d4c3e2a1b0c9d8e7f6a5b4c3d2e1`;function d(e){return{symbol:e.symbol,decimals:e.decimals,address:e.address,isNative:e.isNative,assetLogoUrl:e.assetLogoUrl,networkName:e.networkName,eip155Id:e.eip155IdString,networkId:e.networkId,chainLogoUrl:e.chainLogoUrl}}function f(e){return`${e.explorerBase}/tx/`}const p={quote:1400,submit:4e3,processingPendingDelay:1500,processingTerminal:3e3},m=d(o),h=4.00613;function g(e=o){let t=d(e);return[{networkId:t.networkId,networkName:t.networkName,eip155Id:t.eip155Id,...t.chainLogoUrl?{chainLogoUrl:t.chainLogoUrl}:{},symbol:t.symbol,decimals:t.decimals,address:t.address,...t.assetLogoUrl?{assetLogoUrl:t.assetLogoUrl}:{},isNative:t.isNative,amount:{value:4.01,formatted:`4.01`},amountUsd:{value:4.01,formatted:`$4.01`}}]}function _(e=h,t=o){let n=O(e);return{receiveAsset:d(t),receiveAmount:{value:e,formatted:n},receiveAmountUsd:{value:e,formatted:`$${e.toFixed(2)}`},breakdown:{selectedRoute:{provider:`mock`,scenario:`same_chain_same_token`,label:`Mock · same chain same token`},networkCost:{value:0,formatted:`$0.00`},priceImpact:{value:0,formatted:`0.00%`}},quoteTotalSeconds:30,expiresAt:Date.now()+3e4}}function v(t=e,a=h,s=l,c=u,p=o){let m=Date.now();return{kind:`pending`,receiveAsset:d(p),receiveAmount:{value:a,formatted:O(a)},receiveAmountUsd:{value:a,formatted:r(a,t)},recipient:{value:s,formatted:i(s)},submittedAt:{value:m,formatted:n(m,t)},txHash:{value:c,formatted:i(c)},txExplorerUrl:`${f(p)}${c}`}}function y(r=e,a=h,s=l,c=14,p=u,m=o,g=`0xa17b4c9e2d68f0a5c3b91e7f4d52a86b09c1d7e3f8a4b2c5d6e9f0a1b2c3d4e5`){let _=Date.now(),v=c*1e3,y=_-v;return{kind:`succeeded`,receiveAsset:d(m),receiveAmount:{value:a,formatted:O(a)},recipient:{value:s,formatted:i(s)},submittedAt:{value:y,formatted:n(y,r)},filledAt:{value:_,formatted:n(_,r)},totalTime:{value:c,formatted:t(v,r)},txHash:{value:p,formatted:i(p)},txExplorerUrl:`${f(m)}${p}`,completionTx:{hash:{value:g,formatted:i(g)},explorerUrl:`${f(m)}${g}`}}}function b(t=e,r=`unknown`,a=h,s=l,c=u,p=o){let m=Date.now(),g=m-5e3;return{kind:`failed`,failureKind:r,receiveAsset:d(p),receiveAmount:{value:a,formatted:O(a)},recipient:{value:s,formatted:i(s)},submittedAt:{value:g,formatted:n(g,t)},failedAt:{value:m,formatted:n(m,t)},txHash:{value:c,formatted:i(c)},txExplorerUrl:`${f(p)}${c}`}}function x(t={}){let n={...p,...t.latency},i=t.autoSettleTo??`succeeded`,o=t.pendingTriggerToSuccessMs===void 0?3500:t.pendingTriggerToSuccessMs,f=t.getI18n??(()=>e),m=c(t.asset),x=d(m),C=g(m),O=S(C),k=s(),A=a(k),j=t.initialState?.minAmountUsd??(t.minAmountUsd===void 0?void 0:{value:t.minAmountUsd,formatted:r(t.minAmountUsd,f())}),M=t.initialState?.maxAmountUsd??(t.maxAmountUsd===void 0?void 0:{value:t.maxAmountUsd,formatted:r(t.maxAmountUsd,f())}),N={withdrawableBalances:t.initialState?.withdrawableBalances??{status:`ready`,payload:C,raw:O,response:O},receiveOptions:t.initialState?.receiveOptions??{status:`ready`,payload:A,raw:k.assets,response:k},quote:t.initialState?.quote??{status:`idle`},settlement:t.initialState?.settlement??{status:`idle`},...j?{minAmountUsd:j}:{},...M?{maxAmountUsd:M}:{}},P=N,F=new Set,I=new Set,L=new Set,R=new Set,z=()=>{for(let e of F)e()},B=e=>{if(P={...P,...e},z(),e.settlement)for(let e of I)e(P.settlement);if(e.withdrawableBalances)for(let e of L)e(P.withdrawableBalances)},V=(e,t)=>{let n=setTimeout(()=>{R.delete(n),e()},t);R.add(n)},H=null,U=!1,W=0;function G(){return W+=1,`0x${W.toString(16).padStart(8,`0`)}${u.slice(10)}`}let K={getSnapshot:()=>P,subscribe(e){return F.add(e),()=>{F.delete(e)}},async requestQuote(e,t){B({quote:{status:`loading`}}),await D(n.quote,t);let r=_(e.amount,m),i=w(r,e.amount,x);B({quote:{status:`ready`,payload:r,raw:i,response:i}})},async prepareWithdrawal(e,t){await D(n.submit,t),H={amount:e.amount,recipient:e.recipientAddress};let r=G();return q(e.amount,e.recipientAddress,r,t),{depositTarget:{address:`0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC`,chainId:Number(m.eip155IdString),tokenSymbol:m.symbol,tokenAddress:m.address,tokenDecimals:m.decimals,isNative:m.isNative,amount:e.amount},correlation:{owner:`0x70997970C51812dc3A010C7d01b50e0d17dc79C8`}}},watchSettlement(e,t,n){I.add(t);let r=P.settlement;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>I.delete(t),{once:!0})},watchWithdrawableBalances(e,t,n){L.add(t);let r=P.withdrawableBalances;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>L.delete(t),{once:!0})}};function q(e,t,r,a){U||(U=!0,V(()=>{if(a.aborted){U=!1;return}let o=v(f(),e,t,r,m),s=T(o,x);if(B({settlement:{status:`ready`,payload:o,raw:s,response:E(s,o)}}),i===`none`){U=!1;return}V(()=>{if(U=!1,a.aborted)return;let n=i===`succeeded`?y(f(),e,t,14,r,m):b(f(),`unknown`,e,t,r,m),o=T(n,x);B({settlement:{status:`ready`,payload:n,raw:o,response:E(o,n)}})},n.processingTerminal)},n.processingPendingDelay))}let J={triggerWithdrawalInProgress(e){let{amount:t,recipient:n}=Y(),r={...v(f(),t,n,G(),m),...e},i=T(r,x);B({settlement:{status:`ready`,payload:r,raw:i,response:E(i,r)}}),o!==null&&V(()=>J.triggerWithdrawalSuccess(),o)},triggerWithdrawalSuccess(e){let{amount:t,recipient:n}=Y(),r={...y(f(),t,n,14,G(),m),...e},i=T(r,x);B({settlement:{status:`ready`,payload:r,raw:i,response:E(i,r)}})},triggerWithdrawalFailed(e,t){let{amount:n,recipient:r}=Y(),i={...b(f(),e,n,r,G(),m),...t},a=T(i,x);B({settlement:{status:`ready`,payload:i,raw:a,response:E(a,i)}})},triggerQuoteFailure(e){B({quote:{status:`error`,error:e}})},reset(){for(let e of R)clearTimeout(e);R.clear(),U=!1,H=null,W=0,P=N,z()}};function Y(){return{amount:H?.amount??h,recipient:H?.recipient??l}}return{driver:K,triggers:J}}function S(e){let t=e.reduce((e,t)=>e+(t.amountUsd?.value??0),0);return{wallet_address:`0xMockWallet000000000000000000000000000000`,fetched_at:new Date(0).toISOString(),total_usd:t.toFixed(2),chains:e.map(e=>({eip155_id:e.eip155Id?Number(e.eip155Id):0,stridge_network_id:e.networkId??``,network_name:e.networkName.toLowerCase(),label:e.networkName,scanner_url:``,native_symbol:``,subtotal_usd:(e.amountUsd?.value??0).toFixed(2),tokens:[{token_address:e.address,symbol:e.symbol,name:e.symbol,decimals:e.decimals,logo:e.assetLogoUrl??``,is_native:e.isNative,is_spam:!1,raw_amount:C(e.amount.value,e.decimals).toString(),amount:e.amount.value.toString(),amount_usd:(e.amountUsd?.value??0).toFixed(2),usd_price:e.amount.value>0?((e.amountUsd?.value??0)/e.amount.value).toFixed(6):`0`,price_change_24h_pct:`0`}]}))}}function C(e,t){if(!Number.isFinite(e)||e<0)return 0n;let[n,r=``]=e.toFixed(t).split(`.`),i=r.padEnd(t,`0`).slice(0,t);return BigInt((n??`0`)+i)}function w(e,t,n=m){let r=C(e.receiveAmount.value,e.receiveAsset.decimals).toString(),i=C(t,n.decimals).toString(),a=t>0?(e.receiveAmount.value/t).toFixed(6):`1`;return{from:{network_id:Number(n.eip155Id??56),asset_address:n.address,amount:i},to:{network_id:Number(e.receiveAsset.eip155Id??56),asset_address:e.receiveAsset.address,amount:r},exchange_rate:a,fees:{total_fee:`0`},route:{provider:`mock`,scenario:`same_chain_same_token`,estimated_time_seconds:30},expires_at:new Date(e.expiresAt).toISOString()}}function T(e,t=m){let n=new Date(e.submittedAt.value).toISOString(),r=e.kind===`succeeded`?`completed`:e.kind===`failed`?`failed`:`routing`,i=e.kind===`succeeded`?e.filledAt.value:e.kind===`failed`?e.failedAt.value:e.submittedAt.value,a={tx_id:(e.kind===`succeeded`?e.txHash.value:e.txHash?.value)??``,asset_symbol:t.symbol,asset_address:t.address,eip155_id:t.eip155Id??`56`,network_id:t.networkId??`9006`,network_name:t.networkName.toLowerCase(),raw_amount:C(e.receiveAmount.value,t.decimals).toString(),amount:e.receiveAmount.value.toString(),confirmed_at:n},o={address:e.recipient.value,asset_address:e.receiveAsset.address,asset_symbol:e.receiveAsset.symbol,eip155_id:e.receiveAsset.eip155Id??``,network_id:e.receiveAsset.networkId??``,network_name:e.receiveAsset.networkName.toLowerCase(),raw_amount:C(e.receiveAmount.value,e.receiveAsset.decimals).toString(),amount:e.receiveAmount.value.toString(),...e.kind===`succeeded`?{settled_at:new Date(e.filledAt.value).toISOString(),...e.completionTx?{tx_id:e.completionTx.hash.value}:{}}:{}};return{id:`mock-settlement-${e.recipient.value}-${a.tx_id}`,status:r,created_at:n,updated_at:new Date(i).toISOString(),events:[],fees:{raw_amount:`0`},from:a,to:o,route:{provider:`mock`,scenario:`withdraw_v1`},...e.kind===`failed`?{error:e.failureKind}:{}}}function E(e,t){let n=t.kind!==`pending`;return{owner:`0xMockOwner`,uda_id:`mock-uda`,created_at:e.created_at,updated_at:e.updated_at,is_terminal:n,status:t.kind===`succeeded`?`completed`:t.kind===`failed`?`failed`:`to_pending`,destination:{address:t.recipient.value,asset_address:t.receiveAsset.address,asset_decimals:t.receiveAsset.decimals,asset_symbol:t.receiveAsset.symbol,eip155_id:t.receiveAsset.eip155Id??``,network_id:t.receiveAsset.networkId??``,network_name:t.receiveAsset.networkName},settlements:[e]}}function D(e,t){return new Promise((n,r)=>{if(t.aborted){r(new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(()=>{t.removeEventListener(`abort`,a),n()},e),a=()=>{clearTimeout(i),t.removeEventListener(`abort`,a),r(new DOMException(`Aborted`,`AbortError`))};t.addEventListener(`abort`,a)})}function O(e){return Number.isInteger(e)?e.toFixed(2):e.toFixed(5)}export{g as buildDefaultWithdrawableBalances,b as buildDefaultWithdrawalFailurePayload,v as buildDefaultWithdrawalPendingPayload,_ as buildDefaultWithdrawalQuotePayload,y as buildDefaultWithdrawalSuccessPayload,x as createStridgeMockWithdrawDriver};
|
|
1
|
+
"use client";import{defaultI18n as e}from"../../shared/i18n/defaultI18n.js";import{formatDurationCompact as t}from"../../shared/format/formatDurationCompact.js";import{formatTimestamp as n}from"../../shared/format/formatTimestamp.js";import{formatUsd as r}from"../../shared/format/formatUsd.js";import{shortenAddress as i}from"../../shared/format/shortenAddress.js";import{supportedAssetsToReceiveOptionsPayload as a}from"../../flows/withdraw/driver/transformers/supportedAssetsToReceiveOptionsPayload.js";import{DEFAULT_MOCK_ASSET as o,buildDefaultSupportedAssetsResponse as s,resolveMockAsset as c}from"./fixtures.js";const l=`0x32995Fb47918BD37133dB46F21c5Ed906140Dd41`,u=`0xd41f5e9e5b1c2c4d8e7a0bf3a9e6c1d2b8f5d4c3e2a1b0c9d8e7f6a5b4c3d2e1`;function d(e){return{symbol:e.symbol,decimals:e.decimals,address:e.address,isNative:e.isNative,assetLogoUrl:e.assetLogoUrl,networkName:e.networkName,eip155Id:e.eip155IdString,networkId:e.networkId,chainLogoUrl:e.chainLogoUrl}}function f(e){return`${e.explorerBase}/tx/`}const p={quote:1400,submit:4e3,processingPendingDelay:1500,processingTerminal:3e3},m=d(o),h=4.00613;function g(e=o){let t=d(e);return[{networkId:t.networkId,networkName:t.networkName,eip155Id:t.eip155Id,...t.chainLogoUrl?{chainLogoUrl:t.chainLogoUrl}:{},symbol:t.symbol,decimals:t.decimals,address:t.address,...t.assetLogoUrl?{assetLogoUrl:t.assetLogoUrl}:{},isNative:t.isNative,amount:{value:4.01,formatted:`4.01`},amountUsd:{value:4.01,formatted:`$4.01`}}]}function _(e=h,t=o){let n=O(e);return{receiveAsset:d(t),receiveAmount:{value:e,formatted:n},receiveAmountUsd:{value:e,formatted:`$${e.toFixed(2)}`},breakdown:{selectedRoute:{provider:`mock`,scenario:`same_chain_same_token`,label:`Mock · same chain same token`},networkCost:{value:0,formatted:`$0.00`},priceImpact:{value:0,formatted:`0.00%`}},quoteTotalSeconds:30,expiresAt:Date.now()+3e4}}function v(t=e,a=h,s=l,c=u,p=o){let m=Date.now();return{kind:`pending`,receiveAsset:d(p),receiveAmount:{value:a,formatted:O(a)},receiveAmountUsd:{value:a,formatted:r(a,t)},recipient:{value:s,formatted:i(s)},submittedAt:{value:m,formatted:n(m,t)},txHash:{value:c,formatted:i(c)},txExplorerUrl:`${f(p)}${c}`}}function y(r=e,a=h,s=l,c=14,p=u,m=o,g=`0xa17b4c9e2d68f0a5c3b91e7f4d52a86b09c1d7e3f8a4b2c5d6e9f0a1b2c3d4e5`){let _=Date.now(),v=c*1e3,y=_-v;return{kind:`succeeded`,receiveAsset:d(m),receiveAmount:{value:a,formatted:O(a)},recipient:{value:s,formatted:i(s)},submittedAt:{value:y,formatted:n(y,r)},filledAt:{value:_,formatted:n(_,r)},totalTime:{value:c,formatted:t(v,r)},txHash:{value:p,formatted:i(p)},txExplorerUrl:`${f(m)}${p}`,completionTx:{hash:{value:g,formatted:i(g)},explorerUrl:`${f(m)}${g}`}}}function b(t=e,r=`unknown`,a=h,s=l,c=u,p=o){let m=Date.now(),g=m-5e3;return{kind:`failed`,failureKind:r,receiveAsset:d(p),receiveAmount:{value:a,formatted:O(a)},recipient:{value:s,formatted:i(s)},submittedAt:{value:g,formatted:n(g,t)},failedAt:{value:m,formatted:n(m,t)},txHash:{value:c,formatted:i(c)},txExplorerUrl:`${f(p)}${c}`}}function x(t={}){let n={...p,...t.latency},i=t.autoSettleTo??`succeeded`,o=t.pendingTriggerToSuccessMs===void 0?3500:t.pendingTriggerToSuccessMs,f=t.getI18n??(()=>e),m=c(t.asset),x=d(m),C=g(m),O=S(C),k=s(),A=a(k),j=t.initialState?.minAmountUsd??(t.minAmountUsd===void 0?void 0:{value:t.minAmountUsd,formatted:r(t.minAmountUsd,f())}),M=t.initialState?.maxAmountUsd??(t.maxAmountUsd===void 0?void 0:{value:t.maxAmountUsd,formatted:r(t.maxAmountUsd,f())}),N={withdrawableBalances:t.initialState?.withdrawableBalances??{status:`ready`,payload:C,raw:O,response:O},receiveOptions:t.initialState?.receiveOptions??{status:`ready`,payload:A,raw:k.assets,response:k},quote:t.initialState?.quote??{status:`idle`},settlement:t.initialState?.settlement??{status:`idle`},...j?{minAmountUsd:j}:{},...M?{maxAmountUsd:M}:{}},P=N,F=new Set,I=new Set,L=new Set,R=new Set,z=()=>{for(let e of F)e()},B=e=>{if(P={...P,...e},z(),e.settlement)for(let e of I)e(P.settlement);if(e.withdrawableBalances)for(let e of L)e(P.withdrawableBalances)},V=(e,t)=>{let n=setTimeout(()=>{R.delete(n),e()},t);R.add(n)},H=null,U=!1,W=0;function G(){return W+=1,`0x${W.toString(16).padStart(8,`0`)}${u.slice(10)}`}let K={getSnapshot:()=>P,subscribe(e){return F.add(e),()=>{F.delete(e)}},arm(){},async requestQuote(e,t){B({quote:{status:`loading`}}),await D(n.quote,t);let r=_(e.amount,m),i=w(r,e.amount,x);B({quote:{status:`ready`,payload:r,raw:i,response:i}})},async prepareWithdrawal(e,t){await D(n.submit,t),H={amount:e.amount,recipient:e.recipientAddress};let r=G();return q(e.amount,e.recipientAddress,r,t),{depositTarget:{address:`0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC`,chainId:Number(m.eip155IdString),tokenSymbol:m.symbol,tokenAddress:m.address,tokenDecimals:m.decimals,isNative:m.isNative,amount:e.amount},correlation:{owner:`0x70997970C51812dc3A010C7d01b50e0d17dc79C8`}}},watchSettlement(e,t,n){I.add(t);let r=P.settlement;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>I.delete(t),{once:!0})},watchWithdrawableBalances(e,t,n){L.add(t);let r=P.withdrawableBalances;queueMicrotask(()=>{n.aborted||t(r)}),n.addEventListener(`abort`,()=>L.delete(t),{once:!0})}};function q(e,t,r,a){U||(U=!0,V(()=>{if(a.aborted){U=!1;return}let o=v(f(),e,t,r,m),s=T(o,x);if(B({settlement:{status:`ready`,payload:o,raw:s,response:E(s,o)}}),i===`none`){U=!1;return}V(()=>{if(U=!1,a.aborted)return;let n=i===`succeeded`?y(f(),e,t,14,r,m):b(f(),`unknown`,e,t,r,m),o=T(n,x);B({settlement:{status:`ready`,payload:n,raw:o,response:E(o,n)}})},n.processingTerminal)},n.processingPendingDelay))}let J={triggerWithdrawalInProgress(e){let{amount:t,recipient:n}=Y(),r={...v(f(),t,n,G(),m),...e},i=T(r,x);B({settlement:{status:`ready`,payload:r,raw:i,response:E(i,r)}}),o!==null&&V(()=>J.triggerWithdrawalSuccess(),o)},triggerWithdrawalSuccess(e){let{amount:t,recipient:n}=Y(),r={...y(f(),t,n,14,G(),m),...e},i=T(r,x);B({settlement:{status:`ready`,payload:r,raw:i,response:E(i,r)}})},triggerWithdrawalFailed(e,t){let{amount:n,recipient:r}=Y(),i={...b(f(),e,n,r,G(),m),...t},a=T(i,x);B({settlement:{status:`ready`,payload:i,raw:a,response:E(a,i)}})},triggerQuoteFailure(e){B({quote:{status:`error`,error:e}})},reset(){for(let e of R)clearTimeout(e);R.clear(),U=!1,H=null,W=0,P=N,z()}};function Y(){return{amount:H?.amount??h,recipient:H?.recipient??l}}return{driver:K,triggers:J}}function S(e){let t=e.reduce((e,t)=>e+(t.amountUsd?.value??0),0);return{wallet_address:`0xMockWallet000000000000000000000000000000`,fetched_at:new Date(0).toISOString(),total_usd:t.toFixed(2),chains:e.map(e=>({eip155_id:e.eip155Id?Number(e.eip155Id):0,stridge_network_id:e.networkId??``,network_name:e.networkName.toLowerCase(),label:e.networkName,scanner_url:``,native_symbol:``,subtotal_usd:(e.amountUsd?.value??0).toFixed(2),tokens:[{token_address:e.address,symbol:e.symbol,name:e.symbol,decimals:e.decimals,logo:e.assetLogoUrl??``,is_native:e.isNative,is_spam:!1,raw_amount:C(e.amount.value,e.decimals).toString(),amount:e.amount.value.toString(),amount_usd:(e.amountUsd?.value??0).toFixed(2),usd_price:e.amount.value>0?((e.amountUsd?.value??0)/e.amount.value).toFixed(6):`0`,price_change_24h_pct:`0`}]}))}}function C(e,t){if(!Number.isFinite(e)||e<0)return 0n;let[n,r=``]=e.toFixed(t).split(`.`),i=r.padEnd(t,`0`).slice(0,t);return BigInt((n??`0`)+i)}function w(e,t,n=m){let r=C(e.receiveAmount.value,e.receiveAsset.decimals).toString(),i=C(t,n.decimals).toString(),a=t>0?(e.receiveAmount.value/t).toFixed(6):`1`;return{from:{network_id:Number(n.eip155Id??56),asset_address:n.address,amount:i},to:{network_id:Number(e.receiveAsset.eip155Id??56),asset_address:e.receiveAsset.address,amount:r},exchange_rate:a,fees:{total_fee:`0`},route:{provider:`mock`,scenario:`same_chain_same_token`,estimated_time_seconds:30},expires_at:new Date(e.expiresAt).toISOString()}}function T(e,t=m){let n=new Date(e.submittedAt.value).toISOString(),r=e.kind===`succeeded`?`completed`:e.kind===`failed`?`failed`:`routing`,i=e.kind===`succeeded`?e.filledAt.value:e.kind===`failed`?e.failedAt.value:e.submittedAt.value,a={tx_id:(e.kind===`succeeded`?e.txHash.value:e.txHash?.value)??``,asset_symbol:t.symbol,asset_address:t.address,eip155_id:t.eip155Id??`56`,network_id:t.networkId??`9006`,network_name:t.networkName.toLowerCase(),raw_amount:C(e.receiveAmount.value,t.decimals).toString(),amount:e.receiveAmount.value.toString(),confirmed_at:n},o={address:e.recipient.value,asset_address:e.receiveAsset.address,asset_symbol:e.receiveAsset.symbol,eip155_id:e.receiveAsset.eip155Id??``,network_id:e.receiveAsset.networkId??``,network_name:e.receiveAsset.networkName.toLowerCase(),raw_amount:C(e.receiveAmount.value,e.receiveAsset.decimals).toString(),amount:e.receiveAmount.value.toString(),...e.kind===`succeeded`?{settled_at:new Date(e.filledAt.value).toISOString(),...e.completionTx?{tx_id:e.completionTx.hash.value}:{}}:{}};return{id:`mock-settlement-${e.recipient.value}-${a.tx_id}`,status:r,created_at:n,updated_at:new Date(i).toISOString(),events:[],fees:{raw_amount:`0`},from:a,to:o,route:{provider:`mock`,scenario:`withdraw_v1`},...e.kind===`failed`?{error:e.failureKind}:{}}}function E(e,t){let n=t.kind!==`pending`;return{owner:`0xMockOwner`,uda_id:`mock-uda`,created_at:e.created_at,updated_at:e.updated_at,is_terminal:n,status:t.kind===`succeeded`?`completed`:t.kind===`failed`?`failed`:`to_pending`,destination:{address:t.recipient.value,asset_address:t.receiveAsset.address,asset_decimals:t.receiveAsset.decimals,asset_symbol:t.receiveAsset.symbol,eip155_id:t.receiveAsset.eip155Id??``,network_id:t.receiveAsset.networkId??``,network_name:t.receiveAsset.networkName},settlements:[e]}}function D(e,t){return new Promise((n,r)=>{if(t.aborted){r(new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(()=>{t.removeEventListener(`abort`,a),n()},e),a=()=>{clearTimeout(i),t.removeEventListener(`abort`,a),r(new DOMException(`Aborted`,`AbortError`))};t.addEventListener(`abort`,a)})}function O(e){return Number.isInteger(e)?e.toFixed(2):e.toFixed(5)}export{g as buildDefaultWithdrawableBalances,b as buildDefaultWithdrawalFailurePayload,v as buildDefaultWithdrawalPendingPayload,_ as buildDefaultWithdrawalQuotePayload,y as buildDefaultWithdrawalSuccessPayload,x as createStridgeMockWithdrawDriver};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useDepositSnapshot as e}from"../driver/context.js";import{useControllerContext as t}from"../orchestrator/controller.js";import{useDepositEmissions as n}from"../../../events/emit/useDepositEmissions.js";import"../../../events/emit/index.js";import{useIntercomShutdownOnUnmount as r}from"../../../shared/support/useIntercomShutdownOnUnmount.js";import"../../../shared/support/index.js";import{
|
|
1
|
+
"use client";import{useDepositSnapshot as e}from"../driver/context.js";import{useControllerContext as t}from"../orchestrator/controller.js";import{useDepositEmissions as n}from"../../../events/emit/useDepositEmissions.js";import"../../../events/emit/index.js";import{useIntercomShutdownOnUnmount as r}from"../../../shared/support/useIntercomShutdownOnUnmount.js";import"../../../shared/support/index.js";import{useDepositOwnerContext as i}from"../../../stridge/depositOwner.js";import{Dialog as a}from"../../../shared/ui/Dialog/Dialog.js";import"../../../shared/ui/Dialog/index.js";import{AmountEntry as o}from"../widgets/amount-entry/AmountEntry.js";import"../widgets/amount-entry/index.js";import{AssetPicker as s}from"../widgets/asset-picker/AssetPicker.js";import"../widgets/asset-picker/index.js";import{ConfirmDeposit as c}from"../widgets/confirm-deposit/ConfirmDeposit.js";import"../widgets/confirm-deposit/index.js";import{Deposit as l}from"../widgets/deposit/Deposit.js";import"../widgets/deposit/index.js";import{DepositStatusBanner as u}from"../widgets/deposit-status-banner/DepositStatusBanner.js";import"../widgets/deposit-status-banner/index.js";import{ErrorState as d}from"../widgets/error-state/ErrorState.js";import"../widgets/error-state/index.js";import{ProcessingState as f}from"../widgets/processing-state/ProcessingState.js";import"../widgets/processing-state/index.js";import{SuccessState as p}from"../widgets/success-state/SuccessState.js";import"../widgets/success-state/index.js";import{TransferCrypto as m}from"../widgets/transfer-crypto/TransferCrypto.js";import"../widgets/transfer-crypto/index.js";import{StepTransition as h}from"../../../shared/dialog/StepTransition.js";import{GatewayKitBoundary as g}from"../../../shared/error-handling/components/GatewayKitBoundary.js";import"../../../shared/error-handling/index.js";import{DepositBootstrapErrorState as _}from"./DepositBootstrapErrorState.js";import{WalletRequiredState as v}from"./WalletRequiredState.js";import{jsx as y,jsxs as b}from"react/jsx-runtime";const x=new Set([`deposit`,`assetPicker`,`amountEntry`,`confirmDeposit`,`transferCrypto`]);function S({container:S,metadata:C,onError:w}={}){let{state:T,effectiveState:E,controller:D}=t(),O=e(),k=i(),A=T.name!==`closed`;n({state:T,settlement:O.settlement,quote:O.quote,metadata:C}),r();let j=E,M=k!==null&&!k.resolved&&x.has(j.name),N=!M&&O.target.status===`error`&&x.has(j.name);return y(a,{open:A,onOpenChange:e=>{e||D.close()},children:y(a.Content,{container:S,children:b(g,{onError:w,onReset:D.close,children:[M?y(v,{}):N?y(_,{}):b(h,{stateKey:j.name,children:[j.name===`deposit`?y(l,{}):null,j.name===`assetPicker`?y(s,{}):null,j.name===`amountEntry`?y(o,{}):null,j.name===`confirmDeposit`?y(c,{}):null,j.name===`transferCrypto`?y(m,{}):null,j.name===`processing`?y(f,{}):null,j.name===`success`?y(p,{}):null,j.name===`error`?y(d,{}):null]}),y(u,{})]})})})}export{S as DepositDialog};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{Trans as e}from"../../../shared/i18n/Trans.js";import"../../../i18n/index.js";import{useDepositActions as t}from"../orchestrator/controller.js";import{WalletIcon as n}from"../../../shared/icons/WalletIcon.js";import"../../../icons/index.js";import{useConnectWallet as r}from"../../../shared/wallet/ConnectWalletContext.js";import{Button as i}from"../../../shared/ui/Button/Button.js";import{Dialog as a}from"../../../shared/ui/Dialog/Dialog.js";import"../../../shared/ui/Dialog/index.js";import{Card as o}from"../../../shared/ui/Card/Card.js";import{text as s}from"../../../shared/ui/Text/Text.js";import"../../../ui/index.js";import{Frame as c}from"../../../shared/dialog/Frame.js";import{styles as l}from"./WalletRequiredState.styles.js";import{jsx as u,jsxs as d}from"react/jsx-runtime";import*as f from"@stylexjs/stylex";function p(){return d(`div`,{"aria-hidden":!0,...f.props(l.heroRing),children:[d(`svg`,{viewBox:`0 0 64 64`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,...f.props(l.heroRingSvg),children:[u(`circle`,{cx:`32`,cy:`32`,r:`28`,strokeWidth:`2`,style:{stroke:`color-mix(in oklab, var(--stridge-kit-info) 55%, transparent)`}}),u(`circle`,{cx:`32`,cy:`32`,r:`20`,style:{fill:`var(--stridge-kit-info)`}})]}),u(n,{style:{color:`var(--stridge-kit-info-foreground)`},...f.props(l.heroRingGlyph)})]})}function m(){let{close:n}=t(),m=r();return d(c,{"data-stridge-slot":`deposit-wallet-required`,"data-testid":`deposit-wallet-required`,...f.props(l.root),children:[d(o.Header,{...f.props(l.header),children:[u(s.span,{size:`base`,fontWeight:`semibold`,leading:`tight`,tracking:`tight`,children:u(e,{id:`5AApJw`,message:`Connect a wallet to continue`})}),u(a.CloseButton,{})]}),u(o.Body,{children:d(`div`,{"data-stridge-slot":`deposit-wallet-required-hero`,...f.props(l.hero),children:[u(p,{}),u(s.span,{size:`lg`,fontWeight:`semibold`,leading:`tight`,tracking:`tight`,align:`center`,...f.props(l.heroHeadline),children:u(e,{id:`BoQOH3`,message:`A wallet is required to deposit`})}),u(s.span,{size:`sm`,leading:`normal`,align:`center`,color:`subdued`,...f.props(l.heroReason),children:u(e,{id:`mF_ucv`,message:`Connect a wallet so the gateway can provision a deposit address and route your transfer.`})})]})}),d(o.Footer,{...f.props(l.footer),children:[m?u(i,{variant:`default`,size:`cta`,onClick:()=>{m.onClick()},"data-stridge-slot":`deposit-wallet-required-connect`,...f.props(l.cta),children:m.label??u(e,{id:`VHOVEJ`,message:`Connect wallet`})}):null,u(i,{variant:m?`ghost`:`default`,size:`cta`,onClick:n,"data-stridge-slot":`deposit-wallet-required-close`,...f.props(l.cta),children:u(e,{id:`yz7wBu`,message:`Close`})})]})]})}export{m as WalletRequiredState};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={root:{"WalletRequiredState__styles.root":`WalletRequiredState__styles.root`,"position-kVAEAm":`x1n2onr6`,"width-kzqmXN":`xh8yej3`,"maxWidth-ks0D6T":`x17fpy1y`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:25`},header:{"WalletRequiredState__styles.header":`WalletRequiredState__styles.header`,"justifyContent-kjj79g":`x1qughib`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:34`},hero:{"WalletRequiredState__styles.hero":`WalletRequiredState__styles.hero`,"display-k1xSpc":`x78zum5`,"flexDirection-kXwgrk":`xdt5ytf`,"alignItems-kGNEyG":`x6s0dn4`,"gap-kOIVth":`x883omv`,"paddingTop-kLKAdn":`x9desvi`,"paddingInline-kg3NbH":`x65v0h`,"paddingBottom-kGO01o":`x1hhzuzn`,"animationName-kKVMdj":`xv305lp`,"animationDuration-k44tkh":`xmprevt x1s1fvk8`,"animationTimingFunction-kyAemX":`xrkt6z0`,"animationFillMode-kWV6AL":`x1u6ievf`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:42`},heroRing:{"WalletRequiredState__styles.heroRing":`WalletRequiredState__styles.heroRing`,"position-kVAEAm":`x1n2onr6`,"width-kzqmXN":`x1fu8urw`,"height-kZKoxP":`x1peatla`,"flexShrink-kmuXW":`x2lah0s`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:64`},heroRingSvg:{"WalletRequiredState__styles.heroRingSvg":`WalletRequiredState__styles.heroRingSvg`,"display-k1xSpc":`x1lliihq`,"width-kzqmXN":`xh8yej3`,"height-kZKoxP":`x5yr21d`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:73`},heroRingGlyph:{"WalletRequiredState__styles.heroRingGlyph":`WalletRequiredState__styles.heroRingGlyph`,"position-kVAEAm":`x10l6tqk`,"insetInlineStart-kLqNvP":`xbudbmw`,"top-k87sOh":`xwa60dl`,"transform-k3aq6I":`x11lhmoz`,"width-kzqmXN":`xgd8bvy`,"height-kZKoxP":`x1fgtraw`,"strokeWidth-kfJifR":`xvlca1e`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:87`},heroHeadline:{"WalletRequiredState__styles.heroHeadline":`WalletRequiredState__styles.heroHeadline`,"marginTop-keoZOQ":`x1k70j0n`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:96`},heroReason:{"WalletRequiredState__styles.heroReason":`WalletRequiredState__styles.heroReason`,"maxWidth-ks0D6T":`x1va8c73`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:99`},footer:{"WalletRequiredState__styles.footer":`WalletRequiredState__styles.footer`,"display-k1xSpc":`x78zum5`,"flexDirection-kXwgrk":`xdt5ytf`,"alignItems-kGNEyG":`x1qjc9v5`,"gap-kOIVth":`x1a6yh9e`,"paddingTop-kLKAdn":`x109j2v6`,"paddingInline-kg3NbH":`x65v0h`,"paddingBottom-kGO01o":`x1t4gjm`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:107`},cta:{"WalletRequiredState__styles.cta":`WalletRequiredState__styles.cta`,"width-kzqmXN":`xh8yej3`,"alignSelf-kSGwAc":`xkh2ocl`,$$css:`@stridge/kit:src/flows/deposit/dialog/WalletRequiredState.styles.ts:116`}};export{e as styles};
|
|
@@ -139,6 +139,17 @@ interface DepositDriver {
|
|
|
139
139
|
getSnapshot(): DepositSnapshot;
|
|
140
140
|
/** Lets you subscribe to entity transitions outside React (analytics, headless integrations). */
|
|
141
141
|
subscribe(listener: () => void): () => void;
|
|
142
|
+
/**
|
|
143
|
+
* Idempotent bootstrap trigger. The kit calls this from `useDeposit().open()` and the
|
|
144
|
+
* headless `usePrefetchDeposit()` hook. First call kicks off any deferred network work
|
|
145
|
+
* (`gateway/start`, `supportedAssets`, the initial `balance/onchain` fetch); subsequent
|
|
146
|
+
* calls are no-ops while bootstrap is in flight or completed.
|
|
147
|
+
*
|
|
148
|
+
* BYO drivers that bootstrap eagerly can implement this as a no-op — the contract is "after
|
|
149
|
+
* `arm()` returns, the driver's entities are either already populated or will populate as
|
|
150
|
+
* soon as the first network round-trips land".
|
|
151
|
+
*/
|
|
152
|
+
arm(): void;
|
|
142
153
|
/**
|
|
143
154
|
* Fetches a fresh quote for `input` and updates the `quote` entity through its lifecycle
|
|
144
155
|
* (`idle | loading → ready | error`). The optional `signal` cancels in-flight work.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useDepositDriverInstance as e}from"../driver/context.js";import{useLingui as t}from"../../../shared/i18n/useLingui.js";import"../../../i18n/index.js";import{toFailure as n}from"../../../shared/orchestrator/toFailure.js";import{useDriverSettlementListener as r}from"../../../shared/orchestrator/useDriverSettlementListener.js";import{useEffectiveState as i}from"../../../shared/orchestrator/useEffectiveState.js";import{isUserRejectionFailure as a}from"../../../shared/orchestrator/userRejection.js";import{useSettlementWatcher as o}from"../../../shared/orchestrator/useSettlementWatcher.js";import"../../../shared/orchestrator/index.js";import{initialState as s,reducer as c}from"./reducer.js";import{resolveAssetById as l}from"./resolveAssetById.js";import{createContext as u,use as d,useCallback as f,useEffect as p,useMemo as m,useReducer as h,useRef as g}from"react";import{jsx as _}from"react/jsx-runtime";const v={id:`ELhVSL`,message:`Failed to submit deposit.`},y={id:`Ej5HL9`,message:`Signature declined. Please try again.`},b=u(null);b.displayName=`GatewayControllerContext`;function x(){let e=d(b);if(!e)throw Error(`useDeposit / GatewayController must be used inside <KitProvider deposit={…} />. Mount KitProvider once at the host's app root.`);return e}function S(){return d(b)}const C=u(void 0);C.displayName=`DepositMethodsConfigContext`;function w(){return d(C)}function T(){return x().state}function E(){return x().effectiveState}function D(){return x().actions}function O({methodsConfig:t,children:n}){let r=e(),[a,o]=h(c,s),l=A(a,o,r);j(a,o,r),M(a,o,r);let u=i(a),d=k(a,o,r,l,t);return _(C,{value:t,children:_(b,{value:m(()=>({state:a,effectiveState:u,dispatch:o,controller:d,actions:l}),[a,u,d,l]),children:n})})}function k(e,t,n,r,i){let a=g(n);a.current=n;let o=g(i);o.current=i;let s=f(e=>{if(!e)return t({type:`OPEN`,input:void 0}),!0;if(o.current?.[e.method]?.disabled)return!1;if(e.method===`transfer`)return t({type:`OPEN`,input:{method:`transfer`}}),!0;if(e.method===`wallet`&&e.assetId!==void 0){let n=l(a.current.getSnapshot(),e.assetId);return n?(t({type:`OPEN`,input:{method:`wallet`,asset:n}}),!0)
|
|
1
|
+
"use client";import{useDepositDriverInstance as e}from"../driver/context.js";import{useLingui as t}from"../../../shared/i18n/useLingui.js";import"../../../i18n/index.js";import{toFailure as n}from"../../../shared/orchestrator/toFailure.js";import{useDriverSettlementListener as r}from"../../../shared/orchestrator/useDriverSettlementListener.js";import{useEffectiveState as i}from"../../../shared/orchestrator/useEffectiveState.js";import{isUserRejectionFailure as a}from"../../../shared/orchestrator/userRejection.js";import{useSettlementWatcher as o}from"../../../shared/orchestrator/useSettlementWatcher.js";import"../../../shared/orchestrator/index.js";import{initialState as s,reducer as c}from"./reducer.js";import{resolveAssetById as l}from"./resolveAssetById.js";import{createContext as u,use as d,useCallback as f,useEffect as p,useMemo as m,useReducer as h,useRef as g}from"react";import{jsx as _}from"react/jsx-runtime";const v={id:`ELhVSL`,message:`Failed to submit deposit.`},y={id:`Ej5HL9`,message:`Signature declined. Please try again.`},b=u(null);b.displayName=`GatewayControllerContext`;function x(){let e=d(b);if(!e)throw Error(`useDeposit / GatewayController must be used inside <KitProvider deposit={…} />. Mount KitProvider once at the host's app root.`);return e}function S(){return d(b)}const C=u(void 0);C.displayName=`DepositMethodsConfigContext`;function w(){return d(C)}function T(){return x().state}function E(){return x().effectiveState}function D(){return x().actions}function O({methodsConfig:t,children:n}){let r=e(),[a,o]=h(c,s),l=A(a,o,r);j(a,o,r),M(a,o,r);let u=i(a),d=k(a,o,r,l,t);return _(C,{value:t,children:_(b,{value:m(()=>({state:a,effectiveState:u,dispatch:o,controller:d,actions:l}),[a,u,d,l]),children:n})})}function k(e,t,n,r,i){let a=g(n);a.current=n;let o=g(i);o.current=i;let s=f(e=>{if(!e)return a.current.arm(),t({type:`OPEN`,input:void 0}),!0;if(o.current?.[e.method]?.disabled)return!1;if(e.method===`transfer`)return a.current.arm(),t({type:`OPEN`,input:{method:`transfer`}}),!0;if(e.method===`wallet`&&e.assetId!==void 0){let n=l(a.current.getSnapshot(),e.assetId);return a.current.arm(),n?(t({type:`OPEN`,input:{method:`wallet`,asset:n}}),!0):(t({type:`OPEN`,input:{method:`wallet`}}),!0)}return a.current.arm(),t({type:`OPEN`,input:{method:`wallet`}}),!0},[t]),c=f(()=>{t({type:`CLOSE`})},[t]);return m(()=>({open:s,close:c,actions:r}),[s,c,r])}function A(e,r,i){let o=g(e);o.current=e;let s=g(i);s.current=i;let c=g(r);c.current=r;let{i18n:l}=t(),u=g(l);u.current=l;let d=f((e,t)=>{let r=s.current,i=new AbortController,o=P(e,t);r.submitDeposit(o,i.signal).then(e=>{i.signal.aborted||c.current({type:`DEPOSIT_SUBMITTED`,tx:e})}).catch(e=>{if(i.signal.aborted)return;let t=n(e,u.current._(v));if(a(t)){c.current({type:`DEPOSIT_SIGNATURE_DECLINED`,notice:u.current._(y)});return}c.current({type:`DEPOSIT_SUBMISSION_FAILED`,failure:t})})},[]),p=f(e=>{c.current({type:`DEPOSIT_METHOD_SELECTED`,method:e})},[]),h=f(e=>{c.current({type:`ASSET_CONFIRMED`,asset:e})},[]),_=f(e=>{o.current.name===`amountEntry`&&c.current({type:`AMOUNT_CONFIRMED`,amount:e})},[]),b=f(()=>{let e=o.current;if(e.name!==`confirmDeposit`)return;let t=e.ctx.phase;if(t.kind===`failed`){c.current({type:`QUOTE_RETRY`});return}if(t.kind!==`ready`)return;let{asset:n,amount:r}=e.ctx;c.current({type:`DEPOSIT_CONFIRMED`}),d(n,r)},[d]),x=f(()=>{c.current({type:`BACK`})},[]),S=f(()=>{c.current({type:`CLOSE`})},[]),C=f(()=>{c.current({type:`SUCCESS_DONE`})},[]),w=f(()=>{c.current({type:`ERROR_TRY_AGAIN`})},[]),T=f((e,t)=>{c.current({type:`RESUME_TO_PROCESSING`,method:e,tx:t})},[]),E=f((e,t)=>{c.current({type:`RESUME_TO_SUCCESS`,method:e,tx:t})},[]),D=f(e=>{c.current({type:`RESUME_TO_ERROR`,...e?{tx:e}:{}})},[]);return m(()=>({selectMethod:p,confirmAsset:h,confirmAmount:_,confirmDeposit:b,back:x,close:S,successDone:C,tryAgain:w,resumeToProcessing:T,resumeToSuccess:E,resumeToError:D}),[p,h,_,b,x,S,C,w,T,E,D])}function j(e,t,r){p(()=>{if(e.name!==`confirmDeposit`||e.ctx.phase.kind!==`loading`&&e.ctx.phase.kind!==`regenerating`)return;let i=new AbortController,a=N(e.ctx.asset,e.ctx.amount);return r.requestQuote(a,i.signal).catch(e=>{i.signal.aborted||t({type:`QUOTE_FAILED`,failure:n(e,`Failed to fetch quote.`)})}),()=>i.abort()},[e.name,e.name===`confirmDeposit`?e.ctx.phase.kind:void 0,e.name===`confirmDeposit`?e.ctx.asset:void 0,e.name===`confirmDeposit`?e.ctx.amount:void 0,r,t]),p(()=>{if(e.name!==`confirmDeposit`||e.ctx.phase.kind!==`ready`)return;let n=e.ctx.phase.quoteExpiresAt,r=Math.max(0,n-Date.now()),i=setTimeout(()=>{t({type:`QUOTE_EXPIRED`})},r);return()=>clearTimeout(i)},[e.name,e.name===`confirmDeposit`&&e.ctx.phase.kind===`ready`?e.ctx.phase.quoteExpiresAt:void 0,t])}function M(e,t,n){let i=e.name===`processing`?e.ctx.tx:void 0;o(n,i?{tx:i}:void 0,i?.hash),p(()=>{if(e.name!==`transferCrypto`||!n.watchSourceTx)return;let t=new AbortController,r;return n.watchSourceTx({},e=>{t.signal.aborted||r||(r=new AbortController,n.watchSettlement({tx:e},()=>{},r.signal))},t.signal),()=>{t.abort(),r?.abort()}},[e.name,n]),p(()=>{if(e.name===`closed`||e.name===`transferCrypto`||e.name===`processing`||!n.fetchActiveSettlement)return;let t=new AbortController,r,i,a=!1,o=async()=>{try{let e=await n.fetchActiveSettlement({},t.signal);if(a)return;if(e&&!r&&e.payload.kind===`pending`){let t=e.payload.txHash?.value;t&&(r=new AbortController,n.watchSettlement({tx:{hash:t}},()=>{},r.signal))}}catch{}a||(i=setTimeout(o,5e3))};return o(),()=>{a=!0,t.abort(),r?.abort(),i&&clearTimeout(i)}},[e.name,n]);let a=g(e);a.current=e,r(n,e=>{a.current.name===`processing`&&(e===`succeeded`?t({type:`PROCESSING_SUCCEEDED`}):e===`failed`&&t({type:`PROCESSING_FAILED`}))});let s=g(null);p(()=>{let e=()=>{let e=n.getSnapshot(),r=a.current,i=e.quote;i.status!==s.current&&(s.current=i.status,i.status===`ready`&&r.name===`confirmDeposit`?(r.ctx.phase.kind===`loading`||r.ctx.phase.kind===`regenerating`)&&t({type:`QUOTE_RESOLVED`,expiresAt:i.payload.expiresAt}):i.status===`error`&&r.name===`confirmDeposit`&&(r.ctx.phase.kind===`loading`||r.ctx.phase.kind===`regenerating`)&&t({type:`QUOTE_FAILED`,failure:{reason:i.error.message,code:i.error.name}}))},r=n.subscribe(e);return e(),r},[n,t])}function N(e,t){let n=e.eip155Id;if(!n)throw Error(`Asset ${e.symbol} is missing eip155Id; cannot build quote input.`);return{sourceChainId:Number(n),sourceTokenAddress:e.address,sourceTokenDecimals:e.decimals,sourceTokenSymbol:e.symbol,sourceIsNative:e.isNative,amount:t,...e.priceUsd===void 0?{}:{sourcePriceUsd:e.priceUsd}}}function P(e,t){let n=e.eip155Id;if(!n)throw Error(`Asset ${e.symbol} is missing eip155Id; cannot build submit input.`);return{sourceChainId:Number(n),sourceTokenAddress:e.address,sourceTokenDecimals:e.decimals,sourceIsNative:e.isNative,amount:t}}export{O as GatewayController,x as useControllerContext,D as useDepositActions,E as useDepositEffectiveState,w as useDepositMethodsConfig,T as useDepositState,S as useOptionalControllerContext};
|
|
@@ -48,5 +48,32 @@ declare function useDeposit(): DepositController;
|
|
|
48
48
|
* ```
|
|
49
49
|
*/
|
|
50
50
|
declare function useOptionalDeposit(): DepositController | null;
|
|
51
|
+
/**
|
|
52
|
+
* Headless prefetch handle for the deposit driver. Returns a stable function that arms the
|
|
53
|
+
* driver — kicks off the deferred `gateway/start` + `supportedAssets` + initial `balance/onchain`
|
|
54
|
+
* bootstrap. Calling it before the user opens the dialog warms the cache so the subsequent
|
|
55
|
+
* `useDeposit().open()` lands on populated data without a perceptible loading window.
|
|
56
|
+
*
|
|
57
|
+
* The function is fire-and-forget: returns `void`. To observe bootstrap state, read
|
|
58
|
+
* `useDepositSnapshot().target.status` directly — the snapshot is the single source of truth.
|
|
59
|
+
*
|
|
60
|
+
* The most common use is hover-to-warm:
|
|
61
|
+
*
|
|
62
|
+
* ```tsx
|
|
63
|
+
* const deposit = useDeposit();
|
|
64
|
+
* const prefetchDeposit = usePrefetchDeposit();
|
|
65
|
+
* <button onMouseEnter={prefetchDeposit} onClick={() => deposit.open()}>Deposit</button>;
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* Headless balance widgets that need data on render call this in an effect:
|
|
69
|
+
*
|
|
70
|
+
* ```tsx
|
|
71
|
+
* const prefetchDeposit = usePrefetchDeposit();
|
|
72
|
+
* useEffect(() => { prefetchDeposit(); }, [prefetchDeposit]);
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* Idempotent — subsequent calls are no-ops while the driver is already armed.
|
|
76
|
+
*/
|
|
77
|
+
declare function usePrefetchDeposit(): () => void;
|
|
51
78
|
//#endregion
|
|
52
|
-
export { useDeposit, useOptionalDeposit };
|
|
79
|
+
export { useDeposit, useOptionalDeposit, usePrefetchDeposit };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useControllerContext as
|
|
1
|
+
"use client";import{useDepositDriverInstance as e}from"../driver/context.js";import{useControllerContext as t,useOptionalControllerContext as n}from"./controller.js";import{useCallback as r}from"react";function i(){return t().controller}function a(){return n()?.controller??null}function o(){let t=e();return r(()=>{t.arm()},[t])}export{i as useDeposit,a as useOptionalDeposit,o as usePrefetchDeposit};
|
|
@@ -161,6 +161,13 @@ interface WithdrawDriver {
|
|
|
161
161
|
getSnapshot(): WithdrawSnapshot;
|
|
162
162
|
/** Subscribe to entity transitions outside React (analytics, headless integrations). */
|
|
163
163
|
subscribe(listener: () => void): () => void;
|
|
164
|
+
/**
|
|
165
|
+
* Idempotent bootstrap trigger. The kit calls this from `useWithdraw().open()` and the
|
|
166
|
+
* headless `usePrefetchWithdraw()` hook. First call kicks off any deferred network work
|
|
167
|
+
* (e.g. `supportedAssets` + the initial `balance/onchain` fetch); subsequent calls are
|
|
168
|
+
* no-ops while bootstrap is in flight or completed.
|
|
169
|
+
*/
|
|
170
|
+
arm(): void;
|
|
164
171
|
/**
|
|
165
172
|
* Fetches a fresh quote for `input` and updates the `quote` entity through its lifecycle
|
|
166
173
|
* (`idle | loading → ready | error`). The `signal` cancels in-flight work.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useLingui as e}from"../../../shared/i18n/useLingui.js";import"../../../i18n/index.js";import{toFailure as t}from"../../../shared/orchestrator/toFailure.js";import{useDriverSettlementListener as n}from"../../../shared/orchestrator/useDriverSettlementListener.js";import{useEffectiveState as r}from"../../../shared/orchestrator/useEffectiveState.js";import{useSettlementWatcher as i}from"../../../shared/orchestrator/useSettlementWatcher.js";import"../../../shared/orchestrator/index.js";import{useWithdrawBindingsRef as a}from"../bindings/WithdrawBindings.js";import"../bindings/index.js";import{useWithdrawDriverInstance as o}from"../driver/context.js";import{initialState as s,reducer as c}from"./reducer.js";import{createContext as l,use as u,useCallback as d,useMemo as f,useReducer as p,useRef as m}from"react";import{jsx as h}from"react/jsx-runtime";const g={id:`ldK3jJ`,message:`Failed to submit withdrawal.`},_={id:`kUFhUv`,message:`Withdrawal failed.`},v={id:`srsA0x`,message:`Withdrawal declined.`},y=l(null);y.displayName=`WithdrawControllerContext`;function b(){let e=u(y);if(!e)throw Error(`useWithdraw / WithdrawControllerProvider must be used inside <KitProvider withdraw={…} />. Mount KitProvider once at the host's app root with a withdraw driver.`);return e}function x(){return u(y)}function S(){return b().state}function C(){return b().effectiveState}function w(){return b().actions}function T({children:e}){let t=o(),[n,a]=p(c,s),l=D(n,a,t),u=n.name===`inProgress`?{form:n.ctx.input,submittedAt:n.ctx.submittedAt,...n.ctx.tx?{tx:n.ctx.tx}:{}}:void 0;i(t,u,u?`${u.submittedAt}|${u.tx?.hash??``}`:void 0),O(n,a,t);let d=r(n),m=E(a,l);return h(y,{value:f(()=>({state:n,effectiveState:d,dispatch:a,controller:m,actions:l}),[n,d,m,l]),children:e})}function E(e,t){let n=d(()=>{e({type:`OPEN`})},[e]),
|
|
1
|
+
"use client";import{useLingui as e}from"../../../shared/i18n/useLingui.js";import"../../../i18n/index.js";import{toFailure as t}from"../../../shared/orchestrator/toFailure.js";import{useDriverSettlementListener as n}from"../../../shared/orchestrator/useDriverSettlementListener.js";import{useEffectiveState as r}from"../../../shared/orchestrator/useEffectiveState.js";import{useSettlementWatcher as i}from"../../../shared/orchestrator/useSettlementWatcher.js";import"../../../shared/orchestrator/index.js";import{useWithdrawBindingsRef as a}from"../bindings/WithdrawBindings.js";import"../bindings/index.js";import{useWithdrawDriverInstance as o}from"../driver/context.js";import{initialState as s,reducer as c}from"./reducer.js";import{createContext as l,use as u,useCallback as d,useMemo as f,useReducer as p,useRef as m}from"react";import{jsx as h}from"react/jsx-runtime";const g={id:`ldK3jJ`,message:`Failed to submit withdrawal.`},_={id:`kUFhUv`,message:`Withdrawal failed.`},v={id:`srsA0x`,message:`Withdrawal declined.`},y=l(null);y.displayName=`WithdrawControllerContext`;function b(){let e=u(y);if(!e)throw Error(`useWithdraw / WithdrawControllerProvider must be used inside <KitProvider withdraw={…} />. Mount KitProvider once at the host's app root with a withdraw driver.`);return e}function x(){return u(y)}function S(){return b().state}function C(){return b().effectiveState}function w(){return b().actions}function T({children:e}){let t=o(),[n,a]=p(c,s),l=D(n,a,t),u=n.name===`inProgress`?{form:n.ctx.input,submittedAt:n.ctx.submittedAt,...n.ctx.tx?{tx:n.ctx.tx}:{}}:void 0;i(t,u,u?`${u.submittedAt}|${u.tx?.hash??``}`:void 0),O(n,a,t);let d=r(n),m=E(a,l,t);return h(y,{value:f(()=>({state:n,effectiveState:d,dispatch:a,controller:m,actions:l}),[n,d,m,l]),children:e})}function E(e,t,n){let r=m(n);r.current=n;let i=d(()=>{r.current.arm(),e({type:`OPEN`})},[e]),a=d(()=>{e({type:`CLOSE`})},[e]);return f(()=>({open:i,close:a,actions:t}),[i,a,t])}function D(n,r,i){let o=m(n);o.current=n;let s=m(i);s.current=i;let c=m(r);c.current=r;let{i18n:l}=e(),u=m(l);u.current=l;let p=a(),h=d(e=>{let n=s.current;c.current({type:`SUBMIT`,input:e});let r=new AbortController,i={sourceAssetSymbol:e.sourceAssetSymbol,sourceChainId:e.sourceChainId,amount:e.amount,receiveTokenSymbol:e.receiveTokenSymbol,receiveChainId:e.receiveChainId,recipientAddress:e.recipientAddress},a={beginProcessing(e){c.current({type:`BEGIN_PROCESSING`,submittedAt:Date.now(),...e?{tx:e}:{}})},setTxHash(e){c.current({type:`SET_TX_HASH`,tx:e,submittedAt:Date.now()})},fail(e){c.current({type:`MARK_FAILED`,...e?{failure:e}:{}})},decline(){c.current({type:`SUBMIT_FAILED`,failure:{reason:u.current._(v),code:`UserRejectedRequestError`},input:e})},succeed(){c.current({type:`MARK_SUCCEEDED`})}};n.prepareWithdrawal(i,r.signal).then(i=>{if(r.signal.aborted)return;let o=p.current.onSubmit;if(!o){c.current({type:`SUBMIT_FAILED`,failure:t(Error(`WithdrawDialog onSubmit is missing.`),u.current._(g)),input:e});return}let s=n.getSnapshot().quote,l=s.status===`ready`||s.status===`stale`?s.payload:void 0;try{let n=o({form:e,depositTarget:i.depositTarget,correlation:i.correlation,...l?{quote:l}:{}},a,r.signal);n&&typeof n.catch==`function`&&n.catch(n=>{r.signal.aborted||c.current({type:`SUBMIT_FAILED`,failure:t(n,u.current._(g)),input:e})})}catch(n){if(r.signal.aborted)return;c.current({type:`SUBMIT_FAILED`,failure:t(n,u.current._(g)),input:e})}}).catch(n=>{r.signal.aborted||c.current({type:`SUBMIT_FAILED`,failure:t(n,u.current._(g)),input:e})})},[]),_=d(()=>{c.current({type:`CLOSE`})},[]),y=d(()=>{c.current({type:`RESET`})},[]),b=d(()=>{c.current({type:`CLEAR_NOTICE`})},[]);return f(()=>({submit:h,close:_,reset:y,clearNotice:b}),[h,_,y,b])}function O(t,r,i){let a=m(t);a.current=t;let{i18n:o}=e(),s=m(o);s.current=o,n(i,(e,t)=>{if(a.current.name===`inProgress`){if(e===`succeeded`){r({type:`SETTLEMENT_SUCCEEDED`});return}if(e===`failed`){let e=t.settlement,n=e.status===`ready`||e.status===`stale`?e.payload:null,i=n&&n.kind===`failed`?{reason:s.current._(_),code:n.failureKind}:void 0;r({type:`SETTLEMENT_FAILED`,...i?{failure:i}:{}})}}})}export{T as WithdrawControllerProvider,b as useControllerContext,x as useOptionalControllerContext,w as useWithdrawActions,C as useWithdrawEffectiveState,S as useWithdrawState};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { FailureInfo } from "../../../shared/orchestrator/types.js";
|
|
2
2
|
import { WithdrawActions, WithdrawController, WithdrawEvent, WithdrawState, WithdrawStateName, WithdrawalFormSnapshot } from "./types.js";
|
|
3
3
|
import { useWithdrawState } from "./controller.js";
|
|
4
|
-
import { useOptionalWithdraw, useWithdraw } from "./useWithdraw.js";
|
|
4
|
+
import { useOptionalWithdraw, usePrefetchWithdraw, useWithdraw } from "./useWithdraw.js";
|
|
@@ -36,5 +36,23 @@ declare function useWithdraw(): WithdrawController;
|
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
38
38
|
declare function useOptionalWithdraw(): WithdrawController | null;
|
|
39
|
+
/**
|
|
40
|
+
* Headless prefetch handle for the withdraw driver. Returns a stable function that arms the
|
|
41
|
+
* driver — kicks off the deferred `supportedAssets` + initial `balance/onchain` bootstrap.
|
|
42
|
+
* Calling it before the user opens the dialog warms the cache so the subsequent
|
|
43
|
+
* `useWithdraw().open()` lands on populated data without a perceptible loading window.
|
|
44
|
+
*
|
|
45
|
+
* Fire-and-forget: returns `void`. Observe bootstrap state via
|
|
46
|
+
* `useWithdrawSnapshot().receiveOptions.status` if needed.
|
|
47
|
+
*
|
|
48
|
+
* ```tsx
|
|
49
|
+
* const withdraw = useWithdraw();
|
|
50
|
+
* const prefetchWithdraw = usePrefetchWithdraw();
|
|
51
|
+
* <button onMouseEnter={prefetchWithdraw} onClick={() => withdraw.open()}>Withdraw</button>;
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* Idempotent — subsequent calls are no-ops while the driver is already armed.
|
|
55
|
+
*/
|
|
56
|
+
declare function usePrefetchWithdraw(): () => void;
|
|
39
57
|
//#endregion
|
|
40
|
-
export { useOptionalWithdraw, useWithdraw };
|
|
58
|
+
export { useOptionalWithdraw, usePrefetchWithdraw, useWithdraw };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{useControllerContext as
|
|
1
|
+
"use client";import{useWithdrawDriverInstance as e}from"../driver/context.js";import{useControllerContext as t,useOptionalControllerContext as n}from"./controller.js";import{useCallback as r}from"react";function i(){return t().controller}function a(){return n()?.controller??null}function o(){let t=e();return r(()=>{t.arm()},[t])}export{a as useOptionalWithdraw,o as usePrefetchWithdraw,i as useWithdraw};
|
package/dist/i18n/locales/ar.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=JSON.parse(`{"--OGth":["نجح الإيداع"],"-I_tc5":["Max ",["formattedCap"]],"-nuEh_":["الوقت المُقدَّر"],"-tu7Q8":["المزيد عن ",["0"]],"02NghK":["Close this dialog and try again in a moment. If the problem persists, double-check the gateway key on your integration."],"0eg2g7":["جاري تقدير الغاز…"],"0lHlRj":["قيد النقل"],"2Eoi_a":["عرض التفاصيل"],"3dqPLT":["تحويل العملة الرقمية"],"3eKjkO":["الحد الأدنى للإيداع ",["formattedMin"]],"3kg1gB":["اكتمل الإيداع"],"3yd3IL":["The deposit driver failed to load gateway configuration."],"5AApJw":["اتصل بمحفظة للمتابعة"],"5joj8M":["تفاصيل المعاملة"],"60ahSE":["معاملة السحب"],"69Gavs":["Technical details"],"6D8qH6":["أرسل العملة المختارة على الشبكة المختارة إلى هذا العنوان. تظهر الأموال في حسابك بمجرد تأكيد الشبكة للتحويل."],"6RDwJM":["العملات"],"7Bj3x9":["فشل"],"7evBec":["وقت المعالجة: ",["resolvedProcessingTime"]],"88cUW-":["تستلم"],"9JHY2T":["تمت إضافة أموال إيداعك إلى حسابك."],"9XIJb8":["T…"],"9cCjMJ":["إيداع الحد الأقصى من الرصيد"],"< 1 min":["< دقيقة"],"AHyker":["Max ",["0"]],"AO44G_":["عرض الإيصال"],"AOPSKq":["إيداع ",["0"]],"AWtGgd":["احصل على المساعدة"],"AeXO77":["حساب"],"AeZIvT":["ستستلم"],"AikETk":["الحد الأدنى ",["minDeposit"]],"BhQhbU":["استخدم عنوان المستلم المقترح"],"CK1KXz":["الأقصى"],"Ck1xL4":["ترسل"],"D79cZK":["فوري"],"DPfwMq":["تم"],"Dd7jP5":["تواجه مشكلات؟"],"DoS2vD":["إخفاء التفاصيل التقنية"],"ELhVSL":["Failed to submit deposit."],"Ej5HL9":["Signature declined. Please try again."],"Enslfm":["الوجهة"],"G-SK3q":["واجهت الواجهة خطأً غير متوقع وتعذَّر إكمال العرض. حاول مرة أخرى، أو أغلق هذا الحوار وأعد المحاولة من التطبيق."],"GX8GKD":["الأصول"],"GZPxmc":["Enter Valid Recipient Address"],"GcuGHR":["تمت الإضافة إلى ",["captionSuffix"]],"GwkmPx":["تبديل المبلغ المعروض"],"IDt4jm":[["0","plural",{"one":["#"," second"],"other":["#"," seconds"]}]," left on quote"],"IRogzB":["تمت إضافة أموال إيداعك إلى ",["brand"],"."],"KDw4GX":["حاول مرة أخرى"],"KGoAE6":["تلقائي · ",["value"]],"KTNWsg":["فشل السحب"],"KuqCAK":["~ 2 دقيقة"],"LEbOpR":["مزيد من التفاصيل"],"Ly6geA":["جاري إعادة احتساب عرض السعر…"],"MZ_nQf":["عنوان المستلم"],"N2DUxS":["Insufficient Balance"],"OLF0i7":["Couldn't load deposit options"],"Offl0a":["ستُضاف أموال إيداعك إلى حسابك."],"Oi8TiZ":["عرض التقدم"],"OsyKSt":["سحب"],"P9fBwv":["Stack"],"PiH3UR":["تم النسخ!"],"Q12Rrs":["معاملة الإيداع"],"QU2cIs":["لديك أسئلة؟"],"Rxjdjn":["لم يكتمل الإيداع"],"SOVBoe":["نسخ عنوان الإيداع"],"SZRUQ4":["أقصى انزلاق سعري"],"Sjplg3":["عرض في المستكشف"],"SlfejT":["Error"],"TG4WOd":["ستُضاف أموال إيداعك إلى ",["brand"],"."],"TT0aVH":["تم إرسال الطلب"],"Uevt3L":["جاري تقدير العرض"],"UqHbdz":["إغلاق إشعار الإيداع قيد التنفيذ"],"V1fa9u":["عرض المزيد"],"VAZUpd":["فشل الطلب"],"WkRH60":["الحد الأدنى ",["0"]],"Wqz0SO":["رصيد منخفض"],"Z1WbO6":["الأموال آمنة على شبكة المصدر — تواصل مع الدعم للاسترجاع."],"ZqugiS":["الرصيد: ",["0"]," ",["1"]],"_girqu":["نجح السحب"],"_kXBrK":["إجمالي الوقت"],"a2WllD":["العملة المستلمة"],"aiEUrg":["إظهار التفاصيل التقنية"],"bOZXx5":["تحديث الطلب"],"bZnukT":["تكلفة الشبكة"],"c6Bl9M":["Toggle technical details"],"cGYrpE":["تطبَّق الشروط"],"cHPbBJ":["تعذَّر على الجسر تمويل معاملة الوجهة (نفد رصيد الغاز)."],"cxR5Qy":["معاملة التسوية"],"e3xU5E":["تم استلام الإيداع"],"fKSGnu":["الحد الأدنى للمبلغ المطلوب على هذه الشبكة لتغطية رسوم الشبكة والتوجيه."],"fWsBTs":["حدث خطأ. حاول مرة أخرى."],"flMR3h":["تم سحب أموالك بنجاح."],"g2UNkE":["مشغل بواسطة"],"gfh8CC":["الشبكات"],"hKMHs1":["الفرق بين الناتج المتوقع للمسار وسعر السوق الأوسط الأساسي."],"he3ygx":["نسخ"],"hehnjM":["المبلغ"],"i-4Fbp":["فشل الإيداع"],"i-EgW-":["التكلفة التقديرية لبث هذه المعاملة على سلسلة الوجهة."],"iH8pgl":["رجوع"],"junZX6":["تم استلام الإيداع وجاري المعالجة…"],"kH6wUX":["تأثير السعر"],"kR8ayx":["بالنقر على تأكيد الإيداع، فإنك توافق على <0>الشروط</0>."],"kUFhUv":["Withdrawal failed."],"kj3M8S":["إيداع"],"kjrq_8":["مزيد من المعلومات"],"lOEm_1":["تم تنفيذ الطلب"],"ldK3jJ":["Failed to submit withdrawal."],"lxjao1":["مسار السيولة المختار المستخدم لتسوية هذا السحب."],"mgLWEL":["تراجعت معاملة الوجهة على السلسلة."],"mvYQx_":["تم الاكتشاف"],"njn4bC":["أكِّد المعاملة في محفظتك"],"nr03QI":["أدخل عنوان المستلم"],"nwtY4N":["حدث خطأ"],"oBNGNc":["The route's expected output drifted while your transaction was pending."],"oFmN8a":["إيداع ",["symbol"]],"oW1G8i":["تم إيداع أموالك بنجاح."],"ob8R_m":["حاول مرة أخرى أو تواصل معنا إذا استمرت المشكلة."],"ogD_nm":["إيداع إلى ",["0"]],"olEUh2":["ناجح"],"pCzTTC":["عنوان الإيداع الخاص بك"],"q32Nt8":["اكتمل السحب"],"qQ5VJt":["We can't reach the gateway right now"],"qj0vvX":["تأكيد الإيداع"],"qtoOYG":["بدون حد"],"rT8e1f":["المسار"],"rZdp61":["معاملة الإكمال"],"sSiLKx":["شبكة الاستلام"],"sb9Y58":["محفظة"],"sbwbC0":["طريقة الدفع"],"srsA0x":["Withdrawal declined."],"uPo3PQ":["عرض أقل"],"vrnnn9":["جاري المعالجة"],"w-2VR9":["جاري السحب…"],"wdxz7K":["المصدر"],"xDAtGP":["Message"],"xGVfLh":["متابعة"],"yH9V_J":["أدخل المبلغ"],"yrvWai":["معاملة المصدر"],"yxnt3y":["حالة التنفيذ"],"yy2rkt":["0x…"],"yz7wBu":["إغلاق"],"zYD5xm":["جاري الإضافة"],"zbtijb":["إيداع ",["0"]," إلى ",["1"]],"znqB4T":["رصيد غير كافٍ"],"{hours} hr":[["hours"]," ساعة"],"{minutes} min":[["minutes"]," دقيقة"],"{n}h":[["n"],"س"],"{n}m":[["n"],"د"],"{n}s":[["n"],"ث"]}`);export{e as messages};
|
|
1
|
+
const e=JSON.parse(`{"--OGth":["نجح الإيداع"],"-I_tc5":["Max ",["formattedCap"]],"-nuEh_":["الوقت المُقدَّر"],"-tu7Q8":["المزيد عن ",["0"]],"02NghK":["Close this dialog and try again in a moment. If the problem persists, double-check the gateway key on your integration."],"0eg2g7":["جاري تقدير الغاز…"],"0lHlRj":["قيد النقل"],"2Eoi_a":["عرض التفاصيل"],"3dqPLT":["تحويل العملة الرقمية"],"3eKjkO":["الحد الأدنى للإيداع ",["formattedMin"]],"3kg1gB":["اكتمل الإيداع"],"3yd3IL":["The deposit driver failed to load gateway configuration."],"5AApJw":["اتصل بمحفظة للمتابعة"],"5joj8M":["تفاصيل المعاملة"],"60ahSE":["معاملة السحب"],"69Gavs":["Technical details"],"6D8qH6":["أرسل العملة المختارة على الشبكة المختارة إلى هذا العنوان. تظهر الأموال في حسابك بمجرد تأكيد الشبكة للتحويل."],"6RDwJM":["العملات"],"7Bj3x9":["فشل"],"7evBec":["وقت المعالجة: ",["resolvedProcessingTime"]],"88cUW-":["تستلم"],"9JHY2T":["تمت إضافة أموال إيداعك إلى حسابك."],"9XIJb8":["T…"],"9cCjMJ":["إيداع الحد الأقصى من الرصيد"],"< 1 min":["< دقيقة"],"AHyker":["Max ",["0"]],"AO44G_":["عرض الإيصال"],"AOPSKq":["إيداع ",["0"]],"AWtGgd":["احصل على المساعدة"],"AeXO77":["حساب"],"AeZIvT":["ستستلم"],"AikETk":["الحد الأدنى ",["minDeposit"]],"BhQhbU":["استخدم عنوان المستلم المقترح"],"BoQOH3":["يلزم وجود محفظة لإجراء الإيداع"],"CK1KXz":["الأقصى"],"Ck1xL4":["ترسل"],"D79cZK":["فوري"],"DPfwMq":["تم"],"Dd7jP5":["تواجه مشكلات؟"],"DoS2vD":["إخفاء التفاصيل التقنية"],"ELhVSL":["Failed to submit deposit."],"Ej5HL9":["Signature declined. Please try again."],"Enslfm":["الوجهة"],"G-SK3q":["واجهت الواجهة خطأً غير متوقع وتعذَّر إكمال العرض. حاول مرة أخرى، أو أغلق هذا الحوار وأعد المحاولة من التطبيق."],"GX8GKD":["الأصول"],"GZPxmc":["Enter Valid Recipient Address"],"GcuGHR":["تمت الإضافة إلى ",["captionSuffix"]],"GwkmPx":["تبديل المبلغ المعروض"],"IDt4jm":[["0","plural",{"one":["#"," second"],"other":["#"," seconds"]}]," left on quote"],"IRogzB":["تمت إضافة أموال إيداعك إلى ",["brand"],"."],"KDw4GX":["حاول مرة أخرى"],"KGoAE6":["تلقائي · ",["value"]],"KTNWsg":["فشل السحب"],"KuqCAK":["~ 2 دقيقة"],"LEbOpR":["مزيد من التفاصيل"],"Ly6geA":["جاري إعادة احتساب عرض السعر…"],"MZ_nQf":["عنوان المستلم"],"N2DUxS":["Insufficient Balance"],"OLF0i7":["Couldn't load deposit options"],"Offl0a":["ستُضاف أموال إيداعك إلى حسابك."],"Oi8TiZ":["عرض التقدم"],"OsyKSt":["سحب"],"P9fBwv":["Stack"],"PiH3UR":["تم النسخ!"],"Q12Rrs":["معاملة الإيداع"],"QU2cIs":["لديك أسئلة؟"],"Rxjdjn":["لم يكتمل الإيداع"],"SOVBoe":["نسخ عنوان الإيداع"],"SZRUQ4":["أقصى انزلاق سعري"],"Sjplg3":["عرض في المستكشف"],"SlfejT":["Error"],"TG4WOd":["ستُضاف أموال إيداعك إلى ",["brand"],"."],"TT0aVH":["تم إرسال الطلب"],"Uevt3L":["جاري تقدير العرض"],"UqHbdz":["إغلاق إشعار الإيداع قيد التنفيذ"],"V1fa9u":["عرض المزيد"],"VAZUpd":["فشل الطلب"],"VHOVEJ":["اتصل بالمحفظة"],"WkRH60":["الحد الأدنى ",["0"]],"Wqz0SO":["رصيد منخفض"],"Z1WbO6":["الأموال آمنة على شبكة المصدر — تواصل مع الدعم للاسترجاع."],"ZqugiS":["الرصيد: ",["0"]," ",["1"]],"_girqu":["نجح السحب"],"_kXBrK":["إجمالي الوقت"],"a2WllD":["العملة المستلمة"],"aiEUrg":["إظهار التفاصيل التقنية"],"bOZXx5":["تحديث الطلب"],"bZnukT":["تكلفة الشبكة"],"c6Bl9M":["Toggle technical details"],"cGYrpE":["تطبَّق الشروط"],"cHPbBJ":["تعذَّر على الجسر تمويل معاملة الوجهة (نفد رصيد الغاز)."],"cxR5Qy":["معاملة التسوية"],"e3xU5E":["تم استلام الإيداع"],"fKSGnu":["الحد الأدنى للمبلغ المطلوب على هذه الشبكة لتغطية رسوم الشبكة والتوجيه."],"fWsBTs":["حدث خطأ. حاول مرة أخرى."],"flMR3h":["تم سحب أموالك بنجاح."],"g2UNkE":["مشغل بواسطة"],"gfh8CC":["الشبكات"],"hKMHs1":["الفرق بين الناتج المتوقع للمسار وسعر السوق الأوسط الأساسي."],"he3ygx":["نسخ"],"hehnjM":["المبلغ"],"i-4Fbp":["فشل الإيداع"],"i-EgW-":["التكلفة التقديرية لبث هذه المعاملة على سلسلة الوجهة."],"iH8pgl":["رجوع"],"junZX6":["تم استلام الإيداع وجاري المعالجة…"],"kH6wUX":["تأثير السعر"],"kR8ayx":["بالنقر على تأكيد الإيداع، فإنك توافق على <0>الشروط</0>."],"kUFhUv":["Withdrawal failed."],"kj3M8S":["إيداع"],"kjrq_8":["مزيد من المعلومات"],"lOEm_1":["تم تنفيذ الطلب"],"ldK3jJ":["Failed to submit withdrawal."],"lxjao1":["مسار السيولة المختار المستخدم لتسوية هذا السحب."],"mF_ucv":["اتصل بمحفظة حتى تتمكن البوابة من توفير عنوان إيداع وتوجيه تحويلك."],"mgLWEL":["تراجعت معاملة الوجهة على السلسلة."],"mvYQx_":["تم الاكتشاف"],"njn4bC":["أكِّد المعاملة في محفظتك"],"nr03QI":["أدخل عنوان المستلم"],"nwtY4N":["حدث خطأ"],"oBNGNc":["The route's expected output drifted while your transaction was pending."],"oFmN8a":["إيداع ",["symbol"]],"oW1G8i":["تم إيداع أموالك بنجاح."],"ob8R_m":["حاول مرة أخرى أو تواصل معنا إذا استمرت المشكلة."],"ogD_nm":["إيداع إلى ",["0"]],"olEUh2":["ناجح"],"pCzTTC":["عنوان الإيداع الخاص بك"],"q32Nt8":["اكتمل السحب"],"qQ5VJt":["We can't reach the gateway right now"],"qj0vvX":["تأكيد الإيداع"],"qtoOYG":["بدون حد"],"rT8e1f":["المسار"],"rZdp61":["معاملة الإكمال"],"sSiLKx":["شبكة الاستلام"],"sb9Y58":["محفظة"],"sbwbC0":["طريقة الدفع"],"srsA0x":["Withdrawal declined."],"uPo3PQ":["عرض أقل"],"vrnnn9":["جاري المعالجة"],"w-2VR9":["جاري السحب…"],"wdxz7K":["المصدر"],"xDAtGP":["Message"],"xGVfLh":["متابعة"],"yH9V_J":["أدخل المبلغ"],"yrvWai":["معاملة المصدر"],"yxnt3y":["حالة التنفيذ"],"yy2rkt":["0x…"],"yz7wBu":["إغلاق"],"zYD5xm":["جاري الإضافة"],"zbtijb":["إيداع ",["0"]," إلى ",["1"]],"znqB4T":["رصيد غير كافٍ"],"{hours} hr":[["hours"]," ساعة"],"{minutes} min":[["minutes"]," دقيقة"],"{n}h":[["n"],"س"],"{n}m":[["n"],"د"],"{n}s":[["n"],"ث"]}`);export{e as messages};
|