@solana/keychain-gcp-kms 0.0.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # @solana/keychain-gcp-kms
2
+
3
+ Google Cloud KMS-based signer for Solana transactions using EdDSA (Ed25519) signing.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @solana/keychain-gcp-kms
9
+ ```
10
+
11
+ ## Prerequisites
12
+
13
+ 1. A Google Cloud KMS key with:
14
+ - **Algorithm**: `EC_SIGN_ED25519`
15
+ - **Purpose**: `ASYMMETRIC_SIGN`
16
+
17
+ 2. Google Cloud credentials configured (see [Google Cloud Credentials](#google-cloud-credentials) below)
18
+
19
+ ## Google Cloud Credentials
20
+
21
+ The signer uses the **Application Default Credentials (ADC)** to authenticate. You don't need to pass credentials explicitly when running in a Google Cloud environment (Compute Engine, GKE, Cloud Run, etc.).
22
+
23
+ ### IAM Permissions
24
+
25
+ For this signer:
26
+
27
+ - Signing operations require `cloudkms.cryptoKeyVersions.useToSign`
28
+ - Availability checks (`isAvailable()`) require `cloudkms.cryptoKeyVersions.viewPublicKey`
29
+
30
+ ### Local Development
31
+
32
+ For local development, you can:
33
+
34
+ 1. **Use the gcloud CLI**:
35
+ ```bash
36
+ gcloud auth application-default login
37
+ ```
38
+
39
+ 2. **Use a Service Account Key**:
40
+ ```bash
41
+ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"
42
+ ```
43
+
44
+ ## Creating a Google Cloud KMS Key
45
+
46
+ Use the `gcloud` CLI to create a key suitable for Solana signing:
47
+
48
+ ```bash
49
+ # Create a KeyRing
50
+ gcloud kms keyrings create "my-keyring" --location "us-east1"
51
+
52
+ # Create a CryptoKey
53
+ gcloud kms keys create "my-key" \
54
+ --location "us-east1" \
55
+ --keyring "my-keyring" \
56
+ --purpose "asymmetric-signing" \
57
+ --default-algorithm "ec-sign-ed25519"
58
+ ```
59
+
60
+ ## Usage
61
+
62
+ ### Basic Example
63
+
64
+ ```typescript
65
+ import { createGcpKmsSigner } from '@solana/keychain-gcp-kms';
66
+
67
+ const signer = createGcpKmsSigner({
68
+ keyName: 'projects/my-project/locations/us-east1/keyRings/my-ring/cryptoKeys/my-key/cryptoKeyVersions/1',
69
+ publicKey: 'YourSolanaPublicKeyBase58',
70
+ });
71
+
72
+ // Sign a message
73
+ const message = { content: new Uint8Array([1, 2, 3, 4]) };
74
+ const signatures = await signer.signMessages([message]);
75
+
76
+ // Sign a transaction
77
+ const signatures = await signer.signTransactions([transaction]);
78
+ ```
79
+
80
+ ## API Reference
81
+
82
+ ### `GcpKmsSigner`
83
+
84
+ #### Constructor
85
+
86
+ ```typescript
87
+ createGcpKmsSigner(config: GcpKmsSignerConfig)
88
+ ```
89
+
90
+ **Config Options:**
91
+ - `keyName` (required): Full resource name of the GCP KMS crypto key version
92
+ - `publicKey` (required): Solana public key (base58-encoded)
93
+ - `requestDelayMs` (optional): Delay in ms between concurrent signing requests to avoid rate limits (default: 0)
94
+
95
+ #### Properties
96
+
97
+ - `address`: The Solana address (public key) for this signer
98
+
99
+ #### Methods
100
+
101
+ - `signMessages(messages)`: Sign multiple messages
102
+ - `signTransactions(transactions)`: Sign multiple transactions
103
+ - `isAvailable()`: Check if the signer is available by retrieving the public key and verifying `EC_SIGN_ED25519`
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gcp-kms-signer.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-kms-signer.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gcp-kms-signer.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { runSignerIntegrationTest } from '@solana/keychain-test-utils';
2
+ import { config } from 'dotenv';
3
+ import { describe, it } from 'vitest';
4
+ import { getConfig } from './setup.js';
5
+ config();
6
+ describe('GcpKmsSigner Integration', () => {
7
+ it.skipIf(!process.env.GCP_KMS_KEY_NAME)('signs transactions with real API', async () => {
8
+ await runSignerIntegrationTest(await getConfig(['signTransaction']));
9
+ });
10
+ it.skipIf(!process.env.GCP_KMS_KEY_NAME)('signs messages with real API', async () => {
11
+ await runSignerIntegrationTest(await getConfig(['signMessage']));
12
+ });
13
+ it.skipIf(!process.env.GCP_KMS_KEY_NAME)('simulates transactions with real API', async () => {
14
+ await runSignerIntegrationTest(await getConfig(['simulateTransaction']));
15
+ });
16
+ });
17
+ //# sourceMappingURL=gcp-kms-signer.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-kms-signer.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/gcp-kms-signer.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,EAAE,CAAC;AAET,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,wBAAwB,CAAC,MAAM,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,wBAAwB,CAAC,MAAM,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,wBAAwB,CAAC,MAAM,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gcp-kms-signer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-kms-signer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gcp-kms-signer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,304 @@
1
+ import { address } from '@solana/addresses';
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ import { assertIsSolanaSigner } from '@solana/keychain-core';
4
+ import { GcpKmsSigner } from '../gcp-kms-signer.js';
5
+ // Mock GCP KMS SDK
6
+ const mockAsymmetricSign = vi.fn();
7
+ const mockGetPublicKey = vi.fn();
8
+ vi.mock('@google-cloud/kms', () => {
9
+ return {
10
+ v1: {
11
+ KeyManagementServiceClient: class {
12
+ constructor() {
13
+ this.asymmetricSign = mockAsymmetricSign;
14
+ this.getPublicKey = mockGetPublicKey;
15
+ }
16
+ },
17
+ },
18
+ };
19
+ });
20
+ describe('GcpKmsSigner', () => {
21
+ const TEST_KEY_NAME = 'projects/test-project/locations/us-east1/keyRings/test-ring/cryptoKeys/test-key/cryptoKeyVersions/1';
22
+ const TEST_PUBLIC_KEY = address('11111111111111111111111111111111');
23
+ beforeEach(() => {
24
+ vi.clearAllMocks();
25
+ });
26
+ describe('create', () => {
27
+ it('creates a GcpKmsSigner with valid config', () => {
28
+ const signer = GcpKmsSigner.create({
29
+ keyName: TEST_KEY_NAME,
30
+ publicKey: TEST_PUBLIC_KEY,
31
+ });
32
+ expect(signer.address).toBe(TEST_PUBLIC_KEY);
33
+ assertIsSolanaSigner(signer);
34
+ });
35
+ it('should throw error for missing keyName', () => {
36
+ expect(() => {
37
+ GcpKmsSigner.create({
38
+ keyName: '',
39
+ publicKey: TEST_PUBLIC_KEY,
40
+ });
41
+ }).toThrow('Missing required keyName field');
42
+ });
43
+ });
44
+ describe('constructor', () => {
45
+ it('creates a GcpKmsSigner with valid config', () => {
46
+ const config = {
47
+ keyName: TEST_KEY_NAME,
48
+ publicKey: TEST_PUBLIC_KEY,
49
+ };
50
+ const signer = new GcpKmsSigner(config);
51
+ expect(signer.address).toBe(TEST_PUBLIC_KEY);
52
+ assertIsSolanaSigner(signer);
53
+ expect(signer.signMessages).toBeDefined();
54
+ expect(signer.signTransactions).toBeDefined();
55
+ expect(signer.isAvailable).toBeDefined();
56
+ });
57
+ it('should throw error for missing keyName', () => {
58
+ expect(() => {
59
+ new GcpKmsSigner({
60
+ keyName: '',
61
+ publicKey: TEST_PUBLIC_KEY,
62
+ });
63
+ }).toThrow('Missing required keyName field');
64
+ });
65
+ it('should throw error for missing publicKey', () => {
66
+ expect(() => {
67
+ new GcpKmsSigner({
68
+ keyName: TEST_KEY_NAME,
69
+ publicKey: '',
70
+ });
71
+ }).toThrow('Missing required publicKey field');
72
+ });
73
+ it('should throw error for invalid public key', () => {
74
+ expect(() => {
75
+ new GcpKmsSigner({
76
+ keyName: TEST_KEY_NAME,
77
+ publicKey: 'invalid-key',
78
+ });
79
+ }).toThrow('Invalid Solana public key format');
80
+ });
81
+ it('should validate requestDelayMs', () => {
82
+ expect(() => {
83
+ new GcpKmsSigner({
84
+ keyName: TEST_KEY_NAME,
85
+ publicKey: TEST_PUBLIC_KEY,
86
+ requestDelayMs: -1,
87
+ });
88
+ }).toThrow('requestDelayMs must not be negative');
89
+ });
90
+ it('should warn for high requestDelayMs', () => {
91
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
92
+ new GcpKmsSigner({
93
+ keyName: TEST_KEY_NAME,
94
+ publicKey: TEST_PUBLIC_KEY,
95
+ requestDelayMs: 5000,
96
+ });
97
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('requestDelayMs is greater than 3000ms'));
98
+ warnSpy.mockRestore();
99
+ });
100
+ });
101
+ describe('signMessages', () => {
102
+ it('should sign a message successfully', async () => {
103
+ mockAsymmetricSign.mockResolvedValue([
104
+ {
105
+ signature: new Uint8Array(64).fill(0x42),
106
+ },
107
+ ]);
108
+ const signer = new GcpKmsSigner({
109
+ keyName: TEST_KEY_NAME,
110
+ publicKey: TEST_PUBLIC_KEY,
111
+ });
112
+ const message = {
113
+ content: new Uint8Array([1, 2, 3, 4]),
114
+ signatures: {},
115
+ };
116
+ const result = await signer.signMessages([message]);
117
+ expect(result).toHaveLength(1);
118
+ expect(result[0]?.[signer.address]).toBeDefined();
119
+ expect(mockAsymmetricSign).toHaveBeenCalledTimes(1);
120
+ expect(mockAsymmetricSign).toHaveBeenCalledWith({
121
+ data: message.content,
122
+ name: TEST_KEY_NAME,
123
+ });
124
+ });
125
+ it('should handle multiple messages with delay', async () => {
126
+ mockAsymmetricSign.mockResolvedValue([
127
+ {
128
+ signature: new Uint8Array(64).fill(0x42),
129
+ },
130
+ ]);
131
+ const signer = new GcpKmsSigner({
132
+ keyName: TEST_KEY_NAME,
133
+ publicKey: TEST_PUBLIC_KEY,
134
+ requestDelayMs: 10,
135
+ });
136
+ const messages = [
137
+ { content: new Uint8Array([1]), signatures: {} },
138
+ { content: new Uint8Array([2]), signatures: {} },
139
+ { content: new Uint8Array([3]), signatures: {} },
140
+ ];
141
+ const startTime = Date.now();
142
+ const result = await signer.signMessages(messages);
143
+ const endTime = Date.now();
144
+ expect(result).toHaveLength(3);
145
+ expect(mockAsymmetricSign).toHaveBeenCalledTimes(3);
146
+ // Should have some delay (at least 15ms for 2 delays of 10ms each)
147
+ expect(endTime - startTime).toBeGreaterThanOrEqual(15);
148
+ });
149
+ it('should throw error on invalid signature length', async () => {
150
+ mockAsymmetricSign.mockResolvedValue([
151
+ {
152
+ signature: new Uint8Array(32), // Wrong length
153
+ },
154
+ ]);
155
+ const signer = new GcpKmsSigner({
156
+ keyName: TEST_KEY_NAME,
157
+ publicKey: TEST_PUBLIC_KEY,
158
+ });
159
+ const message = { content: new Uint8Array([1, 2, 3, 4]), signatures: {} };
160
+ await expect(signer.signMessages([message])).rejects.toThrow('Invalid signature length');
161
+ });
162
+ it('should throw error on missing signature', async () => {
163
+ mockAsymmetricSign.mockResolvedValue([{}]);
164
+ const signer = new GcpKmsSigner({
165
+ keyName: TEST_KEY_NAME,
166
+ publicKey: TEST_PUBLIC_KEY,
167
+ });
168
+ const message = { content: new Uint8Array([1, 2, 3, 4]), signatures: {} };
169
+ await expect(signer.signMessages([message])).rejects.toThrow('No signature in GCP KMS response');
170
+ });
171
+ it('should handle GCP KMS API errors', async () => {
172
+ const apiError = new Error('GCP Error');
173
+ apiError.code = 403;
174
+ mockAsymmetricSign.mockRejectedValue(apiError);
175
+ const signer = new GcpKmsSigner({
176
+ keyName: TEST_KEY_NAME,
177
+ publicKey: TEST_PUBLIC_KEY,
178
+ });
179
+ const message = { content: new Uint8Array([1, 2, 3, 4]), signatures: {} };
180
+ await expect(signer.signMessages([message])).rejects.toThrow('GCP KMS Sign operation failed: GCP Error');
181
+ });
182
+ });
183
+ describe('signTransactions', () => {
184
+ it('should sign a transaction successfully', async () => {
185
+ mockAsymmetricSign.mockResolvedValue([
186
+ {
187
+ signature: new Uint8Array(64).fill(0x42),
188
+ },
189
+ ]);
190
+ const signer = new GcpKmsSigner({
191
+ keyName: TEST_KEY_NAME,
192
+ publicKey: TEST_PUBLIC_KEY,
193
+ });
194
+ const transaction = {
195
+ messageBytes: new Uint8Array([1, 2, 3, 4]),
196
+ signatures: {},
197
+ };
198
+ const result = await signer.signTransactions([transaction]);
199
+ expect(result).toHaveLength(1);
200
+ expect(result[0]).toHaveProperty(signer.address);
201
+ expect(mockAsymmetricSign).toHaveBeenCalledTimes(1);
202
+ });
203
+ it('should sign multiple transactions successfully', async () => {
204
+ mockAsymmetricSign.mockResolvedValue([
205
+ {
206
+ signature: new Uint8Array(64).fill(0x42),
207
+ },
208
+ ]);
209
+ const signer = new GcpKmsSigner({
210
+ keyName: TEST_KEY_NAME,
211
+ publicKey: TEST_PUBLIC_KEY,
212
+ });
213
+ const transactions = [
214
+ { messageBytes: new Uint8Array([1]), signatures: {} },
215
+ { messageBytes: new Uint8Array([2]), signatures: {} },
216
+ ];
217
+ const result = await signer.signTransactions(transactions);
218
+ expect(result).toHaveLength(2);
219
+ expect(mockAsymmetricSign).toHaveBeenCalledTimes(2);
220
+ });
221
+ it('should throw error on invalid signature length', async () => {
222
+ mockAsymmetricSign.mockResolvedValue([
223
+ {
224
+ signature: new Uint8Array(32),
225
+ },
226
+ ]);
227
+ const signer = new GcpKmsSigner({
228
+ keyName: TEST_KEY_NAME,
229
+ publicKey: TEST_PUBLIC_KEY,
230
+ });
231
+ const transaction = { messageBytes: new Uint8Array([1, 2, 3, 4]), signatures: {} };
232
+ await expect(signer.signTransactions([transaction])).rejects.toThrow('Invalid signature length');
233
+ });
234
+ it('should throw error on missing signature', async () => {
235
+ mockAsymmetricSign.mockResolvedValue([{}]);
236
+ const signer = new GcpKmsSigner({
237
+ keyName: TEST_KEY_NAME,
238
+ publicKey: TEST_PUBLIC_KEY,
239
+ });
240
+ const transaction = { messageBytes: new Uint8Array([1, 2, 3, 4]), signatures: {} };
241
+ await expect(signer.signTransactions([transaction])).rejects.toThrow('No signature in GCP KMS response');
242
+ });
243
+ it('should handle GCP KMS API errors', async () => {
244
+ const apiError = new Error('GCP Error');
245
+ apiError.code = 403;
246
+ mockAsymmetricSign.mockRejectedValue(apiError);
247
+ const signer = new GcpKmsSigner({
248
+ keyName: TEST_KEY_NAME,
249
+ publicKey: TEST_PUBLIC_KEY,
250
+ });
251
+ const transaction = { messageBytes: new Uint8Array([1, 2, 3, 4]), signatures: {} };
252
+ await expect(signer.signTransactions([transaction])).rejects.toThrow('GCP KMS Sign operation failed: GCP Error');
253
+ });
254
+ });
255
+ describe('isAvailable', () => {
256
+ it('should return true for valid Ed25519 key', async () => {
257
+ mockGetPublicKey.mockResolvedValue([
258
+ {
259
+ name: TEST_KEY_NAME,
260
+ algorithm: 'EC_SIGN_ED25519',
261
+ },
262
+ ]);
263
+ const signer = new GcpKmsSigner({
264
+ keyName: TEST_KEY_NAME,
265
+ publicKey: TEST_PUBLIC_KEY,
266
+ });
267
+ const available = await signer.isAvailable();
268
+ expect(available).toBe(true);
269
+ });
270
+ it('should return false for wrong algorithm', async () => {
271
+ mockGetPublicKey.mockResolvedValue([
272
+ {
273
+ name: TEST_KEY_NAME,
274
+ algorithm: 'RSA_SIGN_PKCS1_2048_SHA256',
275
+ },
276
+ ]);
277
+ const signer = new GcpKmsSigner({
278
+ keyName: TEST_KEY_NAME,
279
+ publicKey: TEST_PUBLIC_KEY,
280
+ });
281
+ const available = await signer.isAvailable();
282
+ expect(available).toBe(false);
283
+ });
284
+ it('should return false for missing public key response', async () => {
285
+ mockGetPublicKey.mockResolvedValue([undefined]);
286
+ const signer = new GcpKmsSigner({
287
+ keyName: TEST_KEY_NAME,
288
+ publicKey: TEST_PUBLIC_KEY,
289
+ });
290
+ const available = await signer.isAvailable();
291
+ expect(available).toBe(false);
292
+ });
293
+ it('should return false on error', async () => {
294
+ mockGetPublicKey.mockRejectedValue(new Error('GCP error'));
295
+ const signer = new GcpKmsSigner({
296
+ keyName: TEST_KEY_NAME,
297
+ publicKey: TEST_PUBLIC_KEY,
298
+ });
299
+ const available = await signer.isAvailable();
300
+ expect(available).toBe(false);
301
+ });
302
+ });
303
+ });
304
+ //# sourceMappingURL=gcp-kms-signer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-kms-signer.test.js","sourceRoot":"","sources":["../../src/__tests__/gcp-kms-signer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SolanaSigner } from '@solana/keychain-core';
2
+ import type { SignerTestConfig, TestScenario } from '@solana/keychain-test-utils';
3
+ export declare function getConfig(scenarios: TestScenario[]): Promise<SignerTestConfig<SolanaSigner>>;
4
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAmBlF,wBAAsB,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAKlG"}
@@ -0,0 +1,18 @@
1
+ import { createGcpKmsSigner } from '../gcp-kms-signer.js';
2
+ const SIGNER_TYPE = 'gcp-kms';
3
+ const REQUIRED_ENV_VARS = ['GCP_KMS_KEY_NAME', 'GCP_KMS_SIGNER_PUBKEY'];
4
+ const CONFIG = {
5
+ createSigner: () => Promise.resolve(createGcpKmsSigner({
6
+ keyName: process.env.GCP_KMS_KEY_NAME,
7
+ publicKey: process.env.GCP_KMS_SIGNER_PUBKEY,
8
+ })),
9
+ requiredEnvVars: REQUIRED_ENV_VARS,
10
+ signerType: SIGNER_TYPE,
11
+ };
12
+ export async function getConfig(scenarios) {
13
+ return {
14
+ ...CONFIG,
15
+ testScenarios: scenarios,
16
+ };
17
+ }
18
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,iBAAiB,GAAG,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;AAExE,MAAM,MAAM,GAAmC;IAC3C,YAAY,EAAE,GAAG,EAAE,CACf,OAAO,CAAC,OAAO,CACX,kBAAkB,CAAC;QACf,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAiB;QACtC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAsB;KAChD,CAAC,CACL;IACL,eAAe,EAAE,iBAAiB;IAClC,UAAU,EAAE,WAAW;CAC1B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAyB;IACrD,OAAO;QACH,GAAG,MAAM;QACT,aAAa,EAAE,SAAS;KAC3B,CAAC;AACN,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { Address } from '@solana/addresses';
2
+ import { SolanaSigner } from '@solana/keychain-core';
3
+ import { SignableMessage, SignatureDictionary } from '@solana/signers';
4
+ import { Transaction, TransactionWithinSizeLimit, TransactionWithLifetime } from '@solana/transactions';
5
+ import type { GcpKmsSignerConfig } from './types.js';
6
+ export declare function createGcpKmsSigner<TAddress extends string = string>(config: GcpKmsSignerConfig): SolanaSigner<TAddress>;
7
+ /**
8
+ * Google Cloud KMS-based signer using EdDSA (Ed25519) signing
9
+ *
10
+ * The GCP KMS key must be created with:
11
+ * - Algorithm: EC_SIGN_ED25519
12
+ * - Purpose: ASYMMETRIC_SIGN
13
+ *
14
+ * Example gcloud CLI command to create a key:
15
+ * ```bash
16
+ * gcloud kms keys create my-key \
17
+ * --keyring=my-keyring \
18
+ * --location=us-east1 \
19
+ * --purpose=asymmetric-signing \
20
+ * --default-algorithm=ec-sign-ed25519
21
+ * ```
22
+ *
23
+ * @deprecated Prefer `createGcpKmsSigner()`. Class export will be removed in a future version.
24
+ */
25
+ export declare class GcpKmsSigner<TAddress extends string = string> implements SolanaSigner<TAddress> {
26
+ readonly address: Address<TAddress>;
27
+ private readonly keyName;
28
+ private readonly client;
29
+ private readonly requestDelayMs;
30
+ /** @deprecated Use `createGcpKmsSigner()` instead. */
31
+ static create<TAddress extends string = string>(config: GcpKmsSignerConfig): GcpKmsSigner<TAddress>;
32
+ /** @deprecated Use `createGcpKmsSigner()` instead. Direct construction will be removed in a future version. */
33
+ constructor(config: GcpKmsSignerConfig);
34
+ /**
35
+ * Validate request delay ms
36
+ */
37
+ private validateRequestDelayMs;
38
+ /**
39
+ * Add delay between concurrent requests
40
+ */
41
+ private delay;
42
+ /**
43
+ * Sign message bytes using GCP KMS EdDSA signing
44
+ */
45
+ private signBytes;
46
+ /**
47
+ * Sign multiple messages using GCP KMS
48
+ */
49
+ signMessages(messages: readonly SignableMessage[]): Promise<readonly SignatureDictionary[]>;
50
+ /**
51
+ * Sign multiple transactions using GCP KMS
52
+ */
53
+ signTransactions(transactions: readonly (Transaction & TransactionWithinSizeLimit & TransactionWithLifetime)[]): Promise<readonly SignatureDictionary[]>;
54
+ /**
55
+ * Check if GCP KMS is available and the key is accessible
56
+ */
57
+ isAvailable(): Promise<boolean>;
58
+ }
59
+ //# sourceMappingURL=gcp-kms-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-kms-signer.d.ts","sourceRoot":"","sources":["../src/gcp-kms-signer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAmB,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAA8C,YAAY,EAAoB,MAAM,uBAAuB,CAAC;AAEnH,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAExG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAC/D,MAAM,EAAE,kBAAkB,GAC3B,YAAY,CAAC,QAAQ,CAAC,CAExB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,YAAY,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,YAAY,CAAC,QAAQ,CAAC;IACzF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,sDAAsD;IACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAAC,QAAQ,CAAC;IAInG,+GAA+G;gBACnG,MAAM,EAAE,kBAAkB;IA6BtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;YACW,KAAK;IAMnB;;OAEG;YACW,SAAS;IA4CvB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAiBjG;;OAEG;IACG,gBAAgB,CAClB,YAAY,EAAE,SAAS,CAAC,WAAW,GAAG,0BAA0B,GAAG,uBAAuB,CAAC,EAAE,GAC9F,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC;IAc1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAgBxC"}