@fastxyz/fast-connector 0.1.0 → 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
@@ -23,7 +23,7 @@ This package owns:
23
23
  - adapter typing
24
24
  - dapp-facing connection state
25
25
  - a reusable app connector over `window.fastset`
26
- - optional provider-backed reads through `@fastxyz/sdk/browser`
26
+ - optional provider-backed reads through `@fastxyz/sdk`
27
27
  - high-level transaction helpers over injected wallet methods
28
28
 
29
29
  ## Status
@@ -55,8 +55,13 @@ const payment = await connector.transfer({
55
55
  amount: '0x32',
56
56
  });
57
57
  const explorerUrl = await connector.getExplorerUrl(payment.txHash);
58
+ const claim = await connector.submitClaim({
59
+ claimData: [1, 2, 3],
60
+ });
58
61
  ```
59
62
 
63
+ `submitClaim()` maps to Fast `ExternalClaim` submission and accepts only claim payload fields such as `claimData`, `verifierCommittee`, `verifierQuorum`, and `signatures`.
64
+
60
65
  You can also inject a custom read provider, or let the connector build one from the installed SDK:
61
66
 
62
67
  ```ts
@@ -113,3 +118,11 @@ npm install
113
118
  npm run build
114
119
  npm test
115
120
  ```
121
+
122
+ ## SDK Compatibility
123
+
124
+ `@fastxyz/fast-connector` now targets `@fastxyz/sdk@^1.0.1`.
125
+
126
+ - The connector no longer imports `@fastxyz/sdk/browser`
127
+ - Built-in provider reads are created from `new FastProvider({ rpcUrl })`
128
+ - Network and token metadata used by the connector are owned here, with optional overrides through `providerOptions`
@@ -0,0 +1,14 @@
1
+ import type { FastConnectorTransaction, FastConnectorTransactionCertificate } from './types.js';
2
+ type FastConnectorTokenTransferSummary = {
3
+ sender: string;
4
+ recipient: string;
5
+ tokenId: string;
6
+ amountHex: string;
7
+ amount?: string;
8
+ userData: string | null;
9
+ };
10
+ export declare function getCertificateTransaction(certificate: FastConnectorTransactionCertificate): FastConnectorTransaction;
11
+ export declare function getCertificateHash(certificate: FastConnectorTransactionCertificate): string;
12
+ export declare function getCertificateTokenTransfer(certificate: FastConnectorTransactionCertificate): FastConnectorTokenTransferSummary | null;
13
+ export {};
14
+ //# sourceMappingURL=certificate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificate.d.ts","sourceRoot":"","sources":["../src/certificate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAGV,wBAAwB,EACxB,mCAAmC,EAIpC,MAAM,YAAY,CAAC;AAEpB,KAAK,iCAAiC,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AA+PF,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,mCAAmC,GAC/C,wBAAwB,CAY1B;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,mCAAmC,GAAG,MAAM,CAY3F;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mCAAmC,GAC/C,iCAAiC,GAAG,IAAI,CAsB1C"}
@@ -0,0 +1,249 @@
1
+ import { bcs } from '@mysten/bcs';
2
+ import { keccak_256 } from '@noble/hashes/sha3';
3
+ import { FAST_DECIMALS, FAST_TOKEN_ID, amountHexToDecimal, bytesToHex, encodeFastAddress, tokenIdEquals, } from './sdk-compat.js';
4
+ const AmountBcs = bcs.u256().transform({
5
+ input: (value) => BigInt(`0x${value}`).toString(),
6
+ });
7
+ const CurrentTokenTransferBcs = bcs.struct('CurrentTokenTransfer', {
8
+ token_id: bcs.bytes(32),
9
+ recipient: bcs.bytes(32),
10
+ amount: AmountBcs,
11
+ user_data: bcs.option(bcs.bytes(32)),
12
+ });
13
+ const LegacyTokenTransferBcs = bcs.struct('LegacyTokenTransfer', {
14
+ token_id: bcs.bytes(32),
15
+ amount: AmountBcs,
16
+ user_data: bcs.option(bcs.bytes(32)),
17
+ });
18
+ const TokenCreationBcs = bcs.struct('SharedTokenCreation', {
19
+ token_name: bcs.string(),
20
+ decimals: bcs.u8(),
21
+ initial_amount: AmountBcs,
22
+ mints: bcs.vector(bcs.bytes(32)),
23
+ user_data: bcs.option(bcs.bytes(32)),
24
+ });
25
+ const AddressChangeBcs = bcs.enum('SharedAddressChange', {
26
+ Add: bcs.tuple([]),
27
+ Remove: bcs.tuple([]),
28
+ });
29
+ const TokenManagementBcs = bcs.struct('SharedTokenManagement', {
30
+ token_id: bcs.bytes(32),
31
+ update_id: bcs.u64(),
32
+ new_admin: bcs.option(bcs.bytes(32)),
33
+ mints: bcs.vector(bcs.tuple([AddressChangeBcs, bcs.bytes(32)])),
34
+ user_data: bcs.option(bcs.bytes(32)),
35
+ });
36
+ const CurrentMintBcs = bcs.struct('CurrentMint', {
37
+ token_id: bcs.bytes(32),
38
+ recipient: bcs.bytes(32),
39
+ amount: AmountBcs,
40
+ });
41
+ const LegacyMintBcs = bcs.struct('LegacyMint', {
42
+ token_id: bcs.bytes(32),
43
+ amount: AmountBcs,
44
+ });
45
+ const BurnBcs = bcs.struct('SharedBurn', {
46
+ token_id: bcs.bytes(32),
47
+ amount: AmountBcs,
48
+ });
49
+ const ExternalClaimBodyBcs = bcs.struct('SharedExternalClaimBody', {
50
+ verifier_committee: bcs.vector(bcs.bytes(32)),
51
+ verifier_quorum: bcs.u64(),
52
+ claim_data: bcs.vector(bcs.u8()),
53
+ });
54
+ const ExternalClaimFullBcs = bcs.struct('SharedExternalClaimFull', {
55
+ claim: ExternalClaimBodyBcs,
56
+ signatures: bcs.vector(bcs.tuple([bcs.bytes(32), bcs.bytes(64)])),
57
+ });
58
+ const LegacyClaimTypeBcs = bcs.enum('LegacyClaimType', {
59
+ TokenTransfer: LegacyTokenTransferBcs,
60
+ TokenCreation: TokenCreationBcs,
61
+ TokenManagement: TokenManagementBcs,
62
+ Mint: LegacyMintBcs,
63
+ Burn: BurnBcs,
64
+ StateInitialization: bcs.struct('LegacyStateInitialization', { dummy: bcs.u8() }),
65
+ StateUpdate: bcs.struct('LegacyStateUpdate', { dummy: bcs.u8() }),
66
+ ExternalClaim: ExternalClaimFullBcs,
67
+ StateReset: bcs.struct('LegacyStateReset', { dummy: bcs.u8() }),
68
+ JoinCommittee: bcs.struct('LegacyJoinCommittee', { dummy: bcs.u8() }),
69
+ LeaveCommittee: bcs.struct('LegacyLeaveCommittee', { dummy: bcs.u8() }),
70
+ ChangeCommittee: bcs.struct('LegacyChangeCommittee', { dummy: bcs.u8() }),
71
+ Batch: bcs.vector(bcs.enum('LegacyOperation', {
72
+ TokenTransfer: bcs.struct('LegacyTokenTransferOperation', {
73
+ token_id: bcs.bytes(32),
74
+ recipient: bcs.bytes(32),
75
+ amount: AmountBcs,
76
+ user_data: bcs.option(bcs.bytes(32)),
77
+ }),
78
+ TokenCreation: TokenCreationBcs,
79
+ TokenManagement: TokenManagementBcs,
80
+ Mint: bcs.struct('LegacyMintOperation', {
81
+ token_id: bcs.bytes(32),
82
+ recipient: bcs.bytes(32),
83
+ amount: AmountBcs,
84
+ }),
85
+ })),
86
+ });
87
+ const CurrentClaimTypeBcs = bcs.enum('CurrentClaimType', {
88
+ TokenTransfer: CurrentTokenTransferBcs,
89
+ TokenCreation: TokenCreationBcs,
90
+ TokenManagement: TokenManagementBcs,
91
+ Mint: CurrentMintBcs,
92
+ Burn: BurnBcs,
93
+ StateInitialization: bcs.struct('CurrentStateInitialization', { dummy: bcs.u8() }),
94
+ StateUpdate: bcs.struct('CurrentStateUpdate', { dummy: bcs.u8() }),
95
+ ExternalClaim: ExternalClaimFullBcs,
96
+ StateReset: bcs.struct('CurrentStateReset', { dummy: bcs.u8() }),
97
+ JoinCommittee: bcs.struct('CurrentJoinCommittee', { dummy: bcs.u8() }),
98
+ LeaveCommittee: bcs.struct('CurrentLeaveCommittee', { dummy: bcs.u8() }),
99
+ ChangeCommittee: bcs.struct('CurrentChangeCommittee', { dummy: bcs.u8() }),
100
+ Batch: bcs.vector(bcs.enum('CurrentOperation', {
101
+ TokenTransfer: CurrentTokenTransferBcs,
102
+ TokenCreation: TokenCreationBcs,
103
+ TokenManagement: TokenManagementBcs,
104
+ Mint: CurrentMintBcs,
105
+ })),
106
+ });
107
+ const LegacyTransactionBcs = bcs.struct('LegacyTransaction', {
108
+ sender: bcs.bytes(32),
109
+ recipient: bcs.bytes(32),
110
+ nonce: bcs.u64(),
111
+ timestamp_nanos: bcs.u128(),
112
+ claim: LegacyClaimTypeBcs,
113
+ archival: bcs.bool(),
114
+ });
115
+ const CurrentTransactionBcs = bcs.struct('CurrentTransaction', {
116
+ network_id: bcs.string(),
117
+ sender: bcs.bytes(32),
118
+ nonce: bcs.u64(),
119
+ timestamp_nanos: bcs.u128(),
120
+ claim: CurrentClaimTypeBcs,
121
+ archival: bcs.bool(),
122
+ fee_token: bcs.option(bcs.bytes(32)),
123
+ });
124
+ const VersionedTransactionBcs = bcs.enum('VersionedTransaction', {
125
+ Release20260319: CurrentTransactionBcs,
126
+ });
127
+ const LEGACY_RELEASE_20260303_VARIANT_INDEX = 1;
128
+ function isRecord(value) {
129
+ return Boolean(value && typeof value === 'object');
130
+ }
131
+ function getCurrentTransaction(transaction) {
132
+ if (isRecord(transaction) && 'Release20260319' in transaction) {
133
+ return transaction.Release20260319;
134
+ }
135
+ if (isRecord(transaction)) {
136
+ const candidate = transaction;
137
+ if (!('Release20260303' in candidate)
138
+ && !('Release20260319' in candidate)
139
+ && typeof candidate.network_id === 'string'
140
+ && 'sender' in candidate
141
+ && 'nonce' in candidate
142
+ && 'timestamp_nanos' in candidate
143
+ && 'claim' in candidate
144
+ && 'archival' in candidate
145
+ && 'fee_token' in candidate) {
146
+ return transaction;
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ function getLegacyTransaction(transaction) {
152
+ if (isRecord(transaction) && 'Release20260303' in transaction) {
153
+ return transaction.Release20260303;
154
+ }
155
+ if (isRecord(transaction)) {
156
+ const candidate = transaction;
157
+ if (!('Release20260303' in candidate)
158
+ && !('Release20260319' in candidate)
159
+ && !('network_id' in candidate)
160
+ && 'sender' in candidate
161
+ && 'recipient' in candidate
162
+ && 'nonce' in candidate
163
+ && 'timestamp_nanos' in candidate
164
+ && 'claim' in candidate
165
+ && 'archival' in candidate) {
166
+ return transaction;
167
+ }
168
+ }
169
+ return null;
170
+ }
171
+ function hashCurrentTransaction(transaction) {
172
+ const serialized = VersionedTransactionBcs.serialize({
173
+ Release20260319: transaction,
174
+ }).toBytes();
175
+ return bytesToHex(keccak_256(serialized));
176
+ }
177
+ function serializeLegacyVersionedTransaction(transaction) {
178
+ const innerBytes = LegacyTransactionBcs.serialize(transaction).toBytes();
179
+ const versioned = new Uint8Array(1 + innerBytes.length);
180
+ versioned[0] = LEGACY_RELEASE_20260303_VARIANT_INDEX;
181
+ versioned.set(innerBytes, 1);
182
+ return versioned;
183
+ }
184
+ function hashLegacyTransaction(transaction) {
185
+ return bytesToHex(keccak_256(serializeLegacyVersionedTransaction(transaction)));
186
+ }
187
+ function isLegacyTokenTransferClaim(value) {
188
+ return isRecord(value) && 'token_id' in value && 'amount' in value;
189
+ }
190
+ function isCurrentTokenTransferClaim(value) {
191
+ return isLegacyTokenTransferClaim(value) && 'recipient' in value;
192
+ }
193
+ function summarizeTokenTransfer(sender, recipient, transfer) {
194
+ const tokenIdBytes = new Uint8Array(Array.from(transfer.token_id));
195
+ const native = tokenIdEquals(tokenIdBytes, FAST_TOKEN_ID);
196
+ const decimals = native ? FAST_DECIMALS : undefined;
197
+ return {
198
+ sender: encodeFastAddress(new Uint8Array(Array.from(sender))),
199
+ recipient: encodeFastAddress(new Uint8Array(Array.from(recipient))),
200
+ tokenId: native ? 'native' : bytesToHex(tokenIdBytes),
201
+ amountHex: `0x${transfer.amount}`,
202
+ amount: decimals === undefined ? undefined : amountHexToDecimal(transfer.amount, decimals),
203
+ userData: transfer.user_data
204
+ ? bytesToHex(new Uint8Array(Array.from(transfer.user_data)))
205
+ : null,
206
+ };
207
+ }
208
+ export function getCertificateTransaction(certificate) {
209
+ const current = getCurrentTransaction(certificate.envelope.transaction);
210
+ if (current) {
211
+ return current;
212
+ }
213
+ const legacy = getLegacyTransaction(certificate.envelope.transaction);
214
+ if (legacy) {
215
+ return legacy;
216
+ }
217
+ throw new TypeError('Invalid Fast transaction certificate.');
218
+ }
219
+ export function getCertificateHash(certificate) {
220
+ const current = getCurrentTransaction(certificate.envelope.transaction);
221
+ if (current) {
222
+ return hashCurrentTransaction(current);
223
+ }
224
+ const legacy = getLegacyTransaction(certificate.envelope.transaction);
225
+ if (legacy) {
226
+ return hashLegacyTransaction(legacy);
227
+ }
228
+ throw new TypeError('Invalid Fast transaction certificate.');
229
+ }
230
+ export function getCertificateTokenTransfer(certificate) {
231
+ const current = getCurrentTransaction(certificate.envelope.transaction);
232
+ if (current) {
233
+ const transfer = current.claim.TokenTransfer;
234
+ if (!transfer || !isCurrentTokenTransferClaim(transfer)) {
235
+ return null;
236
+ }
237
+ return summarizeTokenTransfer(current.sender, transfer.recipient, transfer);
238
+ }
239
+ const legacy = getLegacyTransaction(certificate.envelope.transaction);
240
+ if (legacy) {
241
+ const transfer = legacy.claim.TokenTransfer;
242
+ if (!transfer || !isLegacyTokenTransferClaim(transfer)) {
243
+ return null;
244
+ }
245
+ return summarizeTokenTransfer(legacy.sender, legacy.recipient, transfer);
246
+ }
247
+ throw new TypeError('Invalid Fast transaction certificate.');
248
+ }
249
+ //# sourceMappingURL=certificate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificate.js","sourceRoot":"","sources":["../src/certificate.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { FastConnectorAccount, FastConnectorAdapter, FastConnectorConnectOptions, FastConnectorOptions, FastConnectorSubmitClaimParams, FastConnectorSubmitClaimResult, FastConnectorTransferParams, FastConnectorTransferResult } from './types.js';
1
+ import type { FastConnectorAccount, FastConnectorAdapter, FastConnectorConnectOptions, FastConnectorOptions, FastConnectorSubmitClaimParams, FastConnectorSubmitClaimResult, FastConnectorTransactionCertificate, FastConnectorTransferParams, FastConnectorTransferResult } from './types.js';
2
2
  export declare function getInjectedFastConnector(): FastConnectorAdapter | undefined;
3
3
  export declare function waitForInjectedFastConnector(timeoutMs?: number): Promise<FastConnectorAdapter | undefined>;
4
4
  export declare class FastConnector {
@@ -6,6 +6,11 @@ export declare class FastConnector {
6
6
  private readonly customProvider?;
7
7
  private provider?;
8
8
  private providerNetworkKey?;
9
+ private resolvedWalletNetwork?;
10
+ private pendingWalletNetworkSync?;
11
+ private pendingAdapterNetworkResolution?;
12
+ private walletNetworkStateVersion;
13
+ private walletNetworkSyncSequence;
9
14
  private readonly providerOptions?;
10
15
  private accounts;
11
16
  private locallyDisconnected;
@@ -18,7 +23,9 @@ export declare class FastConnector {
18
23
  isConnected(): boolean;
19
24
  getAccounts(): Promise<FastConnectorAccount[]>;
20
25
  getActiveNetwork(): Promise<string>;
26
+ switchNetwork(network: string): Promise<string>;
21
27
  onAccountChanged(callback: (account: FastConnectorAccount) => void): () => void;
28
+ onNetworkChanged(callback: (network: string) => void): () => void;
22
29
  exportKeys(): Promise<FastConnectorAccount>;
23
30
  sign(params: {
24
31
  message: string | Uint8Array;
@@ -33,9 +40,9 @@ export declare class FastConnector {
33
40
  amount: string;
34
41
  token: string;
35
42
  }>;
36
- getTokens(): Promise<import("@fastxyz/sdk/core").TokenBalance[]>;
37
- getTokenInfo(token: string): Promise<import("@fastxyz/sdk/core").TokenInfo | null>;
38
- getCertificateByNonce(nonce: number): Promise<import("@fastxyz/sdk/core").FastTransactionCertificate | null>;
43
+ getTokens(): Promise<import("./types.js").FastConnectorTokenBalance[]>;
44
+ getTokenInfo(token: string): Promise<import("./types.js").FastConnectorTokenInfo | null>;
45
+ getCertificateByNonce(nonce: number): Promise<FastConnectorTransactionCertificate | null>;
39
46
  getExplorerUrl(txHash?: string): Promise<string | null>;
40
47
  private captureTransactionFreshness;
41
48
  private assertFreshTransaction;
@@ -44,5 +51,10 @@ export declare class FastConnector {
44
51
  private resolveTransferTokenId;
45
52
  private resolveProviderNetwork;
46
53
  private requireProvider;
54
+ private startWalletNetworkSync;
55
+ private syncResolvedWalletNetwork;
56
+ private resetResolvedWalletNetwork;
57
+ private nextWalletNetworkSyncSequence;
58
+ private isActiveWalletNetworkSync;
47
59
  }
48
60
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAE3B,oBAAoB,EAGpB,8BAA8B,EAC9B,8BAA8B,EAE9B,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAgTpB,wBAAgB,wBAAwB,IAAI,oBAAoB,GAAG,SAAS,CAE3E;AAED,wBAAsB,4BAA4B,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAyB9G;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA4B;IAC5D,OAAO,CAAC,QAAQ,CAAC,CAA4B;IAC7C,OAAO,CAAC,kBAAkB,CAAC,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAA+B;IAChE,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO;IAOP,MAAM,CAAC,YAAY,CACjB,QAAQ,GAAE,oBAAoB,GAAG,SAAsC,EACvE,OAAO,CAAC,EAAE,oBAAoB,GAC7B,aAAa;IAQV,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAM3B;IAEK,OAAO,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAchE,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IASpC,WAAW,IAAI,OAAO;IAWhB,WAAW,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAgB9C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAQzC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,IAAI;IA2BzE,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAQ3C,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5D,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IAmBI,QAAQ,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAsDnF,WAAW,CAAC,MAAM,EAAE,8BAA8B,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAoE5F,UAAU,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAKtE,SAAS;IAKT,YAAY,CAAC,KAAK,EAAE,MAAM;IAI1B,qBAAqB,CAAC,KAAK,EAAE,MAAM;IAKnC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAI/C,2BAA2B;IAsBzC,OAAO,CAAC,sBAAsB;YAgBhB,kBAAkB;YAQlB,cAAc;YAiBd,sBAAsB;YAyCtB,sBAAsB;YAqCtB,eAAe;CAmB9B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,6 +1,8 @@
1
- import { bytesToHex, decodeFastAddress, encodeFastAddress, FAST_TOKEN_ID, FastError, getCertificateHash, getCertificateTransaction, getCertificateTokenTransfer, hexToBytes, hexToTokenId, tokenIdEquals, } from '@fastxyz/sdk/core';
1
+ import { bytesToHex, decodeFastAddress, encodeFastAddress, FAST_TOKEN_ID, hexToBytes, hexToTokenId, tokenIdEquals, } from './sdk-compat.js';
2
+ import { getCertificateHash, getCertificateTokenTransfer, getCertificateTransaction, } from './certificate.js';
3
+ import { FastError } from './errors.js';
4
+ import { createFastConnectorProvider, getDefaultProviderNetwork, getSupportedProviderNetwork, validateExplicitProviderNetwork, } from './provider.js';
2
5
  const DEFAULT_PERMISSIONS = ['viewAccount', 'suggestTransactions'];
3
- let browserSdkPromise;
4
6
  function getBrowserWindow() {
5
7
  return typeof window === 'undefined' ? undefined : window;
6
8
  }
@@ -24,7 +26,7 @@ function missingConnectedAccount() {
24
26
  }
25
27
  function networkNotConfigured(network) {
26
28
  return new FastError('NETWORK_NOT_CONFIGURED', `Fast network "${network}" is not configured.`, {
27
- note: 'Use a known SDK network name or provide matching metadata in providerOptions.networks.',
29
+ note: 'Use a known connector network name or provide matching metadata in providerOptions.networks.',
28
30
  });
29
31
  }
30
32
  function unsupportedAdapterOperation(method) {
@@ -106,22 +108,8 @@ function normalizeAccount(account) {
106
108
  publicKey,
107
109
  };
108
110
  }
109
- async function loadBrowserSdk() {
110
- browserSdkPromise ??= import('@fastxyz/sdk/browser');
111
- return await browserSdkPromise;
112
- }
113
- async function loadFastProviderConstructor() {
114
- const imported = await loadBrowserSdk();
115
- if (typeof imported.FastProvider === 'function') {
116
- return imported.FastProvider;
117
- }
118
- throw new Error('Fast provider support requires an installed @fastxyz/sdk@>=0.1.8 package with FastProvider exports at @fastxyz/sdk/browser.');
119
- }
120
111
  async function isSupportedProviderNetwork(network, providerOptions) {
121
- if (providerOptions?.networks?.[network]) {
122
- return true;
123
- }
124
- return (await (await loadBrowserSdk()).getNetworkInfo(network)) !== null;
112
+ return getSupportedProviderNetwork(network, providerOptions) !== undefined;
125
113
  }
126
114
  async function normalizeSupportedProviderNetwork(network, providerOptions) {
127
115
  if (typeof network !== 'string') {
@@ -239,6 +227,11 @@ export class FastConnector {
239
227
  customProvider;
240
228
  provider;
241
229
  providerNetworkKey;
230
+ resolvedWalletNetwork;
231
+ pendingWalletNetworkSync;
232
+ pendingAdapterNetworkResolution;
233
+ walletNetworkStateVersion = 0;
234
+ walletNetworkSyncSequence = 0;
242
235
  providerOptions;
243
236
  accounts = [];
244
237
  locallyDisconnected = false;
@@ -271,12 +264,14 @@ export class FastConnector {
271
264
  return false;
272
265
  }
273
266
  this.locallyDisconnected = false;
267
+ this.resetResolvedWalletNetwork();
274
268
  await this.getAccounts();
275
269
  return true;
276
270
  }
277
271
  async disconnect() {
278
272
  this.accounts = [];
279
273
  this.locallyDisconnected = true;
274
+ this.resetResolvedWalletNetwork();
280
275
  if (!this.adapter.disconnect) {
281
276
  return true;
282
277
  }
@@ -311,6 +306,20 @@ export class FastConnector {
311
306
  }
312
307
  return await this.adapter.getActiveNetwork();
313
308
  }
309
+ async switchNetwork(network) {
310
+ if (!this.adapter.switchNetwork) {
311
+ throw new Error('Injected Fast wallet does not expose switchNetwork().');
312
+ }
313
+ const targetNetwork = network.trim();
314
+ if (!targetNetwork) {
315
+ throw new TypeError('Pass a non-empty network string when calling switchNetwork().');
316
+ }
317
+ const version = this.walletNetworkStateVersion;
318
+ const syncSequence = this.nextWalletNetworkSyncSequence();
319
+ const switchedNetwork = await this.adapter.switchNetwork(targetNetwork);
320
+ await this.startWalletNetworkSync(switchedNetwork, version, syncSequence);
321
+ return switchedNetwork;
322
+ }
314
323
  onAccountChanged(callback) {
315
324
  if (!this.adapter.onAccountChanged) {
316
325
  return () => { };
@@ -334,6 +343,18 @@ export class FastConnector {
334
343
  callback(normalized);
335
344
  });
336
345
  }
346
+ onNetworkChanged(callback) {
347
+ if (!this.adapter.onNetworkChanged) {
348
+ return () => { };
349
+ }
350
+ return this.adapter.onNetworkChanged((network) => {
351
+ if (this.locallyDisconnected) {
352
+ return;
353
+ }
354
+ this.startWalletNetworkSync(network);
355
+ callback(network);
356
+ });
357
+ }
337
358
  async exportKeys() {
338
359
  const account = await this.requireAccount();
339
360
  return {
@@ -407,7 +428,6 @@ export class FastConnector {
407
428
  throw unsupportedAdapterOperation('submitClaim');
408
429
  }
409
430
  const account = await this.requireAccount();
410
- const recipient = normalizeConnectorAddress(params.recipient, 'claim recipient');
411
431
  if (!Array.isArray(params.claimData)) {
412
432
  throw invalidConnectorParams('FastConnector claimData must be an array of bytes.', 'Pass submitClaim({ claimData: number[] }) with numeric byte values.');
413
433
  }
@@ -415,7 +435,6 @@ export class FastConnector {
415
435
  let certificate;
416
436
  try {
417
437
  certificate = normalizeTransactionCertificate(await this.adapter.submitClaim({
418
- recipient,
419
438
  claimData: [...params.claimData],
420
439
  account,
421
440
  verifierCommittee: params.verifierCommittee,
@@ -435,9 +454,7 @@ export class FastConnector {
435
454
  const transaction = getCertificateTransaction(certificate);
436
455
  const externalClaim = transaction.claim.ExternalClaim;
437
456
  const sender = encodeFastAddress(new Uint8Array(transaction.sender));
438
- const transactionRecipient = encodeFastAddress(new Uint8Array(transaction.recipient));
439
457
  if (sender !== account.address
440
- || transactionRecipient !== recipient
441
458
  || normalizeByteSequence(externalClaim.claim.claim_data) !== normalizeByteSequence(params.claimData)
442
459
  || (params.verifierCommittee !== undefined
443
460
  && !arraysEqual(normalizeByteSequenceList(externalClaim.claim.verifier_committee), normalizeByteSequenceList(params.verifierCommittee)))
@@ -535,7 +552,7 @@ export class FastConnector {
535
552
  }
536
553
  const known = (await provider.resolveKnownToken?.(normalizedToken))
537
554
  ?? getConfiguredKnownToken(normalizedToken, this.providerOptions)
538
- ?? await (await loadBrowserSdk()).resolveKnownFastToken(normalizedToken, provider.network);
555
+ ?? null;
539
556
  if (!known) {
540
557
  throw new FastError('TOKEN_NOT_FOUND', `Token "${normalizedToken}" not found on ${provider.network}`, {
541
558
  note: 'Use FAST, a token symbol configured for the selected network, or a valid hex token ID.',
@@ -547,45 +564,84 @@ export class FastConnector {
547
564
  }
548
565
  async resolveProviderNetwork() {
549
566
  if (this.providerOptions?.network !== undefined) {
550
- const explicitNetwork = this.providerOptions.network.trim();
551
- if (this.providerOptions.rpcUrl) {
552
- if (explicitNetwork.length === 0) {
553
- throw networkNotConfigured(this.providerOptions.network);
554
- }
555
- return explicitNetwork;
556
- }
557
- const configuredNetwork = await normalizeSupportedProviderNetwork(this.providerOptions.network, this.providerOptions);
558
- if (!configuredNetwork) {
559
- throw networkNotConfigured(this.providerOptions.network);
560
- }
561
- return configuredNetwork;
567
+ return validateExplicitProviderNetwork(this.providerOptions.network, this.providerOptions);
562
568
  }
563
- if (!this.adapter.getActiveNetwork) {
564
- return undefined;
565
- }
566
- try {
567
- return await normalizeSupportedProviderNetwork(await this.adapter.getActiveNetwork(), this.providerOptions);
569
+ await this.pendingWalletNetworkSync;
570
+ if (this.resolvedWalletNetwork !== undefined) {
571
+ return this.resolvedWalletNetwork ?? undefined;
568
572
  }
569
- catch {
570
- return undefined;
573
+ if (!this.adapter.getActiveNetwork) {
574
+ return getDefaultProviderNetwork(this.providerOptions);
575
+ }
576
+ const getActiveNetwork = this.adapter.getActiveNetwork;
577
+ if (!this.pendingAdapterNetworkResolution) {
578
+ let pendingResolution;
579
+ pendingResolution = (async () => {
580
+ try {
581
+ return await normalizeSupportedProviderNetwork(await getActiveNetwork(), this.providerOptions) ?? getDefaultProviderNetwork(this.providerOptions);
582
+ }
583
+ catch {
584
+ return getDefaultProviderNetwork(this.providerOptions);
585
+ }
586
+ finally {
587
+ if (this.pendingAdapterNetworkResolution === pendingResolution) {
588
+ this.pendingAdapterNetworkResolution = undefined;
589
+ }
590
+ }
591
+ })();
592
+ this.pendingAdapterNetworkResolution = pendingResolution;
571
593
  }
594
+ return await this.pendingAdapterNetworkResolution;
572
595
  }
573
596
  async requireProvider() {
574
597
  if (this.customProvider) {
575
598
  return this.customProvider;
576
599
  }
577
600
  const providerNetwork = await this.resolveProviderNetwork();
578
- const providerNetworkKey = providerNetwork ?? null;
601
+ const providerNetworkKey = providerNetwork ?? getDefaultProviderNetwork(this.providerOptions);
579
602
  if (this.provider && this.providerNetworkKey === providerNetworkKey) {
580
603
  return this.provider;
581
604
  }
582
- const Provider = await loadFastProviderConstructor();
583
- this.provider = new Provider({
605
+ this.provider = createFastConnectorProvider(providerNetworkKey, {
584
606
  ...this.providerOptions,
585
- ...(providerNetwork === undefined ? {} : { network: providerNetwork }),
607
+ network: providerNetworkKey,
586
608
  });
587
609
  this.providerNetworkKey = providerNetworkKey;
588
610
  return this.provider;
589
611
  }
612
+ startWalletNetworkSync(network, version = this.walletNetworkStateVersion, syncSequence = this.nextWalletNetworkSyncSequence()) {
613
+ const pendingSync = this.syncResolvedWalletNetwork(network, version, syncSequence);
614
+ const trackedSync = pendingSync.finally(() => {
615
+ if (this.pendingWalletNetworkSync === trackedSync) {
616
+ this.pendingWalletNetworkSync = undefined;
617
+ }
618
+ });
619
+ this.pendingWalletNetworkSync = trackedSync;
620
+ return trackedSync;
621
+ }
622
+ async syncResolvedWalletNetwork(network, version, syncSequence) {
623
+ if (this.providerOptions?.network !== undefined) {
624
+ return;
625
+ }
626
+ const normalizedNetwork = await normalizeSupportedProviderNetwork(network, this.providerOptions);
627
+ if (!this.isActiveWalletNetworkSync(version, syncSequence)) {
628
+ return;
629
+ }
630
+ this.resolvedWalletNetwork = normalizedNetwork ?? null;
631
+ }
632
+ resetResolvedWalletNetwork() {
633
+ this.walletNetworkStateVersion += 1;
634
+ this.walletNetworkSyncSequence = 0;
635
+ this.resolvedWalletNetwork = undefined;
636
+ this.pendingWalletNetworkSync = undefined;
637
+ this.pendingAdapterNetworkResolution = undefined;
638
+ }
639
+ nextWalletNetworkSyncSequence() {
640
+ this.walletNetworkSyncSequence += 1;
641
+ return this.walletNetworkSyncSequence;
642
+ }
643
+ isActiveWalletNetworkSync(version, syncSequence) {
644
+ return version === this.walletNetworkStateVersion && syncSequence === this.walletNetworkSyncSequence;
645
+ }
590
646
  }
591
647
  //# sourceMappingURL=client.js.map