@phantom/embedded-provider-core 1.0.3 → 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.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/embedded-provider.ts
2
2
  import { base64urlEncode, stringToBase64url } from "@phantom/base64url";
3
- import { AddressType, PhantomClient, SpendingLimitError } from "@phantom/client";
3
+ import { AddressType, PhantomClient, SpendingLimitError, isAuthenticationError } from "@phantom/client";
4
4
  import {
5
5
  parseSignMessageResponse,
6
6
  parseTransactionResponse,
@@ -488,7 +488,8 @@ var EmbeddedProvider = class {
488
488
  });
489
489
  if (session.status !== "completed") {
490
490
  const urlSessionId = this.urlParamsAccessor.getParam("session_id");
491
- if (session.status === "pending" && !urlSessionId) {
491
+ const urlCode = this.urlParamsAccessor.getParam("code");
492
+ if (session.status === "pending" && !urlSessionId && !urlCode) {
492
493
  this.logger.warn("EMBEDDED_PROVIDER", "Session mismatch detected - pending session without redirect context", {
493
494
  sessionId: session.sessionId,
494
495
  status: session.status
@@ -561,7 +562,7 @@ var EmbeddedProvider = class {
561
562
  }
562
563
  this.logger.log("EMBEDDED_PROVIDER", "No completed session found, checking for redirect resume");
563
564
  if (this.authProvider.resumeAuthFromRedirect) {
564
- const authResult = this.authProvider.resumeAuthFromRedirect(session.authProvider);
565
+ const authResult = await this.authProvider.resumeAuthFromRedirect(session.authProvider);
565
566
  if (authResult) {
566
567
  this.logger.info("EMBEDDED_PROVIDER", "Resuming from redirect", {
567
568
  walletId: authResult.walletId,
@@ -840,6 +841,21 @@ var EmbeddedProvider = class {
840
841
  });
841
842
  }
842
843
  }
844
+ /**
845
+ * Handles errors from signing operations.
846
+ * Disconnects the user if the server returns a 401/403 (revoked or expired authenticator).
847
+ */
848
+ async handleSigningError(error) {
849
+ if (isAuthenticationError(error)) {
850
+ this.logger.warn("EMBEDDED_PROVIDER", "Authenticator rejected by server (401/403), disconnecting", { error });
851
+ await this.disconnect(false);
852
+ throw new Error("Authenticator revoked");
853
+ }
854
+ if (error instanceof SpendingLimitError) {
855
+ this.emit("spending_limit_reached", { error });
856
+ }
857
+ throw error;
858
+ }
843
859
  async signMessage(params) {
844
860
  if (!this.client || !this.walletId) {
845
861
  throw new Error("Not connected");
@@ -856,7 +872,7 @@ var EmbeddedProvider = class {
856
872
  message: params.message,
857
873
  networkId: params.networkId,
858
874
  derivationIndex
859
- });
875
+ }).catch((error) => this.handleSigningError(error));
860
876
  this.logger.info("EMBEDDED_PROVIDER", "Message signed successfully", {
861
877
  walletId: this.walletId,
862
878
  message: params.message
@@ -889,7 +905,7 @@ var EmbeddedProvider = class {
889
905
  message: base64UrlMessage,
890
906
  networkId: params.networkId,
891
907
  derivationIndex
892
- });
908
+ }).catch((error) => this.handleSigningError(error));
893
909
  this.logger.info("EMBEDDED_PROVIDER", "Message signed successfully", {
894
910
  walletId: this.walletId,
895
911
  message: params.message
@@ -912,7 +928,7 @@ var EmbeddedProvider = class {
912
928
  typedData: params.typedData,
913
929
  networkId: params.networkId,
914
930
  derivationIndex
915
- });
931
+ }).catch((error) => this.handleSigningError(error));
916
932
  this.logger.info("EMBEDDED_PROVIDER", "Typed data signed successfully", {
917
933
  walletId: this.walletId
918
934
  });
@@ -949,7 +965,7 @@ var EmbeddedProvider = class {
949
965
  networkId: params.networkId,
950
966
  derivationIndex,
951
967
  account
952
- });
968
+ }).catch((error) => this.handleSigningError(error));
953
969
  this.logger.info("EMBEDDED_PROVIDER", "Transaction signed successfully", {
954
970
  walletId: this.walletId,
955
971
  networkId: params.networkId,
@@ -982,21 +998,13 @@ var EmbeddedProvider = class {
982
998
  if (!account) {
983
999
  throw new Error(`No address found for network ${params.networkId}`);
984
1000
  }
985
- let rawResponse;
986
- try {
987
- rawResponse = await this.client.signAndSendTransaction({
988
- walletId: this.walletId,
989
- transaction: transactionPayload,
990
- networkId: params.networkId,
991
- derivationIndex,
992
- account
993
- });
994
- } catch (error) {
995
- if (error instanceof SpendingLimitError) {
996
- this.emit("spending_limit_reached", { error });
997
- }
998
- throw error;
999
- }
1001
+ const rawResponse = await this.client.signAndSendTransaction({
1002
+ walletId: this.walletId,
1003
+ transaction: transactionPayload,
1004
+ networkId: params.networkId,
1005
+ derivationIndex,
1006
+ account
1007
+ }).catch((error) => this.handleSigningError(error));
1000
1008
  this.logger.info("EMBEDDED_PROVIDER", "Transaction signed and sent successfully", {
1001
1009
  walletId: this.walletId,
1002
1010
  networkId: params.networkId,
@@ -1195,6 +1203,7 @@ var EmbeddedProvider = class {
1195
1203
  tempSession.authProvider = authResult.provider || tempSession.authProvider;
1196
1204
  tempSession.accountDerivationIndex = authResult.accountDerivationIndex;
1197
1205
  tempSession.authUserId = authResult.authUserId;
1206
+ tempSession.bearerToken = authResult.bearerToken;
1198
1207
  tempSession.status = "completed";
1199
1208
  tempSession.lastUsed = Date.now();
1200
1209
  if (authResult.expiresInMs > 0) {
@@ -1224,6 +1233,7 @@ var EmbeddedProvider = class {
1224
1233
  session.organizationId = authResult.organizationId;
1225
1234
  session.accountDerivationIndex = authResult.accountDerivationIndex;
1226
1235
  session.authUserId = authResult.authUserId;
1236
+ session.bearerToken = authResult.bearerToken;
1227
1237
  session.status = "completed";
1228
1238
  session.lastUsed = Date.now();
1229
1239
  if (authResult.expiresInMs > 0) {
@@ -1293,7 +1303,8 @@ var EmbeddedProvider = class {
1293
1303
  organizationId: session.organizationId,
1294
1304
  headers: {
1295
1305
  ...this.platform.analyticsHeaders || {},
1296
- ...session.authUserId ? { "x-auth-user-id": session.authUserId } : {}
1306
+ ...session.authUserId ? { "x-auth-user-id": session.authUserId } : {},
1307
+ ...session.bearerToken ? { Authorization: session.bearerToken } : {}
1297
1308
  }
1298
1309
  },
1299
1310
  this.stamper