@solana/keychain-fireblocks 0.6.1 → 1.1.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.
@@ -3,9 +3,10 @@
3
3
  *
4
4
  * Unlike other signers, Fireblocks PROGRAM_CALL mode signs AND broadcasts
5
5
  * the transaction to Solana through Fireblocks' infrastructure. The signed
6
- * transaction never returns to the caller only a txHash comes back after
7
- * polling. This means LiteSVM (used by runSignerIntegrationTest) can never
8
- * observe the transaction, so we test against devnet directly.
6
+ * transaction never returns to the caller, and the broadcast transaction id
7
+ * is not a reusable signer-bound signature artifact. This means LiteSVM
8
+ * (used by runSignerIntegrationTest) can never observe a signer-specific
9
+ * transaction signature from PROGRAM_CALL, so we test against devnet directly.
9
10
  *
10
11
  * RAW mode returns a raw signature but is not available on the Fireblocks
11
12
  * sandbox/testnet environment used in CI.
@@ -21,7 +22,7 @@ function hasRequiredEnvVars() {
21
22
  return REQUIRED_ENV_VARS.every(v => process.env[v]);
22
23
  }
23
24
  describe('FireblocksSigner Integration', () => {
24
- it.skipIf(!hasRequiredEnvVars())('signs transactions with PROGRAM_CALL', async () => {
25
+ it.skipIf(!hasRequiredEnvVars())('fails closed for PROGRAM_CALL because Fireblocks only returns a broadcast transaction id', async () => {
25
26
  const signer = await createFireblocksSigner({
26
27
  apiKey: process.env.FIREBLOCKS_API_KEY,
27
28
  assetId: process.env.FIREBLOCKS_ASSET_ID ?? 'SOL_TEST',
@@ -33,9 +34,7 @@ describe('FireblocksSigner Integration', () => {
33
34
  const rpc = createSolanaRpc(rpcUrl);
34
35
  const { value: { blockhash, lastValidBlockHeight }, } = await rpc.getLatestBlockhash().send();
35
36
  const transaction = pipe(createTransactionMessage({ version: 0 }), tx => setTransactionMessageFeePayerSigner(signer, tx), tx => appendTransactionMessageInstructions([getAddMemoInstruction({ memo: 'Fireblocks test' })], tx), tx => setTransactionMessageLifetimeUsingBlockhash({ blockhash, lastValidBlockHeight }, tx));
36
- const signed = await signTransactionMessageWithSigners(transaction);
37
- expect(signed.signatures[signer.address]).toBeDefined();
38
- expect(signed.signatures[signer.address]?.length).toBe(64);
37
+ await expect(signTransactionMessageWithSigners(transaction)).rejects.toThrow('Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature');
39
38
  }, 120000);
40
39
  // RAW signing not available on Fireblocks testnet/sandbox
41
40
  it.skip('signs messages with real API', () => { });
@@ -1 +1 @@
1
- {"version":3,"file":"fireblocks-signer.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/fireblocks-signer.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fireblocks-signer.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/fireblocks-signer.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,27 @@
1
1
  import { generateKeyPairSigner } from '@solana/signers';
2
2
  import { beforeEach, describe, expect, it, vi } from 'vitest';
3
3
  import { assertIsSolanaSigner } from '@solana/keychain-core';
4
+ vi.mock('@solana/transactions', async (importOriginal) => {
5
+ const mod = await importOriginal();
6
+ return {
7
+ ...mod,
8
+ getBase64EncodedWireTransaction: vi.fn(() => 'base64-wire-transaction'),
9
+ };
10
+ });
4
11
  import { FireblocksSigner } from '../fireblocks-signer.js';
5
12
  import { TEST_API_KEY, TEST_RSA_PRIVATE_KEY, TEST_VAULT_ACCOUNT_ID } from './setup.js';
6
13
  vi.mock('@solana/keychain-core', async (importOriginal) => {
7
14
  const mod = await importOriginal();
8
- return { ...mod, assertSignatureValid: vi.fn() };
15
+ return {
16
+ ...mod,
17
+ assertSignatureValid: vi.fn(),
18
+ sanitizeRemoteErrorResponse: mod.sanitizeRemoteErrorResponse ??
19
+ ((text) => `${text
20
+ .replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, ' ')
21
+ .replace(/\s+/g, ' ')
22
+ .trim()
23
+ .slice(0, 256)} [truncated]`),
24
+ };
9
25
  });
10
26
  // Mock fetch globally
11
27
  global.fetch = vi.fn();
@@ -51,6 +67,26 @@ describe('FireblocksSigner', () => {
51
67
  });
52
68
  }).toThrow('Missing required vaultAccountId field');
53
69
  });
70
+ it('should throw error when apiBaseUrl is not a valid URL', () => {
71
+ expect(() => {
72
+ new FireblocksSigner({
73
+ apiBaseUrl: 'not-a-url',
74
+ apiKey: TEST_API_KEY,
75
+ privateKeyPem: TEST_RSA_PRIVATE_KEY,
76
+ vaultAccountId: TEST_VAULT_ACCOUNT_ID,
77
+ });
78
+ }).toThrow('apiBaseUrl is not a valid URL');
79
+ });
80
+ it('should throw error when apiBaseUrl does not use HTTPS', () => {
81
+ expect(() => {
82
+ new FireblocksSigner({
83
+ apiBaseUrl: 'http://api.fireblocks.test',
84
+ apiKey: TEST_API_KEY,
85
+ privateKeyPem: TEST_RSA_PRIVATE_KEY,
86
+ vaultAccountId: TEST_VAULT_ACCOUNT_ID,
87
+ });
88
+ }).toThrow('apiBaseUrl must use HTTPS');
89
+ });
54
90
  it('should validate requestDelayMs', () => {
55
91
  expect(() => {
56
92
  new FireblocksSigner({
@@ -177,6 +213,21 @@ describe('FireblocksSigner', () => {
177
213
  });
178
214
  await expect(signer.init()).rejects.toThrow('Invalid address from Fireblocks');
179
215
  });
216
+ it('should throw structured error on malformed address response shape', async () => {
217
+ mockFetch.mockResolvedValueOnce({
218
+ ok: true,
219
+ json: async () => ({}),
220
+ });
221
+ const signer = new FireblocksSigner({
222
+ apiKey: TEST_API_KEY,
223
+ privateKeyPem: TEST_RSA_PRIVATE_KEY,
224
+ vaultAccountId: TEST_VAULT_ACCOUNT_ID,
225
+ });
226
+ await expect(signer.init()).rejects.toMatchObject({
227
+ code: 'SIGNER_INVALID_PUBLIC_KEY',
228
+ message: expect.stringContaining('No addresses found in Fireblocks vault'),
229
+ });
230
+ });
180
231
  it('should not re-initialize if already initialized', async () => {
181
232
  const keyPair = await generateKeyPairSigner();
182
233
  mockFetch.mockResolvedValueOnce({
@@ -394,7 +445,7 @@ describe('FireblocksSigner', () => {
394
445
  expect(result).toHaveLength(1);
395
446
  expect(result[0]).toHaveProperty(signer.address);
396
447
  });
397
- it('should extract signature from txHash (base58) when signedMessages is absent', async () => {
448
+ it('should reject PROGRAM_CALL txHash because it is not a reusable signer-bound signature', async () => {
398
449
  const keyPair = await generateKeyPairSigner();
399
450
  // Mock init fetch
400
451
  mockFetch.mockResolvedValueOnce({
@@ -406,8 +457,8 @@ describe('FireblocksSigner', () => {
406
457
  ok: true,
407
458
  json: async () => ({ id: 'tx-123', status: 'SUBMITTED' }),
408
459
  });
409
- // Mock poll for completion - return txHash (base58 encoded 64 bytes) instead of signedMessages
410
- // This tests the txHash extraction path in pollForSignature
460
+ // Mock poll for completion - PROGRAM_CALL returns txHash after broadcast,
461
+ // which must not be treated as a reusable signer-bound signature.
411
462
  mockFetch.mockResolvedValueOnce({
412
463
  ok: true,
413
464
  json: async () => ({
@@ -419,6 +470,7 @@ describe('FireblocksSigner', () => {
419
470
  const signer = new FireblocksSigner({
420
471
  apiKey: TEST_API_KEY,
421
472
  privateKeyPem: TEST_RSA_PRIVATE_KEY,
473
+ useProgramCall: true,
422
474
  vaultAccountId: TEST_VAULT_ACCOUNT_ID,
423
475
  });
424
476
  await signer.init();
@@ -426,11 +478,9 @@ describe('FireblocksSigner', () => {
426
478
  messageBytes: new Uint8Array([1, 2, 3, 4]),
427
479
  signatures: {},
428
480
  };
429
- const result = await signer.signTransactions([transaction]);
430
- expect(result).toHaveLength(1);
431
- expect(result[0]).toHaveProperty(signer.address);
481
+ await expect(signer.signTransactions([transaction])).rejects.toThrow('Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature');
432
482
  });
433
- it('should throw error when txHash decodes to invalid length', async () => {
483
+ it('should still reject malformed txHash in PROGRAM_CALL because it is not a reusable signer-bound signature', async () => {
434
484
  const keyPair = await generateKeyPairSigner();
435
485
  // Mock init fetch
436
486
  mockFetch.mockResolvedValueOnce({
@@ -442,18 +492,20 @@ describe('FireblocksSigner', () => {
442
492
  ok: true,
443
493
  json: async () => ({ id: 'tx-123', status: 'SUBMITTED' }),
444
494
  });
445
- // Mock poll for completion - return a short base58 string (not 64 bytes)
495
+ // Mock poll for completion - txHash remains a broadcast transaction id,
496
+ // regardless of whether it would decode to a valid signature length.
446
497
  mockFetch.mockResolvedValueOnce({
447
498
  ok: true,
448
499
  json: async () => ({
449
500
  id: 'tx-123',
450
501
  status: 'COMPLETED',
451
- txHash: '2abc', // Very short, will decode to fewer than 64 bytes
502
+ txHash: '2abc',
452
503
  }),
453
504
  });
454
505
  const signer = new FireblocksSigner({
455
506
  apiKey: TEST_API_KEY,
456
507
  privateKeyPem: TEST_RSA_PRIVATE_KEY,
508
+ useProgramCall: true,
457
509
  vaultAccountId: TEST_VAULT_ACCOUNT_ID,
458
510
  });
459
511
  await signer.init();
@@ -461,7 +513,7 @@ describe('FireblocksSigner', () => {
461
513
  messageBytes: new Uint8Array([1, 2, 3, 4]),
462
514
  signatures: {},
463
515
  };
464
- await expect(signer.signTransactions([transaction])).rejects.toThrow('Invalid txHash length');
516
+ await expect(signer.signTransactions([transaction])).rejects.toThrow('Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature');
465
517
  });
466
518
  });
467
519
  describe('isAvailable', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"fireblocks-signer.test.js","sourceRoot":"","sources":["../../src/__tests__/fireblocks-signer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fireblocks-signer.test.js","sourceRoot":"","sources":["../../src/__tests__/fireblocks-signer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jwt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/jwt.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { decodeJwt } from 'jose';
3
+ import { createJwt } from '../jwt.js';
4
+ import { TEST_API_KEY, TEST_RSA_PRIVATE_KEY } from './setup.js';
5
+ const JWT_TTL_SECS = 120;
6
+ const JWT_SKEW_LEEWAY_SECS = 60;
7
+ describe('createJwt', () => {
8
+ beforeEach(() => {
9
+ vi.restoreAllMocks();
10
+ });
11
+ it('sets clock-skew tolerant timing claims', async () => {
12
+ const nowMs = 1700000000000;
13
+ const nowSec = Math.floor(nowMs / 1000);
14
+ vi.spyOn(Date, 'now').mockReturnValue(nowMs);
15
+ const token = await createJwt(TEST_API_KEY, TEST_RSA_PRIVATE_KEY, '/v1/test', '{"hello":"world"}');
16
+ const payload = decodeJwt(token);
17
+ expect(payload.iat).toBe(nowSec - JWT_SKEW_LEEWAY_SECS);
18
+ expect(payload.nbf).toBe(nowSec - JWT_SKEW_LEEWAY_SECS);
19
+ expect(payload.exp).toBe(nowSec + JWT_TTL_SECS);
20
+ });
21
+ it('includes expected claims for Fireblocks auth', async () => {
22
+ const token = await createJwt(TEST_API_KEY, TEST_RSA_PRIVATE_KEY, '/v1/transactions', '');
23
+ const payload = decodeJwt(token);
24
+ expect(payload.sub).toBe(TEST_API_KEY);
25
+ expect(payload.uri).toBe('/v1/transactions');
26
+ expect(typeof payload.nonce).toBe('string');
27
+ expect(typeof payload.bodyHash).toBe('string');
28
+ expect(payload.bodyHash.length).toBe(64);
29
+ });
30
+ });
31
+ //# sourceMappingURL=jwt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.js","sourceRoot":"","sources":["../../src/__tests__/jwt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,KAAK,GAAG,aAAiB,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QACxC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAE,OAAO,CAAC,QAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -3,6 +3,13 @@ import { SolanaSigner } from '@solana/keychain-core';
3
3
  import { SignableMessage, SignatureDictionary } from '@solana/signers';
4
4
  import { Transaction, TransactionWithinSizeLimit, TransactionWithLifetime } from '@solana/transactions';
5
5
  import type { FireblocksSignerConfig } from './types.js';
6
+ /**
7
+ * Create and initialize a Fireblocks-backed signer.
8
+ *
9
+ * @throws {SignerError} `SIGNER_CONFIG_ERROR` when required config is missing or invalid.
10
+ * @throws {SignerError} `SIGNER_HTTP_ERROR`, `SIGNER_REMOTE_API_ERROR`, `SIGNER_PARSING_ERROR`,
11
+ * or `SIGNER_INVALID_PUBLIC_KEY` when signer initialization fails.
12
+ */
6
13
  export declare function createFireblocksSigner<TAddress extends string = string>(config: FireblocksSignerConfig): Promise<SolanaSigner<TAddress>>;
7
14
  /**
8
15
  * Fireblocks-based signer for Solana transactions
@@ -73,12 +80,13 @@ export declare class FireblocksSigner<TAddress extends string = string> implemen
73
80
  */
74
81
  private signRawBytes;
75
82
  /**
76
- * Sign a transaction using Fireblocks PROGRAM_CALL operation
77
- * This broadcasts the transaction to Solana through Fireblocks
83
+ * Sign a transaction using Fireblocks PROGRAM_CALL operation.
84
+ * This broadcasts the transaction through Fireblocks but does not yield a
85
+ * reusable signer-bound signature artifact for the local signer address.
78
86
  */
79
87
  private signWithProgramCall;
80
88
  /**
81
- * Poll for transaction completion and extract signature
89
+ * Poll for transaction completion and extract a reusable signer-bound signature.
82
90
  */
83
91
  private pollForSignature;
84
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fireblocks-signer.d.ts","sourceRoot":"","sources":["../src/fireblocks-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmB,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAIH,YAAY,EAEf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAEH,WAAW,EACX,0BAA0B,EAC1B,uBAAuB,EAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAGR,sBAAsB,EAGzB,MAAM,YAAY,CAAC;AAGpB,wBAAsB,sBAAsB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACzE,MAAM,EAAE,sBAAsB,GAC/B,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAEjC;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,YAAY,CAAC,QAAQ,CAAC;IAC7F,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;WACU,MAAM,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChD,MAAM,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAMtC;;OAEG;gBACS,MAAM,EAAE,sBAAsB;IAgC1C;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAO/B;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;YACW,KAAK;IAMnB;;OAEG;YACW,cAAc;IA2D5B;;OAEG;YACW,OAAO;IA2CrB;;OAEG;YACW,YAAY;IAsB1B;;;OAGG;YACW,mBAAmB;IAsBjC;;OAEG;YACW,gBAAgB;IA4D9B;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAwBjG;;OAEG;IACG,gBAAgB,CAClB,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,0BAA0B,GAAG,uBAAuB,CAAC,EAAE,GAC9F,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IA0B1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBrC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAO5B"}
1
+ {"version":3,"file":"fireblocks-signer.d.ts","sourceRoot":"","sources":["../src/fireblocks-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmB,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAKH,YAAY,EAEf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAEH,WAAW,EACX,0BAA0B,EAC1B,uBAAuB,EAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAGR,sBAAsB,EAGzB,MAAM,YAAY,CAAC;AAGpB;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACzE,MAAM,EAAE,sBAAsB,GAC/B,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAEjC;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,YAAY,CAAC,QAAQ,CAAC;IAC7F,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;WACU,MAAM,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChD,MAAM,EAAE,sBAAsB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAMtC;;OAEG;gBACS,MAAM,EAAE,sBAAsB;IAmC1C;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAO/B;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;YACW,KAAK;IAMnB;;OAEG;YACW,cAAc;IA2D5B;;OAEG;YACW,OAAO;IA2CrB;;OAEG;YACW,YAAY;IAsB1B;;;;OAIG;YACW,mBAAmB;IAsBjC;;OAEG;YACW,gBAAgB;IA0D9B;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAwBjG;;OAEG;IACG,gBAAgB,CAClB,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,0BAA0B,GAAG,uBAAuB,CAAC,EAAE,GAC9F,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAsB1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBrC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAO5B"}
@@ -1,9 +1,16 @@
1
1
  import { assertIsAddress } from '@solana/addresses';
2
- import { getBase16Decoder, getBase16Encoder, getBase58Encoder } from '@solana/codecs-strings';
3
- import { assertSignatureValid, createSignatureDictionary, SignerErrorCode, throwSignerError, } from '@solana/keychain-core';
2
+ import { getBase16Decoder, getBase16Encoder } from '@solana/codecs-strings';
3
+ import { assertSignatureValid, createSignatureDictionary, sanitizeRemoteErrorResponse, SignerErrorCode, throwSignerError, } from '@solana/keychain-core';
4
4
  import { getBase64EncodedWireTransaction, } from '@solana/transactions';
5
5
  import { createJwt } from './jwt.js';
6
6
  import { isTerminalStatus } from './types.js';
7
+ /**
8
+ * Create and initialize a Fireblocks-backed signer.
9
+ *
10
+ * @throws {SignerError} `SIGNER_CONFIG_ERROR` when required config is missing or invalid.
11
+ * @throws {SignerError} `SIGNER_HTTP_ERROR`, `SIGNER_REMOTE_API_ERROR`, `SIGNER_PARSING_ERROR`,
12
+ * or `SIGNER_INVALID_PUBLIC_KEY` when signer initialization fails.
13
+ */
7
14
  export async function createFireblocksSigner(config) {
8
15
  return await FireblocksSigner.create(config);
9
16
  }
@@ -65,7 +72,9 @@ export class FireblocksSigner {
65
72
  this.privateKeyPem = config.privateKeyPem;
66
73
  this.vaultAccountId = config.vaultAccountId;
67
74
  this.assetId = config.assetId ?? DEFAULT_ASSET_ID;
68
- this.apiBaseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
75
+ const apiBaseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
76
+ validateHttpsApiBaseUrl(apiBaseUrl);
77
+ this.apiBaseUrl = apiBaseUrl;
69
78
  this.pollIntervalMs = config.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
70
79
  this.maxPollAttempts = config.maxPollAttempts ?? DEFAULT_MAX_POLL_ATTEMPTS;
71
80
  this.requestDelayMs = config.requestDelayMs ?? 0;
@@ -145,7 +154,7 @@ export class FireblocksSigner {
145
154
  const errorText = await response.text().catch(() => 'Failed to read error response');
146
155
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
147
156
  message: `Fireblocks API error: ${response.status}`,
148
- response: errorText,
157
+ response: sanitizeRemoteErrorResponse(errorText),
149
158
  status: response.status,
150
159
  });
151
160
  }
@@ -159,7 +168,7 @@ export class FireblocksSigner {
159
168
  message: 'Failed to parse Fireblocks response',
160
169
  });
161
170
  }
162
- const firstAddress = addressesResponse.addresses[0]?.address;
171
+ const firstAddress = addressesResponse.addresses?.[0]?.address;
163
172
  if (!firstAddress) {
164
173
  throwSignerError(SignerErrorCode.INVALID_PUBLIC_KEY, {
165
174
  message: 'No addresses found in Fireblocks vault',
@@ -206,7 +215,7 @@ export class FireblocksSigner {
206
215
  const errorText = await response.text().catch(() => 'Failed to read error response');
207
216
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
208
217
  message: `Fireblocks API error: ${response.status}`,
209
- response: errorText,
218
+ response: sanitizeRemoteErrorResponse(errorText),
210
219
  status: response.status,
211
220
  });
212
221
  }
@@ -243,8 +252,9 @@ export class FireblocksSigner {
243
252
  return await this.pollForSignature(createResponse.id);
244
253
  }
245
254
  /**
246
- * Sign a transaction using Fireblocks PROGRAM_CALL operation
247
- * This broadcasts the transaction to Solana through Fireblocks
255
+ * Sign a transaction using Fireblocks PROGRAM_CALL operation.
256
+ * This broadcasts the transaction through Fireblocks but does not yield a
257
+ * reusable signer-bound signature artifact for the local signer address.
248
258
  */
249
259
  async signWithProgramCall(transaction) {
250
260
  // Use the same serialization as Privy - proper wire format with all signatures
@@ -264,7 +274,7 @@ export class FireblocksSigner {
264
274
  return await this.pollForSignature(createResponse.id);
265
275
  }
266
276
  /**
267
- * Poll for transaction completion and extract signature
277
+ * Poll for transaction completion and extract a reusable signer-bound signature.
268
278
  */
269
279
  async pollForSignature(transactionId) {
270
280
  const uri = `/v1/transactions/${transactionId}`;
@@ -290,15 +300,12 @@ export class FireblocksSigner {
290
300
  }
291
301
  return sigBytes;
292
302
  }
293
- // Try txHash (PROGRAM_CALL - base58 encoded signature)
303
+ // PROGRAM_CALL only returns a broadcast transaction id, not a
304
+ // reusable signer-bound signature over the local message bytes.
294
305
  if (txResponse.txHash) {
295
- const sigBytes = getBase58Encoder().encode(txResponse.txHash);
296
- if (sigBytes.length !== 64) {
297
- throwSignerError(SignerErrorCode.SIGNING_FAILED, {
298
- message: `Invalid txHash length: expected 64 bytes, got ${sigBytes.length}`,
299
- });
300
- }
301
- return sigBytes;
306
+ throwSignerError(SignerErrorCode.SIGNING_FAILED, {
307
+ message: 'Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature; use RAW signing for local signature artifacts',
308
+ });
302
309
  }
303
310
  throwSignerError(SignerErrorCode.SIGNING_FAILED, {
304
311
  message: 'No signature found in response (no signedMessages or txHash)',
@@ -349,15 +356,11 @@ export class FireblocksSigner {
349
356
  const signatureBytes = this.useProgramCall
350
357
  ? await this.signWithProgramCall(transaction)
351
358
  : await this.signRawBytes(new Uint8Array(transaction.messageBytes));
352
- // Skip verification for PROGRAM_CALL: it broadcasts to Solana and returns
353
- // a txHash (on-chain confirmation), not a signature over the message bytes.
354
- if (!this.useProgramCall) {
355
- await assertSignatureValid({
356
- data: transaction.messageBytes,
357
- signature: signatureBytes,
358
- signerAddress: this.address,
359
- });
360
- }
359
+ await assertSignatureValid({
360
+ data: transaction.messageBytes,
361
+ signature: signatureBytes,
362
+ signerAddress: this.address,
363
+ });
361
364
  return createSignatureDictionary({
362
365
  signature: signatureBytes,
363
366
  signerAddress: this.address,
@@ -396,4 +399,20 @@ export class FireblocksSigner {
396
399
  }
397
400
  }
398
401
  }
402
+ function validateHttpsApiBaseUrl(apiBaseUrl) {
403
+ let parsedUrl;
404
+ try {
405
+ parsedUrl = new URL(apiBaseUrl);
406
+ }
407
+ catch {
408
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
409
+ message: 'apiBaseUrl is not a valid URL',
410
+ });
411
+ }
412
+ if (parsedUrl.protocol !== 'https:') {
413
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
414
+ message: 'apiBaseUrl must use HTTPS',
415
+ });
416
+ }
417
+ }
399
418
  //# sourceMappingURL=fireblocks-signer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fireblocks-signer.js","sourceRoot":"","sources":["../src/fireblocks-signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fireblocks-signer.js","sourceRoot":"","sources":["../src/fireblocks-signer.ts"],"names":[],"mappings":"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"}
package/dist/jwt.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCjH"}
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCjH"}
package/dist/jwt.js CHANGED
@@ -2,6 +2,8 @@ import { getBase16Decoder } from '@solana/codecs-strings';
2
2
  import { SignerErrorCode, throwSignerError } from '@solana/keychain-core';
3
3
  import { importPKCS8, SignJWT } from 'jose';
4
4
  let base16Decoder;
5
+ const JWT_TTL_SECS = 120;
6
+ const JWT_SKEW_LEEWAY_SECS = 60;
5
7
  /**
6
8
  * Create a JWT for Fireblocks API authentication
7
9
  *
@@ -20,6 +22,7 @@ export async function createJwt(apiKey, privateKeyPem, uri, body) {
20
22
  // Generate nonce (UUID v4)
21
23
  const nonce = crypto.randomUUID();
22
24
  const now = Math.floor(Date.now() / 1000);
25
+ const issuedAt = now - JWT_SKEW_LEEWAY_SECS;
23
26
  const jwt = await new SignJWT({
24
27
  bodyHash,
25
28
  nonce,
@@ -27,8 +30,9 @@ export async function createJwt(apiKey, privateKeyPem, uri, body) {
27
30
  })
28
31
  .setProtectedHeader({ alg: 'RS256' })
29
32
  .setSubject(apiKey)
30
- .setIssuedAt(now)
31
- .setExpirationTime(now + 30)
33
+ .setIssuedAt(issuedAt)
34
+ .setNotBefore(issuedAt)
35
+ .setExpirationTime(now + JWT_TTL_SECS)
32
36
  .sign(privateKey);
33
37
  return jwt;
34
38
  }
package/dist/jwt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE5C,IAAI,aAA8D,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,aAAqB,EAAE,GAAW,EAAE,IAAY;IAC5F,IAAI,CAAC;QACD,6BAA6B;QAC7B,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAE7D,sBAAsB;QACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAEvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAElC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC;YAC1B,QAAQ;YACR,KAAK;YACL,GAAG;SACN,CAAC;aACG,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;aACpC,UAAU,CAAC,MAAM,CAAC;aAClB,WAAW,CAAC,GAAG,CAAC;aAChB,iBAAiB,CAAC,GAAG,GAAG,EAAE,CAAC;aAC3B,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtB,OAAO,GAAG,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACzD,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,gBAAgB,CAAC,eAAe,CAAC,cAAc,EAAE;YAC7C,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,sBAAsB;SAClC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,IAAY;IACjC,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrE,aAAa,KAAb,aAAa,GAAK,gBAAgB,EAAE,EAAC;IACrC,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE5C,IAAI,aAA8D,CAAC;AACnE,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,aAAqB,EAAE,GAAW,EAAE,IAAY;IAC5F,IAAI,CAAC;QACD,6BAA6B;QAC7B,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAE7D,sBAAsB;QACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAEvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAElC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,GAAG,oBAAoB,CAAC;QAE5C,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC;YAC1B,QAAQ;YACR,KAAK;YACL,GAAG;SACN,CAAC;aACG,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;aACpC,UAAU,CAAC,MAAM,CAAC;aAClB,WAAW,CAAC,QAAQ,CAAC;aACrB,YAAY,CAAC,QAAQ,CAAC;aACtB,iBAAiB,CAAC,GAAG,GAAG,YAAY,CAAC;aACrC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtB,OAAO,GAAG,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACzD,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,gBAAgB,CAAC,eAAe,CAAC,cAAc,EAAE;YAC7C,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,sBAAsB;SAClC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,IAAY;IACjC,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrE,aAAa,KAAb,aAAa,GAAK,gBAAgB,EAAE,EAAC;IACrC,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5D,CAAC"}
package/dist/types.d.ts CHANGED
@@ -18,7 +18,8 @@ export interface FireblocksSignerConfig {
18
18
  requestDelayMs?: number;
19
19
  /**
20
20
  * Use PROGRAM_CALL operation for signing transactions (default: false)
21
- * When true, Fireblocks signs and broadcasts the transaction to Solana.
21
+ * When true, Fireblocks signs and broadcasts the transaction to Solana,
22
+ * but callers must not treat the broadcast response as a reusable local signature.
22
23
  * When false, uses RAW signing (signs message bytes only, caller broadcasts).
23
24
  */
24
25
  useProgramCall?: boolean;
@@ -70,7 +71,10 @@ export interface TransactionResponse {
70
71
  id: string;
71
72
  signedMessages?: SignedMessage[];
72
73
  status: string;
73
- /** Transaction hash (base58 encoded signature) - populated for PROGRAM_CALL after broadcast */
74
+ /**
75
+ * Transaction id returned for PROGRAM_CALL after broadcast.
76
+ * This is a broadcast artifact, not a reusable signer-bound signature.
77
+ */
74
78
  txHash?: string;
75
79
  }
76
80
  export interface SignedMessage {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IAEf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IAEtB,iGAAiG;IACjG,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,0BAA0B,GAAG,kBAAkB,CAAC;IACjE,SAAS,EAAE,cAAc,GAAG,KAAK,CAAC;IAClC,MAAM,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,cAAc,EAAE,cAAc,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,UAAU,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,aAAa,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;CAc9B,CAAC;AACX,MAAM,MAAM,2BAA2B,GACnC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAC;AAEnF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQxD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IAEf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IAEtB,iGAAiG;IACjG,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,0BAA0B,GAAG,kBAAkB,CAAC;IACjE,SAAS,EAAE,cAAc,GAAG,KAAK,CAAC;IAClC,MAAM,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,cAAc,EAAE,cAAc,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,UAAU,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,aAAa,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;CAc9B,CAAC;AACX,MAAM,MAAM,2BAA2B,GACnC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAC;AAEnF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQxD"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA+GA;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACvC,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,iBAAiB,EAAE,mBAAmB;IACtC,iCAAiC,EAAE,mCAAmC;IACtE,qBAAqB,EAAE,uBAAuB;IAC9C,iBAAiB,EAAE,mBAAmB;IACtC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CAChB,CAAC;AAIX;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC3C,OAAO,CACH,MAAM,KAAK,2BAA2B,CAAC,SAAS;QAChD,MAAM,KAAK,2BAA2B,CAAC,SAAS;QAChD,MAAM,KAAK,2BAA2B,CAAC,QAAQ;QAC/C,MAAM,KAAK,2BAA2B,CAAC,OAAO;QAC9C,MAAM,KAAK,2BAA2B,CAAC,MAAM,CAChD,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmHA;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACvC,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,iBAAiB,EAAE,mBAAmB;IACtC,iCAAiC,EAAE,mCAAmC;IACtE,qBAAqB,EAAE,uBAAuB;IAC9C,iBAAiB,EAAE,mBAAmB;IACtC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CAChB,CAAC;AAIX;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC3C,OAAO,CACH,MAAM,KAAK,2BAA2B,CAAC,SAAS;QAChD,MAAM,KAAK,2BAA2B,CAAC,SAAS;QAChD,MAAM,KAAK,2BAA2B,CAAC,QAAQ;QAC/C,MAAM,KAAK,2BAA2B,CAAC,OAAO;QAC9C,MAAM,KAAK,2BAA2B,CAAC,MAAM,CAChD,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@solana/keychain-fireblocks",
3
3
  "author": "Solana Foundation",
4
- "version": "0.6.1",
4
+ "version": "1.1.0",
5
5
  "description": "Fireblocks-based signer for Solana transactions",
6
6
  "license": "MIT",
7
7
  "repository": "https://github.com/solana-foundation/solana-keychain",
@@ -29,7 +29,7 @@
29
29
  ],
30
30
  "dependencies": {
31
31
  "jose": "^6.1.3",
32
- "@solana/keychain-core": "0.6.1"
32
+ "@solana/keychain-core": "1.1.0"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@solana/addresses": ">=6.0.1",
@@ -47,7 +47,7 @@
47
47
  "@solana-program/memo": "^0.11.0",
48
48
  "@solana/kit": "^6.0.1",
49
49
  "dotenv": "^17.2.3",
50
- "@solana/keychain-test-utils": "0.6.1"
50
+ "@solana/keychain-test-utils": "1.1.0"
51
51
  },
52
52
  "publishConfig": {
53
53
  "access": "public"
@@ -3,9 +3,10 @@
3
3
  *
4
4
  * Unlike other signers, Fireblocks PROGRAM_CALL mode signs AND broadcasts
5
5
  * the transaction to Solana through Fireblocks' infrastructure. The signed
6
- * transaction never returns to the caller only a txHash comes back after
7
- * polling. This means LiteSVM (used by runSignerIntegrationTest) can never
8
- * observe the transaction, so we test against devnet directly.
6
+ * transaction never returns to the caller, and the broadcast transaction id
7
+ * is not a reusable signer-bound signature artifact. This means LiteSVM
8
+ * (used by runSignerIntegrationTest) can never observe a signer-specific
9
+ * transaction signature from PROGRAM_CALL, so we test against devnet directly.
9
10
  *
10
11
  * RAW mode returns a raw signature but is not available on the Fireblocks
11
12
  * sandbox/testnet environment used in CI.
@@ -35,7 +36,7 @@ function hasRequiredEnvVars(): boolean {
35
36
 
36
37
  describe('FireblocksSigner Integration', () => {
37
38
  it.skipIf(!hasRequiredEnvVars())(
38
- 'signs transactions with PROGRAM_CALL',
39
+ 'fails closed for PROGRAM_CALL because Fireblocks only returns a broadcast transaction id',
39
40
  async () => {
40
41
  const signer = await createFireblocksSigner({
41
42
  apiKey: process.env.FIREBLOCKS_API_KEY!,
@@ -58,10 +59,9 @@ describe('FireblocksSigner Integration', () => {
58
59
  tx => setTransactionMessageLifetimeUsingBlockhash({ blockhash, lastValidBlockHeight }, tx),
59
60
  );
60
61
 
61
- const signed = await signTransactionMessageWithSigners(transaction);
62
-
63
- expect(signed.signatures[signer.address]).toBeDefined();
64
- expect(signed.signatures[signer.address]?.length).toBe(64);
62
+ await expect(signTransactionMessageWithSigners(transaction)).rejects.toThrow(
63
+ 'Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature',
64
+ );
65
65
  },
66
66
  120_000,
67
67
  );
@@ -2,13 +2,32 @@ import { generateKeyPairSigner } from '@solana/signers';
2
2
  import { beforeEach, describe, expect, it, vi } from 'vitest';
3
3
  import { assertIsSolanaSigner } from '@solana/keychain-core';
4
4
 
5
+ vi.mock('@solana/transactions', async importOriginal => {
6
+ const mod = await importOriginal<typeof import('@solana/transactions')>();
7
+ return {
8
+ ...mod,
9
+ getBase64EncodedWireTransaction: vi.fn(() => 'base64-wire-transaction'),
10
+ };
11
+ });
12
+
5
13
  import { FireblocksSigner } from '../fireblocks-signer.js';
6
14
  import type { FireblocksSignerConfig } from '../types.js';
7
15
  import { TEST_API_KEY, TEST_RSA_PRIVATE_KEY, TEST_VAULT_ACCOUNT_ID } from './setup.js';
8
16
 
9
17
  vi.mock('@solana/keychain-core', async importOriginal => {
10
18
  const mod = await importOriginal<typeof import('@solana/keychain-core')>();
11
- return { ...mod, assertSignatureValid: vi.fn() };
19
+ return {
20
+ ...mod,
21
+ assertSignatureValid: vi.fn(),
22
+ sanitizeRemoteErrorResponse:
23
+ mod.sanitizeRemoteErrorResponse ??
24
+ ((text: string) =>
25
+ `${text
26
+ .replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, ' ')
27
+ .replace(/\s+/g, ' ')
28
+ .trim()
29
+ .slice(0, 256)} [truncated]`),
30
+ };
12
31
  });
13
32
 
14
33
  // Mock fetch globally
@@ -63,6 +82,28 @@ describe('FireblocksSigner', () => {
63
82
  }).toThrow('Missing required vaultAccountId field');
64
83
  });
65
84
 
85
+ it('should throw error when apiBaseUrl is not a valid URL', () => {
86
+ expect(() => {
87
+ new FireblocksSigner({
88
+ apiBaseUrl: 'not-a-url',
89
+ apiKey: TEST_API_KEY,
90
+ privateKeyPem: TEST_RSA_PRIVATE_KEY,
91
+ vaultAccountId: TEST_VAULT_ACCOUNT_ID,
92
+ });
93
+ }).toThrow('apiBaseUrl is not a valid URL');
94
+ });
95
+
96
+ it('should throw error when apiBaseUrl does not use HTTPS', () => {
97
+ expect(() => {
98
+ new FireblocksSigner({
99
+ apiBaseUrl: 'http://api.fireblocks.test',
100
+ apiKey: TEST_API_KEY,
101
+ privateKeyPem: TEST_RSA_PRIVATE_KEY,
102
+ vaultAccountId: TEST_VAULT_ACCOUNT_ID,
103
+ });
104
+ }).toThrow('apiBaseUrl must use HTTPS');
105
+ });
106
+
66
107
  it('should validate requestDelayMs', () => {
67
108
  expect(() => {
68
109
  new FireblocksSigner({
@@ -224,6 +265,24 @@ describe('FireblocksSigner', () => {
224
265
  await expect(signer.init()).rejects.toThrow('Invalid address from Fireblocks');
225
266
  });
226
267
 
268
+ it('should throw structured error on malformed address response shape', async () => {
269
+ mockFetch.mockResolvedValueOnce({
270
+ ok: true,
271
+ json: async () => ({}),
272
+ });
273
+
274
+ const signer = new FireblocksSigner({
275
+ apiKey: TEST_API_KEY,
276
+ privateKeyPem: TEST_RSA_PRIVATE_KEY,
277
+ vaultAccountId: TEST_VAULT_ACCOUNT_ID,
278
+ });
279
+
280
+ await expect(signer.init()).rejects.toMatchObject({
281
+ code: 'SIGNER_INVALID_PUBLIC_KEY',
282
+ message: expect.stringContaining('No addresses found in Fireblocks vault'),
283
+ });
284
+ });
285
+
227
286
  it('should not re-initialize if already initialized', async () => {
228
287
  const keyPair = await generateKeyPairSigner();
229
288
 
@@ -489,7 +548,7 @@ describe('FireblocksSigner', () => {
489
548
  expect(result[0]).toHaveProperty(signer.address);
490
549
  });
491
550
 
492
- it('should extract signature from txHash (base58) when signedMessages is absent', async () => {
551
+ it('should reject PROGRAM_CALL txHash because it is not a reusable signer-bound signature', async () => {
493
552
  const keyPair = await generateKeyPairSigner();
494
553
 
495
554
  // Mock init fetch
@@ -504,8 +563,8 @@ describe('FireblocksSigner', () => {
504
563
  json: async () => ({ id: 'tx-123', status: 'SUBMITTED' }),
505
564
  });
506
565
 
507
- // Mock poll for completion - return txHash (base58 encoded 64 bytes) instead of signedMessages
508
- // This tests the txHash extraction path in pollForSignature
566
+ // Mock poll for completion - PROGRAM_CALL returns txHash after broadcast,
567
+ // which must not be treated as a reusable signer-bound signature.
509
568
  mockFetch.mockResolvedValueOnce({
510
569
  ok: true,
511
570
  json: async () => ({
@@ -518,6 +577,7 @@ describe('FireblocksSigner', () => {
518
577
  const signer = new FireblocksSigner({
519
578
  apiKey: TEST_API_KEY,
520
579
  privateKeyPem: TEST_RSA_PRIVATE_KEY,
580
+ useProgramCall: true,
521
581
  vaultAccountId: TEST_VAULT_ACCOUNT_ID,
522
582
  });
523
583
 
@@ -528,13 +588,12 @@ describe('FireblocksSigner', () => {
528
588
  signatures: {},
529
589
  } as unknown as Parameters<typeof signer.signTransactions>[0][0];
530
590
 
531
- const result = await signer.signTransactions([transaction]);
532
-
533
- expect(result).toHaveLength(1);
534
- expect(result[0]).toHaveProperty(signer.address);
591
+ await expect(signer.signTransactions([transaction])).rejects.toThrow(
592
+ 'Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature',
593
+ );
535
594
  });
536
595
 
537
- it('should throw error when txHash decodes to invalid length', async () => {
596
+ it('should still reject malformed txHash in PROGRAM_CALL because it is not a reusable signer-bound signature', async () => {
538
597
  const keyPair = await generateKeyPairSigner();
539
598
 
540
599
  // Mock init fetch
@@ -549,19 +608,21 @@ describe('FireblocksSigner', () => {
549
608
  json: async () => ({ id: 'tx-123', status: 'SUBMITTED' }),
550
609
  });
551
610
 
552
- // Mock poll for completion - return a short base58 string (not 64 bytes)
611
+ // Mock poll for completion - txHash remains a broadcast transaction id,
612
+ // regardless of whether it would decode to a valid signature length.
553
613
  mockFetch.mockResolvedValueOnce({
554
614
  ok: true,
555
615
  json: async () => ({
556
616
  id: 'tx-123',
557
617
  status: 'COMPLETED',
558
- txHash: '2abc', // Very short, will decode to fewer than 64 bytes
618
+ txHash: '2abc',
559
619
  }),
560
620
  });
561
621
 
562
622
  const signer = new FireblocksSigner({
563
623
  apiKey: TEST_API_KEY,
564
624
  privateKeyPem: TEST_RSA_PRIVATE_KEY,
625
+ useProgramCall: true,
565
626
  vaultAccountId: TEST_VAULT_ACCOUNT_ID,
566
627
  });
567
628
 
@@ -572,7 +633,9 @@ describe('FireblocksSigner', () => {
572
633
  signatures: {},
573
634
  } as unknown as Parameters<typeof signer.signTransactions>[0][0];
574
635
 
575
- await expect(signer.signTransactions([transaction])).rejects.toThrow('Invalid txHash length');
636
+ await expect(signer.signTransactions([transaction])).rejects.toThrow(
637
+ 'Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature',
638
+ );
576
639
  });
577
640
  });
578
641
 
@@ -0,0 +1,38 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { decodeJwt } from 'jose';
3
+
4
+ import { createJwt } from '../jwt.js';
5
+ import { TEST_API_KEY, TEST_RSA_PRIVATE_KEY } from './setup.js';
6
+
7
+ const JWT_TTL_SECS = 120;
8
+ const JWT_SKEW_LEEWAY_SECS = 60;
9
+
10
+ describe('createJwt', () => {
11
+ beforeEach(() => {
12
+ vi.restoreAllMocks();
13
+ });
14
+
15
+ it('sets clock-skew tolerant timing claims', async () => {
16
+ const nowMs = 1_700_000_000_000;
17
+ const nowSec = Math.floor(nowMs / 1000);
18
+ vi.spyOn(Date, 'now').mockReturnValue(nowMs);
19
+
20
+ const token = await createJwt(TEST_API_KEY, TEST_RSA_PRIVATE_KEY, '/v1/test', '{"hello":"world"}');
21
+ const payload = decodeJwt(token);
22
+
23
+ expect(payload.iat).toBe(nowSec - JWT_SKEW_LEEWAY_SECS);
24
+ expect(payload.nbf).toBe(nowSec - JWT_SKEW_LEEWAY_SECS);
25
+ expect(payload.exp).toBe(nowSec + JWT_TTL_SECS);
26
+ });
27
+
28
+ it('includes expected claims for Fireblocks auth', async () => {
29
+ const token = await createJwt(TEST_API_KEY, TEST_RSA_PRIVATE_KEY, '/v1/transactions', '');
30
+ const payload = decodeJwt(token);
31
+
32
+ expect(payload.sub).toBe(TEST_API_KEY);
33
+ expect(payload.uri).toBe('/v1/transactions');
34
+ expect(typeof payload.nonce).toBe('string');
35
+ expect(typeof payload.bodyHash).toBe('string');
36
+ expect((payload.bodyHash as string).length).toBe(64);
37
+ });
38
+ });
@@ -1,8 +1,9 @@
1
1
  import { Address, assertIsAddress } from '@solana/addresses';
2
- import { getBase16Decoder, getBase16Encoder, getBase58Encoder } from '@solana/codecs-strings';
2
+ import { getBase16Decoder, getBase16Encoder } from '@solana/codecs-strings';
3
3
  import {
4
4
  assertSignatureValid,
5
5
  createSignatureDictionary,
6
+ sanitizeRemoteErrorResponse,
6
7
  SignerErrorCode,
7
8
  SolanaSigner,
8
9
  throwSignerError,
@@ -26,6 +27,13 @@ import type {
26
27
  } from './types.js';
27
28
  import { FireblocksTransactionStatus, isTerminalStatus } from './types.js';
28
29
 
30
+ /**
31
+ * Create and initialize a Fireblocks-backed signer.
32
+ *
33
+ * @throws {SignerError} `SIGNER_CONFIG_ERROR` when required config is missing or invalid.
34
+ * @throws {SignerError} `SIGNER_HTTP_ERROR`, `SIGNER_REMOTE_API_ERROR`, `SIGNER_PARSING_ERROR`,
35
+ * or `SIGNER_INVALID_PUBLIC_KEY` when signer initialization fails.
36
+ */
29
37
  export async function createFireblocksSigner<TAddress extends string = string>(
30
38
  config: FireblocksSignerConfig,
31
39
  ): Promise<SolanaSigner<TAddress>> {
@@ -108,7 +116,10 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
108
116
  this.privateKeyPem = config.privateKeyPem;
109
117
  this.vaultAccountId = config.vaultAccountId;
110
118
  this.assetId = config.assetId ?? DEFAULT_ASSET_ID;
111
- this.apiBaseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
119
+ const apiBaseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
120
+ validateHttpsApiBaseUrl(apiBaseUrl);
121
+
122
+ this.apiBaseUrl = apiBaseUrl;
112
123
  this.pollIntervalMs = config.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
113
124
  this.maxPollAttempts = config.maxPollAttempts ?? DEFAULT_MAX_POLL_ATTEMPTS;
114
125
  this.requestDelayMs = config.requestDelayMs ?? 0;
@@ -198,7 +209,7 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
198
209
  const errorText = await response.text().catch(() => 'Failed to read error response');
199
210
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
200
211
  message: `Fireblocks API error: ${response.status}`,
201
- response: errorText,
212
+ response: sanitizeRemoteErrorResponse(errorText),
202
213
  status: response.status,
203
214
  });
204
215
  }
@@ -213,7 +224,7 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
213
224
  });
214
225
  }
215
226
 
216
- const firstAddress = addressesResponse.addresses[0]?.address;
227
+ const firstAddress = addressesResponse.addresses?.[0]?.address;
217
228
  if (!firstAddress) {
218
229
  throwSignerError(SignerErrorCode.INVALID_PUBLIC_KEY, {
219
230
  message: 'No addresses found in Fireblocks vault',
@@ -262,7 +273,7 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
262
273
  const errorText = await response.text().catch(() => 'Failed to read error response');
263
274
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
264
275
  message: `Fireblocks API error: ${response.status}`,
265
- response: errorText,
276
+ response: sanitizeRemoteErrorResponse(errorText),
266
277
  status: response.status,
267
278
  });
268
279
  }
@@ -303,8 +314,9 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
303
314
  }
304
315
 
305
316
  /**
306
- * Sign a transaction using Fireblocks PROGRAM_CALL operation
307
- * This broadcasts the transaction to Solana through Fireblocks
317
+ * Sign a transaction using Fireblocks PROGRAM_CALL operation.
318
+ * This broadcasts the transaction through Fireblocks but does not yield a
319
+ * reusable signer-bound signature artifact for the local signer address.
308
320
  */
309
321
  private async signWithProgramCall(
310
322
  transaction: Transaction & TransactionWithinSizeLimit & TransactionWithLifetime,
@@ -329,7 +341,7 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
329
341
  }
330
342
 
331
343
  /**
332
- * Poll for transaction completion and extract signature
344
+ * Poll for transaction completion and extract a reusable signer-bound signature.
333
345
  */
334
346
  private async pollForSignature(transactionId: string): Promise<SignatureBytes> {
335
347
  const uri = `/v1/transactions/${transactionId}`;
@@ -359,15 +371,13 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
359
371
  return sigBytes as SignatureBytes;
360
372
  }
361
373
 
362
- // Try txHash (PROGRAM_CALL - base58 encoded signature)
374
+ // PROGRAM_CALL only returns a broadcast transaction id, not a
375
+ // reusable signer-bound signature over the local message bytes.
363
376
  if (txResponse.txHash) {
364
- const sigBytes = getBase58Encoder().encode(txResponse.txHash);
365
- if (sigBytes.length !== 64) {
366
- throwSignerError(SignerErrorCode.SIGNING_FAILED, {
367
- message: `Invalid txHash length: expected 64 bytes, got ${sigBytes.length}`,
368
- });
369
- }
370
- return sigBytes as SignatureBytes;
377
+ throwSignerError(SignerErrorCode.SIGNING_FAILED, {
378
+ message:
379
+ 'Fireblocks PROGRAM_CALL returned txHash without a reusable signer-bound signature; use RAW signing for local signature artifacts',
380
+ });
371
381
  }
372
382
 
373
383
  throwSignerError(SignerErrorCode.SIGNING_FAILED, {
@@ -432,15 +442,11 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
432
442
  const signatureBytes = this.useProgramCall
433
443
  ? await this.signWithProgramCall(transaction)
434
444
  : await this.signRawBytes(new Uint8Array(transaction.messageBytes));
435
- // Skip verification for PROGRAM_CALL: it broadcasts to Solana and returns
436
- // a txHash (on-chain confirmation), not a signature over the message bytes.
437
- if (!this.useProgramCall) {
438
- await assertSignatureValid({
439
- data: transaction.messageBytes,
440
- signature: signatureBytes,
441
- signerAddress: this.address,
442
- });
443
- }
445
+ await assertSignatureValid({
446
+ data: transaction.messageBytes,
447
+ signature: signatureBytes,
448
+ signerAddress: this.address,
449
+ });
444
450
  return createSignatureDictionary({
445
451
  signature: signatureBytes,
446
452
  signerAddress: this.address,
@@ -483,3 +489,20 @@ export class FireblocksSigner<TAddress extends string = string> implements Solan
483
489
  }
484
490
  }
485
491
  }
492
+
493
+ function validateHttpsApiBaseUrl(apiBaseUrl: string): void {
494
+ let parsedUrl: URL;
495
+ try {
496
+ parsedUrl = new URL(apiBaseUrl);
497
+ } catch {
498
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
499
+ message: 'apiBaseUrl is not a valid URL',
500
+ });
501
+ }
502
+
503
+ if (parsedUrl.protocol !== 'https:') {
504
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
505
+ message: 'apiBaseUrl must use HTTPS',
506
+ });
507
+ }
508
+ }
package/src/jwt.ts CHANGED
@@ -3,6 +3,8 @@ import { SignerErrorCode, throwSignerError } from '@solana/keychain-core';
3
3
  import { importPKCS8, SignJWT } from 'jose';
4
4
 
5
5
  let base16Decoder: ReturnType<typeof getBase16Decoder> | undefined;
6
+ const JWT_TTL_SECS = 120;
7
+ const JWT_SKEW_LEEWAY_SECS = 60;
6
8
 
7
9
  /**
8
10
  * Create a JWT for Fireblocks API authentication
@@ -25,6 +27,7 @@ export async function createJwt(apiKey: string, privateKeyPem: string, uri: stri
25
27
  const nonce = crypto.randomUUID();
26
28
 
27
29
  const now = Math.floor(Date.now() / 1000);
30
+ const issuedAt = now - JWT_SKEW_LEEWAY_SECS;
28
31
 
29
32
  const jwt = await new SignJWT({
30
33
  bodyHash,
@@ -33,8 +36,9 @@ export async function createJwt(apiKey: string, privateKeyPem: string, uri: stri
33
36
  })
34
37
  .setProtectedHeader({ alg: 'RS256' })
35
38
  .setSubject(apiKey)
36
- .setIssuedAt(now)
37
- .setExpirationTime(now + 30)
39
+ .setIssuedAt(issuedAt)
40
+ .setNotBefore(issuedAt)
41
+ .setExpirationTime(now + JWT_TTL_SECS)
38
42
  .sign(privateKey);
39
43
 
40
44
  return jwt;
package/src/types.ts CHANGED
@@ -25,7 +25,8 @@ export interface FireblocksSignerConfig {
25
25
 
26
26
  /**
27
27
  * Use PROGRAM_CALL operation for signing transactions (default: false)
28
- * When true, Fireblocks signs and broadcasts the transaction to Solana.
28
+ * When true, Fireblocks signs and broadcasts the transaction to Solana,
29
+ * but callers must not treat the broadcast response as a reusable local signature.
29
30
  * When false, uses RAW signing (signs message bytes only, caller broadcasts).
30
31
  */
31
32
  useProgramCall?: boolean;
@@ -86,7 +87,10 @@ export interface TransactionResponse {
86
87
  id: string;
87
88
  signedMessages?: SignedMessage[];
88
89
  status: string;
89
- /** Transaction hash (base58 encoded signature) - populated for PROGRAM_CALL after broadcast */
90
+ /**
91
+ * Transaction id returned for PROGRAM_CALL after broadcast.
92
+ * This is a broadcast artifact, not a reusable signer-bound signature.
93
+ */
90
94
  txHash?: string;
91
95
  }
92
96