@phantom/embedded-provider-core 0.1.9 → 1.0.0-beta.0

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/index.d.mts CHANGED
@@ -2,6 +2,7 @@ import { StamperWithKeyManagement } from '@phantom/sdk-types';
2
2
  import { AddressType } from '@phantom/client';
3
3
  import { NetworkId } from '@phantom/constants';
4
4
  import { ParsedSignatureResult, ParsedTransactionResult } from '@phantom/parsers';
5
+ import { ISolanaChain, IEthereumChain, EthTransactionRequest } from '@phantom/chains';
5
6
 
6
7
  interface Keypair {
7
8
  publicKey: string;
@@ -28,6 +29,7 @@ interface Session {
28
29
  authenticatorExpiresAt: number;
29
30
  lastRenewalAttempt?: number;
30
31
  username: string;
32
+ accountDerivationIndex?: number;
31
33
  }
32
34
  interface EmbeddedStorage {
33
35
  getSession(): Promise<Session | null>;
@@ -59,6 +61,7 @@ interface AuthResult {
59
61
  walletId: string;
60
62
  provider?: string;
61
63
  userInfo?: Record<string, any>;
64
+ accountDerivationIndex?: number;
62
65
  }
63
66
  interface PhantomConnectOptions {
64
67
  organizationId: string;
@@ -152,6 +155,8 @@ declare class EmbeddedProvider {
152
155
  private walletId;
153
156
  private addresses;
154
157
  private jwtAuth;
158
+ readonly solana: ISolanaChain;
159
+ readonly ethereum: IEthereumChain;
155
160
  private eventListeners;
156
161
  constructor(config: EmbeddedProviderConfig, platform: PlatformAdapter, logger: DebugLogger);
157
162
  on(event: EmbeddedProviderEvent, callback: EventCallback): void;
@@ -187,6 +192,50 @@ declare function generateSessionId(): string;
187
192
 
188
193
  declare function retryWithBackoff<T>(operation: () => Promise<T>, operationName: string, logger: DebugLogger, maxRetries?: number, baseDelay?: number): Promise<T>;
189
194
 
195
+ /**
196
+ * Embedded Solana chain implementation for React Native and web embedded providers
197
+ */
198
+ declare class EmbeddedSolanaChain implements ISolanaChain {
199
+ private provider;
200
+ private currentNetworkId;
201
+ constructor(provider: EmbeddedProvider);
202
+ private ensureConnected;
203
+ signMessage(message: string): Promise<ParsedSignatureResult>;
204
+ signTransaction<T>(_transaction: T): Promise<T>;
205
+ signAndSendTransaction<T>(transaction: T): Promise<ParsedTransactionResult>;
206
+ connect(_options?: {
207
+ onlyIfTrusted?: boolean;
208
+ }): Promise<{
209
+ publicKey: string;
210
+ }>;
211
+ disconnect(): Promise<void>;
212
+ switchNetwork(network: 'mainnet' | 'devnet'): Promise<void>;
213
+ getPublicKey(): Promise<string | null>;
214
+ isConnected(): boolean;
215
+ }
216
+
217
+ /**
218
+ * Embedded Ethereum chain implementation for React Native and web embedded providers
219
+ */
220
+ declare class EmbeddedEthereumChain implements IEthereumChain {
221
+ private provider;
222
+ private currentNetworkId;
223
+ constructor(provider: EmbeddedProvider);
224
+ private ensureConnected;
225
+ request<T = any>(args: {
226
+ method: string;
227
+ params?: unknown[];
228
+ }): Promise<T>;
229
+ signPersonalMessage(message: string, address: string): Promise<ParsedSignatureResult>;
230
+ signTypedData(typedData: any, address: string): Promise<ParsedSignatureResult>;
231
+ sendTransaction(transaction: EthTransactionRequest): Promise<ParsedTransactionResult>;
232
+ switchChain(chainId: number): Promise<void>;
233
+ getChainId(): Promise<number>;
234
+ getAccounts(): Promise<string[]>;
235
+ isConnected(): boolean;
236
+ private handleEmbeddedRequest;
237
+ }
238
+
190
239
  /**
191
240
  * Constants for authenticator lifecycle management
192
241
  */
@@ -203,4 +252,4 @@ declare const AUTHENTICATOR_EXPIRATION_TIME_MS: number;
203
252
  */
204
253
  declare const AUTHENTICATOR_RENEWAL_WINDOW_MS: number;
205
254
 
206
- export { AUTHENTICATOR_EXPIRATION_TIME_MS, AUTHENTICATOR_RENEWAL_WINDOW_MS, AuthOptions, AuthProvider, AuthResult, ConnectResult, DebugLogger, EmbeddedProvider, EmbeddedProviderConfig, EmbeddedProviderEvent, EmbeddedStorage, EventCallback, JWTAuth, JWTAuthOptions, Keypair, PhantomConnectOptions, PlatformAdapter, Session, SignAndSendTransactionParams, SignMessageParams, SignMessageResult, SignedTransaction, StamperInfo, URLParamsAccessor, WalletAddress, generateSessionId, retryWithBackoff };
255
+ export { AUTHENTICATOR_EXPIRATION_TIME_MS, AUTHENTICATOR_RENEWAL_WINDOW_MS, AuthOptions, AuthProvider, AuthResult, ConnectResult, DebugLogger, EmbeddedEthereumChain, EmbeddedProvider, EmbeddedProviderConfig, EmbeddedProviderEvent, EmbeddedSolanaChain, EmbeddedStorage, EventCallback, JWTAuth, JWTAuthOptions, Keypair, PhantomConnectOptions, PlatformAdapter, Session, SignAndSendTransactionParams, SignMessageParams, SignMessageResult, SignedTransaction, StamperInfo, URLParamsAccessor, WalletAddress, generateSessionId, retryWithBackoff };
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import { StamperWithKeyManagement } from '@phantom/sdk-types';
2
2
  import { AddressType } from '@phantom/client';
3
3
  import { NetworkId } from '@phantom/constants';
4
4
  import { ParsedSignatureResult, ParsedTransactionResult } from '@phantom/parsers';
5
+ import { ISolanaChain, IEthereumChain, EthTransactionRequest } from '@phantom/chains';
5
6
 
6
7
  interface Keypair {
7
8
  publicKey: string;
@@ -28,6 +29,7 @@ interface Session {
28
29
  authenticatorExpiresAt: number;
29
30
  lastRenewalAttempt?: number;
30
31
  username: string;
32
+ accountDerivationIndex?: number;
31
33
  }
32
34
  interface EmbeddedStorage {
33
35
  getSession(): Promise<Session | null>;
@@ -59,6 +61,7 @@ interface AuthResult {
59
61
  walletId: string;
60
62
  provider?: string;
61
63
  userInfo?: Record<string, any>;
64
+ accountDerivationIndex?: number;
62
65
  }
63
66
  interface PhantomConnectOptions {
64
67
  organizationId: string;
@@ -152,6 +155,8 @@ declare class EmbeddedProvider {
152
155
  private walletId;
153
156
  private addresses;
154
157
  private jwtAuth;
158
+ readonly solana: ISolanaChain;
159
+ readonly ethereum: IEthereumChain;
155
160
  private eventListeners;
156
161
  constructor(config: EmbeddedProviderConfig, platform: PlatformAdapter, logger: DebugLogger);
157
162
  on(event: EmbeddedProviderEvent, callback: EventCallback): void;
@@ -187,6 +192,50 @@ declare function generateSessionId(): string;
187
192
 
188
193
  declare function retryWithBackoff<T>(operation: () => Promise<T>, operationName: string, logger: DebugLogger, maxRetries?: number, baseDelay?: number): Promise<T>;
189
194
 
195
+ /**
196
+ * Embedded Solana chain implementation for React Native and web embedded providers
197
+ */
198
+ declare class EmbeddedSolanaChain implements ISolanaChain {
199
+ private provider;
200
+ private currentNetworkId;
201
+ constructor(provider: EmbeddedProvider);
202
+ private ensureConnected;
203
+ signMessage(message: string): Promise<ParsedSignatureResult>;
204
+ signTransaction<T>(_transaction: T): Promise<T>;
205
+ signAndSendTransaction<T>(transaction: T): Promise<ParsedTransactionResult>;
206
+ connect(_options?: {
207
+ onlyIfTrusted?: boolean;
208
+ }): Promise<{
209
+ publicKey: string;
210
+ }>;
211
+ disconnect(): Promise<void>;
212
+ switchNetwork(network: 'mainnet' | 'devnet'): Promise<void>;
213
+ getPublicKey(): Promise<string | null>;
214
+ isConnected(): boolean;
215
+ }
216
+
217
+ /**
218
+ * Embedded Ethereum chain implementation for React Native and web embedded providers
219
+ */
220
+ declare class EmbeddedEthereumChain implements IEthereumChain {
221
+ private provider;
222
+ private currentNetworkId;
223
+ constructor(provider: EmbeddedProvider);
224
+ private ensureConnected;
225
+ request<T = any>(args: {
226
+ method: string;
227
+ params?: unknown[];
228
+ }): Promise<T>;
229
+ signPersonalMessage(message: string, address: string): Promise<ParsedSignatureResult>;
230
+ signTypedData(typedData: any, address: string): Promise<ParsedSignatureResult>;
231
+ sendTransaction(transaction: EthTransactionRequest): Promise<ParsedTransactionResult>;
232
+ switchChain(chainId: number): Promise<void>;
233
+ getChainId(): Promise<number>;
234
+ getAccounts(): Promise<string[]>;
235
+ isConnected(): boolean;
236
+ private handleEmbeddedRequest;
237
+ }
238
+
190
239
  /**
191
240
  * Constants for authenticator lifecycle management
192
241
  */
@@ -203,4 +252,4 @@ declare const AUTHENTICATOR_EXPIRATION_TIME_MS: number;
203
252
  */
204
253
  declare const AUTHENTICATOR_RENEWAL_WINDOW_MS: number;
205
254
 
206
- export { AUTHENTICATOR_EXPIRATION_TIME_MS, AUTHENTICATOR_RENEWAL_WINDOW_MS, AuthOptions, AuthProvider, AuthResult, ConnectResult, DebugLogger, EmbeddedProvider, EmbeddedProviderConfig, EmbeddedProviderEvent, EmbeddedStorage, EventCallback, JWTAuth, JWTAuthOptions, Keypair, PhantomConnectOptions, PlatformAdapter, Session, SignAndSendTransactionParams, SignMessageParams, SignMessageResult, SignedTransaction, StamperInfo, URLParamsAccessor, WalletAddress, generateSessionId, retryWithBackoff };
255
+ export { AUTHENTICATOR_EXPIRATION_TIME_MS, AUTHENTICATOR_RENEWAL_WINDOW_MS, AuthOptions, AuthProvider, AuthResult, ConnectResult, DebugLogger, EmbeddedEthereumChain, EmbeddedProvider, EmbeddedProviderConfig, EmbeddedProviderEvent, EmbeddedSolanaChain, EmbeddedStorage, EventCallback, JWTAuth, JWTAuthOptions, Keypair, PhantomConnectOptions, PlatformAdapter, Session, SignAndSendTransactionParams, SignMessageParams, SignMessageResult, SignedTransaction, StamperInfo, URLParamsAccessor, WalletAddress, generateSessionId, retryWithBackoff };
package/dist/index.js CHANGED
@@ -32,7 +32,9 @@ var src_exports = {};
32
32
  __export(src_exports, {
33
33
  AUTHENTICATOR_EXPIRATION_TIME_MS: () => AUTHENTICATOR_EXPIRATION_TIME_MS,
34
34
  AUTHENTICATOR_RENEWAL_WINDOW_MS: () => AUTHENTICATOR_RENEWAL_WINDOW_MS,
35
+ EmbeddedEthereumChain: () => EmbeddedEthereumChain,
35
36
  EmbeddedProvider: () => EmbeddedProvider,
37
+ EmbeddedSolanaChain: () => EmbeddedSolanaChain,
36
38
  JWTAuth: () => JWTAuth,
37
39
  generateSessionId: () => generateSessionId,
38
40
  retryWithBackoff: () => retryWithBackoff
@@ -43,7 +45,7 @@ module.exports = __toCommonJS(src_exports);
43
45
  var import_client = require("@phantom/client");
44
46
  var import_base64url = require("@phantom/base64url");
45
47
  var import_bs58 = __toESM(require("bs58"));
46
- var import_parsers = require("@phantom/parsers");
48
+ var import_parsers3 = require("@phantom/parsers");
47
49
 
48
50
  // src/constants.ts
49
51
  var AUTHENTICATOR_EXPIRATION_TIME_MS = 7 * 24 * 60 * 60 * 1e3;
@@ -165,6 +167,170 @@ async function retryWithBackoff(operation, operationName, logger, maxRetries = 3
165
167
  throw lastError;
166
168
  }
167
169
 
170
+ // src/chains/SolanaChain.ts
171
+ var import_constants = require("@phantom/constants");
172
+ var import_parsers = require("@phantom/parsers");
173
+ var EmbeddedSolanaChain = class {
174
+ constructor(provider) {
175
+ this.provider = provider;
176
+ this.currentNetworkId = import_constants.NetworkId.SOLANA_MAINNET;
177
+ }
178
+ ensureConnected() {
179
+ if (!this.provider.isConnected()) {
180
+ throw new Error("Solana chain not available. Ensure SDK is connected.");
181
+ }
182
+ }
183
+ async signMessage(message) {
184
+ this.ensureConnected();
185
+ const result = await this.provider.signMessage({
186
+ message,
187
+ networkId: this.currentNetworkId
188
+ });
189
+ return (0, import_parsers.parseSignMessageResponse)(result.signature, this.currentNetworkId);
190
+ }
191
+ signTransaction(_transaction) {
192
+ this.ensureConnected();
193
+ throw new Error("signTransaction not yet implemented for embedded provider");
194
+ }
195
+ async signAndSendTransaction(transaction) {
196
+ this.ensureConnected();
197
+ const result = await this.provider.signAndSendTransaction({
198
+ transaction,
199
+ networkId: this.currentNetworkId
200
+ });
201
+ return (0, import_parsers.parseTransactionResponse)(result.rawTransaction, this.currentNetworkId, result.hash);
202
+ }
203
+ connect(_options) {
204
+ const addresses = this.provider.getAddresses();
205
+ const solanaAddr = addresses.find((a) => a.addressType === "Solana");
206
+ if (!solanaAddr)
207
+ throw new Error("No Solana address found");
208
+ return Promise.resolve({ publicKey: solanaAddr.address });
209
+ }
210
+ async disconnect() {
211
+ return this.provider.disconnect();
212
+ }
213
+ switchNetwork(network) {
214
+ this.currentNetworkId = network === "mainnet" ? import_constants.NetworkId.SOLANA_MAINNET : import_constants.NetworkId.SOLANA_DEVNET;
215
+ return Promise.resolve();
216
+ }
217
+ getPublicKey() {
218
+ if (!this.provider.isConnected())
219
+ return Promise.resolve(null);
220
+ const addresses = this.provider.getAddresses();
221
+ const solanaAddr = addresses.find((a) => a.addressType === "Solana");
222
+ return Promise.resolve(solanaAddr?.address || null);
223
+ }
224
+ isConnected() {
225
+ return this.provider.isConnected();
226
+ }
227
+ };
228
+
229
+ // src/chains/EthereumChain.ts
230
+ var import_constants2 = require("@phantom/constants");
231
+ var import_parsers2 = require("@phantom/parsers");
232
+ var EmbeddedEthereumChain = class {
233
+ constructor(provider) {
234
+ this.provider = provider;
235
+ this.currentNetworkId = import_constants2.NetworkId.ETHEREUM_MAINNET;
236
+ }
237
+ ensureConnected() {
238
+ if (!this.provider.isConnected()) {
239
+ throw new Error("Ethereum chain not available. Ensure SDK is connected.");
240
+ }
241
+ }
242
+ async request(args) {
243
+ this.ensureConnected();
244
+ return this.handleEmbeddedRequest(args);
245
+ }
246
+ async signPersonalMessage(message, address) {
247
+ const signature = await this.request({
248
+ method: "personal_sign",
249
+ params: [message, address]
250
+ });
251
+ return (0, import_parsers2.parseSignMessageResponse)(signature, this.currentNetworkId);
252
+ }
253
+ async signTypedData(typedData, address) {
254
+ const signature = await this.request({
255
+ method: "eth_signTypedData_v4",
256
+ params: [address, JSON.stringify(typedData)]
257
+ });
258
+ return (0, import_parsers2.parseSignMessageResponse)(signature, this.currentNetworkId);
259
+ }
260
+ async sendTransaction(transaction) {
261
+ const result = await this.provider.signAndSendTransaction({
262
+ transaction,
263
+ networkId: this.currentNetworkId
264
+ });
265
+ return (0, import_parsers2.parseTransactionResponse)(result.rawTransaction, this.currentNetworkId, result.hash);
266
+ }
267
+ switchChain(chainId) {
268
+ const networkId = (0, import_constants2.chainIdToNetworkId)(chainId);
269
+ if (!networkId) {
270
+ return Promise.reject(new Error(`Unsupported chainId: ${chainId}`));
271
+ }
272
+ this.currentNetworkId = networkId;
273
+ return Promise.resolve();
274
+ }
275
+ getChainId() {
276
+ const chainId = (0, import_constants2.networkIdToChainId)(this.currentNetworkId);
277
+ return Promise.resolve(chainId || 1);
278
+ }
279
+ async getAccounts() {
280
+ return this.request({ method: "eth_accounts" });
281
+ }
282
+ isConnected() {
283
+ return this.provider.isConnected();
284
+ }
285
+ async handleEmbeddedRequest(args) {
286
+ switch (args.method) {
287
+ case "personal_sign": {
288
+ const [message, _address] = args.params;
289
+ const result = await this.provider.signMessage({
290
+ message,
291
+ networkId: this.currentNetworkId
292
+ });
293
+ return (0, import_parsers2.parseSignMessageResponse)(result.signature, this.currentNetworkId).signature;
294
+ }
295
+ case "eth_signTypedData_v4": {
296
+ const [_typedDataAddress, typedDataStr] = args.params;
297
+ const _typedData = JSON.parse(typedDataStr);
298
+ const typedDataResult = await this.provider.signMessage({
299
+ message: typedDataStr,
300
+ // Pass the stringified typed data as message
301
+ networkId: this.currentNetworkId
302
+ });
303
+ return (0, import_parsers2.parseSignMessageResponse)(typedDataResult.signature, this.currentNetworkId).signature;
304
+ }
305
+ case "eth_sendTransaction": {
306
+ const [transaction] = args.params;
307
+ const networkIdFromTx = transaction.chainId ? (0, import_constants2.chainIdToNetworkId)(typeof transaction.chainId === "number" ? transaction.chainId : parseInt(transaction.chainId, 16)) : null;
308
+ const sendResult = await this.provider.signAndSendTransaction({
309
+ transaction,
310
+ networkId: networkIdFromTx || this.currentNetworkId
311
+ });
312
+ return (0, import_parsers2.parseTransactionResponse)(sendResult.rawTransaction, this.currentNetworkId, sendResult.hash).hash;
313
+ }
314
+ case "eth_accounts": {
315
+ const addresses = this.provider.getAddresses();
316
+ const ethAddr = addresses.find((a) => a.addressType === "Ethereum");
317
+ return ethAddr ? [ethAddr.address] : [];
318
+ }
319
+ case "eth_chainId": {
320
+ return `0x${((0, import_constants2.networkIdToChainId)(this.currentNetworkId) || 1).toString(16)}`;
321
+ }
322
+ case "wallet_switchEthereumChain": {
323
+ const [{ chainId }] = args.params;
324
+ const numericChainId = parseInt(chainId, 16);
325
+ await this.switchChain(numericChainId);
326
+ return void 0;
327
+ }
328
+ default:
329
+ throw new Error(`Embedded provider doesn't support method: ${args.method}`);
330
+ }
331
+ }
332
+ };
333
+
168
334
  // src/embedded-provider.ts
169
335
  var EmbeddedProvider = class {
170
336
  constructor(config, platform, logger) {
@@ -182,6 +348,8 @@ var EmbeddedProvider = class {
182
348
  this.stamper = platform.stamper;
183
349
  this.jwtAuth = new JWTAuth();
184
350
  config.solanaProvider;
351
+ this.solana = new EmbeddedSolanaChain(this);
352
+ this.ethereum = new EmbeddedEthereumChain(this);
185
353
  this.logger.info("EMBEDDED_PROVIDER", "EmbeddedProvider initialized");
186
354
  }
187
355
  /*
@@ -215,14 +383,17 @@ var EmbeddedProvider = class {
215
383
  }
216
384
  }
217
385
  async getAndFilterWalletAddresses(walletId) {
386
+ const session = await this.storage.getSession();
387
+ const derivationIndex = session?.accountDerivationIndex ?? 0;
218
388
  const addresses = await retryWithBackoff(
219
- () => this.client.getWalletAddresses(walletId),
389
+ () => this.client.getWalletAddresses(walletId, void 0, derivationIndex),
220
390
  "getWalletAddresses",
221
391
  this.logger
222
392
  ).catch(async (error) => {
223
393
  this.logger.error("EMBEDDED_PROVIDER", "getWalletAddresses failed after retries, disconnecting", {
224
394
  walletId,
225
- error: error.message
395
+ error: error.message,
396
+ derivationIndex
226
397
  });
227
398
  await this.storage.clearSession();
228
399
  this.client = null;
@@ -572,17 +743,20 @@ var EmbeddedProvider = class {
572
743
  walletId: this.walletId,
573
744
  message: params.message
574
745
  });
575
- const parsedMessage = (0, import_parsers.parseMessage)(params.message);
746
+ const parsedMessage = (0, import_parsers3.parseMessage)(params.message);
747
+ const session = await this.storage.getSession();
748
+ const derivationIndex = session?.accountDerivationIndex ?? 0;
576
749
  const rawResponse = await this.client.signMessage({
577
750
  walletId: this.walletId,
578
751
  message: parsedMessage.base64url,
579
- networkId: params.networkId
752
+ networkId: params.networkId,
753
+ derivationIndex
580
754
  });
581
755
  this.logger.info("EMBEDDED_PROVIDER", "Message signed successfully", {
582
756
  walletId: this.walletId,
583
757
  message: params.message
584
758
  });
585
- return (0, import_parsers.parseSignMessageResponse)(rawResponse, params.networkId);
759
+ return (0, import_parsers3.parseSignMessageResponse)(rawResponse, params.networkId);
586
760
  }
587
761
  async signAndSendTransaction(params) {
588
762
  if (!this.client || !this.walletId) {
@@ -593,15 +767,19 @@ var EmbeddedProvider = class {
593
767
  walletId: this.walletId,
594
768
  networkId: params.networkId
595
769
  });
596
- const parsedTransaction = await (0, import_parsers.parseTransaction)(params.transaction, params.networkId);
770
+ const parsedTransaction = await (0, import_parsers3.parseTransactionToBase64Url)(params.transaction, params.networkId);
771
+ const session = await this.storage.getSession();
772
+ const derivationIndex = session?.accountDerivationIndex ?? 0;
597
773
  this.logger.log("EMBEDDED_PROVIDER", "Parsed transaction for signing", {
598
774
  walletId: this.walletId,
599
- transaction: parsedTransaction
775
+ transaction: parsedTransaction,
776
+ derivationIndex
600
777
  });
601
778
  const rawResponse = await this.client.signAndSendTransaction({
602
779
  walletId: this.walletId,
603
780
  transaction: parsedTransaction.base64url,
604
- networkId: params.networkId
781
+ networkId: params.networkId,
782
+ derivationIndex
605
783
  });
606
784
  this.logger.info("EMBEDDED_PROVIDER", "Transaction signed and sent successfully", {
607
785
  walletId: this.walletId,
@@ -609,7 +787,7 @@ var EmbeddedProvider = class {
609
787
  hash: rawResponse.hash,
610
788
  rawTransaction: rawResponse.rawTransaction
611
789
  });
612
- return await (0, import_parsers.parseTransactionResponse)(rawResponse.rawTransaction, params.networkId, rawResponse.hash);
790
+ return await (0, import_parsers3.parseTransactionResponse)(rawResponse.rawTransaction, params.networkId, rawResponse.hash);
613
791
  }
614
792
  getAddresses() {
615
793
  return this.addresses;
@@ -658,6 +836,8 @@ var EmbeddedProvider = class {
658
836
  stamperInfo,
659
837
  authProvider: "app-wallet",
660
838
  userInfo: { embeddedWalletType: this.config.embeddedWalletType },
839
+ accountDerivationIndex: 0,
840
+ // App wallets default to index 0
661
841
  status: "completed",
662
842
  createdAt: now,
663
843
  lastUsed: now,
@@ -698,6 +878,7 @@ var EmbeddedProvider = class {
698
878
  stamperInfo,
699
879
  authProvider: authResult.provider,
700
880
  userInfo: authResult.userInfo,
881
+ accountDerivationIndex: authResult.accountDerivationIndex,
701
882
  status: "completed",
702
883
  createdAt: now,
703
884
  lastUsed: now,
@@ -731,6 +912,8 @@ var EmbeddedProvider = class {
731
912
  stamperInfo,
732
913
  authProvider: "phantom-connect",
733
914
  userInfo: { provider: authOptions?.provider },
915
+ accountDerivationIndex: void 0,
916
+ // Will be set when redirect completes
734
917
  status: "pending",
735
918
  createdAt: now,
736
919
  lastUsed: now,
@@ -769,6 +952,7 @@ var EmbeddedProvider = class {
769
952
  });
770
953
  tempSession.walletId = authResult.walletId;
771
954
  tempSession.authProvider = authResult.provider || tempSession.authProvider;
955
+ tempSession.accountDerivationIndex = authResult.accountDerivationIndex;
772
956
  tempSession.status = "completed";
773
957
  tempSession.lastUsed = Date.now();
774
958
  await this.storage.saveSession(tempSession);
@@ -784,6 +968,7 @@ var EmbeddedProvider = class {
784
968
  }
785
969
  session.walletId = authResult.walletId;
786
970
  session.authProvider = authResult.provider || session.authProvider;
971
+ session.accountDerivationIndex = authResult.accountDerivationIndex;
787
972
  session.status = "completed";
788
973
  session.lastUsed = Date.now();
789
974
  await this.storage.saveSession(session);
@@ -923,7 +1108,9 @@ var EmbeddedProvider = class {
923
1108
  0 && (module.exports = {
924
1109
  AUTHENTICATOR_EXPIRATION_TIME_MS,
925
1110
  AUTHENTICATOR_RENEWAL_WINDOW_MS,
1111
+ EmbeddedEthereumChain,
926
1112
  EmbeddedProvider,
1113
+ EmbeddedSolanaChain,
927
1114
  JWTAuth,
928
1115
  generateSessionId,
929
1116
  retryWithBackoff