@nexus-cross/connect-kit-wagmi 1.0.0-beta.1

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.
Files changed (82) hide show
  1. package/README.md +195 -0
  2. package/dist/adapters/helpers.d.ts +46 -0
  3. package/dist/adapters/helpers.d.ts.map +1 -0
  4. package/dist/adapters/helpers.js +124 -0
  5. package/dist/adapters/helpers.js.map +1 -0
  6. package/dist/adapters/reownAdapter.d.ts +20 -0
  7. package/dist/adapters/reownAdapter.d.ts.map +1 -0
  8. package/dist/adapters/reownAdapter.js +213 -0
  9. package/dist/adapters/reownAdapter.js.map +1 -0
  10. package/dist/adapters/toNexusAdapter.d.ts +12 -0
  11. package/dist/adapters/toNexusAdapter.d.ts.map +1 -0
  12. package/dist/adapters/toNexusAdapter.js +167 -0
  13. package/dist/adapters/toNexusAdapter.js.map +1 -0
  14. package/dist/adapters/types.d.ts +101 -0
  15. package/dist/adapters/types.d.ts.map +1 -0
  16. package/dist/adapters/types.js +3 -0
  17. package/dist/adapters/types.js.map +1 -0
  18. package/dist/config/createCrossxConfig.d.ts +75 -0
  19. package/dist/config/createCrossxConfig.d.ts.map +1 -0
  20. package/dist/config/createCrossxConfig.js +77 -0
  21. package/dist/config/createCrossxConfig.js.map +1 -0
  22. package/dist/connectors/embeddedConnector.d.ts +30 -0
  23. package/dist/connectors/embeddedConnector.d.ts.map +1 -0
  24. package/dist/connectors/embeddedConnector.js +43 -0
  25. package/dist/connectors/embeddedConnector.js.map +1 -0
  26. package/dist/connectors/extensionConnector.d.ts +7 -0
  27. package/dist/connectors/extensionConnector.d.ts.map +1 -0
  28. package/dist/connectors/extensionConnector.js +60 -0
  29. package/dist/connectors/extensionConnector.js.map +1 -0
  30. package/dist/connectors/walletConnectConnector.d.ts +19 -0
  31. package/dist/connectors/walletConnectConnector.d.ts.map +1 -0
  32. package/dist/connectors/walletConnectConnector.js +33 -0
  33. package/dist/connectors/walletConnectConnector.js.map +1 -0
  34. package/dist/embedded.d.ts +19 -0
  35. package/dist/embedded.d.ts.map +1 -0
  36. package/dist/embedded.js +18 -0
  37. package/dist/embedded.js.map +1 -0
  38. package/dist/events.d.ts +11 -0
  39. package/dist/events.d.ts.map +1 -0
  40. package/dist/events.js +17 -0
  41. package/dist/events.js.map +1 -0
  42. package/dist/index.d.ts +21 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +12 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/registry/ConnectorRegistry.d.ts +68 -0
  47. package/dist/registry/ConnectorRegistry.d.ts.map +1 -0
  48. package/dist/registry/ConnectorRegistry.js +52 -0
  49. package/dist/registry/ConnectorRegistry.js.map +1 -0
  50. package/dist/reown.d.ts +3 -0
  51. package/dist/reown.d.ts.map +1 -0
  52. package/dist/reown.js +2 -0
  53. package/dist/reown.js.map +1 -0
  54. package/dist/ssr.d.ts +43 -0
  55. package/dist/ssr.d.ts.map +1 -0
  56. package/dist/ssr.js +50 -0
  57. package/dist/ssr.js.map +1 -0
  58. package/dist/to-nexus.d.ts +3 -0
  59. package/dist/to-nexus.d.ts.map +1 -0
  60. package/dist/to-nexus.js +2 -0
  61. package/dist/to-nexus.js.map +1 -0
  62. package/dist/utils/sessionStorage.d.ts +21 -0
  63. package/dist/utils/sessionStorage.d.ts.map +1 -0
  64. package/dist/utils/sessionStorage.js +55 -0
  65. package/dist/utils/sessionStorage.js.map +1 -0
  66. package/dist/utils/theme.d.ts +58 -0
  67. package/dist/utils/theme.d.ts.map +1 -0
  68. package/dist/utils/theme.js +112 -0
  69. package/dist/utils/theme.js.map +1 -0
  70. package/dist/wallets/detection.d.ts +28 -0
  71. package/dist/wallets/detection.d.ts.map +1 -0
  72. package/dist/wallets/detection.js +187 -0
  73. package/dist/wallets/detection.js.map +1 -0
  74. package/dist/wallets/icons.d.ts +20 -0
  75. package/dist/wallets/icons.d.ts.map +1 -0
  76. package/dist/wallets/icons.js +33 -0
  77. package/dist/wallets/icons.js.map +1 -0
  78. package/dist/wallets/registry.d.ts +3 -0
  79. package/dist/wallets/registry.d.ts.map +1 -0
  80. package/dist/wallets/registry.js +33 -0
  81. package/dist/wallets/registry.js.map +1 -0
  82. package/package.json +57 -0
@@ -0,0 +1,167 @@
1
+ import { WagmiAdapter } from '@to-nexus/appkit-adapter-wagmi';
2
+ import { initCrossSdk, bscMainnet, bscTestnet, crossMainnet, crossTestnet, etherMainnet, etherTestnet, kaiaMainnet, kaiaTestnet, roninMainnet, roninTestnet, } from '@to-nexus/sdk';
3
+ import { crossExtensionEntry, crossWalletEntry, } from './helpers.js';
4
+ /**
5
+ * EIP-155 chain ID → preset CaipNetwork from `@to-nexus/sdk`. The
6
+ * CROSS-relay walletConnect requires these typed objects; DApps needing
7
+ * custom chains should use `reownAdapter` instead.
8
+ */
9
+ const PRESET_NETWORKS_BY_CHAIN_ID = new Map([
10
+ [crossMainnet.id, crossMainnet],
11
+ [crossTestnet.id, crossTestnet],
12
+ [bscMainnet.id, bscMainnet],
13
+ [bscTestnet.id, bscTestnet],
14
+ [kaiaMainnet.id, kaiaMainnet],
15
+ [kaiaTestnet.id, kaiaTestnet],
16
+ [etherMainnet.id, etherMainnet],
17
+ [etherTestnet.id, etherTestnet],
18
+ [roninMainnet.id, roninMainnet],
19
+ [roninTestnet.id, roninTestnet],
20
+ ]);
21
+ /**
22
+ * WagmiAdapter + AppKit are global singletons keyed by projectId. A
23
+ * second call with the same projectId reuses the cached config to stay
24
+ * StrictMode / HMR safe.
25
+ */
26
+ const bootstrapCache = new Map();
27
+ function resolvePresetNetworks(kitNetworks) {
28
+ const result = [];
29
+ const unsupported = [];
30
+ for (const net of kitNetworks) {
31
+ const preset = PRESET_NETWORKS_BY_CHAIN_ID.get(net.id);
32
+ if (preset)
33
+ result.push(preset);
34
+ else
35
+ unsupported.push(net.id);
36
+ }
37
+ if (unsupported.length) {
38
+ throw new Error(`[crossx-kit] toNexusAdapter: chain IDs [${unsupported.join(', ')}] are ` +
39
+ 'not supported by @to-nexus/sdk presets. Either remove them from ' +
40
+ 'CrossConnectKitConfig.networks or switch to reownAdapter().');
41
+ }
42
+ return result;
43
+ }
44
+ function bootstrapOnce(input) {
45
+ const { kitConfig, extraConnectors } = input;
46
+ const projectId = kitConfig.crossProjectId;
47
+ const existing = bootstrapCache.get(projectId);
48
+ if (existing)
49
+ return existing;
50
+ const caipNetworks = resolvePresetNetworks(kitConfig.networks);
51
+ const connectors = extraConnectors.map((e) => e.connector);
52
+ // WagmiAdapter builds its own wagmi config from these params and
53
+ // internally appends crossExtensionConnector. AppKit later (inside
54
+ // initCrossSdk) calls addWagmiConnectors which pushes walletConnect
55
+ // (CROSS relay via UniversalConnector), injected (MetaMask), and
56
+ // authConnector (email/social) into the same config.
57
+ const wagmiAdapter = new WagmiAdapter({
58
+ projectId,
59
+ networks: caipNetworks,
60
+ connectors,
61
+ ssr: kitConfig.ssr,
62
+ });
63
+ const metadata = {
64
+ name: kitConfig.appMetadata.name,
65
+ description: kitConfig.appMetadata.description ?? '',
66
+ url: kitConfig.appMetadata.url,
67
+ icons: kitConfig.appMetadata.icons ?? [],
68
+ };
69
+ const appKit = initCrossSdk(projectId, kitConfig.appMetadata.url, metadata, undefined, caipNetworks[0], [wagmiAdapter]);
70
+ const wagmiConfig = wagmiAdapter.wagmiConfig;
71
+ const entry = { appKit, wagmiConfig, caipNetworks };
72
+ bootstrapCache.set(projectId, entry);
73
+ return entry;
74
+ }
75
+ /**
76
+ * Adapter backed by `@to-nexus/appkit-adapter-wagmi` — the CROSS-relay
77
+ * fork of Reown AppKit. Owns the wagmi `Config` so AppKit's native UI
78
+ * (QR modal, deep-link, Cross Extension approval flow) stays in sync
79
+ * with the kit's `useAccount` / `useConnect` state.
80
+ */
81
+ export function toNexusAdapter(options = {}) {
82
+ const crossWalletName = options.displayName ?? 'CROSSx Wallet';
83
+ return {
84
+ providerKind: 'to-nexus',
85
+ buildWagmiConfig(input) {
86
+ if (!input.kitConfig.crossProjectId) {
87
+ throw new Error('[crossx-kit] toNexusAdapter requires CrossConnectKitConfig.crossProjectId');
88
+ }
89
+ const { wagmiConfig } = bootstrapOnce(input);
90
+ // Cross-side only owns CROSSx wallets. MetaMask / Binance live on
91
+ // the reown side (separate wagmi config) so they can talk to the
92
+ // standard Reown relay — the CROSS relay WagmiAdapter uses is not
93
+ // reachable by those wallets.
94
+ const registryEntries = [
95
+ ...input.extraConnectors
96
+ .map((e) => e.registryEntry)
97
+ .filter((e) => e !== null),
98
+ crossWalletEntry(crossWalletName, 'walletConnect'),
99
+ crossExtensionEntry(),
100
+ ];
101
+ return { wagmiConfig, registryEntries };
102
+ },
103
+ async teardown() {
104
+ // wagmi's disconnect tears down the session through the connector.
105
+ // AppKit singleton is intentionally preserved for reuse.
106
+ },
107
+ subscribeModalState({ kitConfig }, callback) {
108
+ if (!kitConfig.crossProjectId)
109
+ return () => { };
110
+ const entry = bootstrapCache.get(kitConfig.crossProjectId);
111
+ const subscribe = entry?.appKit.subscribeState;
112
+ if (!subscribe)
113
+ return () => { };
114
+ let lastOpen;
115
+ return subscribe((state) => {
116
+ const next = state.open === true;
117
+ if (next !== lastOpen) {
118
+ lastOpen = next;
119
+ callback(next);
120
+ }
121
+ });
122
+ },
123
+ closeModal({ kitConfig }) {
124
+ if (!kitConfig.crossProjectId)
125
+ return;
126
+ const entry = bootstrapCache.get(kitConfig.crossProjectId);
127
+ if (!entry)
128
+ return;
129
+ const close = entry.appKit.close;
130
+ if (typeof close !== 'function')
131
+ return;
132
+ try {
133
+ const result = close.call(entry.appKit);
134
+ if (result && typeof result.then === 'function') {
135
+ result.catch(() => { });
136
+ }
137
+ }
138
+ catch {
139
+ /* best-effort; modal already closed is fine */
140
+ }
141
+ },
142
+ beforeConnect({ kitConfig }, walletId) {
143
+ // AppKit owns the QR UI for cross_wallet. Other wallets have their
144
+ // own native surfaces (extension popup, wallet-native QR).
145
+ if (walletId !== 'cross_wallet')
146
+ return 'defer';
147
+ if (!kitConfig.crossProjectId)
148
+ return 'defer';
149
+ const entry = bootstrapCache.get(kitConfig.crossProjectId);
150
+ if (!entry)
151
+ return 'defer';
152
+ // Open AppKit directly on the QR view so the user is not sent
153
+ // back through AppKit's wallet picker. The view subscribes to the
154
+ // UniversalProvider singleton, so `display_uri` emitted by the
155
+ // wagmi connector reaches the modal without additional wiring.
156
+ entry.appKit
157
+ .open({ view: 'ConnectingWalletConnectBasic' })
158
+ .catch((err) => {
159
+ if (typeof console !== 'undefined') {
160
+ console.warn('[crossx-kit] toNexusAdapter: appKit.open failed', err);
161
+ }
162
+ });
163
+ return 'defer';
164
+ },
165
+ };
166
+ }
167
+ //# sourceMappingURL=toNexusAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toNexusAdapter.js","sourceRoot":"","sources":["../../src/adapters/toNexusAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { Config, CreateConnectorFn } from 'wagmi';
2
+ import type { CrossConnectKitConfig, WalletId } from '@nexus-cross/connect-kit-core';
3
+ import type { ConnectorEntry } from '../registry/ConnectorRegistry.js';
4
+ /**
5
+ * Identifies which SDK stack provides the `cross_wallet` connection.
6
+ *
7
+ * - `'to-nexus'` — @to-nexus/appkit-adapter-wagmi (CROSS relay server)
8
+ * - `'reown'` — standard wagmi walletConnect (Reown relay)
9
+ */
10
+ export type CrossWalletProviderKind = 'to-nexus' | 'reown';
11
+ /**
12
+ * Optional connector + registry entry pair passed into the adapter.
13
+ * Used by `createCrossxConfig` to contribute app-level connectors the
14
+ * adapter cannot produce itself — notably the embedded wallet.
15
+ */
16
+ export interface ExtraConnector {
17
+ readonly connector: CreateConnectorFn;
18
+ /**
19
+ * Registry entry for this connector, or `null` when the connector is
20
+ * transport-only (e.g. a standard WalletConnect relay that Binance /
21
+ * MetaMask Mobile fall back to — the user never sees it as its own
22
+ * wallet row, they just see "Binance Wallet" / "MetaMask").
23
+ */
24
+ readonly registryEntry: ConnectorEntry | null;
25
+ }
26
+ export interface BuildWagmiConfigInput {
27
+ readonly kitConfig: CrossConnectKitConfig;
28
+ readonly extraConnectors: readonly ExtraConnector[];
29
+ }
30
+ export interface BuildWagmiConfigOutput {
31
+ readonly wagmiConfig: Config;
32
+ /**
33
+ * Registry entries covering every wallet the DApp should be able to
34
+ * select — contributed connectors plus whatever the adapter's library
35
+ * adds internally (e.g. WagmiAdapter auto-adds crossExtension and
36
+ * walletConnect). Adapter maps wagmi connector.id → WalletId.
37
+ */
38
+ readonly registryEntries: readonly ConnectorEntry[];
39
+ }
40
+ export interface WalletConnectAdapterContext {
41
+ readonly kitConfig: CrossConnectKitConfig;
42
+ }
43
+ /**
44
+ * Pluggable owner of the wagmi `Config`. Each adapter integrates a
45
+ * specific `cross_wallet` library (CROSS relay via @to-nexus, or
46
+ * standard Reown relay) and produces the wagmi `Config` the kit's
47
+ * React provider will wrap. Because the adapter owns the config, state
48
+ * set by its library's native UI (AppKit modal, QR, etc.) is visible
49
+ * through the same wagmi hooks the DApp uses — no two-config split.
50
+ *
51
+ * Two built-in adapters ship as subpath imports:
52
+ * `@nexus-cross/connect-kit-wagmi/to-nexus` — default, posa-compatible
53
+ * `@nexus-cross/connect-kit-wagmi/reown` — fallback, no @to-nexus/* dependency
54
+ */
55
+ export interface WalletConnectAdapter {
56
+ readonly providerKind: CrossWalletProviderKind;
57
+ /**
58
+ * Construct the wagmi config for this adapter. Called once by
59
+ * `createCrossxConfig`. `extraConnectors` are app-level connectors
60
+ * (e.g. embedded CROSSx wallet) the kit provides — the adapter must
61
+ * include them in the resulting wagmi config.
62
+ */
63
+ buildWagmiConfig(input: BuildWagmiConfigInput): BuildWagmiConfigOutput;
64
+ /**
65
+ * Fire-and-forget hook invoked before wagmi's `connectAsync` for the
66
+ * given walletId. Use to open a library-native UI (AppKit QR modal,
67
+ * etc.) that listens for the connector's `display_uri` event.
68
+ *
69
+ * Return `'handled'` to skip wagmi connectAsync entirely, `'defer'`
70
+ * (or undefined) to proceed with the default flow.
71
+ */
72
+ beforeConnect?(ctx: WalletConnectAdapterContext, walletId: WalletId): 'handled' | 'defer' | void | Promise<'handled' | 'defer' | void>;
73
+ /**
74
+ * Optional disconnect-time teardown for SDK-level session state
75
+ * wagmi's own disconnect does not reach.
76
+ */
77
+ teardown?(ctx: WalletConnectAdapterContext): void | Promise<void>;
78
+ /**
79
+ * Subscribe to open/close events from the adapter's own modal (the
80
+ * library-native UI `beforeConnect` opens). Fires `true` when the
81
+ * modal becomes visible, `false` when it closes for any reason —
82
+ * including the user dismissing it without connecting. Returns an
83
+ * unsubscribe function.
84
+ *
85
+ * `CrossConnectKitProvider` uses this to detect user cancellation so it can
86
+ * clear `lastIntent`, force a clean wagmi disconnect (abort any
87
+ * dangling `connectAsync`), and reset the "Connecting…" UI.
88
+ */
89
+ subscribeModalState?(ctx: WalletConnectAdapterContext, callback: (open: boolean) => void): () => void;
90
+ /**
91
+ * Programmatically close the adapter's native modal. Invoked by
92
+ * `CrossConnectKitProvider` when wagmi reports a successful connection —
93
+ * AppKit's QR-only views (e.g. `ConnectingWalletConnectBasic`) do not
94
+ * always auto-dismiss once a session is established, so the kit asks
95
+ * the adapter to close explicitly.
96
+ */
97
+ closeModal?(ctx: WalletConnectAdapterContext): void;
98
+ }
99
+ /** WalletId handled by the walletConnect transport. */
100
+ export declare const ADAPTER_WALLET_ID: WalletId;
101
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC3C;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAE/C;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAAC;IAEvE;;;;;;;OAOG;IACH,aAAa,CAAC,CACZ,GAAG,EAAE,2BAA2B,EAChC,QAAQ,EAAE,QAAQ,GACjB,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAEpE;;;OAGG;IACH,QAAQ,CAAC,CAAC,GAAG,EAAE,2BAA2B,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,CAClB,GAAG,EAAE,2BAA2B,EAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAChC,MAAM,IAAI,CAAC;IAEd;;;;;;OAMG;IACH,UAAU,CAAC,CAAC,GAAG,EAAE,2BAA2B,GAAG,IAAI,CAAC;CACrD;AAED,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,EAAE,QAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** WalletId handled by the walletConnect transport. */
2
+ export const ADAPTER_WALLET_ID = 'cross_wallet';
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAoHA,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAa,cAAc,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { CrossConnectKitConfig, WalletId } from '@nexus-cross/connect-kit-core';
2
+ import type { Config, CreateConnectorFn } from 'wagmi';
3
+ import { type ConnectorRegistry, type ProviderKind } from '../registry/ConnectorRegistry.js';
4
+ import type { WalletConnectAdapter } from '../adapters/types.js';
5
+ /**
6
+ * Signature of the embedded-connector factory. Imported from the subpath
7
+ * `@nexus-cross/connect-kit-wagmi/embedded` so the core entry stays SSR-safe (the
8
+ * underlying crossy-sdk-js touches indexedDB at module load).
9
+ */
10
+ export type EmbeddedConnectorFactory = (kitConfig: CrossConnectKitConfig, openConnectOtherWallet?: () => void) => CreateConnectorFn | null;
11
+ export interface CreateCrossxConfigOptions extends CrossConnectKitConfig {
12
+ /**
13
+ * CROSSx-side adapter. Produces the wagmi `Config` that hosts
14
+ * `cross_embedded`, `cross_wallet`, `cross_extension`. Required
15
+ * unless `reownProvider` is set (a reown-only DApp is permitted).
16
+ *
17
+ * Import via `@nexus-cross/connect-kit-wagmi/to-nexus`.
18
+ */
19
+ readonly crossProvider?: WalletConnectAdapter;
20
+ /**
21
+ * Reown-side adapter. Produces the wagmi `Config` that hosts
22
+ * `metamask`, `binance`. Optional — internal DApps that do not depend
23
+ * on Reown simply skip this and get a cross-only kit.
24
+ *
25
+ * Import via `@nexus-cross/connect-kit-wagmi/reown`.
26
+ */
27
+ readonly reownProvider?: WalletConnectAdapter;
28
+ /**
29
+ * Factory for the embedded CROSSx wallet connector. Opt-in — import
30
+ * from `@nexus-cross/connect-kit-wagmi/embedded` in a client-only boundary.
31
+ * Attached to the cross-side config. Omit for SSR-only flows or
32
+ * reown-only DApps.
33
+ */
34
+ readonly embeddedConnectorFactory?: EmbeddedConnectorFactory;
35
+ /**
36
+ * Per-wallet "Required Settings" guide URLs shown in the connect
37
+ * modal. Keys are walletIds, values are absolute or relative URLs.
38
+ */
39
+ readonly walletGuides?: Partial<Record<WalletId, {
40
+ url: string;
41
+ label?: string;
42
+ }>>;
43
+ /**
44
+ * Which side to show on first load when nothing is cached. Defaults
45
+ * to whichever side is configured; when both are, defaults to
46
+ * `'cross'`.
47
+ */
48
+ readonly defaultProvider?: ProviderKind;
49
+ }
50
+ /**
51
+ * Dual wagmi config produced by `createCrossxConfig`. The React
52
+ * provider mounts exactly one `<WagmiProvider>` at a time — swapping
53
+ * between `crossWagmiConfig` and `reownWagmiConfig` via the
54
+ * `providerKind` of the wallet the user picks. Posa's proven pattern;
55
+ * each side keeps its own session, and the remount drops stale state
56
+ * cleanly when the user jumps between ecosystems.
57
+ */
58
+ export interface CrossxConfig {
59
+ readonly kitConfig: CrossConnectKitConfig;
60
+ readonly crossWagmiConfig: Config | null;
61
+ readonly reownWagmiConfig: Config | null;
62
+ readonly connectorRegistry: ConnectorRegistry;
63
+ readonly crossProvider: WalletConnectAdapter | null;
64
+ readonly reownProvider: WalletConnectAdapter | null;
65
+ /** Initial active side before any user interaction. */
66
+ readonly defaultProvider: ProviderKind;
67
+ /**
68
+ * Preferred localStorage key the React provider uses to persist the
69
+ * active provider across reloads. Exposed so DApps can clear it
70
+ * (e.g. during full sign-out flows).
71
+ */
72
+ readonly activeProviderStorageKey: string;
73
+ }
74
+ export declare function createCrossxConfig(options: CreateCrossxConfigOptions): CrossxConfig;
75
+ //# sourceMappingURL=createCrossxConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCrossxConfig.d.ts","sourceRoot":"","sources":["../../src/config/createCrossxConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,QAAQ,EACT,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,qBAAqB,EAChC,sBAAsB,CAAC,EAAE,MAAM,IAAI,KAChC,iBAAiB,GAAG,IAAI,CAAC;AAE9B,MAAM,WAAW,yBAA0B,SAAQ,qBAAqB;IACtE;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAE9C;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAE9C;;;;;OAKG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IAE7D;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAC7B,MAAM,CAAC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAClD,CAAC;IAEF;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,aAAa,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpD,uDAAuD;IACvD,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;CAC3C;AAID,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,GACjC,YAAY,CA0Fd"}
@@ -0,0 +1,77 @@
1
+ import { fireOpenOtherWallets } from '../events.js';
2
+ import { createConnectorRegistry, } from '../registry/ConnectorRegistry.js';
3
+ import { CROSSX_ICON } from '../wallets/icons.js';
4
+ const DEFAULT_ACTIVE_PROVIDER_KEY = 'crossx-kit:active-provider';
5
+ export function createCrossxConfig(options) {
6
+ const { crossProvider, reownProvider, embeddedConnectorFactory, walletGuides, defaultProvider: defaultProviderOpt, ...kitConfig } = options;
7
+ if (!crossProvider && !reownProvider) {
8
+ throw new Error('[crossx-kit] createCrossxConfig requires at least one of ' +
9
+ '`crossProvider` (from @nexus-cross/connect-kit-wagmi/to-nexus) or ' +
10
+ '`reownProvider` (from @nexus-cross/connect-kit-wagmi/reown).');
11
+ }
12
+ // --- Cross side -------------------------------------------------------
13
+ let crossWagmiConfig = null;
14
+ const crossRegistry = [];
15
+ if (crossProvider) {
16
+ const crossExtras = [];
17
+ // Embedded connector belongs exclusively to the cross side — it's
18
+ // CROSSx's own OAuth/social-login wallet and has no meaning on the
19
+ // reown side.
20
+ const embedded = embeddedConnectorFactory
21
+ ? embeddedConnectorFactory(kitConfig, fireOpenOtherWallets)
22
+ : null;
23
+ if (embedded) {
24
+ crossExtras.push({
25
+ connector: embedded,
26
+ registryEntry: {
27
+ walletId: 'cross_embedded',
28
+ providerKind: 'cross',
29
+ type: 'embedded',
30
+ connectorId: 'crossx',
31
+ name: 'CROSSx',
32
+ iconUrl: CROSSX_ICON,
33
+ },
34
+ });
35
+ }
36
+ const crossOut = crossProvider.buildWagmiConfig({
37
+ kitConfig,
38
+ extraConnectors: crossExtras,
39
+ });
40
+ crossWagmiConfig = crossOut.wagmiConfig;
41
+ crossRegistry.push(...crossOut.registryEntries);
42
+ }
43
+ // --- Reown side -------------------------------------------------------
44
+ let reownWagmiConfig = null;
45
+ const reownRegistry = [];
46
+ if (reownProvider) {
47
+ const reownOut = reownProvider.buildWagmiConfig({
48
+ kitConfig,
49
+ extraConnectors: [],
50
+ });
51
+ reownWagmiConfig = reownOut.wagmiConfig;
52
+ reownRegistry.push(...reownOut.registryEntries);
53
+ }
54
+ // --- Registry merge ---------------------------------------------------
55
+ // Order matches posa's ConnectWalletModal (CROSSx Wallet → Extension
56
+ // → MetaMask → Binance). Cross side first, Reown side after.
57
+ const rawEntries = [...crossRegistry, ...reownRegistry];
58
+ const decoratedEntries = walletGuides
59
+ ? rawEntries.map((e) => {
60
+ const guide = walletGuides[e.walletId];
61
+ return guide ? { ...e, guideUrl: guide.url, guideLabel: guide.label } : e;
62
+ })
63
+ : rawEntries;
64
+ const connectorRegistry = createConnectorRegistry(decoratedEntries);
65
+ const defaultProvider = defaultProviderOpt ?? (crossWagmiConfig ? 'cross' : 'reown');
66
+ return {
67
+ kitConfig,
68
+ crossWagmiConfig,
69
+ reownWagmiConfig,
70
+ connectorRegistry,
71
+ crossProvider: crossProvider ?? null,
72
+ reownProvider: reownProvider ?? null,
73
+ defaultProvider,
74
+ activeProviderStorageKey: DEFAULT_ACTIVE_PROVIDER_KEY,
75
+ };
76
+ }
77
+ //# sourceMappingURL=createCrossxConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCrossxConfig.js","sourceRoot":"","sources":["../../src/config/createCrossxConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { CreateConnectorFn } from 'wagmi';
2
+ import type { CrossConnectKitConfig, ThemeMode, ThemeTokens } from '@nexus-cross/connect-kit-core';
3
+ import { type SDKThemeTokensShape } from '../utils/theme.js';
4
+ export interface EmbeddedConnectorConfig {
5
+ projectId: string;
6
+ appName: string;
7
+ defaultChainId?: number;
8
+ openConnectOtherWallet?: () => void;
9
+ /** Forward to crossxConnector.theme ('light' | 'dark'). */
10
+ themeMode?: ThemeMode;
11
+ /**
12
+ * Explicit theme-token overrides for the embedded modal. When
13
+ * provided, wins over `inheritWalletInfoTheme`. Matches
14
+ * crossy-sdk's `SDKThemeTokens` shape 1:1.
15
+ */
16
+ themeTokens?: ThemeTokens | SDKThemeTokensShape;
17
+ /**
18
+ * When true (and `themeTokens` is not set), read `--wi-*` CSS
19
+ * variables on `:root` and forward matching values as `themeTokens`.
20
+ *
21
+ * Defaults to `false` when a kit-level theme is in play (the
22
+ * `CrossConnectKitProvider` already emits the `--cck-*` namespace the
23
+ * SDK's `themeTokens` will mirror). Set to `true` explicitly to
24
+ * opt-in on top of a DApp that only theme-overrides via `--wi-*`.
25
+ */
26
+ inheritWalletInfoTheme?: boolean;
27
+ }
28
+ export declare function createEmbeddedConnector(config: EmbeddedConnectorConfig): CreateConnectorFn;
29
+ export declare function createEmbeddedConnectorFromKitConfig(kitConfig: CrossConnectKitConfig, openConnectOtherWallet?: () => void): CreateConnectorFn | null;
30
+ //# sourceMappingURL=embeddedConnector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddedConnector.d.ts","sourceRoot":"","sources":["../../src/connectors/embeddedConnector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EACV,qBAAqB,EACrB,SAAS,EACT,WAAW,EACZ,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAAC;IAChD;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,iBAAiB,CAenB;AAED,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,qBAAqB,EAChC,sBAAsB,CAAC,EAAE,MAAM,IAAI,GAClC,iBAAiB,GAAG,IAAI,CAuB1B"}
@@ -0,0 +1,43 @@
1
+ import { crossxConnector } from '@nexus-cross/crossx-sdk-wagmi';
2
+ import { resolveThemeMode } from '@nexus-cross/connect-kit-core';
3
+ import { deriveSDKThemeTokensFromWalletInfo, } from '../utils/theme.js';
4
+ export function createEmbeddedConnector(config) {
5
+ const themeTokens = config.themeTokens ??
6
+ (config.inheritWalletInfoTheme
7
+ ? deriveSDKThemeTokensFromWalletInfo(config.themeMode ?? 'dark')
8
+ : undefined);
9
+ return crossxConnector({
10
+ projectId: config.projectId,
11
+ appName: config.appName,
12
+ defaultChainId: config.defaultChainId,
13
+ openConnectOtherWallet: config.openConnectOtherWallet,
14
+ ...(config.themeMode ? { theme: config.themeMode } : {}),
15
+ ...(themeTokens ? { themeTokens } : {}),
16
+ });
17
+ }
18
+ export function createEmbeddedConnectorFromKitConfig(kitConfig, openConnectOtherWallet) {
19
+ if (!kitConfig.crossProjectId)
20
+ return null;
21
+ // The crossxConnector factory eagerly touches indexedDB, which is absent
22
+ // on the server during Next.js SSR. Skip it there — the client boot re-
23
+ // creates the full connector list and wagmi reconciles via cookie state.
24
+ if (typeof window === 'undefined' || typeof indexedDB === 'undefined') {
25
+ return null;
26
+ }
27
+ const themeMode = resolveThemeMode(kitConfig.theme, kitConfig.autoDetectTheme);
28
+ return createEmbeddedConnector({
29
+ projectId: kitConfig.crossProjectId,
30
+ appName: kitConfig.appMetadata.name,
31
+ defaultChainId: kitConfig.defaultNetwork?.id ?? kitConfig.networks[0]?.id,
32
+ openConnectOtherWallet,
33
+ themeMode,
34
+ // When the DApp provides `themeTokens` on the kit config, prefer
35
+ // those values directly — they already capture the semantic palette
36
+ // the kit is using everywhere else. Otherwise fall back to reading
37
+ // `--wi-*` (legacy behavior) so older DApps that only customized
38
+ // WalletInfo still get a matching embedded modal.
39
+ themeTokens: kitConfig.themeTokens,
40
+ inheritWalletInfoTheme: !kitConfig.themeTokens,
41
+ });
42
+ }
43
+ //# sourceMappingURL=embeddedConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddedConnector.js","sourceRoot":"","sources":["../../src/connectors/embeddedConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAOhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,kCAAkC,GAEnC,MAAM,mBAAmB,CAAC;AA2B3B,MAAM,UAAU,uBAAuB,CACrC,MAA+B;IAE/B,MAAM,WAAW,GACf,MAAM,CAAC,WAAW;QAClB,CAAC,MAAM,CAAC,sBAAsB;YAC5B,CAAC,CAAC,kCAAkC,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;YAChE,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjB,OAAO,eAAe,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;QACrD,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,SAAgC,EAChC,sBAAmC;IAEnC,IAAI,CAAC,SAAS,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAC3C,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/E,OAAO,uBAAuB,CAAC;QAC7B,SAAS,EAAE,SAAS,CAAC,cAAc;QACnC,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI;QACnC,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;QACzE,sBAAsB;QACtB,SAAS;QACT,iEAAiE;QACjE,oEAAoE;QACpE,mEAAmE;QACnE,iEAAiE;QACjE,kDAAkD;QAClD,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,sBAAsB,EAAE,CAAC,SAAS,CAAC,WAAW;KAC/C,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CreateConnectorFn } from 'wagmi';
2
+ /**
3
+ * wagmi connector for CROSSx browser extension.
4
+ * Uses the injected connector with a target that probes window.crossWallet.
5
+ */
6
+ export declare function crossExtensionConnector(): CreateConnectorFn;
7
+ //# sourceMappingURL=extensionConnector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionConnector.d.ts","sourceRoot":"","sources":["../../src/connectors/extensionConnector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAuB/C;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAkC3D"}
@@ -0,0 +1,60 @@
1
+ import { injected } from 'wagmi/connectors';
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ function detectCrossExtensionProvider() {
4
+ if (typeof window === 'undefined')
5
+ return undefined;
6
+ const provider = window.crossWallet ?? window.cross;
7
+ if (!provider?.request)
8
+ return undefined;
9
+ const originalRequest = provider.request.bind(provider);
10
+ return new Proxy(provider, {
11
+ get(target, prop) {
12
+ if (prop === 'request') {
13
+ return async (args) => {
14
+ if (args.method === 'wallet_requestPermissions')
15
+ return [];
16
+ return originalRequest(args);
17
+ };
18
+ }
19
+ return target[prop];
20
+ },
21
+ });
22
+ }
23
+ /**
24
+ * wagmi connector for CROSSx browser extension.
25
+ * Uses the injected connector with a target that probes window.crossWallet.
26
+ */
27
+ export function crossExtensionConnector() {
28
+ return injected({
29
+ target() {
30
+ const provider = detectCrossExtensionProvider();
31
+ if (provider) {
32
+ return {
33
+ id: 'nexus.to.crosswallet.desktop',
34
+ name: 'CROSSx Extension',
35
+ provider,
36
+ };
37
+ }
38
+ return {
39
+ id: 'nexus.to.crosswallet.desktop',
40
+ name: 'CROSSx Extension',
41
+ provider: {
42
+ request: async (args) => {
43
+ const p = detectCrossExtensionProvider();
44
+ if (!p) {
45
+ throw new Error('CROSSx Extension is not installed. Please install it and refresh.');
46
+ }
47
+ return p.request(args);
48
+ },
49
+ on: (...args) => {
50
+ detectCrossExtensionProvider()?.on?.(...args);
51
+ },
52
+ removeListener: (...args) => {
53
+ detectCrossExtensionProvider()?.removeListener?.(...args);
54
+ },
55
+ },
56
+ };
57
+ },
58
+ });
59
+ }
60
+ //# sourceMappingURL=extensionConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionConnector.js","sourceRoot":"","sources":["../../src/connectors/extensionConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,uDAAuD;AAEvD,SAAS,4BAA4B;IACnC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,QAAQ,GAAI,MAAc,CAAC,WAAW,IAAK,MAAc,CAAC,KAAK,CAAC;IACtE,IAAI,CAAC,QAAQ,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IAEzC,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QACzB,GAAG,CAAC,MAAW,EAAE,IAAqB;YACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,KAAK,EAAE,IAA4C,EAAE,EAAE;oBAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,2BAA2B;wBAAE,OAAO,EAAE,CAAC;oBAC3D,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,QAAQ,CAAC;QACd,MAAM;YACJ,MAAM,QAAQ,GAAG,4BAA4B,EAAE,CAAC;YAChD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;oBACL,EAAE,EAAE,8BAA8B;oBAClC,IAAI,EAAE,kBAAkB;oBACxB,QAAQ;iBACT,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,8BAA8B;gBAClC,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE;oBACR,OAAO,EAAE,KAAK,EAAE,IAA4C,EAAE,EAAE;wBAC9D,MAAM,CAAC,GAAG,4BAA4B,EAAE,CAAC;wBACzC,IAAI,CAAC,CAAC,EAAE,CAAC;4BACP,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;wBACJ,CAAC;wBACD,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC;oBACD,EAAE,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;wBACrB,4BAA4B,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;oBAChD,CAAC;oBACD,cAAc,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;wBACjC,4BAA4B,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC5D,CAAC;iBACK;aACT,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { CreateConnectorFn } from 'wagmi';
2
+ import type { CrossConnectKitConfig } from '@nexus-cross/connect-kit-core';
3
+ export interface WalletConnectConfig {
4
+ projectId: string;
5
+ metadata?: {
6
+ name: string;
7
+ description?: string;
8
+ url: string;
9
+ icons?: string[];
10
+ };
11
+ showQrModal?: boolean;
12
+ }
13
+ /**
14
+ * Creates a WalletConnect connector for external wallets
15
+ * (MetaMask, Binance Wallet, etc. via QR/deep-link).
16
+ */
17
+ export declare function createWalletConnectConnector(config: WalletConnectConfig): CreateConnectorFn;
18
+ export declare function createWalletConnectFromKitConfig(kitConfig: CrossConnectKitConfig): CreateConnectorFn | null;
19
+ //# sourceMappingURL=walletConnectConnector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletConnectConnector.d.ts","sourceRoot":"","sources":["../../src/connectors/walletConnectConnector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,GAC1B,iBAAiB,CAanB;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,qBAAqB,GAC/B,iBAAiB,GAAG,IAAI,CAW1B"}