@tokenflight/swap 0.0.4 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # @tokenflight/swap
2
2
 
3
- Embeddable Web Components for cross-chain token swaps.
3
+ Embeddable Web Component SDK centered on `<tokenflight-widget>`.
4
+
5
+ For public widget usage, import `registerWidgetElement` from `@tokenflight/swap/widget`.
4
6
 
5
7
  ## Getting Started
6
8
 
@@ -24,6 +24,8 @@
24
24
  */
25
25
  import type {
26
26
  TokenFlightReceiveAttributes,
27
+ TokenFlightDepositAttributes,
28
+ TokenFlightWidgetAttributes,
27
29
  } from "./index";
28
30
 
29
31
  /**
@@ -85,9 +87,13 @@ interface ReactHTMLAttributes {
85
87
 
86
88
  /** Widget attributes + standard HTML attributes */
87
89
  type ReceiveElementAttributes = TokenFlightReceiveAttributes & BaseHTMLAttributes;
90
+ type DepositElementAttributes = TokenFlightDepositAttributes & BaseHTMLAttributes;
91
+ type WidgetElementAttributes = TokenFlightWidgetAttributes & BaseHTMLAttributes;
88
92
 
89
93
  /** With React/Preact camelCase aliases */
90
94
  type ReceiveReactAttributes = ReceiveElementAttributes & ReactHTMLAttributes;
95
+ type DepositReactAttributes = DepositElementAttributes & ReactHTMLAttributes;
96
+ type WidgetReactAttributes = WidgetElementAttributes & ReactHTMLAttributes;
91
97
 
92
98
  // ---------------------------------------------------------------------------
93
99
  // Native DOM (document.createElement, querySelector, etc.)
@@ -96,12 +102,16 @@ type ReceiveReactAttributes = ReceiveElementAttributes & ReactHTMLAttributes;
96
102
  declare global {
97
103
  interface HTMLElementTagNameMap {
98
104
  "tokenflight-receive": HTMLElement;
105
+ "tokenflight-deposit": HTMLElement;
106
+ "tokenflight-widget": HTMLElement;
99
107
  }
100
108
 
101
109
  // eslint-disable-next-line @typescript-eslint/no-namespace
102
110
  namespace svelteHTML {
103
111
  interface IntrinsicElements {
104
112
  "tokenflight-receive": ReceiveElementAttributes;
113
+ "tokenflight-deposit": DepositElementAttributes;
114
+ "tokenflight-widget": WidgetElementAttributes;
105
115
  }
106
116
  }
107
117
  }
@@ -114,6 +124,8 @@ declare module "react/jsx-runtime" {
114
124
  namespace JSX {
115
125
  interface IntrinsicElements {
116
126
  "tokenflight-receive": ReceiveReactAttributes;
127
+ "tokenflight-deposit": DepositReactAttributes;
128
+ "tokenflight-widget": WidgetReactAttributes;
117
129
  }
118
130
  }
119
131
  }
@@ -126,6 +138,8 @@ declare module "react" {
126
138
  namespace JSX {
127
139
  interface IntrinsicElements {
128
140
  "tokenflight-receive": ReceiveReactAttributes;
141
+ "tokenflight-deposit": DepositReactAttributes;
142
+ "tokenflight-widget": WidgetReactAttributes;
129
143
  }
130
144
  }
131
145
  }
@@ -138,6 +152,8 @@ declare module "preact" {
138
152
  namespace JSX {
139
153
  interface IntrinsicElements {
140
154
  "tokenflight-receive": ReceiveReactAttributes;
155
+ "tokenflight-deposit": DepositReactAttributes;
156
+ "tokenflight-widget": WidgetReactAttributes;
141
157
  }
142
158
  }
143
159
  }
@@ -148,6 +164,8 @@ declare module "preact" {
148
164
  declare module "vue" {
149
165
  interface GlobalComponents {
150
166
  "tokenflight-receive": ReceiveElementAttributes;
167
+ "tokenflight-deposit": DepositElementAttributes;
168
+ "tokenflight-widget": WidgetElementAttributes;
151
169
  }
152
170
  }
153
171
 
@@ -159,6 +177,8 @@ declare module "solid-js" {
159
177
  namespace JSX {
160
178
  interface IntrinsicElements {
161
179
  "tokenflight-receive": ReceiveElementAttributes;
180
+ "tokenflight-deposit": DepositElementAttributes;
181
+ "tokenflight-widget": WidgetElementAttributes;
162
182
  }
163
183
  }
164
184
  }
@@ -169,6 +189,8 @@ declare module "solid-js" {
169
189
  declare module "svelte/elements" {
170
190
  interface SvelteHTMLElements {
171
191
  "tokenflight-receive": ReceiveElementAttributes;
192
+ "tokenflight-deposit": DepositElementAttributes;
193
+ "tokenflight-widget": WidgetElementAttributes;
172
194
  }
173
195
  }
174
196
 
@@ -178,5 +200,7 @@ declare module "svelte/elements" {
178
200
  declare namespace astroHTML.JSX {
179
201
  interface IntrinsicElements {
180
202
  "tokenflight-receive": ReceiveElementAttributes;
203
+ "tokenflight-deposit": DepositElementAttributes;
204
+ "tokenflight-widget": WidgetElementAttributes;
181
205
  }
182
206
  }
@@ -0,0 +1,304 @@
1
+ import { QuoteResponse } from '@tokenflight/api';
2
+
3
+ /** Amount change data */
4
+ declare interface AmountChangedData {
5
+ amount: string;
6
+ direction: "from" | "to";
7
+ }
8
+
9
+ /**
10
+ * Boolean HTML attribute — accepts both native booleans and the
11
+ * string equivalents that `parseBooleanProp()` understands.
12
+ */
13
+ declare type BooleanAttribute = boolean | "true" | "false" | "1" | "0" | "yes" | "no" | "";
14
+
15
+ /** Callback interfaces for widget events */
16
+ export declare interface Callbacks {
17
+ onSwapSuccess?(data: SwapSuccessData): void;
18
+ onSwapError?(data: SwapErrorData): void;
19
+ onWalletConnected?(data: WalletConnectedData): void;
20
+ onQuoteReceived?(data: QuoteResponse): void;
21
+ onAmountChanged?(data: AmountChangedData): void;
22
+ /** Called when user clicks Connect Wallet and no walletAdapter is provided */
23
+ onConnectWallet?(): void;
24
+ /** Called when user clicks the connected wallet address (for custom account modal handling) */
25
+ onAccountModal?(): void;
26
+ /** Called when a fiat order is created and the payment widget URL is available */
27
+ onFiatOrderCreated?(data: {
28
+ orderId: string;
29
+ widgetUrl: string;
30
+ }): void;
31
+ /** Called when a fiat order reaches a terminal status */
32
+ onFiatOrderCompleted?(data: {
33
+ orderId: string;
34
+ status: string;
35
+ txHash?: string;
36
+ }): void;
37
+ /** Called when a deposit completes successfully */
38
+ onDepositSuccess?(data: SwapSuccessData): void;
39
+ /** Called when a deposit fails */
40
+ onDepositError?(data: SwapErrorData): void;
41
+ }
42
+
43
+ /** Chain type for multi-chain support */
44
+ declare type ChainType = "evm" | "solana";
45
+
46
+ /**
47
+ * Custom color overrides — keys are CSS variable names.
48
+ * Typed keys provide autocomplete; arbitrary `--tf-*` strings are also accepted.
49
+ *
50
+ * ```ts
51
+ * customColors: {
52
+ * "--tf-primary": "#FF6B00",
53
+ * "--tf-bg": "#1A1A2E",
54
+ * "--tf-button-radius": "4px",
55
+ * "--tf-widget-max-width": "480px",
56
+ * }
57
+ * ```
58
+ */
59
+ export declare type CustomColors = Partial<Record<TfCssVar, string>> & Record<string, string>;
60
+
61
+ /** Payment methods available in `<tokenflight-deposit>` */
62
+ export declare type DepositMethod = "wallet" | "card";
63
+
64
+ /** EVM wallet action via EIP-1193 */
65
+ declare interface EvmWalletAction {
66
+ type: "eip1193_request";
67
+ chainId: number;
68
+ method: string;
69
+ params: unknown[];
70
+ }
71
+
72
+ /** How the fiat payment provider UI is opened. */
73
+ export declare type FiatPaymentMode = "overlay" | "popup";
74
+
75
+ declare interface ImperativeWidgetOptions<TConfig> {
76
+ container: string | HTMLElement;
77
+ config: TConfig;
78
+ walletAdapter?: IWalletAdapter;
79
+ callbacks?: Callbacks;
80
+ }
81
+
82
+ /** Wallet adapter interface that all adapters must implement */
83
+ export declare interface IWalletAdapter {
84
+ /** Human-readable name */
85
+ readonly name: string;
86
+ /** Icon URL */
87
+ readonly icon?: string;
88
+ /** Supported action types */
89
+ readonly supportedActionTypes: WalletActionType[];
90
+ /** Optional: supported chain IDs — when set, the widget only shows tokens on these chains */
91
+ readonly supportedChainIds?: number[];
92
+ /** Connect the wallet */
93
+ connect(chainType?: ChainType): Promise<void>;
94
+ /** Disconnect the wallet */
95
+ disconnect(): Promise<void>;
96
+ /** Check if connected */
97
+ isConnected(chainType?: ChainType): boolean;
98
+ /** Get the current address */
99
+ getAddress(chainType?: ChainType): Promise<string | null>;
100
+ /** Execute a wallet action */
101
+ executeWalletAction(action: WalletAction): Promise<WalletActionResult>;
102
+ /** Optional: sign a message */
103
+ signMessage?(message: string, chainType?: ChainType): Promise<string>;
104
+ /** Optional: open the wallet's native account/connected modal */
105
+ openAccountModal?(): Promise<void>;
106
+ /** Optional: clean up internal subscriptions and watchers */
107
+ destroy?(): void;
108
+ /** Subscribe to wallet events */
109
+ on(event: WalletEventType, handler: (event: WalletEvent) => void): void;
110
+ /** Unsubscribe from wallet events */
111
+ off(event: WalletEventType, handler: (event: WalletEvent) => void): void;
112
+ }
113
+
114
+ export declare function registerDepositElement(options?: RegisterElementsOptions): void;
115
+
116
+ export declare interface RegisterElementsOptions {
117
+ walletAdapter?: IWalletAdapter;
118
+ callbacks?: Callbacks;
119
+ /** Custom CSS variable overrides merged on top of the active theme.
120
+ * Keys are CSS variable names, e.g. `"--tf-primary"`, `"--tf-font-family"`. */
121
+ customColors?: CustomColors;
122
+ /** Default API endpoint for all widget instances. */
123
+ apiEndpoint?: string;
124
+ /** Default theme for all widget instances. */
125
+ theme?: Theme;
126
+ /** Default locale for all widget instances. */
127
+ locale?: SupportedLocale;
128
+ }
129
+
130
+ /** Solana sign and send transaction action */
131
+ declare interface SolanaSignAndSendAction {
132
+ type: "solana_signAndSendTransaction";
133
+ transaction: string;
134
+ }
135
+
136
+ /** Solana sign transaction action */
137
+ declare interface SolanaSignTransactionAction {
138
+ type: "solana_signTransaction";
139
+ transaction: string;
140
+ }
141
+
142
+ /** Supported locale identifiers. Accepts any string for forward-compat; known values get bundled translations. */
143
+ export declare type SupportedLocale = "en-US" | "zh-CN" | "zh-TW" | "ja-JP" | "ko-KR" | (string & {});
144
+
145
+ /** Data emitted on swap error */
146
+ declare interface SwapErrorData {
147
+ code: string;
148
+ message: string;
149
+ details?: unknown;
150
+ }
151
+
152
+ /** Data emitted on swap success */
153
+ declare interface SwapSuccessData {
154
+ orderId: string;
155
+ fromToken: string;
156
+ toToken: string;
157
+ fromAmount: string;
158
+ toAmount: string;
159
+ txHash: string;
160
+ }
161
+
162
+ /** All first-party CSS custom properties exposed for theming. */
163
+ declare type TfCssVar = "--tf-bg" | "--tf-bg-secondary" | "--tf-bg-elevated" | "--tf-surface" | "--tf-surface-hover" | "--tf-input-bg" | "--tf-glass" | "--tf-text" | "--tf-text-secondary" | "--tf-text-tertiary" | "--tf-text-on-primary" | "--tf-border" | "--tf-border-light" | "--tf-primary" | "--tf-primary-alpha" | "--tf-primary-light" | "--tf-primary-glow" | "--tf-success" | "--tf-success-bg" | "--tf-error" | "--tf-error-bg" | "--tf-error-alpha" | "--tf-warning" | "--tf-warning-bg" | "--tf-shadow" | "--tf-shadow-lg" | "--tf-skeleton" | "--tf-radius-xs" | "--tf-radius-sm" | "--tf-radius" | "--tf-radius-lg" | "--tf-radius-xl" | "--tf-button-radius" | "--tf-widget-max-width" | "--tf-font-family" | "--tf-font-family-mono";
164
+
165
+ /** Visual theme mode. */
166
+ export declare type Theme = "light" | "dark" | "auto";
167
+
168
+ /** Shared configuration fields for both widgets */
169
+ declare interface TokenFlightConfigBase {
170
+ /** HyperStream API endpoint */
171
+ apiEndpoint?: string;
172
+ /** Fiat on-ramp API endpoint (default: https://fiat-preview.hyperstream.dev) */
173
+ fiatApiEndpoint?: string;
174
+ /** Visual theme */
175
+ theme?: Theme;
176
+ /** Locale for i18n */
177
+ locale?: SupportedLocale;
178
+ /** Custom CSS color overrides */
179
+ customColors?: CustomColors;
180
+ /** Optional custom widget title text */
181
+ titleText?: string;
182
+ /** Optional custom widget title image URL */
183
+ titleImageUrl?: string;
184
+ /** Hide top title/header area */
185
+ hideTitle?: boolean;
186
+ /** Hide "Powered by TokenFlight" footer */
187
+ hidePoweredBy?: boolean;
188
+ /** Remove container background (transparent) */
189
+ noBackground?: boolean;
190
+ /** Remove container border and shadow */
191
+ noBorder?: boolean;
192
+ }
193
+
194
+ export declare const TokenFlightDeposit: {
195
+ new (options: ImperativeWidgetOptions<TokenFlightDepositConfig>): {
196
+ #dispose: (() => void) | null;
197
+ #unwatchTheme: (() => void) | null;
198
+ #container: HTMLElement;
199
+ #shadowRoot: ShadowRoot | null;
200
+ #config: TokenFlightDepositConfig;
201
+ #walletAdapter?: IWalletAdapter;
202
+ #callbacks?: Callbacks;
203
+ initialize(): void;
204
+ destroy(): void;
205
+ setTheme(theme: Theme): void;
206
+ setCustomColors(colors: CustomColors): void;
207
+ #applyThemeStyles(style: HTMLStyleElement, theme: string): void;
208
+ #setupAutoThemeWatch(style: HTMLStyleElement): void;
209
+ };
210
+ };
211
+
212
+ /** Attributes accepted by `<tokenflight-deposit>`. */
213
+ export declare interface TokenFlightDepositAttributes {
214
+ "api-endpoint"?: string;
215
+ target?: string;
216
+ amount?: string;
217
+ "from-token"?: string;
218
+ recipient?: string;
219
+ methods?: string;
220
+ "target-icon"?: string;
221
+ "fiat-currency"?: string;
222
+ "fiat-payment-mode"?: string;
223
+ "title-text"?: string;
224
+ "title-image"?: string;
225
+ theme?: Theme;
226
+ locale?: SupportedLocale;
227
+ "csp-nonce"?: string;
228
+ "hide-title"?: BooleanAttribute;
229
+ "hide-powered-by"?: BooleanAttribute;
230
+ "no-background"?: BooleanAttribute;
231
+ "no-border"?: BooleanAttribute;
232
+ }
233
+
234
+ /** Configuration for `<tokenflight-deposit>` */
235
+ export declare interface TokenFlightDepositConfig extends TokenFlightConfigBase {
236
+ /** Target token(s) to deposit into. When omitted, user selects via TokenSelector. */
237
+ target?: TokenIdentifier | TokenIdentifier[];
238
+ /** Optional: fixed amount for the target token */
239
+ amount?: string;
240
+ /** Optional: recipient address */
241
+ recipient?: string;
242
+ /** Payment methods to offer (default: ["wallet"]) */
243
+ methods?: DepositMethod[];
244
+ /** Optional source token to pay with */
245
+ fromToken?: TokenIdentifier;
246
+ /** Optional icon URL for the target token */
247
+ targetIcon?: string;
248
+ /** Fiat currency code for card payments (default: "USD") */
249
+ fiatCurrency?: string;
250
+ /** How to open the fiat payment provider (default: "overlay") */
251
+ fiatPaymentMode?: FiatPaymentMode;
252
+ }
253
+
254
+ export declare interface TokenFlightDepositOptions {
255
+ container: string | HTMLElement;
256
+ config: TokenFlightDepositConfig;
257
+ walletAdapter?: IWalletAdapter;
258
+ callbacks?: Callbacks;
259
+ }
260
+
261
+ /**
262
+ * Flexible token identifier supporting:
263
+ * - Direct object: { chainId: 1, address: "0x..." }
264
+ * - CAIP-10 string: "eip155:1:0x..."
265
+ * - JSON string: '{"chainId":1,"address":"0x..."}'
266
+ */
267
+ declare type TokenIdentifier = string | TokenTarget;
268
+
269
+ /** Token target as chain + address pair */
270
+ declare interface TokenTarget {
271
+ chainId: number;
272
+ address: string;
273
+ }
274
+
275
+ /** Union of all wallet action types */
276
+ declare type WalletAction = EvmWalletAction | SolanaSignTransactionAction | SolanaSignAndSendAction;
277
+
278
+ /** Result of executing a wallet action */
279
+ declare interface WalletActionResult {
280
+ success: boolean;
281
+ data?: unknown;
282
+ error?: string;
283
+ txHash?: string;
284
+ }
285
+
286
+ /** Wallet action types */
287
+ declare type WalletActionType = "eip1193_request" | "solana_signTransaction" | "solana_signAndSendTransaction";
288
+
289
+ /** Data emitted when wallet is connected */
290
+ declare interface WalletConnectedData {
291
+ address: string;
292
+ chainType: string;
293
+ }
294
+
295
+ /** Wallet event payload */
296
+ declare interface WalletEvent {
297
+ type: WalletEventType;
298
+ data?: unknown;
299
+ }
300
+
301
+ /** Wallet event types */
302
+ declare type WalletEventType = "connect" | "disconnect" | "chainChanged" | "accountsChanged";
303
+
304
+ export { }
@@ -0,0 +1 @@
1
+ import"./dist-D4PEwqKq.js";import"./widget-9I201q7O.js";import{n as e,t}from"./register-deposit-COFuKwk-.js";export{e as TokenFlightDeposit,t as registerDepositElement};