@phantom/server-sdk 1.0.0-beta.9 → 1.0.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/README.md CHANGED
@@ -126,7 +126,7 @@ console.log("Ethereum address:", ethereumAddress);
126
126
  The Server SDK provides two methods for handling transactions:
127
127
 
128
128
  1. **`signTransaction(params)`** - Signs a transaction without submitting it to the network
129
- - Returns the signed transaction
129
+ - Returns the signed transaction
130
130
  - No network interaction
131
131
  - Useful for offline signing or when you want to broadcast later
132
132
 
@@ -311,7 +311,7 @@ const customAddresses = await sdk.getWalletAddresses(
311
311
 
312
312
  ## Network Support
313
313
 
314
- The SDK supports multiple blockchain networks through the `NetworkId` enum:
314
+ The Server SDK uses the `NetworkId` enum to identify blockchain networks for signing transactions and messages.
315
315
 
316
316
  ### Solana Networks
317
317
 
@@ -322,21 +322,75 @@ The SDK supports multiple blockchain networks through the `NetworkId` enum:
322
322
  ### Ethereum Networks
323
323
 
324
324
  - `NetworkId.ETHEREUM_MAINNET` - Ethereum Mainnet
325
- - `NetworkId.ETHEREUM_GOERLI` - Goerli Testnet
326
325
  - `NetworkId.ETHEREUM_SEPOLIA` - Sepolia Testnet
327
326
 
328
- ### Other EVM Networks
327
+ ### Polygon Networks
329
328
 
330
- - `NetworkId.POLYGON_MAINNET` - Polygon Mainnet
331
- - `NetworkId.POLYGON_MUMBAI` - Mumbai Testnet
332
- - `NetworkId.OPTIMISM_MAINNET` - Optimism Mainnet
333
- - `NetworkId.ARBITRUM_ONE` - Arbitrum One
334
- - `NetworkId.BASE_MAINNET` - Base Mainnet
329
+ - `NetworkId.POLYGON_MAINNET` - Polygon Mainnet (Chain ID: 137)
330
+ - `NetworkId.POLYGON_AMOY` - Polygon Amoy Testnet (Chain ID: 80002)
331
+
332
+ ### Base Networks
333
+
334
+ - `NetworkId.BASE_MAINNET` - Base Mainnet (Chain ID: 8453)
335
+ - `NetworkId.BASE_SEPOLIA` - Base Sepolia Testnet (Chain ID: 84532)
336
+
337
+ ### Arbitrum Networks
338
+
339
+ - `NetworkId.ARBITRUM_ONE` - Arbitrum One (Chain ID: 42161)
340
+ - `NetworkId.ARBITRUM_SEPOLIA` - Arbitrum Sepolia Testnet (Chain ID: 421614)
341
+
342
+ ### Monad Networks
343
+
344
+ - `NetworkId.MONAD_MAINNET` - Monad Mainnet (Chain ID: 143)
345
+ - `NetworkId.MONAD_TESTNET` - Monad Testnet (Chain ID: 10143)
335
346
 
336
347
  ### Future Support
337
348
 
338
349
  - `NetworkId.BITCOIN_MAINNET` - Bitcoin Mainnet
350
+ - `NetworkId.BITCOIN_TESTNET` - Bitcoin Testnet
339
351
  - `NetworkId.SUI_MAINNET` - Sui Mainnet
352
+ - `NetworkId.SUI_TESTNET` - Sui Testnet
353
+ - `NetworkId.SUI_DEVNET` - Sui Devnet
354
+
355
+ ### Usage Examples
356
+
357
+ ```typescript
358
+ import { ServerSDK, NetworkId } from "@phantom/server-sdk";
359
+
360
+ const sdk = new ServerSDK({
361
+ organizationId: process.env.ORGANIZATION_ID!,
362
+ appId: process.env.APP_ID!,
363
+ apiPrivateKey: process.env.PRIVATE_KEY!,
364
+ });
365
+
366
+ // Sign a message on Solana
367
+ await sdk.signMessage({
368
+ walletId: wallet.walletId,
369
+ message: "Hello from Phantom!",
370
+ networkId: NetworkId.SOLANA_MAINNET,
371
+ });
372
+
373
+ // Sign a transaction on Ethereum
374
+ await sdk.signAndSendTransaction({
375
+ walletId: wallet.walletId,
376
+ transaction: ethTransaction,
377
+ networkId: NetworkId.ETHEREUM_MAINNET,
378
+ });
379
+
380
+ // Sign on Polygon
381
+ await sdk.signAndSendTransaction({
382
+ walletId: wallet.walletId,
383
+ transaction: polygonTransaction,
384
+ networkId: NetworkId.POLYGON_MAINNET,
385
+ });
386
+
387
+ // Sign on Base
388
+ await sdk.signAndSendTransaction({
389
+ walletId: wallet.walletId,
390
+ transaction: baseTransaction,
391
+ networkId: NetworkId.BASE_MAINNET,
392
+ });
393
+ ```
340
394
 
341
395
  ## API Reference
342
396
 
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AddressType, NetworkId, PhantomClient, Organization, GetWalletsResult, CreateWalletResult } from '@phantom/client';
2
2
  export { CreateWalletResult, DerivationPath, GetWalletsResult, NetworkConfig, PhantomClient, SignedTransaction, SignedTransactionResult, Transaction, Wallet, deriveSubmissionConfig, generateKeyPair, getDerivationPathForNetwork, getNetworkConfig, getNetworkDescription, getNetworkIdsByChain, getSupportedNetworkIds, supportsTransactionSubmission } from '@phantom/client';
3
3
  import { ParsedSignatureResult, ParsedTransactionResult } from '@phantom/parsers';
4
- export { ParsedMessage, ParsedSignatureResult, ParsedTransaction, ParsedTransactionResult, parseMessage, parseSignMessageResponse, parseTransactionResponse, parseTransactionToBase64Url } from '@phantom/parsers';
4
+ export { ParsedSignatureResult, ParsedTransaction, ParsedTransactionResult, parseSignMessageResponse, parseToKmsTransaction, parseTransactionResponse } from '@phantom/parsers';
5
5
  export { NetworkId } from '@phantom/constants';
6
6
  export { ApiKeyStamper } from '@phantom/api-key-stamper';
7
7
 
@@ -42,6 +42,7 @@ declare class ServerSDK {
42
42
  constructor(config: ServerSDKConfig);
43
43
  /**
44
44
  * Sign a message - supports plain text and automatically converts to base64url
45
+ * Routes to appropriate signing method based on network type
45
46
  * @param params - Message parameters with plain text message
46
47
  * @returns Promise<ParsedSignatureResult> - Parsed signature with explorer URL
47
48
  */
package/dist/index.js CHANGED
@@ -42,10 +42,9 @@ __export(src_exports, {
42
42
  getNetworkDescription: () => import_client2.getNetworkDescription,
43
43
  getNetworkIdsByChain: () => import_client2.getNetworkIdsByChain,
44
44
  getSupportedNetworkIds: () => import_client2.getSupportedNetworkIds,
45
- parseMessage: () => import_parsers2.parseMessage,
46
45
  parseSignMessageResponse: () => import_parsers2.parseSignMessageResponse,
46
+ parseToKmsTransaction: () => import_parsers2.parseToKmsTransaction,
47
47
  parseTransactionResponse: () => import_parsers2.parseTransactionResponse,
48
- parseTransactionToBase64Url: () => import_parsers2.parseTransactionToBase64Url,
49
48
  supportsTransactionSubmission: () => import_client2.supportsTransactionSubmission
50
49
  });
51
50
  module.exports = __toCommonJS(src_exports);
@@ -59,8 +58,13 @@ var import_bs58 = __toESM(require("bs58"));
59
58
  // package.json
60
59
  var package_default = {
61
60
  name: "@phantom/server-sdk",
62
- version: "1.0.0-beta.9",
61
+ version: "1.0.0",
63
62
  description: "Server SDK for Phantom Wallet",
63
+ repository: {
64
+ type: "git",
65
+ url: "https://github.com/phantom/phantom-connect-sdk",
66
+ directory: "packages/server-sdk"
67
+ },
64
68
  main: "dist/index.js",
65
69
  module: "dist/index.mjs",
66
70
  types: "dist/index.d.ts",
@@ -147,25 +151,23 @@ var ServerSDK = class {
147
151
  {
148
152
  apiBaseUrl: config.apiBaseUrl || import_constants.DEFAULT_WALLET_API_URL,
149
153
  organizationId: config.organizationId,
150
- headers
154
+ headers,
155
+ walletType: "server-wallet"
151
156
  },
152
157
  stamper
153
158
  );
154
159
  }
155
160
  /**
156
161
  * Sign a message - supports plain text and automatically converts to base64url
162
+ * Routes to appropriate signing method based on network type
157
163
  * @param params - Message parameters with plain text message
158
164
  * @returns Promise<ParsedSignatureResult> - Parsed signature with explorer URL
159
165
  */
160
166
  async signMessage(params) {
161
- const parsedMessage = (0, import_parsers.parseMessage)(params.message);
162
- const signMessageParams = {
163
- walletId: params.walletId,
164
- message: parsedMessage.base64url,
165
- networkId: params.networkId,
166
- derivationIndex: params.derivationIndex
167
- };
168
- const rawResponse = await this.client.signMessage(signMessageParams);
167
+ const rawResponse = (0, import_utils.isEthereumChain)(params.networkId) ? await this.client.ethereumSignMessage({
168
+ ...params,
169
+ message: (0, import_base64url.stringToBase64url)(params.message)
170
+ }) : await this.client.signUtf8Message(params);
169
171
  return (0, import_parsers.parseSignMessageResponse)(rawResponse, params.networkId);
170
172
  }
171
173
  /**
@@ -174,15 +176,18 @@ var ServerSDK = class {
174
176
  * @returns Promise<ParsedTransactionResult> - Parsed transaction result without hash
175
177
  */
176
178
  async signTransaction(params) {
177
- const parsedTransaction = await (0, import_parsers.parseTransactionToBase64Url)(params.transaction, params.networkId);
178
- const signTransactionParams = {
179
+ const parsedTransaction = await (0, import_parsers.parseToKmsTransaction)(params.transaction, params.networkId);
180
+ const transactionPayload = parsedTransaction.parsed;
181
+ if (!transactionPayload) {
182
+ throw new Error("Failed to parse transaction: no valid encoding found");
183
+ }
184
+ const rawResponse = await this.client.signTransaction({
179
185
  walletId: params.walletId,
180
- transaction: parsedTransaction.base64url,
186
+ transaction: transactionPayload,
181
187
  networkId: params.networkId,
182
188
  derivationIndex: params.derivationIndex,
183
189
  account: params.account
184
- };
185
- const rawResponse = await this.client.signTransaction(signTransactionParams);
190
+ });
186
191
  return await (0, import_parsers.parseTransactionResponse)(rawResponse.rawTransaction, params.networkId);
187
192
  }
188
193
  /**
@@ -191,15 +196,18 @@ var ServerSDK = class {
191
196
  * @returns Promise<ParsedTransactionResult> - Parsed transaction result with hash and explorer URL
192
197
  */
193
198
  async signAndSendTransaction(params) {
194
- const parsedTransaction = await (0, import_parsers.parseTransactionToBase64Url)(params.transaction, params.networkId);
195
- const signAndSendParams = {
199
+ const parsedTransaction = await (0, import_parsers.parseToKmsTransaction)(params.transaction, params.networkId);
200
+ const transactionPayload = parsedTransaction.parsed;
201
+ if (!transactionPayload) {
202
+ throw new Error("Failed to parse transaction: no valid encoding found");
203
+ }
204
+ const rawResponse = await this.client.signAndSendTransaction({
196
205
  walletId: params.walletId,
197
- transaction: parsedTransaction.base64url,
206
+ transaction: transactionPayload,
198
207
  networkId: params.networkId,
199
208
  derivationIndex: params.derivationIndex,
200
209
  account: params.account
201
- };
202
- const rawResponse = await this.client.signAndSendTransaction(signAndSendParams);
210
+ });
203
211
  return await (0, import_parsers.parseTransactionResponse)(rawResponse.rawTransaction, params.networkId, rawResponse.hash);
204
212
  }
205
213
  createOrganization(name, keyPair) {
@@ -208,7 +216,8 @@ var ServerSDK = class {
208
216
  {
209
217
  apiBaseUrl: this.config.apiBaseUrl || import_constants.DEFAULT_WALLET_API_URL,
210
218
  organizationId: this.config.organizationId,
211
- headers
219
+ headers,
220
+ walletType: "server-wallet"
212
221
  },
213
222
  new import_api_key_stamper.ApiKeyStamper({
214
223
  apiSecretKey: keyPair.secretKey
@@ -254,9 +263,8 @@ var ServerSDK = class {
254
263
  getNetworkDescription,
255
264
  getNetworkIdsByChain,
256
265
  getSupportedNetworkIds,
257
- parseMessage,
258
266
  parseSignMessageResponse,
267
+ parseToKmsTransaction,
259
268
  parseTransactionResponse,
260
- parseTransactionToBase64Url,
261
269
  supportsTransactionSubmission
262
270
  });
package/dist/index.mjs CHANGED
@@ -2,20 +2,22 @@
2
2
  import {
3
3
  PhantomClient
4
4
  } from "@phantom/client";
5
- import { randomUUID, getSecureTimestampSync } from "@phantom/utils";
6
- import {
7
- ANALYTICS_HEADERS,
8
- DEFAULT_WALLET_API_URL
9
- } from "@phantom/constants";
5
+ import { randomUUID, getSecureTimestampSync, isEthereumChain } from "@phantom/utils";
6
+ import { ANALYTICS_HEADERS, DEFAULT_WALLET_API_URL } from "@phantom/constants";
10
7
  import { ApiKeyStamper } from "@phantom/api-key-stamper";
11
- import { base64urlEncode } from "@phantom/base64url";
8
+ import { base64urlEncode, stringToBase64url } from "@phantom/base64url";
12
9
  import bs58 from "bs58";
13
10
 
14
11
  // package.json
15
12
  var package_default = {
16
13
  name: "@phantom/server-sdk",
17
- version: "1.0.0-beta.9",
14
+ version: "1.0.0",
18
15
  description: "Server SDK for Phantom Wallet",
16
+ repository: {
17
+ type: "git",
18
+ url: "https://github.com/phantom/phantom-connect-sdk",
19
+ directory: "packages/server-sdk"
20
+ },
19
21
  main: "dist/index.js",
20
22
  module: "dist/index.mjs",
21
23
  types: "dist/index.d.ts",
@@ -69,8 +71,7 @@ var package_default = {
69
71
 
70
72
  // src/index.ts
71
73
  import {
72
- parseMessage,
73
- parseTransactionToBase64Url,
74
+ parseToKmsTransaction,
74
75
  parseSignMessageResponse,
75
76
  parseTransactionResponse
76
77
  } from "@phantom/parsers";
@@ -89,8 +90,7 @@ import {
89
90
  import { NetworkId } from "@phantom/constants";
90
91
  import { ApiKeyStamper as ApiKeyStamper2 } from "@phantom/api-key-stamper";
91
92
  import {
92
- parseMessage as parseMessage2,
93
- parseTransactionToBase64Url as parseTransactionToBase64Url2,
93
+ parseToKmsTransaction as parseToKmsTransaction2,
94
94
  parseSignMessageResponse as parseSignMessageResponse2,
95
95
  parseTransactionResponse as parseTransactionResponse2
96
96
  } from "@phantom/parsers";
@@ -123,25 +123,23 @@ var ServerSDK = class {
123
123
  {
124
124
  apiBaseUrl: config.apiBaseUrl || DEFAULT_WALLET_API_URL,
125
125
  organizationId: config.organizationId,
126
- headers
126
+ headers,
127
+ walletType: "server-wallet"
127
128
  },
128
129
  stamper
129
130
  );
130
131
  }
131
132
  /**
132
133
  * Sign a message - supports plain text and automatically converts to base64url
134
+ * Routes to appropriate signing method based on network type
133
135
  * @param params - Message parameters with plain text message
134
136
  * @returns Promise<ParsedSignatureResult> - Parsed signature with explorer URL
135
137
  */
136
138
  async signMessage(params) {
137
- const parsedMessage = parseMessage(params.message);
138
- const signMessageParams = {
139
- walletId: params.walletId,
140
- message: parsedMessage.base64url,
141
- networkId: params.networkId,
142
- derivationIndex: params.derivationIndex
143
- };
144
- const rawResponse = await this.client.signMessage(signMessageParams);
139
+ const rawResponse = isEthereumChain(params.networkId) ? await this.client.ethereumSignMessage({
140
+ ...params,
141
+ message: stringToBase64url(params.message)
142
+ }) : await this.client.signUtf8Message(params);
145
143
  return parseSignMessageResponse(rawResponse, params.networkId);
146
144
  }
147
145
  /**
@@ -150,15 +148,18 @@ var ServerSDK = class {
150
148
  * @returns Promise<ParsedTransactionResult> - Parsed transaction result without hash
151
149
  */
152
150
  async signTransaction(params) {
153
- const parsedTransaction = await parseTransactionToBase64Url(params.transaction, params.networkId);
154
- const signTransactionParams = {
151
+ const parsedTransaction = await parseToKmsTransaction(params.transaction, params.networkId);
152
+ const transactionPayload = parsedTransaction.parsed;
153
+ if (!transactionPayload) {
154
+ throw new Error("Failed to parse transaction: no valid encoding found");
155
+ }
156
+ const rawResponse = await this.client.signTransaction({
155
157
  walletId: params.walletId,
156
- transaction: parsedTransaction.base64url,
158
+ transaction: transactionPayload,
157
159
  networkId: params.networkId,
158
160
  derivationIndex: params.derivationIndex,
159
161
  account: params.account
160
- };
161
- const rawResponse = await this.client.signTransaction(signTransactionParams);
162
+ });
162
163
  return await parseTransactionResponse(rawResponse.rawTransaction, params.networkId);
163
164
  }
164
165
  /**
@@ -167,15 +168,18 @@ var ServerSDK = class {
167
168
  * @returns Promise<ParsedTransactionResult> - Parsed transaction result with hash and explorer URL
168
169
  */
169
170
  async signAndSendTransaction(params) {
170
- const parsedTransaction = await parseTransactionToBase64Url(params.transaction, params.networkId);
171
- const signAndSendParams = {
171
+ const parsedTransaction = await parseToKmsTransaction(params.transaction, params.networkId);
172
+ const transactionPayload = parsedTransaction.parsed;
173
+ if (!transactionPayload) {
174
+ throw new Error("Failed to parse transaction: no valid encoding found");
175
+ }
176
+ const rawResponse = await this.client.signAndSendTransaction({
172
177
  walletId: params.walletId,
173
- transaction: parsedTransaction.base64url,
178
+ transaction: transactionPayload,
174
179
  networkId: params.networkId,
175
180
  derivationIndex: params.derivationIndex,
176
181
  account: params.account
177
- };
178
- const rawResponse = await this.client.signAndSendTransaction(signAndSendParams);
182
+ });
179
183
  return await parseTransactionResponse(rawResponse.rawTransaction, params.networkId, rawResponse.hash);
180
184
  }
181
185
  createOrganization(name, keyPair) {
@@ -184,7 +188,8 @@ var ServerSDK = class {
184
188
  {
185
189
  apiBaseUrl: this.config.apiBaseUrl || DEFAULT_WALLET_API_URL,
186
190
  organizationId: this.config.organizationId,
187
- headers
191
+ headers,
192
+ walletType: "server-wallet"
188
193
  },
189
194
  new ApiKeyStamper({
190
195
  apiSecretKey: keyPair.secretKey
@@ -229,9 +234,8 @@ export {
229
234
  getNetworkDescription,
230
235
  getNetworkIdsByChain,
231
236
  getSupportedNetworkIds,
232
- parseMessage2 as parseMessage,
233
237
  parseSignMessageResponse2 as parseSignMessageResponse,
238
+ parseToKmsTransaction2 as parseToKmsTransaction,
234
239
  parseTransactionResponse2 as parseTransactionResponse,
235
- parseTransactionToBase64Url2 as parseTransactionToBase64Url,
236
240
  supportsTransactionSubmission
237
241
  };
package/package.json CHANGED
@@ -1,7 +1,12 @@
1
1
  {
2
2
  "name": "@phantom/server-sdk",
3
- "version": "1.0.0-beta.9",
3
+ "version": "1.0.0",
4
4
  "description": "Server SDK for Phantom Wallet",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/phantom/phantom-connect-sdk",
8
+ "directory": "packages/server-sdk"
9
+ },
5
10
  "main": "dist/index.js",
6
11
  "module": "dist/index.mjs",
7
12
  "types": "dist/index.d.ts",
@@ -37,12 +42,12 @@
37
42
  "typescript": "^5.0.4"
38
43
  },
39
44
  "dependencies": {
40
- "@phantom/api-key-stamper": "^1.0.0-beta.6",
41
- "@phantom/base64url": "^1.0.0-beta.6",
42
- "@phantom/client": "^1.0.0-beta.9",
43
- "@phantom/constants": "^1.0.0-beta.6",
44
- "@phantom/parsers": "^1.0.0-beta.6",
45
- "@phantom/utils": "^1.0.0-beta.3",
45
+ "@phantom/api-key-stamper": "^1.0.0",
46
+ "@phantom/base64url": "^1.0.0",
47
+ "@phantom/client": "^1.0.0",
48
+ "@phantom/constants": "^1.0.0",
49
+ "@phantom/parsers": "^1.0.0",
50
+ "@phantom/utils": "^1.0.0",
46
51
  "bs58": "^6.0.0"
47
52
  },
48
53
  "files": [