@phantom/embedded-provider-core 1.0.2 → 1.0.4

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
@@ -1,7 +1,7 @@
1
1
  import { AddressType, SpendingLimitError } from '@phantom/client';
2
2
  import { NetworkId, ClientSideSdkHeaders } from '@phantom/constants';
3
3
  import { ParsedSignatureResult, ParsedTransactionResult } from '@phantom/parsers';
4
- import { StamperWithKeyManagement, Transaction, VersionedTransaction } from '@phantom/sdk-types';
4
+ import { Algorithm, StamperWithKeyManagement, Transaction, VersionedTransaction } from '@phantom/sdk-types';
5
5
  import { ISolanaChain, IEthereumChain, EthTransactionRequest } from '@phantom/chain-interfaces';
6
6
 
7
7
  interface WalletAddress {
@@ -44,8 +44,13 @@ interface EmbeddedProviderConfig {
44
44
  apiBaseUrl: string;
45
45
  appId: string;
46
46
  authOptions: {
47
- authUrl: string;
48
- redirectUrl: string;
47
+ authUrl?: string;
48
+ redirectUrl?: string;
49
+ };
50
+ /** When also provided, the Auth2 PKCE flow is used instead of the legacy Phantom Connect flow. */
51
+ unstable__auth2Options?: {
52
+ authApiBaseUrl: string;
53
+ clientId: string;
49
54
  };
50
55
  embeddedWalletType: "app-wallet" | "user-wallet" | (string & Record<never, never>);
51
56
  addressTypes: AddressType[];
@@ -77,6 +82,9 @@ interface Session {
77
82
  lastRenewalAttempt?: number;
78
83
  accountDerivationIndex?: number;
79
84
  authUserId?: string;
85
+ pkceCodeVerifier?: string;
86
+ salt?: string;
87
+ bearerToken?: string;
80
88
  }
81
89
  interface EmbeddedStorage {
82
90
  getSession(): Promise<Session | null>;
@@ -113,6 +121,7 @@ interface AuthResult {
113
121
  accountDerivationIndex: number;
114
122
  expiresInMs: number;
115
123
  authUserId?: string;
124
+ bearerToken?: string;
116
125
  }
117
126
  interface PhantomConnectOptions {
118
127
  publicKey: string;
@@ -123,10 +132,11 @@ interface PhantomConnectOptions {
123
132
  sessionId: string;
124
133
  clearPreviousSession?: boolean;
125
134
  allowRefresh?: boolean;
135
+ algorithm?: Algorithm;
126
136
  }
127
137
  interface AuthProvider {
128
138
  authenticate(options: PhantomConnectOptions): Promise<void | AuthResult>;
129
- resumeAuthFromRedirect?(provider: EmbeddedProviderAuthType): AuthResult | null;
139
+ resumeAuthFromRedirect?(provider: EmbeddedProviderAuthType): Promise<AuthResult | null>;
130
140
  }
131
141
  interface PhantomAppAuthOptions {
132
142
  publicKey: string;
@@ -163,6 +173,7 @@ interface ConnectStartEventData {
163
173
  authOptions?: {
164
174
  provider?: string;
165
175
  };
176
+ walletId?: string;
166
177
  }
167
178
  interface ConnectErrorEventData {
168
179
  error: string;
@@ -215,6 +226,11 @@ declare class EmbeddedProvider {
215
226
  private createOrganizationForAppWallet;
216
227
  connect(authOptions: AuthOptions): Promise<ConnectResult>;
217
228
  disconnect(shouldClearPreviousSession?: boolean): Promise<void>;
229
+ /**
230
+ * Handles errors from signing operations.
231
+ * Disconnects the user if the server returns a 401/403 (revoked or expired authenticator).
232
+ */
233
+ private handleSigningError;
218
234
  signMessage(params: SignMessageParams): Promise<ParsedSignatureResult>;
219
235
  signEthereumMessage(params: SignMessageParams): Promise<ParsedSignatureResult>;
220
236
  signTypedDataV4(params: SignTypedDataV4Params): Promise<ParsedSignatureResult>;
@@ -240,12 +256,11 @@ declare function retryWithBackoff<T>(operation: () => Promise<T>, operationName:
240
256
  declare class EmbeddedSolanaChain implements ISolanaChain {
241
257
  private provider;
242
258
  private currentNetworkId;
243
- private _connected;
244
259
  private _publicKey;
245
260
  private eventEmitter;
246
261
  constructor(provider: EmbeddedProvider);
247
- get connected(): boolean;
248
262
  get publicKey(): string | null;
263
+ get isConnected(): boolean;
249
264
  private ensureConnected;
250
265
  signMessage(message: string | Uint8Array): Promise<{
251
266
  signature: Uint8Array;
@@ -266,11 +281,8 @@ declare class EmbeddedSolanaChain implements ISolanaChain {
266
281
  }>;
267
282
  disconnect(): Promise<void>;
268
283
  switchNetwork(network: "mainnet" | "devnet"): Promise<void>;
269
- getPublicKey(): Promise<string | null>;
270
- isConnected(): boolean;
271
284
  private setupEventListeners;
272
285
  private syncInitialState;
273
- private updateConnectionState;
274
286
  on(event: string, listener: (...args: any[]) => void): void;
275
287
  off(event: string, listener: (...args: any[]) => void): void;
276
288
  }
@@ -281,11 +293,9 @@ declare class EmbeddedSolanaChain implements ISolanaChain {
281
293
  declare class EmbeddedEthereumChain implements IEthereumChain {
282
294
  private provider;
283
295
  private currentNetworkId;
284
- private _connected;
285
296
  private _accounts;
286
297
  private eventEmitter;
287
298
  constructor(provider: EmbeddedProvider);
288
- get connected(): boolean;
289
299
  get chainId(): string;
290
300
  get accounts(): string[];
291
301
  private ensureConnected;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AddressType, SpendingLimitError } from '@phantom/client';
2
2
  import { NetworkId, ClientSideSdkHeaders } from '@phantom/constants';
3
3
  import { ParsedSignatureResult, ParsedTransactionResult } from '@phantom/parsers';
4
- import { StamperWithKeyManagement, Transaction, VersionedTransaction } from '@phantom/sdk-types';
4
+ import { Algorithm, StamperWithKeyManagement, Transaction, VersionedTransaction } from '@phantom/sdk-types';
5
5
  import { ISolanaChain, IEthereumChain, EthTransactionRequest } from '@phantom/chain-interfaces';
6
6
 
7
7
  interface WalletAddress {
@@ -44,8 +44,13 @@ interface EmbeddedProviderConfig {
44
44
  apiBaseUrl: string;
45
45
  appId: string;
46
46
  authOptions: {
47
- authUrl: string;
48
- redirectUrl: string;
47
+ authUrl?: string;
48
+ redirectUrl?: string;
49
+ };
50
+ /** When also provided, the Auth2 PKCE flow is used instead of the legacy Phantom Connect flow. */
51
+ unstable__auth2Options?: {
52
+ authApiBaseUrl: string;
53
+ clientId: string;
49
54
  };
50
55
  embeddedWalletType: "app-wallet" | "user-wallet" | (string & Record<never, never>);
51
56
  addressTypes: AddressType[];
@@ -77,6 +82,9 @@ interface Session {
77
82
  lastRenewalAttempt?: number;
78
83
  accountDerivationIndex?: number;
79
84
  authUserId?: string;
85
+ pkceCodeVerifier?: string;
86
+ salt?: string;
87
+ bearerToken?: string;
80
88
  }
81
89
  interface EmbeddedStorage {
82
90
  getSession(): Promise<Session | null>;
@@ -113,6 +121,7 @@ interface AuthResult {
113
121
  accountDerivationIndex: number;
114
122
  expiresInMs: number;
115
123
  authUserId?: string;
124
+ bearerToken?: string;
116
125
  }
117
126
  interface PhantomConnectOptions {
118
127
  publicKey: string;
@@ -123,10 +132,11 @@ interface PhantomConnectOptions {
123
132
  sessionId: string;
124
133
  clearPreviousSession?: boolean;
125
134
  allowRefresh?: boolean;
135
+ algorithm?: Algorithm;
126
136
  }
127
137
  interface AuthProvider {
128
138
  authenticate(options: PhantomConnectOptions): Promise<void | AuthResult>;
129
- resumeAuthFromRedirect?(provider: EmbeddedProviderAuthType): AuthResult | null;
139
+ resumeAuthFromRedirect?(provider: EmbeddedProviderAuthType): Promise<AuthResult | null>;
130
140
  }
131
141
  interface PhantomAppAuthOptions {
132
142
  publicKey: string;
@@ -163,6 +173,7 @@ interface ConnectStartEventData {
163
173
  authOptions?: {
164
174
  provider?: string;
165
175
  };
176
+ walletId?: string;
166
177
  }
167
178
  interface ConnectErrorEventData {
168
179
  error: string;
@@ -215,6 +226,11 @@ declare class EmbeddedProvider {
215
226
  private createOrganizationForAppWallet;
216
227
  connect(authOptions: AuthOptions): Promise<ConnectResult>;
217
228
  disconnect(shouldClearPreviousSession?: boolean): Promise<void>;
229
+ /**
230
+ * Handles errors from signing operations.
231
+ * Disconnects the user if the server returns a 401/403 (revoked or expired authenticator).
232
+ */
233
+ private handleSigningError;
218
234
  signMessage(params: SignMessageParams): Promise<ParsedSignatureResult>;
219
235
  signEthereumMessage(params: SignMessageParams): Promise<ParsedSignatureResult>;
220
236
  signTypedDataV4(params: SignTypedDataV4Params): Promise<ParsedSignatureResult>;
@@ -240,12 +256,11 @@ declare function retryWithBackoff<T>(operation: () => Promise<T>, operationName:
240
256
  declare class EmbeddedSolanaChain implements ISolanaChain {
241
257
  private provider;
242
258
  private currentNetworkId;
243
- private _connected;
244
259
  private _publicKey;
245
260
  private eventEmitter;
246
261
  constructor(provider: EmbeddedProvider);
247
- get connected(): boolean;
248
262
  get publicKey(): string | null;
263
+ get isConnected(): boolean;
249
264
  private ensureConnected;
250
265
  signMessage(message: string | Uint8Array): Promise<{
251
266
  signature: Uint8Array;
@@ -266,11 +281,8 @@ declare class EmbeddedSolanaChain implements ISolanaChain {
266
281
  }>;
267
282
  disconnect(): Promise<void>;
268
283
  switchNetwork(network: "mainnet" | "devnet"): Promise<void>;
269
- getPublicKey(): Promise<string | null>;
270
- isConnected(): boolean;
271
284
  private setupEventListeners;
272
285
  private syncInitialState;
273
- private updateConnectionState;
274
286
  on(event: string, listener: (...args: any[]) => void): void;
275
287
  off(event: string, listener: (...args: any[]) => void): void;
276
288
  }
@@ -281,11 +293,9 @@ declare class EmbeddedSolanaChain implements ISolanaChain {
281
293
  declare class EmbeddedEthereumChain implements IEthereumChain {
282
294
  private provider;
283
295
  private currentNetworkId;
284
- private _connected;
285
296
  private _accounts;
286
297
  private eventEmitter;
287
298
  constructor(provider: EmbeddedProvider);
288
- get connected(): boolean;
289
299
  get chainId(): string;
290
300
  get accounts(): string[];
291
301
  private ensureConnected;
package/dist/index.js CHANGED
@@ -63,21 +63,19 @@ var EmbeddedSolanaChain = class {
63
63
  constructor(provider) {
64
64
  this.provider = provider;
65
65
  this.currentNetworkId = import_constants.NetworkId.SOLANA_MAINNET;
66
- this._connected = false;
67
66
  this._publicKey = null;
68
67
  this.eventEmitter = new import_eventemitter3.EventEmitter();
69
68
  this.setupEventListeners();
70
69
  this.syncInitialState();
71
70
  }
72
- // Wallet adapter compliant properties
73
- get connected() {
74
- return this._connected;
75
- }
76
71
  get publicKey() {
77
72
  return this._publicKey;
78
73
  }
74
+ get isConnected() {
75
+ return this._publicKey !== null;
76
+ }
79
77
  ensureConnected() {
80
- if (!this.provider.isConnected()) {
78
+ if (!this.isConnected) {
81
79
  throw new Error("Solana chain not available. Ensure SDK is connected.");
82
80
  }
83
81
  }
@@ -135,7 +133,7 @@ var EmbeddedSolanaChain = class {
135
133
  const solanaAddr = addresses.find((a) => a.addressType === "Solana");
136
134
  if (!solanaAddr)
137
135
  throw new Error("No Solana address found");
138
- this.updateConnectionState(true, solanaAddr.address);
136
+ this._publicKey = solanaAddr.address;
139
137
  return Promise.resolve({ publicKey: solanaAddr.address });
140
138
  }
141
139
  async disconnect() {
@@ -145,41 +143,25 @@ var EmbeddedSolanaChain = class {
145
143
  this.currentNetworkId = network === "mainnet" ? import_constants.NetworkId.SOLANA_MAINNET : import_constants.NetworkId.SOLANA_DEVNET;
146
144
  return Promise.resolve();
147
145
  }
148
- getPublicKey() {
149
- if (!this.provider.isConnected())
150
- return Promise.resolve(null);
151
- const addresses = this.provider.getAddresses();
152
- const solanaAddr = addresses.find((a) => a.addressType === "Solana");
153
- return Promise.resolve(solanaAddr?.address || null);
154
- }
155
- isConnected() {
156
- return this._connected && this.provider.isConnected();
157
- }
158
146
  setupEventListeners() {
159
147
  this.provider.on("connect", (data) => {
160
148
  const solanaAddress = data.addresses?.find((addr) => addr.addressType === "Solana");
161
149
  if (solanaAddress) {
162
- this.updateConnectionState(true, solanaAddress.address);
150
+ this._publicKey = solanaAddress.address;
163
151
  this.eventEmitter.emit("connect", solanaAddress.address);
164
152
  }
165
153
  });
166
154
  this.provider.on("disconnect", () => {
167
- this.updateConnectionState(false, null);
155
+ this._publicKey = null;
168
156
  this.eventEmitter.emit("disconnect");
169
157
  });
170
158
  }
171
159
  syncInitialState() {
172
- if (this.provider.isConnected()) {
173
- const addresses = this.provider.getAddresses();
174
- const solanaAddress = addresses.find((a) => a.addressType === "Solana");
175
- if (solanaAddress) {
176
- this.updateConnectionState(true, solanaAddress.address);
177
- }
178
- }
179
- }
180
- updateConnectionState(connected, publicKey) {
181
- this._connected = connected;
182
- this._publicKey = publicKey;
160
+ if (!this.provider.isConnected())
161
+ return;
162
+ const addresses = this.provider.getAddresses();
163
+ const solanaAddr = addresses.find((a) => a.addressType === "Solana");
164
+ this._publicKey = solanaAddr?.address || null;
183
165
  }
184
166
  // Event methods for interface compliance
185
167
  on(event, listener) {
@@ -197,16 +179,11 @@ var EmbeddedEthereumChain = class {
197
179
  constructor(provider) {
198
180
  this.provider = provider;
199
181
  this.currentNetworkId = import_constants2.NetworkId.ETHEREUM_MAINNET;
200
- this._connected = false;
201
182
  this._accounts = [];
202
183
  this.eventEmitter = new import_eventemitter32.EventEmitter();
203
184
  this.setupEventListeners();
204
185
  this.syncInitialState();
205
186
  }
206
- // EIP-1193 compliant properties
207
- get connected() {
208
- return this._connected;
209
- }
210
187
  get chainId() {
211
188
  const chainId = (0, import_constants2.networkIdToChainId)(this.currentNetworkId) || 1;
212
189
  return `0x${chainId.toString(16)}`;
@@ -230,7 +207,7 @@ var EmbeddedEthereumChain = class {
230
207
  }
231
208
  const addresses = this.provider.getAddresses();
232
209
  const ethAddresses = addresses.filter((a) => a.addressType === "Ethereum").map((a) => a.address);
233
- this.updateConnectionState(true, ethAddresses);
210
+ this.updateConnectionState(ethAddresses);
234
211
  return Promise.resolve(ethAddresses);
235
212
  }
236
213
  async disconnect() {
@@ -296,19 +273,19 @@ var EmbeddedEthereumChain = class {
296
273
  return this.request({ method: "eth_accounts" });
297
274
  }
298
275
  isConnected() {
299
- return this._connected && this.provider.isConnected();
276
+ return this.provider.isConnected() && this._accounts.length > 0;
300
277
  }
301
278
  setupEventListeners() {
302
279
  this.provider.on("connect", (data) => {
303
280
  const ethAddresses = data.addresses?.filter((addr) => addr.addressType === "Ethereum")?.map((addr) => addr.address) || [];
304
281
  if (ethAddresses.length > 0) {
305
- this.updateConnectionState(true, ethAddresses);
282
+ this.updateConnectionState(ethAddresses);
306
283
  this.eventEmitter.emit("connect", { chainId: this.chainId });
307
284
  this.eventEmitter.emit("accountsChanged", ethAddresses);
308
285
  }
309
286
  });
310
287
  this.provider.on("disconnect", () => {
311
- this.updateConnectionState(false, []);
288
+ this.updateConnectionState([]);
312
289
  this.eventEmitter.emit("disconnect", { code: 4900, message: "Provider disconnected" });
313
290
  this.eventEmitter.emit("accountsChanged", []);
314
291
  });
@@ -318,12 +295,11 @@ var EmbeddedEthereumChain = class {
318
295
  const addresses = this.provider.getAddresses();
319
296
  const ethAddresses = addresses.filter((a) => a.addressType === "Ethereum").map((a) => a.address);
320
297
  if (ethAddresses.length > 0) {
321
- this.updateConnectionState(true, ethAddresses);
298
+ this.updateConnectionState(ethAddresses);
322
299
  }
323
300
  }
324
301
  }
325
- updateConnectionState(connected, accounts) {
326
- this._connected = connected;
302
+ updateConnectionState(accounts) {
327
303
  this._accounts = accounts;
328
304
  }
329
305
  async handleEmbeddedRequest(args) {
@@ -551,7 +527,8 @@ var EmbeddedProvider = class {
551
527
  });
552
528
  if (session.status !== "completed") {
553
529
  const urlSessionId = this.urlParamsAccessor.getParam("session_id");
554
- if (session.status === "pending" && !urlSessionId) {
530
+ const urlCode = this.urlParamsAccessor.getParam("code");
531
+ if (session.status === "pending" && !urlSessionId && !urlCode) {
555
532
  this.logger.warn("EMBEDDED_PROVIDER", "Session mismatch detected - pending session without redirect context", {
556
533
  sessionId: session.sessionId,
557
534
  status: session.status
@@ -624,7 +601,7 @@ var EmbeddedProvider = class {
624
601
  }
625
602
  this.logger.log("EMBEDDED_PROVIDER", "No completed session found, checking for redirect resume");
626
603
  if (this.authProvider.resumeAuthFromRedirect) {
627
- const authResult = this.authProvider.resumeAuthFromRedirect(session.authProvider);
604
+ const authResult = await this.authProvider.resumeAuthFromRedirect(session.authProvider);
628
605
  if (authResult) {
629
606
  this.logger.info("EMBEDDED_PROVIDER", "Resuming from redirect", {
630
607
  walletId: authResult.walletId,
@@ -787,7 +764,7 @@ var EmbeddedProvider = class {
787
764
  authenticatorName: `auth-${shortPubKey}`,
788
765
  authenticatorKind: "keypair",
789
766
  publicKey: base64urlPublicKey,
790
- algorithm: "Ed25519",
767
+ algorithm: this.stamper.algorithm,
791
768
  expiresInMs
792
769
  }
793
770
  ]
@@ -903,6 +880,21 @@ var EmbeddedProvider = class {
903
880
  });
904
881
  }
905
882
  }
883
+ /**
884
+ * Handles errors from signing operations.
885
+ * Disconnects the user if the server returns a 401/403 (revoked or expired authenticator).
886
+ */
887
+ async handleSigningError(error) {
888
+ if ((0, import_client.isAuthenticationError)(error)) {
889
+ this.logger.warn("EMBEDDED_PROVIDER", "Authenticator rejected by server (401/403), disconnecting", { error });
890
+ await this.disconnect(false);
891
+ throw new Error("Authenticator revoked");
892
+ }
893
+ if (error instanceof import_client.SpendingLimitError) {
894
+ this.emit("spending_limit_reached", { error });
895
+ }
896
+ throw error;
897
+ }
906
898
  async signMessage(params) {
907
899
  if (!this.client || !this.walletId) {
908
900
  throw new Error("Not connected");
@@ -919,7 +911,7 @@ var EmbeddedProvider = class {
919
911
  message: params.message,
920
912
  networkId: params.networkId,
921
913
  derivationIndex
922
- });
914
+ }).catch((error) => this.handleSigningError(error));
923
915
  this.logger.info("EMBEDDED_PROVIDER", "Message signed successfully", {
924
916
  walletId: this.walletId,
925
917
  message: params.message
@@ -952,7 +944,7 @@ var EmbeddedProvider = class {
952
944
  message: base64UrlMessage,
953
945
  networkId: params.networkId,
954
946
  derivationIndex
955
- });
947
+ }).catch((error) => this.handleSigningError(error));
956
948
  this.logger.info("EMBEDDED_PROVIDER", "Message signed successfully", {
957
949
  walletId: this.walletId,
958
950
  message: params.message
@@ -975,7 +967,7 @@ var EmbeddedProvider = class {
975
967
  typedData: params.typedData,
976
968
  networkId: params.networkId,
977
969
  derivationIndex
978
- });
970
+ }).catch((error) => this.handleSigningError(error));
979
971
  this.logger.info("EMBEDDED_PROVIDER", "Typed data signed successfully", {
980
972
  walletId: this.walletId
981
973
  });
@@ -1012,7 +1004,7 @@ var EmbeddedProvider = class {
1012
1004
  networkId: params.networkId,
1013
1005
  derivationIndex,
1014
1006
  account
1015
- });
1007
+ }).catch((error) => this.handleSigningError(error));
1016
1008
  this.logger.info("EMBEDDED_PROVIDER", "Transaction signed successfully", {
1017
1009
  walletId: this.walletId,
1018
1010
  networkId: params.networkId,
@@ -1045,21 +1037,13 @@ var EmbeddedProvider = class {
1045
1037
  if (!account) {
1046
1038
  throw new Error(`No address found for network ${params.networkId}`);
1047
1039
  }
1048
- let rawResponse;
1049
- try {
1050
- rawResponse = await this.client.signAndSendTransaction({
1051
- walletId: this.walletId,
1052
- transaction: transactionPayload,
1053
- networkId: params.networkId,
1054
- derivationIndex,
1055
- account
1056
- });
1057
- } catch (error) {
1058
- if (error instanceof import_client.SpendingLimitError) {
1059
- this.emit("spending_limit_reached", { error });
1060
- }
1061
- throw error;
1062
- }
1040
+ const rawResponse = await this.client.signAndSendTransaction({
1041
+ walletId: this.walletId,
1042
+ transaction: transactionPayload,
1043
+ networkId: params.networkId,
1044
+ derivationIndex,
1045
+ account
1046
+ }).catch((error) => this.handleSigningError(error));
1063
1047
  this.logger.info("EMBEDDED_PROVIDER", "Transaction signed and sent successfully", {
1064
1048
  walletId: this.walletId,
1065
1049
  networkId: params.networkId,
@@ -1243,8 +1227,9 @@ var EmbeddedProvider = class {
1243
1227
  // OAuth session management - defaults to allowing refresh unless user explicitly logged out
1244
1228
  clearPreviousSession: shouldClearPreviousSession,
1245
1229
  // true only after logout
1246
- allowRefresh: !shouldClearPreviousSession
1230
+ allowRefresh: !shouldClearPreviousSession,
1247
1231
  // false only after logout
1232
+ algorithm: this.stamper.algorithm
1248
1233
  });
1249
1234
  if (authResult && "walletId" in authResult) {
1250
1235
  this.logger.info("EMBEDDED_PROVIDER", "Authentication completed after redirect", {
@@ -1257,6 +1242,7 @@ var EmbeddedProvider = class {
1257
1242
  tempSession.authProvider = authResult.provider || tempSession.authProvider;
1258
1243
  tempSession.accountDerivationIndex = authResult.accountDerivationIndex;
1259
1244
  tempSession.authUserId = authResult.authUserId;
1245
+ tempSession.bearerToken = authResult.bearerToken;
1260
1246
  tempSession.status = "completed";
1261
1247
  tempSession.lastUsed = Date.now();
1262
1248
  if (authResult.expiresInMs > 0) {
@@ -1286,6 +1272,7 @@ var EmbeddedProvider = class {
1286
1272
  session.organizationId = authResult.organizationId;
1287
1273
  session.accountDerivationIndex = authResult.accountDerivationIndex;
1288
1274
  session.authUserId = authResult.authUserId;
1275
+ session.bearerToken = authResult.bearerToken;
1289
1276
  session.status = "completed";
1290
1277
  session.lastUsed = Date.now();
1291
1278
  if (authResult.expiresInMs > 0) {
@@ -1355,7 +1342,8 @@ var EmbeddedProvider = class {
1355
1342
  organizationId: session.organizationId,
1356
1343
  headers: {
1357
1344
  ...this.platform.analyticsHeaders || {},
1358
- ...session.authUserId ? { "x-auth-user-id": session.authUserId } : {}
1345
+ ...session.authUserId ? { "x-auth-user-id": session.authUserId } : {},
1346
+ ...session.bearerToken ? { Authorization: session.bearerToken } : {}
1359
1347
  }
1360
1348
  },
1361
1349
  this.stamper