@solana/keychain-dfns 0.6.1 → 1.0.1

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.
@@ -1,7 +1,17 @@
1
+ import * as nodeCrypto from 'node:crypto';
1
2
  import { describe, it, expect, vi, beforeEach } from 'vitest';
2
3
  vi.mock('@solana/keychain-core', async (importOriginal) => {
3
4
  const mod = await importOriginal();
4
- return { ...mod, assertSignatureValid: vi.fn() };
5
+ return {
6
+ ...mod,
7
+ assertSignatureValid: vi.fn(),
8
+ sanitizeRemoteErrorResponse: mod.sanitizeRemoteErrorResponse ??
9
+ ((text) => `${text
10
+ .replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, ' ')
11
+ .replace(/\s+/g, ' ')
12
+ .trim()
13
+ .slice(0, 256)} [truncated]`),
14
+ };
5
15
  });
6
16
  import { DfnsSigner } from '../dfns-signer.js';
7
17
  import { TEST_AUTH_TOKEN, TEST_CRED_ID, TEST_ED25519_PEM, TEST_WALLET_ID, createSignatureResponse, createUserActionInitResponse, createUserActionResponse, createWalletResponse, } from './setup.js';
@@ -42,6 +52,21 @@ describe('DfnsSigner', () => {
42
52
  it('throws error for missing walletId', async () => {
43
53
  await expect(DfnsSigner.create({ ...defaultConfig, walletId: '' })).rejects.toThrow('Missing required walletId field');
44
54
  });
55
+ it('throws CONFIG_ERROR when apiBaseUrl is not a valid URL', async () => {
56
+ await expect(DfnsSigner.create({ ...defaultConfig, apiBaseUrl: 'not-a-url' })).rejects.toMatchObject({
57
+ code: 'SIGNER_CONFIG_ERROR',
58
+ message: expect.stringContaining('apiBaseUrl is not a valid URL'),
59
+ });
60
+ });
61
+ it('throws CONFIG_ERROR when apiBaseUrl does not use HTTPS', async () => {
62
+ await expect(DfnsSigner.create({
63
+ ...defaultConfig,
64
+ apiBaseUrl: 'http://api.dfns.test',
65
+ })).rejects.toMatchObject({
66
+ code: 'SIGNER_CONFIG_ERROR',
67
+ message: expect.stringContaining('apiBaseUrl must use HTTPS'),
68
+ });
69
+ });
45
70
  it('throws error for inactive wallet', async () => {
46
71
  mockWalletFetch({ status: 'Inactive' });
47
72
  await expect(DfnsSigner.create(defaultConfig)).rejects.toThrow('not active');
@@ -57,6 +82,16 @@ describe('DfnsSigner', () => {
57
82
  });
58
83
  await expect(DfnsSigner.create(defaultConfig)).rejects.toThrow();
59
84
  });
85
+ it('throws PARSING_ERROR for malformed wallet response shape', async () => {
86
+ mockFetch.mockResolvedValueOnce({
87
+ json: async () => ({}),
88
+ ok: true,
89
+ });
90
+ await expect(DfnsSigner.create(defaultConfig)).rejects.toMatchObject({
91
+ code: 'SIGNER_PARSING_ERROR',
92
+ message: expect.stringContaining('Unexpected Dfns wallet response shape'),
93
+ });
94
+ });
60
95
  it('throws error for negative requestDelayMs', async () => {
61
96
  await expect(DfnsSigner.create({ ...defaultConfig, requestDelayMs: -1 })).rejects.toThrow('requestDelayMs must not be negative');
62
97
  });
@@ -109,6 +144,58 @@ describe('DfnsSigner', () => {
109
144
  const sig = result[0][signer.address];
110
145
  expect(sig.length).toBe(64);
111
146
  });
147
+ it('accepts escaped-newline PEM keys for auth challenge signing', async () => {
148
+ const rHex = '11'.repeat(32);
149
+ const sHex = '22'.repeat(32);
150
+ mockWalletFetch();
151
+ mockFetch.mockResolvedValueOnce({
152
+ json: async () => createUserActionInitResponse(),
153
+ ok: true,
154
+ });
155
+ mockFetch.mockResolvedValueOnce({
156
+ json: async () => createUserActionResponse(),
157
+ ok: true,
158
+ });
159
+ mockFetch.mockResolvedValueOnce({
160
+ json: async () => createSignatureResponse(rHex, sHex),
161
+ ok: true,
162
+ });
163
+ const signer = await DfnsSigner.create({
164
+ ...defaultConfig,
165
+ privateKeyPem: TEST_ED25519_PEM.replace(/\n/g, '\\n'),
166
+ });
167
+ const result = await signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }]);
168
+ expect(result).toHaveLength(1);
169
+ const sig = result[0][signer.address];
170
+ expect(sig.length).toBe(64);
171
+ });
172
+ it('supports SEC1 PEM keys for auth challenge signing', async () => {
173
+ const { privateKey } = nodeCrypto.generateKeyPairSync('ec', { namedCurve: 'prime256v1' });
174
+ const sec1Pem = privateKey.export({ format: 'pem', type: 'sec1' }).toString();
175
+ const rHex = '11'.repeat(32);
176
+ const sHex = '22'.repeat(32);
177
+ mockWalletFetch();
178
+ mockFetch.mockResolvedValueOnce({
179
+ json: async () => createUserActionInitResponse(),
180
+ ok: true,
181
+ });
182
+ mockFetch.mockResolvedValueOnce({
183
+ json: async () => createUserActionResponse(),
184
+ ok: true,
185
+ });
186
+ mockFetch.mockResolvedValueOnce({
187
+ json: async () => createSignatureResponse(rHex, sHex),
188
+ ok: true,
189
+ });
190
+ const signer = await DfnsSigner.create({
191
+ ...defaultConfig,
192
+ privateKeyPem: sec1Pem,
193
+ });
194
+ const result = await signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }]);
195
+ expect(result).toHaveLength(1);
196
+ const sig = result[0][signer.address];
197
+ expect(sig.length).toBe(64);
198
+ });
112
199
  it('left-pads short signature components', async () => {
113
200
  // r is 31 bytes (short by 1), s is 32 bytes
114
201
  const rHex = 'ff'.repeat(31);
@@ -134,6 +221,54 @@ describe('DfnsSigner', () => {
134
221
  expect(sig[0]).toBe(0x00);
135
222
  expect(sig[1]).toBe(0xff);
136
223
  });
224
+ it('throws PARSING_ERROR for malformed auth challenge response shape', async () => {
225
+ mockWalletFetch();
226
+ mockFetch.mockResolvedValueOnce({
227
+ json: async () => ({}),
228
+ ok: true,
229
+ });
230
+ const signer = await DfnsSigner.create(defaultConfig);
231
+ await expect(signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }])).rejects.toMatchObject({
232
+ code: 'SIGNER_PARSING_ERROR',
233
+ message: expect.stringContaining('Unexpected Dfns auth challenge response shape'),
234
+ });
235
+ });
236
+ it('throws PARSING_ERROR for malformed signature response shape', async () => {
237
+ mockWalletFetch();
238
+ mockFetch.mockResolvedValueOnce({
239
+ json: async () => createUserActionInitResponse(),
240
+ ok: true,
241
+ });
242
+ mockFetch.mockResolvedValueOnce({
243
+ json: async () => createUserActionResponse(),
244
+ ok: true,
245
+ });
246
+ mockFetch.mockResolvedValueOnce({
247
+ json: async () => ({}),
248
+ ok: true,
249
+ });
250
+ const signer = await DfnsSigner.create(defaultConfig);
251
+ await expect(signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }])).rejects.toMatchObject({
252
+ code: 'SIGNER_PARSING_ERROR',
253
+ message: expect.stringContaining('Unexpected Dfns signature response shape'),
254
+ });
255
+ });
256
+ it('throws PARSING_ERROR for malformed auth action response shape', async () => {
257
+ mockWalletFetch();
258
+ mockFetch.mockResolvedValueOnce({
259
+ json: async () => createUserActionInitResponse(),
260
+ ok: true,
261
+ });
262
+ mockFetch.mockResolvedValueOnce({
263
+ json: async () => ({}),
264
+ ok: true,
265
+ });
266
+ const signer = await DfnsSigner.create(defaultConfig);
267
+ await expect(signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }])).rejects.toMatchObject({
268
+ code: 'SIGNER_PARSING_ERROR',
269
+ message: expect.stringContaining('Unexpected Dfns auth action response shape'),
270
+ });
271
+ });
137
272
  });
138
273
  describe('isAvailable', () => {
139
274
  it('returns true when API responds', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"dfns-signer.test.js","sourceRoot":"","sources":["../../src/__tests__/dfns-signer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dfns-signer.test.js","sourceRoot":"","sources":["../../src/__tests__/dfns-signer.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAsB,cAAc,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAoHjB"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAsB,cAAc,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAwHjB"}
package/dist/auth.js CHANGED
@@ -1,5 +1,6 @@
1
- import * as crypto from 'node:crypto';
2
- import { base64UrlDecoder, SignerErrorCode, throwSignerError } from '@solana/keychain-core';
1
+ import { getBase64Encoder } from '@solana/codecs-strings';
2
+ import { base64UrlDecoder, sanitizeRemoteErrorResponse, SignerErrorCode, throwSignerError, } from '@solana/keychain-core';
3
+ let base64Encoder;
3
4
  /**
4
5
  * Perform the Dfns User Action Signing flow. For more details, see https://docs.dfns.co/api-reference/auth/signing-flows#asymetric-keys-signing-flow
5
6
  *
@@ -35,13 +36,13 @@ export async function signUserAction(apiBaseUrl, authToken, credId, privateKeyPe
35
36
  const errorText = await initResponse.text().catch(() => 'Failed to read error response');
36
37
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
37
38
  message: `Dfns auth/action/init failed: ${initResponse.status}`,
38
- response: errorText,
39
+ response: sanitizeRemoteErrorResponse(errorText),
39
40
  status: initResponse.status,
40
41
  });
41
42
  }
42
- let challenge;
43
+ let rawChallenge;
43
44
  try {
44
- challenge = (await initResponse.json());
45
+ rawChallenge = await initResponse.json();
45
46
  }
46
47
  catch (error) {
47
48
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
@@ -49,8 +50,9 @@ export async function signUserAction(apiBaseUrl, authToken, credId, privateKeyPe
49
50
  message: 'Failed to parse Dfns auth challenge response',
50
51
  });
51
52
  }
53
+ const challenge = parseUserActionInitResponse(rawChallenge);
52
54
  // Verify credential is allowed
53
- const allowed = challenge.allowCredentials.key.some(c => c.id === credId);
55
+ const allowed = challenge.allowCredentials.key.some(c => isObject(c) && typeof c.id === 'string' && c.id === credId);
54
56
  if (!allowed) {
55
57
  throwSignerError(SignerErrorCode.CONFIG_ERROR, {
56
58
  message: `Credential ${credId} not in allowed credentials`,
@@ -61,9 +63,8 @@ export async function signUserAction(apiBaseUrl, authToken, credId, privateKeyPe
61
63
  challenge: challenge.challenge,
62
64
  type: 'key.get',
63
65
  }));
64
- const signature = crypto.sign(undefined, clientData, privateKeyPem);
65
66
  const clientDataB64 = base64UrlDecoder(clientData);
66
- const signatureB64 = base64UrlDecoder(new Uint8Array(signature));
67
+ const signatureB64 = base64UrlDecoder(await signClientData(clientData, privateKeyPem));
67
68
  // Submit the signed challenge
68
69
  const actionUrl = `${apiBaseUrl}/auth/action`;
69
70
  let signResponse;
@@ -98,13 +99,13 @@ export async function signUserAction(apiBaseUrl, authToken, credId, privateKeyPe
98
99
  const errorText = await signResponse.text().catch(() => 'Failed to read error response');
99
100
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
100
101
  message: `Dfns auth/action failed: ${signResponse.status}`,
101
- response: errorText,
102
+ response: sanitizeRemoteErrorResponse(errorText),
102
103
  status: signResponse.status,
103
104
  });
104
105
  }
105
- let actionResponse;
106
+ let rawActionResponse;
106
107
  try {
107
- actionResponse = (await signResponse.json());
108
+ rawActionResponse = await signResponse.json();
108
109
  }
109
110
  catch (error) {
110
111
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
@@ -112,6 +113,125 @@ export async function signUserAction(apiBaseUrl, authToken, credId, privateKeyPe
112
113
  message: 'Failed to parse Dfns auth action response',
113
114
  });
114
115
  }
116
+ const actionResponse = parseUserActionResponse(rawActionResponse);
115
117
  return actionResponse.userAction;
116
118
  }
119
+ function parseUserActionInitResponse(raw) {
120
+ if (!isObject(raw) || !isObject(raw.allowCredentials) || !Array.isArray(raw.allowCredentials.key)) {
121
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
122
+ message: 'Unexpected Dfns auth challenge response shape',
123
+ });
124
+ }
125
+ if (typeof raw.challenge !== 'string' || typeof raw.challengeIdentifier !== 'string') {
126
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
127
+ message: 'Unexpected Dfns auth challenge response shape',
128
+ });
129
+ }
130
+ return raw;
131
+ }
132
+ function parseUserActionResponse(raw) {
133
+ if (!isObject(raw) || typeof raw.userAction !== 'string') {
134
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
135
+ message: 'Unexpected Dfns auth action response shape',
136
+ });
137
+ }
138
+ return raw;
139
+ }
140
+ function isObject(value) {
141
+ return typeof value === 'object' && value !== null;
142
+ }
143
+ async function signClientData(clientData, privateKeyPem) {
144
+ const normalizedPem = normalizePrivateKeyPem(privateKeyPem);
145
+ let latestError;
146
+ const subtle = globalThis.crypto?.subtle;
147
+ if (subtle) {
148
+ try {
149
+ const signature = await signClientDataWithWebCrypto(subtle, clientData, normalizedPem);
150
+ if (signature) {
151
+ return signature;
152
+ }
153
+ }
154
+ catch (error) {
155
+ latestError = error;
156
+ }
157
+ }
158
+ try {
159
+ const signature = await signClientDataWithNodeCrypto(clientData, normalizedPem);
160
+ if (signature) {
161
+ return signature;
162
+ }
163
+ }
164
+ catch (error) {
165
+ latestError = error;
166
+ }
167
+ throwSignerError(SignerErrorCode.SIGNING_FAILED, {
168
+ cause: latestError,
169
+ message: 'Failed to sign Dfns auth challenge',
170
+ });
171
+ }
172
+ function normalizePrivateKeyPem(privateKeyPem) {
173
+ // CI secrets are often stored as single-line values with escaped newlines.
174
+ return privateKeyPem.replace(/\\n/g, '\n').replace(/\r/g, '').trim();
175
+ }
176
+ async function signClientDataWithWebCrypto(subtle, clientData, privateKeyPem) {
177
+ const privateKeyDer = toArrayBuffer(pemToDer(privateKeyPem));
178
+ const input = toArrayBuffer(clientData);
179
+ const attempts = [
180
+ { importAlgorithm: 'Ed25519', signAlgorithm: 'Ed25519' },
181
+ {
182
+ importAlgorithm: { name: 'ECDSA', namedCurve: 'P-256' },
183
+ signAlgorithm: { hash: 'SHA-256', name: 'ECDSA' },
184
+ },
185
+ {
186
+ importAlgorithm: { hash: 'SHA-256', name: 'RSASSA-PKCS1-v1_5' },
187
+ signAlgorithm: 'RSASSA-PKCS1-v1_5',
188
+ },
189
+ ];
190
+ for (const attempt of attempts) {
191
+ try {
192
+ const privateKey = await subtle.importKey('pkcs8', privateKeyDer, attempt.importAlgorithm, false, ['sign']);
193
+ const signature = await subtle.sign(attempt.signAlgorithm, privateKey, input);
194
+ return new Uint8Array(signature);
195
+ }
196
+ catch {
197
+ // Try the next key algorithm.
198
+ }
199
+ }
200
+ return undefined;
201
+ }
202
+ async function signClientDataWithNodeCrypto(clientData, privateKeyPem) {
203
+ try {
204
+ const nodeCrypto = await import('node:crypto');
205
+ const signature = nodeCrypto.sign(undefined, clientData, privateKeyPem);
206
+ return new Uint8Array(signature);
207
+ }
208
+ catch {
209
+ return undefined;
210
+ }
211
+ }
212
+ function pemToDer(privateKeyPem) {
213
+ const normalizedPem = normalizePrivateKeyPem(privateKeyPem);
214
+ const pemBody = normalizedPem
215
+ .replace(/-----BEGIN [^-]+-----/g, '')
216
+ .replace(/-----END [^-]+-----/g, '')
217
+ .replace(/\s+/g, '');
218
+ if (!pemBody) {
219
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
220
+ message: 'privateKeyPem must be a non-empty PEM key',
221
+ });
222
+ }
223
+ try {
224
+ base64Encoder || (base64Encoder = getBase64Encoder());
225
+ return new Uint8Array(base64Encoder.encode(pemBody));
226
+ }
227
+ catch (error) {
228
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
229
+ cause: error,
230
+ message: 'privateKeyPem must be a valid PEM key',
231
+ });
232
+ }
233
+ }
234
+ function toArrayBuffer(bytes) {
235
+ return Uint8Array.from(bytes).buffer;
236
+ }
117
237
  //# sourceMappingURL=auth.js.map
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -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 { DfnsSignerConfig } from './types.js';
6
+ /**
7
+ * Create and initialize a Dfns-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 initialization fails.
12
+ */
6
13
  export declare function createDfnsSigner<TAddress extends string = string>(config: DfnsSignerConfig): Promise<SolanaSigner<TAddress>>;
7
14
  /**
8
15
  * Dfns-based signer for Solana transactions.
@@ -1 +1 @@
1
- {"version":3,"file":"dfns-signer.d.ts","sourceRoot":"","sources":["../src/dfns-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,EACR,gBAAgB,EAInB,MAAM,YAAY,CAAC;AAEpB,wBAAsB,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACnE,MAAM,EAAE,gBAAgB,GACzB,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAEjC;AAuBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,UAAU,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,YAAY,CAAC,QAAQ,CAAC;IACvF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO;IAoBP;;;;;;OAMG;WACU,MAAM,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAqFhG,KAAK;IAMnB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAyBjG;;OAEG;IACG,gBAAgB,CAClB,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,0BAA0B,GAAG,uBAAuB,CAAC,EAAE,GAC9F,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAwB1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;YACW,oBAAoB;CAyErC"}
1
+ {"version":3,"file":"dfns-signer.d.ts","sourceRoot":"","sources":["../src/dfns-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,EACR,gBAAgB,EAInB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACnE,MAAM,EAAE,gBAAgB,GACzB,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAEjC;AAuBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,UAAU,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,YAAY,CAAC,QAAQ,CAAC;IACvF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO;IAoBP;;;;;;OAMG;WACU,MAAM,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAsFhG,KAAK;IAMnB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAyBjG;;OAEG;IACG,gBAAgB,CAClB,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,0BAA0B,GAAG,uBAAuB,CAAC,EAAE,GAC9F,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAwB1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;YACW,oBAAoB;CA2ErC"}
@@ -1,8 +1,15 @@
1
1
  import { assertIsAddress } from '@solana/addresses';
2
2
  import { getBase16Decoder, getBase16Encoder, getBase58Decoder } from '@solana/codecs-strings';
3
- import { assertSignatureValid, createSignatureDictionary, SignerErrorCode, throwSignerError, } from '@solana/keychain-core';
3
+ import { assertSignatureValid, createSignatureDictionary, sanitizeRemoteErrorResponse, SignerErrorCode, throwSignerError, } from '@solana/keychain-core';
4
4
  import { getTransactionEncoder, } from '@solana/transactions';
5
5
  import { signUserAction } from './auth.js';
6
+ /**
7
+ * Create and initialize a Dfns-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 initialization fails.
12
+ */
6
13
  export async function createDfnsSigner(config) {
7
14
  return await DfnsSigner.create(config);
8
15
  }
@@ -85,6 +92,7 @@ export class DfnsSigner {
85
92
  });
86
93
  }
87
94
  const apiBaseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
95
+ validateHttpsApiBaseUrl(apiBaseUrl);
88
96
  const requestDelayMs = config.requestDelayMs ?? 0;
89
97
  if (requestDelayMs < 0) {
90
98
  throwSignerError(SignerErrorCode.CONFIG_ERROR, {
@@ -230,13 +238,13 @@ export class DfnsSigner {
230
238
  const errorText = await response.text().catch(() => 'Failed to read error response');
231
239
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
232
240
  message: `Dfns signing API error: ${response.status}`,
233
- response: errorText,
241
+ response: sanitizeRemoteErrorResponse(errorText),
234
242
  status: response.status,
235
243
  });
236
244
  }
237
- let sigResponse;
245
+ let rawSigResponse;
238
246
  try {
239
- sigResponse = (await response.json());
247
+ rawSigResponse = await response.json();
240
248
  }
241
249
  catch (error) {
242
250
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
@@ -244,6 +252,7 @@ export class DfnsSigner {
244
252
  message: 'Failed to parse Dfns signature response',
245
253
  });
246
254
  }
255
+ const sigResponse = parseSignatureResponse(rawSigResponse);
247
256
  if (sigResponse.status === 'Failed') {
248
257
  throwSignerError(SignerErrorCode.SIGNING_FAILED, {
249
258
  message: 'Dfns signing failed',
@@ -287,12 +296,13 @@ async function fetchWallet(apiBaseUrl, authToken, walletId) {
287
296
  const errorText = await response.text().catch(() => 'Failed to read error response');
288
297
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
289
298
  message: `Dfns API error: ${response.status}`,
290
- response: errorText,
299
+ response: sanitizeRemoteErrorResponse(errorText),
291
300
  status: response.status,
292
301
  });
293
302
  }
303
+ let rawWalletResponse;
294
304
  try {
295
- return (await response.json());
305
+ rawWalletResponse = await response.json();
296
306
  }
297
307
  catch (error) {
298
308
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
@@ -300,6 +310,57 @@ async function fetchWallet(apiBaseUrl, authToken, walletId) {
300
310
  message: 'Failed to parse Dfns wallet response',
301
311
  });
302
312
  }
313
+ return parseWalletResponse(rawWalletResponse);
314
+ }
315
+ function validateHttpsApiBaseUrl(apiBaseUrl) {
316
+ let parsedUrl;
317
+ try {
318
+ parsedUrl = new URL(apiBaseUrl);
319
+ }
320
+ catch {
321
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
322
+ message: 'apiBaseUrl is not a valid URL',
323
+ });
324
+ }
325
+ if (parsedUrl.protocol !== 'https:') {
326
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
327
+ message: 'apiBaseUrl must use HTTPS',
328
+ });
329
+ }
330
+ }
331
+ function parseSignatureResponse(raw) {
332
+ if (!isObject(raw) || typeof raw.status !== 'string') {
333
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
334
+ message: 'Unexpected Dfns signature response shape',
335
+ });
336
+ }
337
+ if (raw.signature !== undefined) {
338
+ if (!isObject(raw.signature) || typeof raw.signature.r !== 'string' || typeof raw.signature.s !== 'string') {
339
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
340
+ message: 'Unexpected Dfns signature components shape',
341
+ });
342
+ }
343
+ }
344
+ return raw;
345
+ }
346
+ function parseWalletResponse(raw) {
347
+ if (!isObject(raw) || typeof raw.status !== 'string' || !isObject(raw.signingKey)) {
348
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
349
+ message: 'Unexpected Dfns wallet response shape',
350
+ });
351
+ }
352
+ if (typeof raw.signingKey.id !== 'string' ||
353
+ typeof raw.signingKey.scheme !== 'string' ||
354
+ typeof raw.signingKey.curve !== 'string' ||
355
+ typeof raw.signingKey.publicKey !== 'string') {
356
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
357
+ message: 'Unexpected Dfns wallet signing key shape',
358
+ });
359
+ }
360
+ return raw;
361
+ }
362
+ function isObject(value) {
363
+ return typeof value === 'object' && value !== null;
303
364
  }
304
365
  /**
305
366
  * Pad signature component to exactly 32 bytes.
@@ -1 +1 @@
1
- {"version":3,"file":"dfns-signer.js","sourceRoot":"","sources":["../src/dfns-signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dfns-signer.js","sourceRoot":"","sources":["../src/dfns-signer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@solana/keychain-dfns",
3
3
  "author": "Solana Foundation",
4
- "version": "0.6.1",
4
+ "version": "1.0.1",
5
5
  "description": "Dfns-based signer for Solana transactions",
6
6
  "license": "MIT",
7
7
  "repository": "https://github.com/solana-foundation/solana-keychain",
@@ -28,7 +28,7 @@
28
28
  "src"
29
29
  ],
30
30
  "dependencies": {
31
- "@solana/keychain-core": "0.6.1"
31
+ "@solana/keychain-core": "1.0.1"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "@solana/addresses": ">=6.0.1",
@@ -45,7 +45,7 @@
45
45
  "@solana/signers": "^6.0.1",
46
46
  "@solana/transactions": "^6.0.1",
47
47
  "dotenv": "^17.2.3",
48
- "@solana/keychain-test-utils": "0.6.1"
48
+ "@solana/keychain-test-utils": "1.0.1"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public"
@@ -1,8 +1,21 @@
1
+ import * as nodeCrypto from 'node:crypto';
2
+
1
3
  import { describe, it, expect, vi, beforeEach } from 'vitest';
2
4
 
3
5
  vi.mock('@solana/keychain-core', async importOriginal => {
4
6
  const mod = await importOriginal<typeof import('@solana/keychain-core')>();
5
- return { ...mod, assertSignatureValid: vi.fn() };
7
+ return {
8
+ ...mod,
9
+ assertSignatureValid: vi.fn(),
10
+ sanitizeRemoteErrorResponse:
11
+ mod.sanitizeRemoteErrorResponse ??
12
+ ((text: string) =>
13
+ `${text
14
+ .replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, ' ')
15
+ .replace(/\s+/g, ' ')
16
+ .trim()
17
+ .slice(0, 256)} [truncated]`),
18
+ };
6
19
  });
7
20
 
8
21
  import { DfnsSigner } from '../dfns-signer.js';
@@ -71,6 +84,25 @@ describe('DfnsSigner', () => {
71
84
  );
72
85
  });
73
86
 
87
+ it('throws CONFIG_ERROR when apiBaseUrl is not a valid URL', async () => {
88
+ await expect(DfnsSigner.create({ ...defaultConfig, apiBaseUrl: 'not-a-url' })).rejects.toMatchObject({
89
+ code: 'SIGNER_CONFIG_ERROR',
90
+ message: expect.stringContaining('apiBaseUrl is not a valid URL'),
91
+ });
92
+ });
93
+
94
+ it('throws CONFIG_ERROR when apiBaseUrl does not use HTTPS', async () => {
95
+ await expect(
96
+ DfnsSigner.create({
97
+ ...defaultConfig,
98
+ apiBaseUrl: 'http://api.dfns.test',
99
+ }),
100
+ ).rejects.toMatchObject({
101
+ code: 'SIGNER_CONFIG_ERROR',
102
+ message: expect.stringContaining('apiBaseUrl must use HTTPS'),
103
+ });
104
+ });
105
+
74
106
  it('throws error for inactive wallet', async () => {
75
107
  mockWalletFetch({ status: 'Inactive' });
76
108
  await expect(DfnsSigner.create(defaultConfig)).rejects.toThrow('not active');
@@ -89,6 +121,18 @@ describe('DfnsSigner', () => {
89
121
  await expect(DfnsSigner.create(defaultConfig)).rejects.toThrow();
90
122
  });
91
123
 
124
+ it('throws PARSING_ERROR for malformed wallet response shape', async () => {
125
+ mockFetch.mockResolvedValueOnce({
126
+ json: async () => ({}),
127
+ ok: true,
128
+ });
129
+
130
+ await expect(DfnsSigner.create(defaultConfig)).rejects.toMatchObject({
131
+ code: 'SIGNER_PARSING_ERROR',
132
+ message: expect.stringContaining('Unexpected Dfns wallet response shape'),
133
+ });
134
+ });
135
+
92
136
  it('throws error for negative requestDelayMs', async () => {
93
137
  await expect(DfnsSigner.create({ ...defaultConfig, requestDelayMs: -1 })).rejects.toThrow(
94
138
  'requestDelayMs must not be negative',
@@ -160,6 +204,74 @@ describe('DfnsSigner', () => {
160
204
  expect(sig.length).toBe(64);
161
205
  });
162
206
 
207
+ it('accepts escaped-newline PEM keys for auth challenge signing', async () => {
208
+ const rHex = '11'.repeat(32);
209
+ const sHex = '22'.repeat(32);
210
+
211
+ mockWalletFetch();
212
+
213
+ mockFetch.mockResolvedValueOnce({
214
+ json: async () => createUserActionInitResponse(),
215
+ ok: true,
216
+ });
217
+
218
+ mockFetch.mockResolvedValueOnce({
219
+ json: async () => createUserActionResponse(),
220
+ ok: true,
221
+ });
222
+
223
+ mockFetch.mockResolvedValueOnce({
224
+ json: async () => createSignatureResponse(rHex, sHex),
225
+ ok: true,
226
+ });
227
+
228
+ const signer = await DfnsSigner.create({
229
+ ...defaultConfig,
230
+ privateKeyPem: TEST_ED25519_PEM.replace(/\n/g, '\\n'),
231
+ });
232
+
233
+ const result = await signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }]);
234
+
235
+ expect(result).toHaveLength(1);
236
+ const sig = result[0]![signer.address]!;
237
+ expect(sig.length).toBe(64);
238
+ });
239
+
240
+ it('supports SEC1 PEM keys for auth challenge signing', async () => {
241
+ const { privateKey } = nodeCrypto.generateKeyPairSync('ec', { namedCurve: 'prime256v1' });
242
+ const sec1Pem = privateKey.export({ format: 'pem', type: 'sec1' }).toString();
243
+ const rHex = '11'.repeat(32);
244
+ const sHex = '22'.repeat(32);
245
+
246
+ mockWalletFetch();
247
+
248
+ mockFetch.mockResolvedValueOnce({
249
+ json: async () => createUserActionInitResponse(),
250
+ ok: true,
251
+ });
252
+
253
+ mockFetch.mockResolvedValueOnce({
254
+ json: async () => createUserActionResponse(),
255
+ ok: true,
256
+ });
257
+
258
+ mockFetch.mockResolvedValueOnce({
259
+ json: async () => createSignatureResponse(rHex, sHex),
260
+ ok: true,
261
+ });
262
+
263
+ const signer = await DfnsSigner.create({
264
+ ...defaultConfig,
265
+ privateKeyPem: sec1Pem,
266
+ });
267
+
268
+ const result = await signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }]);
269
+
270
+ expect(result).toHaveLength(1);
271
+ const sig = result[0]![signer.address]!;
272
+ expect(sig.length).toBe(64);
273
+ });
274
+
163
275
  it('left-pads short signature components', async () => {
164
276
  // r is 31 bytes (short by 1), s is 32 bytes
165
277
  const rHex = 'ff'.repeat(31);
@@ -192,6 +304,75 @@ describe('DfnsSigner', () => {
192
304
  expect(sig[0]).toBe(0x00);
193
305
  expect(sig[1]).toBe(0xff);
194
306
  });
307
+
308
+ it('throws PARSING_ERROR for malformed auth challenge response shape', async () => {
309
+ mockWalletFetch();
310
+
311
+ mockFetch.mockResolvedValueOnce({
312
+ json: async () => ({}),
313
+ ok: true,
314
+ });
315
+
316
+ const signer = await DfnsSigner.create(defaultConfig);
317
+
318
+ await expect(
319
+ signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }]),
320
+ ).rejects.toMatchObject({
321
+ code: 'SIGNER_PARSING_ERROR',
322
+ message: expect.stringContaining('Unexpected Dfns auth challenge response shape'),
323
+ });
324
+ });
325
+
326
+ it('throws PARSING_ERROR for malformed signature response shape', async () => {
327
+ mockWalletFetch();
328
+
329
+ mockFetch.mockResolvedValueOnce({
330
+ json: async () => createUserActionInitResponse(),
331
+ ok: true,
332
+ });
333
+
334
+ mockFetch.mockResolvedValueOnce({
335
+ json: async () => createUserActionResponse(),
336
+ ok: true,
337
+ });
338
+
339
+ mockFetch.mockResolvedValueOnce({
340
+ json: async () => ({}),
341
+ ok: true,
342
+ });
343
+
344
+ const signer = await DfnsSigner.create(defaultConfig);
345
+
346
+ await expect(
347
+ signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }]),
348
+ ).rejects.toMatchObject({
349
+ code: 'SIGNER_PARSING_ERROR',
350
+ message: expect.stringContaining('Unexpected Dfns signature response shape'),
351
+ });
352
+ });
353
+
354
+ it('throws PARSING_ERROR for malformed auth action response shape', async () => {
355
+ mockWalletFetch();
356
+
357
+ mockFetch.mockResolvedValueOnce({
358
+ json: async () => createUserActionInitResponse(),
359
+ ok: true,
360
+ });
361
+
362
+ mockFetch.mockResolvedValueOnce({
363
+ json: async () => ({}),
364
+ ok: true,
365
+ });
366
+
367
+ const signer = await DfnsSigner.create(defaultConfig);
368
+
369
+ await expect(
370
+ signer.signMessages([{ content: new Uint8Array([1, 2, 3]), signatures: {} }]),
371
+ ).rejects.toMatchObject({
372
+ code: 'SIGNER_PARSING_ERROR',
373
+ message: expect.stringContaining('Unexpected Dfns auth action response shape'),
374
+ });
375
+ });
195
376
  });
196
377
 
197
378
  describe('isAvailable', () => {
package/src/auth.ts CHANGED
@@ -1,9 +1,15 @@
1
- import * as crypto from 'node:crypto';
2
-
3
- import { base64UrlDecoder, SignerErrorCode, throwSignerError } from '@solana/keychain-core';
1
+ import { getBase64Encoder } from '@solana/codecs-strings';
2
+ import {
3
+ base64UrlDecoder,
4
+ sanitizeRemoteErrorResponse,
5
+ SignerErrorCode,
6
+ throwSignerError,
7
+ } from '@solana/keychain-core';
4
8
 
5
9
  import type { UserActionInitResponse, UserActionResponse } from './types.js';
6
10
 
11
+ let base64Encoder: ReturnType<typeof getBase64Encoder> | undefined;
12
+
7
13
  /**
8
14
  * Perform the Dfns User Action Signing flow. For more details, see https://docs.dfns.co/api-reference/auth/signing-flows#asymetric-keys-signing-flow
9
15
  *
@@ -47,14 +53,14 @@ export async function signUserAction(
47
53
  const errorText = await initResponse.text().catch(() => 'Failed to read error response');
48
54
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
49
55
  message: `Dfns auth/action/init failed: ${initResponse.status}`,
50
- response: errorText,
56
+ response: sanitizeRemoteErrorResponse(errorText),
51
57
  status: initResponse.status,
52
58
  });
53
59
  }
54
60
 
55
- let challenge: UserActionInitResponse;
61
+ let rawChallenge: unknown;
56
62
  try {
57
- challenge = (await initResponse.json()) as UserActionInitResponse;
63
+ rawChallenge = await initResponse.json();
58
64
  } catch (error) {
59
65
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
60
66
  cause: error,
@@ -62,8 +68,12 @@ export async function signUserAction(
62
68
  });
63
69
  }
64
70
 
71
+ const challenge = parseUserActionInitResponse(rawChallenge);
72
+
65
73
  // Verify credential is allowed
66
- const allowed = challenge.allowCredentials.key.some(c => c.id === credId);
74
+ const allowed = challenge.allowCredentials.key.some(
75
+ c => isObject(c) && typeof c.id === 'string' && c.id === credId,
76
+ );
67
77
  if (!allowed) {
68
78
  throwSignerError(SignerErrorCode.CONFIG_ERROR, {
69
79
  message: `Credential ${credId} not in allowed credentials`,
@@ -78,10 +88,8 @@ export async function signUserAction(
78
88
  }),
79
89
  );
80
90
 
81
- const signature = crypto.sign(undefined, clientData, privateKeyPem);
82
-
83
91
  const clientDataB64 = base64UrlDecoder(clientData);
84
- const signatureB64 = base64UrlDecoder(new Uint8Array(signature));
92
+ const signatureB64 = base64UrlDecoder(await signClientData(clientData, privateKeyPem));
85
93
 
86
94
  // Submit the signed challenge
87
95
  const actionUrl = `${apiBaseUrl}/auth/action`;
@@ -117,14 +125,14 @@ export async function signUserAction(
117
125
  const errorText = await signResponse.text().catch(() => 'Failed to read error response');
118
126
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
119
127
  message: `Dfns auth/action failed: ${signResponse.status}`,
120
- response: errorText,
128
+ response: sanitizeRemoteErrorResponse(errorText),
121
129
  status: signResponse.status,
122
130
  });
123
131
  }
124
132
 
125
- let actionResponse: UserActionResponse;
133
+ let rawActionResponse: unknown;
126
134
  try {
127
- actionResponse = (await signResponse.json()) as UserActionResponse;
135
+ rawActionResponse = await signResponse.json();
128
136
  } catch (error) {
129
137
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
130
138
  cause: error,
@@ -132,5 +140,150 @@ export async function signUserAction(
132
140
  });
133
141
  }
134
142
 
143
+ const actionResponse = parseUserActionResponse(rawActionResponse);
144
+
135
145
  return actionResponse.userAction;
136
146
  }
147
+
148
+ function parseUserActionInitResponse(raw: unknown): UserActionInitResponse {
149
+ if (!isObject(raw) || !isObject(raw.allowCredentials) || !Array.isArray(raw.allowCredentials.key)) {
150
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
151
+ message: 'Unexpected Dfns auth challenge response shape',
152
+ });
153
+ }
154
+
155
+ if (typeof raw.challenge !== 'string' || typeof raw.challengeIdentifier !== 'string') {
156
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
157
+ message: 'Unexpected Dfns auth challenge response shape',
158
+ });
159
+ }
160
+
161
+ return raw as unknown as UserActionInitResponse;
162
+ }
163
+
164
+ function parseUserActionResponse(raw: unknown): UserActionResponse {
165
+ if (!isObject(raw) || typeof raw.userAction !== 'string') {
166
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
167
+ message: 'Unexpected Dfns auth action response shape',
168
+ });
169
+ }
170
+
171
+ return raw as unknown as UserActionResponse;
172
+ }
173
+
174
+ function isObject(value: unknown): value is Record<string, unknown> {
175
+ return typeof value === 'object' && value !== null;
176
+ }
177
+
178
+ async function signClientData(clientData: Uint8Array, privateKeyPem: string): Promise<Uint8Array> {
179
+ const normalizedPem = normalizePrivateKeyPem(privateKeyPem);
180
+
181
+ let latestError: unknown;
182
+ const subtle = globalThis.crypto?.subtle;
183
+ if (subtle) {
184
+ try {
185
+ const signature = await signClientDataWithWebCrypto(subtle, clientData, normalizedPem);
186
+ if (signature) {
187
+ return signature;
188
+ }
189
+ } catch (error) {
190
+ latestError = error;
191
+ }
192
+ }
193
+
194
+ try {
195
+ const signature = await signClientDataWithNodeCrypto(clientData, normalizedPem);
196
+ if (signature) {
197
+ return signature;
198
+ }
199
+ } catch (error) {
200
+ latestError = error;
201
+ }
202
+
203
+ throwSignerError(SignerErrorCode.SIGNING_FAILED, {
204
+ cause: latestError,
205
+ message: 'Failed to sign Dfns auth challenge',
206
+ });
207
+ }
208
+
209
+ function normalizePrivateKeyPem(privateKeyPem: string): string {
210
+ // CI secrets are often stored as single-line values with escaped newlines.
211
+ return privateKeyPem.replace(/\\n/g, '\n').replace(/\r/g, '').trim();
212
+ }
213
+
214
+ async function signClientDataWithWebCrypto(
215
+ subtle: SubtleCrypto,
216
+ clientData: Uint8Array,
217
+ privateKeyPem: string,
218
+ ): Promise<Uint8Array | undefined> {
219
+ const privateKeyDer = toArrayBuffer(pemToDer(privateKeyPem));
220
+ const input = toArrayBuffer(clientData);
221
+
222
+ const attempts: ReadonlyArray<{
223
+ importAlgorithm: AlgorithmIdentifier | EcKeyImportParams | RsaHashedImportParams;
224
+ signAlgorithm: AlgorithmIdentifier | EcdsaParams;
225
+ }> = [
226
+ { importAlgorithm: 'Ed25519', signAlgorithm: 'Ed25519' },
227
+ {
228
+ importAlgorithm: { name: 'ECDSA', namedCurve: 'P-256' },
229
+ signAlgorithm: { hash: 'SHA-256', name: 'ECDSA' },
230
+ },
231
+ {
232
+ importAlgorithm: { hash: 'SHA-256', name: 'RSASSA-PKCS1-v1_5' },
233
+ signAlgorithm: 'RSASSA-PKCS1-v1_5',
234
+ },
235
+ ];
236
+
237
+ for (const attempt of attempts) {
238
+ try {
239
+ const privateKey = await subtle.importKey('pkcs8', privateKeyDer, attempt.importAlgorithm, false, ['sign']);
240
+ const signature = await subtle.sign(attempt.signAlgorithm, privateKey, input);
241
+ return new Uint8Array(signature);
242
+ } catch {
243
+ // Try the next key algorithm.
244
+ }
245
+ }
246
+
247
+ return undefined;
248
+ }
249
+
250
+ async function signClientDataWithNodeCrypto(
251
+ clientData: Uint8Array,
252
+ privateKeyPem: string,
253
+ ): Promise<Uint8Array | undefined> {
254
+ try {
255
+ const nodeCrypto = await import('node:crypto');
256
+ const signature = nodeCrypto.sign(undefined, clientData, privateKeyPem);
257
+ return new Uint8Array(signature);
258
+ } catch {
259
+ return undefined;
260
+ }
261
+ }
262
+
263
+ function pemToDer(privateKeyPem: string): Uint8Array {
264
+ const normalizedPem = normalizePrivateKeyPem(privateKeyPem);
265
+ const pemBody = normalizedPem
266
+ .replace(/-----BEGIN [^-]+-----/g, '')
267
+ .replace(/-----END [^-]+-----/g, '')
268
+ .replace(/\s+/g, '');
269
+
270
+ if (!pemBody) {
271
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
272
+ message: 'privateKeyPem must be a non-empty PEM key',
273
+ });
274
+ }
275
+
276
+ try {
277
+ base64Encoder ||= getBase64Encoder();
278
+ return new Uint8Array(base64Encoder.encode(pemBody));
279
+ } catch (error) {
280
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
281
+ cause: error,
282
+ message: 'privateKeyPem must be a valid PEM key',
283
+ });
284
+ }
285
+ }
286
+
287
+ function toArrayBuffer(bytes: Uint8Array): ArrayBuffer {
288
+ return Uint8Array.from(bytes).buffer;
289
+ }
@@ -3,6 +3,7 @@ import { getBase16Decoder, getBase16Encoder, getBase58Decoder } from '@solana/co
3
3
  import {
4
4
  assertSignatureValid,
5
5
  createSignatureDictionary,
6
+ sanitizeRemoteErrorResponse,
6
7
  SignerErrorCode,
7
8
  SolanaSigner,
8
9
  throwSignerError,
@@ -24,6 +25,13 @@ import type {
24
25
  GetWalletResponse,
25
26
  } from './types.js';
26
27
 
28
+ /**
29
+ * Create and initialize a Dfns-backed signer.
30
+ *
31
+ * @throws {SignerError} `SIGNER_CONFIG_ERROR` when required config is missing or invalid.
32
+ * @throws {SignerError} `SIGNER_HTTP_ERROR`, `SIGNER_REMOTE_API_ERROR`, `SIGNER_PARSING_ERROR`,
33
+ * or `SIGNER_INVALID_PUBLIC_KEY` when initialization fails.
34
+ */
27
35
  export async function createDfnsSigner<TAddress extends string = string>(
28
36
  config: DfnsSignerConfig,
29
37
  ): Promise<SolanaSigner<TAddress>> {
@@ -137,6 +145,7 @@ export class DfnsSigner<TAddress extends string = string> implements SolanaSigne
137
145
  }
138
146
 
139
147
  const apiBaseUrl = config.apiBaseUrl ?? DEFAULT_API_BASE_URL;
148
+ validateHttpsApiBaseUrl(apiBaseUrl);
140
149
  const requestDelayMs = config.requestDelayMs ?? 0;
141
150
 
142
151
  if (requestDelayMs < 0) {
@@ -312,14 +321,14 @@ export class DfnsSigner<TAddress extends string = string> implements SolanaSigne
312
321
  const errorText = await response.text().catch(() => 'Failed to read error response');
313
322
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
314
323
  message: `Dfns signing API error: ${response.status}`,
315
- response: errorText,
324
+ response: sanitizeRemoteErrorResponse(errorText),
316
325
  status: response.status,
317
326
  });
318
327
  }
319
328
 
320
- let sigResponse: GenerateSignatureResponse;
329
+ let rawSigResponse: unknown;
321
330
  try {
322
- sigResponse = (await response.json()) as GenerateSignatureResponse;
331
+ rawSigResponse = await response.json();
323
332
  } catch (error) {
324
333
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
325
334
  cause: error,
@@ -327,6 +336,8 @@ export class DfnsSigner<TAddress extends string = string> implements SolanaSigne
327
336
  });
328
337
  }
329
338
 
339
+ const sigResponse = parseSignatureResponse(rawSigResponse);
340
+
330
341
  if (sigResponse.status === 'Failed') {
331
342
  throwSignerError(SignerErrorCode.SIGNING_FAILED, {
332
343
  message: 'Dfns signing failed',
@@ -374,19 +385,82 @@ async function fetchWallet(apiBaseUrl: string, authToken: string, walletId: stri
374
385
  const errorText = await response.text().catch(() => 'Failed to read error response');
375
386
  throwSignerError(SignerErrorCode.REMOTE_API_ERROR, {
376
387
  message: `Dfns API error: ${response.status}`,
377
- response: errorText,
388
+ response: sanitizeRemoteErrorResponse(errorText),
378
389
  status: response.status,
379
390
  });
380
391
  }
381
392
 
393
+ let rawWalletResponse: unknown;
382
394
  try {
383
- return (await response.json()) as GetWalletResponse;
395
+ rawWalletResponse = await response.json();
384
396
  } catch (error) {
385
397
  throwSignerError(SignerErrorCode.PARSING_ERROR, {
386
398
  cause: error,
387
399
  message: 'Failed to parse Dfns wallet response',
388
400
  });
389
401
  }
402
+
403
+ return parseWalletResponse(rawWalletResponse);
404
+ }
405
+
406
+ function validateHttpsApiBaseUrl(apiBaseUrl: string): void {
407
+ let parsedUrl: URL;
408
+ try {
409
+ parsedUrl = new URL(apiBaseUrl);
410
+ } catch {
411
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
412
+ message: 'apiBaseUrl is not a valid URL',
413
+ });
414
+ }
415
+
416
+ if (parsedUrl.protocol !== 'https:') {
417
+ throwSignerError(SignerErrorCode.CONFIG_ERROR, {
418
+ message: 'apiBaseUrl must use HTTPS',
419
+ });
420
+ }
421
+ }
422
+
423
+ function parseSignatureResponse(raw: unknown): GenerateSignatureResponse {
424
+ if (!isObject(raw) || typeof raw.status !== 'string') {
425
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
426
+ message: 'Unexpected Dfns signature response shape',
427
+ });
428
+ }
429
+
430
+ if (raw.signature !== undefined) {
431
+ if (!isObject(raw.signature) || typeof raw.signature.r !== 'string' || typeof raw.signature.s !== 'string') {
432
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
433
+ message: 'Unexpected Dfns signature components shape',
434
+ });
435
+ }
436
+ }
437
+
438
+ return raw as unknown as GenerateSignatureResponse;
439
+ }
440
+
441
+ function parseWalletResponse(raw: unknown): GetWalletResponse {
442
+ if (!isObject(raw) || typeof raw.status !== 'string' || !isObject(raw.signingKey)) {
443
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
444
+ message: 'Unexpected Dfns wallet response shape',
445
+ });
446
+ }
447
+
448
+ if (
449
+ typeof raw.signingKey.id !== 'string' ||
450
+ typeof raw.signingKey.scheme !== 'string' ||
451
+ typeof raw.signingKey.curve !== 'string' ||
452
+ typeof raw.signingKey.publicKey !== 'string'
453
+ ) {
454
+ throwSignerError(SignerErrorCode.PARSING_ERROR, {
455
+ message: 'Unexpected Dfns wallet signing key shape',
456
+ });
457
+ }
458
+
459
+ return raw as unknown as GetWalletResponse;
460
+ }
461
+
462
+ function isObject(value: unknown): value is Record<string, unknown> {
463
+ return typeof value === 'object' && value !== null;
390
464
  }
391
465
 
392
466
  /**