@phantom/browser-sdk 1.0.6 → 1.0.7

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
@@ -985,6 +985,46 @@ function toggleDebug(enabled: boolean) {
985
985
  }
986
986
  ```
987
987
 
988
+ ## Dapp-Sponsored Transactions (presignTransaction)
989
+
990
+ Pass `presignTransaction` directly to `signAndSendTransaction` for calls that need co-signing. Calls without it proceed normally — it is never applied globally.
991
+
992
+ > **Important:** Phantom embedded wallets do not accept pre-signed transactions. If your use case requires a second signer (e.g. your app as the fee payer), that signing must happen via this option, after Phantom has constructed and validated the transaction. This restriction does not apply to injected providers (e.g. the Phantom browser extension).
993
+
994
+ > **Note:** `presignTransaction` only fires for Solana transactions via the embedded provider. EVM transactions and injected providers are unaffected.
995
+
996
+ ### Transaction format
997
+
998
+ The `transaction` string is **base64url-encoded** (URL-safe base64 without `=` padding, using `-` and `_` instead of `+` and `/`).
999
+
1000
+ The SDK exports `base64urlDecode` and `base64urlEncode` utilities:
1001
+
1002
+ ```ts
1003
+ import { base64urlDecode, base64urlEncode } from "@phantom/browser-sdk";
1004
+ ```
1005
+
1006
+ ### Example: Dapp fee payer
1007
+
1008
+ ```ts
1009
+ import { base64urlDecode, base64urlEncode } from "@phantom/browser-sdk";
1010
+ import { Keypair, VersionedTransaction } from "@solana/web3.js";
1011
+
1012
+ const feePayerKeypair = Keypair.fromSecretKey(/* your fee payer secret key */);
1013
+
1014
+ // This call co-signs as fee payer
1015
+ const result = await sdk.solana.signAndSendTransaction(transaction, {
1016
+ presignTransaction: async (tx, context) => {
1017
+ const txBytes = base64urlDecode(tx);
1018
+ const versionedTx = VersionedTransaction.deserialize(txBytes);
1019
+ versionedTx.sign([feePayerKeypair]);
1020
+ return base64urlEncode(versionedTx.serialize());
1021
+ },
1022
+ });
1023
+
1024
+ // This call has no co-signer
1025
+ const result2 = await sdk.solana.signAndSendTransaction(otherTransaction);
1026
+ ```
1027
+
988
1028
  ## Transaction Examples
989
1029
 
990
1030
  ### Solana Transactions
package/dist/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import { EmbeddedProviderConfig, EmbeddedProviderAuthType, ConnectResult as ConnectResult$1, WalletAddress, EmbeddedProviderEvent, EventCallback } from '@phantom/embedded-provider-core';
2
2
  export { ConnectErrorEventData, ConnectEventData, ConnectStartEventData, DisconnectEventData, EmbeddedProviderEvent, EmbeddedProviderEventMap, EventCallback, SignAndSendTransactionParams, SignMessageParams, SignMessageResult, SignedTransaction, WalletAddress } from '@phantom/embedded-provider-core';
3
3
  import { IEthereumChain, ISolanaChain } from '@phantom/chain-interfaces';
4
- export { EthTransactionRequest, IEthereumChain, ISolanaChain } from '@phantom/chain-interfaces';
4
+ export { EthTransactionRequest, IEthereumChain, ISolanaChain, SignAndSendTransactionOptions } from '@phantom/chain-interfaces';
5
5
  import { AddressType } from '@phantom/client';
6
- export { AddressType } from '@phantom/client';
6
+ export { AddressType, PresignTransactionContext } from '@phantom/client';
7
7
  import { AutoConfirmEnableParams, AutoConfirmResult, AutoConfirmSupportedChainsResult } from '@phantom/browser-injected-sdk/auto-confirm';
8
8
  export { AutoConfirmEnableParams, AutoConfirmResult, AutoConfirmSupportedChainsResult } from '@phantom/browser-injected-sdk/auto-confirm';
9
9
  export { NetworkId, PHANTOM_ICON } from '@phantom/constants';
10
+ export { base64urlDecode, base64urlEncode } from '@phantom/base64url';
10
11
 
11
12
  declare enum DebugLevel {
12
13
  ERROR = 0,
package/dist/index.js CHANGED
@@ -36,6 +36,8 @@ __export(src_exports, {
36
36
  DebugLevel: () => DebugLevel,
37
37
  NetworkId: () => import_constants8.NetworkId,
38
38
  PHANTOM_ICON: () => import_constants9.PHANTOM_ICON,
39
+ base64urlDecode: () => import_base64url2.base64urlDecode,
40
+ base64urlEncode: () => import_base64url2.base64urlEncode,
39
41
  debug: () => debug,
40
42
  detectBrowser: () => detectBrowser,
41
43
  getBrowserDisplayName: () => getBrowserDisplayName,
@@ -2764,7 +2766,7 @@ var BrowserAuthProvider = class {
2764
2766
  // OAuth session management - defaults to allow refresh unless explicitly clearing after logout
2765
2767
  clear_previous_session: (phantomOptions.clearPreviousSession ?? false).toString(),
2766
2768
  allow_refresh: (phantomOptions.allowRefresh ?? true).toString(),
2767
- sdk_version: "1.0.6",
2769
+ sdk_version: "1.0.7",
2768
2770
  sdk_type: "browser",
2769
2771
  platform: detectBrowser().name,
2770
2772
  algorithm: phantomOptions.algorithm || import_constants3.DEFAULT_AUTHENTICATOR_ALGORITHM
@@ -3400,7 +3402,7 @@ var EmbeddedProvider = class extends import_embedded_provider_core.EmbeddedProvi
3400
3402
  [import_constants5.ANALYTICS_HEADERS.CLIENT]: browserName,
3401
3403
  [import_constants5.ANALYTICS_HEADERS.APP_ID]: config.appId,
3402
3404
  [import_constants5.ANALYTICS_HEADERS.WALLET_TYPE]: config.embeddedWalletType,
3403
- [import_constants5.ANALYTICS_HEADERS.SDK_VERSION]: "1.0.6"
3405
+ [import_constants5.ANALYTICS_HEADERS.SDK_VERSION]: "1.0.7"
3404
3406
  // Replaced at build time
3405
3407
  }
3406
3408
  };
@@ -4168,4 +4170,5 @@ var BrowserSDK = class {
4168
4170
  // src/index.ts
4169
4171
  var import_constants8 = require("@phantom/constants");
4170
4172
  var import_client5 = require("@phantom/client");
4173
+ var import_base64url2 = require("@phantom/base64url");
4171
4174
  var import_constants9 = require("@phantom/constants");
package/dist/index.mjs CHANGED
@@ -2714,7 +2714,7 @@ var BrowserAuthProvider = class {
2714
2714
  // OAuth session management - defaults to allow refresh unless explicitly clearing after logout
2715
2715
  clear_previous_session: (phantomOptions.clearPreviousSession ?? false).toString(),
2716
2716
  allow_refresh: (phantomOptions.allowRefresh ?? true).toString(),
2717
- sdk_version: "1.0.6",
2717
+ sdk_version: "1.0.7",
2718
2718
  sdk_type: "browser",
2719
2719
  platform: detectBrowser().name,
2720
2720
  algorithm: phantomOptions.algorithm || DEFAULT_AUTHENTICATOR_ALGORITHM
@@ -3355,7 +3355,7 @@ var EmbeddedProvider = class extends CoreEmbeddedProvider {
3355
3355
  [ANALYTICS_HEADERS.CLIENT]: browserName,
3356
3356
  [ANALYTICS_HEADERS.APP_ID]: config.appId,
3357
3357
  [ANALYTICS_HEADERS.WALLET_TYPE]: config.embeddedWalletType,
3358
- [ANALYTICS_HEADERS.SDK_VERSION]: "1.0.6"
3358
+ [ANALYTICS_HEADERS.SDK_VERSION]: "1.0.7"
3359
3359
  // Replaced at build time
3360
3360
  }
3361
3361
  };
@@ -4125,6 +4125,7 @@ var BrowserSDK = class {
4125
4125
  // src/index.ts
4126
4126
  import { NetworkId } from "@phantom/constants";
4127
4127
  import { AddressType as AddressType4 } from "@phantom/client";
4128
+ import { base64urlEncode as base64urlEncode2, base64urlDecode } from "@phantom/base64url";
4128
4129
  import { PHANTOM_ICON as PHANTOM_ICON3 } from "@phantom/constants";
4129
4130
  export {
4130
4131
  AddressType4 as AddressType,
@@ -4133,6 +4134,8 @@ export {
4133
4134
  DebugLevel,
4134
4135
  NetworkId,
4135
4136
  PHANTOM_ICON3 as PHANTOM_ICON,
4137
+ base64urlDecode,
4138
+ base64urlEncode2 as base64urlEncode,
4136
4139
  debug,
4137
4140
  detectBrowser,
4138
4141
  getBrowserDisplayName,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phantom/browser-sdk",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Browser SDK for Phantom Wallet",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,15 +34,15 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@phantom/auth2": "^1.0.2",
37
- "@phantom/base64url": "^1.0.6",
38
- "@phantom/browser-injected-sdk": "^1.0.6",
39
- "@phantom/chain-interfaces": "^1.0.6",
40
- "@phantom/client": "^1.0.6",
41
- "@phantom/constants": "^1.0.6",
42
- "@phantom/embedded-provider-core": "^1.0.6",
43
- "@phantom/indexed-db-stamper": "^1.0.6",
44
- "@phantom/parsers": "^1.0.6",
45
- "@phantom/sdk-types": "^1.0.6",
37
+ "@phantom/base64url": "^1.0.7",
38
+ "@phantom/browser-injected-sdk": "^1.0.7",
39
+ "@phantom/chain-interfaces": "^1.0.7",
40
+ "@phantom/client": "^1.0.7",
41
+ "@phantom/constants": "^1.0.7",
42
+ "@phantom/embedded-provider-core": "^1.0.7",
43
+ "@phantom/indexed-db-stamper": "^1.0.7",
44
+ "@phantom/parsers": "^1.0.7",
45
+ "@phantom/sdk-types": "^1.0.7",
46
46
  "axios": "^1.10.0",
47
47
  "bs58": "^6.0.0",
48
48
  "buffer": "^6.0.3",