@phantom/embedded-provider-core 1.0.3 → 1.0.5
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 +17 -3
- package/dist/index.d.ts +17 -3
- package/dist/index.js +33 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +34 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -9
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
|
-
|
|
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
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
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
|