questverify-cert-sdk 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.
@@ -0,0 +1,416 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CertSDK = void 0;
7
+ const AuthManager_1 = require("./AuthManager");
8
+ const CryptographicSigner_1 = require("./CryptographicSigner");
9
+ const config_1 = require("./config");
10
+ const utils_1 = require("./utils");
11
+ const validation_1 = require("./validation");
12
+ const logger_1 = require("./logger");
13
+ const form_data_1 = __importDefault(require("form-data"));
14
+ const axios_1 = __importDefault(require("axios"));
15
+ const types_1 = require("./types");
16
+ /**
17
+ * QuestVerify Certificate SDK
18
+ * Main SDK class for blockchain certificate operations
19
+ */
20
+ class CertSDK {
21
+ constructor(config) {
22
+ // Validate and normalize config
23
+ this.config = (0, config_1.validateConfig)(config);
24
+ // Initialize components
25
+ this.authManager = new AuthManager_1.AuthManager(this.config);
26
+ this.signer = this.config.privateKey ? new CryptographicSigner_1.CryptographicSigner(this.config.privateKey) : null;
27
+ // Create axios instance
28
+ this.axiosInstance = axios_1.default.create({
29
+ baseURL: (0, config_1.getBaseUrl)(this.config),
30
+ timeout: this.config.timeout,
31
+ });
32
+ }
33
+ /**
34
+ * Upload single or multiple PDFs for certificate issuance
35
+ */
36
+ async uploadPDF(options) {
37
+ try {
38
+ if (!this.signer) {
39
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, 'privateKey is required for PDF upload (signing). Provide a secp256k1 private key in SDK config.');
40
+ }
41
+ const pdfBuffer = await (0, utils_1.readFileBuffer)(options.pdf);
42
+ (0, utils_1.validatePDF)(pdfBuffer);
43
+ // Hash the PDF
44
+ const pdfHash = (0, utils_1.hashData)(pdfBuffer);
45
+ // Sign the hash
46
+ const signature = this.signer.signData(pdfBuffer);
47
+ // Create form data
48
+ const formData = new form_data_1.default();
49
+ formData.append('file', pdfBuffer, {
50
+ filename: options.filename || 'certificate.pdf',
51
+ contentType: 'application/pdf',
52
+ });
53
+ // CRITICAL FIX: Send the signature
54
+ formData.append('signature', signature);
55
+ formData.append('documentHash', pdfHash);
56
+ // Make authenticated request
57
+ const response = await this.authManager.request('POST', '/api/documents/client/upload-pdf', formData, {
58
+ ...formData.getHeaders(),
59
+ });
60
+ if (!response.success || !response.data || response.data.jobs.length === 0) {
61
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, 'Failed to upload PDF: Invalid response from server');
62
+ }
63
+ const job = response.data.jobs[0];
64
+ return {
65
+ batchId: response.data.batchId,
66
+ jobId: job.jobId,
67
+ totalRecords: response.data.totalRecords,
68
+ downloadUrl: job.downloadUrl,
69
+ };
70
+ }
71
+ catch (error) {
72
+ if (error instanceof types_1.SDKError) {
73
+ throw error;
74
+ }
75
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, `Failed to upload PDF: ${error.message}`, error);
76
+ }
77
+ }
78
+ /**
79
+ * Upload multiple PDFs (ZIP file or array of buffers)
80
+ */
81
+ async uploadPDFs(pdfs) {
82
+ // For multiple PDFs, we'll need to create a ZIP or use the batch endpoint
83
+ // For now, we'll upload them sequentially or create a ZIP
84
+ // This is a simplified implementation - you may want to enhance it
85
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, 'Multiple PDF upload not yet implemented. Use uploadPDF for single PDFs or create a ZIP file.');
86
+ }
87
+ /**
88
+ * Upload CSV file for bulk certificate issuance
89
+ */
90
+ async uploadCSV(options) {
91
+ try {
92
+ const csvBuffer = await (0, utils_1.readFileBuffer)(options.csv);
93
+ (0, utils_1.validateCSV)(csvBuffer);
94
+ // Parse CSV to validate structure
95
+ const csvData = (0, utils_1.parseCSV)(csvBuffer);
96
+ if (csvData.length === 0) {
97
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_CSV, 'CSV file contains no data rows');
98
+ }
99
+ // Validate and canonicalize each row
100
+ const canonicalizedData = csvData.map((row, index) => {
101
+ // Optional: Validate data (canonicalization will be handled by backend)
102
+ if (options.validationSchema) {
103
+ const context = {
104
+ recordIndex: index,
105
+ batchSize: csvData.length,
106
+ source: 'CSV',
107
+ };
108
+ logger_1.logger.validationStart(context, Object.keys(row).length);
109
+ try {
110
+ (0, validation_1.validateAndThrow)(row, options.validationSchema, options.strictValidation || false);
111
+ logger_1.logger.validationEnd(context, { valid: true, errors: [], warnings: [] });
112
+ }
113
+ catch (error) {
114
+ logger_1.logger.validationEnd(context, {
115
+ valid: false,
116
+ errors: error.errors || [error.message],
117
+ warnings: error.warnings || []
118
+ });
119
+ throw error;
120
+ }
121
+ }
122
+ return row; // Return raw data - backend will canonicalize
123
+ });
124
+ // Create form data
125
+ const formData = new form_data_1.default();
126
+ formData.append('file', csvBuffer, {
127
+ filename: options.filename || 'certificates.csv',
128
+ contentType: 'text/csv',
129
+ });
130
+ formData.append('templateId', options.templateId);
131
+ // ERP template sync support: allow non-UUID templateId by providing template details.
132
+ if (options.templateName) {
133
+ formData.append('templateName', options.templateName);
134
+ }
135
+ if (options.templateContent) {
136
+ formData.append('templateContent', options.templateContent);
137
+ }
138
+ if (options.templateParameters) {
139
+ formData.append('templateParameters', JSON.stringify(options.templateParameters));
140
+ }
141
+ // Backend will parse CSV and canonicalize data
142
+ if (options.fieldMapping) {
143
+ formData.append('fieldMapping', JSON.stringify(options.fieldMapping));
144
+ }
145
+ // Make authenticated request
146
+ const response = await this.authManager.request('POST', '/api/documents/client/batch', formData, {
147
+ ...formData.getHeaders(),
148
+ });
149
+ if (!response.success || !response.data) {
150
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, 'Failed to upload CSV: Invalid response from server');
151
+ }
152
+ return {
153
+ batchId: response.data.batchId,
154
+ totalRecords: response.data.totalRecords,
155
+ summary: {
156
+ success: response.data.totalRecords,
157
+ failed: 0,
158
+ },
159
+ };
160
+ }
161
+ catch (error) {
162
+ if (error instanceof types_1.SDKError) {
163
+ throw error;
164
+ }
165
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, `Failed to upload CSV: ${error.message}`, error);
166
+ }
167
+ }
168
+ /**
169
+ * Upload JSON data for bulk certificate issuance
170
+ */
171
+ async uploadJSON(options) {
172
+ try {
173
+ if (!options.data || options.data.length === 0) {
174
+ throw new types_1.SDKError(types_1.SDKErrorCode.VALIDATION_ERROR, 'Data array cannot be empty');
175
+ }
176
+ // Optional: Validate data (canonicalization will be handled by backend)
177
+ if (options.validationSchema) {
178
+ options.data.forEach((record, index) => {
179
+ const context = {
180
+ recordIndex: index,
181
+ batchSize: options.data.length,
182
+ };
183
+ logger_1.logger.validationStart(context, Object.keys(record).length);
184
+ try {
185
+ (0, validation_1.validateAndThrow)(record, options.validationSchema, options.strictValidation || false);
186
+ logger_1.logger.validationEnd(context, { valid: true, errors: [], warnings: [] });
187
+ }
188
+ catch (error) {
189
+ logger_1.logger.validationEnd(context, {
190
+ valid: false,
191
+ errors: error.errors || [error.message],
192
+ warnings: error.warnings || []
193
+ });
194
+ throw error;
195
+ }
196
+ });
197
+ }
198
+ // Send raw data - canonicalization will be handled by platform backend
199
+ // Make authenticated request with raw data
200
+ const response = await this.authManager.request('POST', '/api/documents/client/batch/json', {
201
+ templateId: options.templateId,
202
+ data: options.data, // Send raw data - backend will canonicalize
203
+ fieldMapping: options.fieldMapping || {},
204
+ });
205
+ if (!response.success || !response.data) {
206
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, 'Failed to upload JSON: Invalid response from server');
207
+ }
208
+ return {
209
+ batchId: response.data.batchId,
210
+ totalRecords: response.data.totalRecords,
211
+ summary: {
212
+ success: response.data.totalRecords,
213
+ failed: 0,
214
+ },
215
+ };
216
+ }
217
+ catch (error) {
218
+ if (error instanceof types_1.SDKError) {
219
+ throw error;
220
+ }
221
+ // Extract validation errors from axios error response
222
+ if (axios_1.default.isAxiosError(error) && error.response?.data) {
223
+ const responseData = error.response.data;
224
+ const statusCode = error.response.status;
225
+ if (responseData.errors && Array.isArray(responseData.errors)) {
226
+ const validationErrors = responseData.errors
227
+ .map((err) => `${err.param || 'field'}: ${err.msg || err.message || 'Invalid value'}`)
228
+ .join('; ');
229
+ throw new types_1.SDKError(types_1.SDKErrorCode.VALIDATION_ERROR, `Validation failed: ${validationErrors}`, error);
230
+ }
231
+ // Handle specific error messages with more context
232
+ if (responseData.message) {
233
+ let errorMessage = responseData.message;
234
+ // Add helpful context for common errors
235
+ if (statusCode === 404 && errorMessage.includes('Template')) {
236
+ errorMessage += ` (Template ID: ${options.templateId}). Please verify: 1) The template exists, 2) The template belongs to your tenant, 3) Your client has access to this template.`;
237
+ }
238
+ else if (statusCode === 404 && errorMessage.includes('Client')) {
239
+ errorMessage += '. Please verify your client credentials are correct.';
240
+ }
241
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, `Failed to upload JSON: ${errorMessage}`, error);
242
+ }
243
+ }
244
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, `Failed to upload JSON: ${error.message}`, error);
245
+ }
246
+ }
247
+ /**
248
+ * Verify PDF certificate
249
+ */
250
+ async verifyPDF(options) {
251
+ try {
252
+ const pdfBuffer = await (0, utils_1.readFileBuffer)(options.pdf);
253
+ (0, utils_1.validatePDF)(pdfBuffer);
254
+ // Create form data
255
+ const formData = new form_data_1.default();
256
+ formData.append('file', pdfBuffer, {
257
+ filename: options.filename || 'certificate.pdf',
258
+ contentType: 'application/pdf',
259
+ });
260
+ // Make request (verification endpoint may not require auth)
261
+ const token = await this.authManager.getAccessToken();
262
+ const response = await this.axiosInstance.post('/api/documents/verify', formData, {
263
+ headers: {
264
+ Authorization: `Bearer ${token}`,
265
+ ...formData.getHeaders(),
266
+ },
267
+ });
268
+ if (!response.data.success || !response.data.data || response.data.data.jobs.length === 0) {
269
+ return {
270
+ valid: false,
271
+ error: 'Verification failed: Invalid response from server',
272
+ };
273
+ }
274
+ const job = response.data.data.jobs[0];
275
+ return {
276
+ valid: job.status === 'Valid',
277
+ jobId: job.id,
278
+ batchId: response.data.data.verificationBatchId,
279
+ verificationResult: {
280
+ isValid: job.status === 'Valid',
281
+ errors: job.errors,
282
+ warnings: job.warnings,
283
+ ...job.verificationResult,
284
+ },
285
+ };
286
+ }
287
+ catch (error) {
288
+ if (error instanceof types_1.SDKError) {
289
+ throw error;
290
+ }
291
+ return {
292
+ valid: false,
293
+ error: `Verification failed: ${error.message}`,
294
+ };
295
+ }
296
+ }
297
+ /**
298
+ * Get batch status
299
+ */
300
+ async getBatchStatus(batchId) {
301
+ try {
302
+ const response = await this.authManager.request('GET', `/api/documents/batches/${batchId}/status`);
303
+ if (!response.success || !response.data) {
304
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, 'Failed to get batch status: Invalid response from server');
305
+ }
306
+ return response.data;
307
+ }
308
+ catch (error) {
309
+ if (error instanceof types_1.SDKError) {
310
+ throw error;
311
+ }
312
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, `Failed to get batch status: ${error.message}`, error);
313
+ }
314
+ }
315
+ /**
316
+ * Wait for batch to complete (polling)
317
+ */
318
+ async waitForBatchCompletion(batchId, options = {}) {
319
+ const interval = options.interval || 5000; // 5 seconds
320
+ const timeout = options.timeout || 300000; // 5 minutes
321
+ const startTime = Date.now();
322
+ while (true) {
323
+ const status = await this.getBatchStatus(batchId);
324
+ if (status.status === 'Completed' || status.status === 'Failed') {
325
+ return status;
326
+ }
327
+ if (Date.now() - startTime > timeout) {
328
+ throw new types_1.SDKError(types_1.SDKErrorCode.TIMEOUT, `Batch ${batchId} did not complete within timeout period`);
329
+ }
330
+ await new Promise(resolve => setTimeout(resolve, interval));
331
+ }
332
+ }
333
+ /**
334
+ * Get full batch details including job IDs.
335
+ * Useful for downloading generated PDFs after a batch completes.
336
+ */
337
+ async getBatchDetails(batchId) {
338
+ const token = await this.authManager.getAccessToken();
339
+ const response = await this.axiosInstance.get(`/api/documents/batches/${batchId}`, {
340
+ headers: {
341
+ Authorization: `Bearer ${token}`,
342
+ },
343
+ });
344
+ if (!response.data?.success || !response.data.data) {
345
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, response.data?.message || 'Failed to get batch details');
346
+ }
347
+ return response.data.data;
348
+ }
349
+ /**
350
+ * Download the generated (QR/VD embedded) certificate PDF for a job.
351
+ */
352
+ async downloadJobPDF(jobId) {
353
+ const token = await this.authManager.getAccessToken();
354
+ const response = await this.axiosInstance.get(`/api/documents/jobs/${jobId}/download`, {
355
+ responseType: 'arraybuffer',
356
+ headers: {
357
+ Authorization: `Bearer ${token}`,
358
+ },
359
+ });
360
+ return Buffer.from(response.data);
361
+ }
362
+ /**
363
+ * Download all certificates in a batch as a ZIP file.
364
+ */
365
+ async downloadBatchZIP(batchId) {
366
+ const token = await this.authManager.getAccessToken();
367
+ const response = await this.axiosInstance.get(`/api/documents/batches/${batchId}/download-all`, {
368
+ responseType: 'arraybuffer',
369
+ headers: {
370
+ Authorization: `Bearer ${token}`,
371
+ },
372
+ });
373
+ return Buffer.from(response.data);
374
+ }
375
+ /**
376
+ * Trigger email sending for a batch.
377
+ */
378
+ async emailBatch(options) {
379
+ const token = await this.authManager.getAccessToken();
380
+ const response = await this.axiosInstance.post(`/api/documents/batches/${options.batchId}/email-all`, { sendZipTo: options.sendZipTo }, {
381
+ headers: {
382
+ Authorization: `Bearer ${token}`,
383
+ },
384
+ });
385
+ if (!response.data || !response.data.success) {
386
+ throw new types_1.SDKError(types_1.SDKErrorCode.UNKNOWN_ERROR, 'Failed to email batch: ' + (response.data?.message || 'Unknown error'));
387
+ }
388
+ return response.data;
389
+ }
390
+ /**
391
+ * Get public key (for verification/display)
392
+ */
393
+ getPublicKey(compressed = true) {
394
+ if (!this.signer) {
395
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, 'privateKey is required to derive a public key. Provide a secp256k1 private key in SDK config.');
396
+ }
397
+ return this.signer.getPublicKey(compressed);
398
+ }
399
+ /**
400
+ * Hash data (utility method)
401
+ */
402
+ hashData(data) {
403
+ return (0, utils_1.hashData)(data);
404
+ }
405
+ /**
406
+ * Sign data (utility method)
407
+ */
408
+ signData(data) {
409
+ if (!this.signer) {
410
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, 'privateKey is required to sign data. Provide a secp256k1 private key in SDK config.');
411
+ }
412
+ return this.signer.signData(data);
413
+ }
414
+ }
415
+ exports.CertSDK = CertSDK;
416
+ //# sourceMappingURL=CertSDK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CertSDK.js","sourceRoot":"","sources":["../src/CertSDK.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Cryptographic Signer
3
+ * Handles ECDSA secp256k1 signing for blockchain operations
4
+ */
5
+ export declare class CryptographicSigner {
6
+ private privateKey;
7
+ constructor(privateKeyHex: string);
8
+ /**
9
+ * Hash data deterministically (Keccak-256)
10
+ * Uses Keccak-256 to match the blockchain platform's hashing algorithm
11
+ */
12
+ hash(data: Buffer | string): Buffer;
13
+ /**
14
+ * Sign hash using ECDSA secp256k1
15
+ * Returns signature in hex format (r, s concatenated, 64 bytes)
16
+ */
17
+ sign(hash: Buffer): string;
18
+ /**
19
+ * Sign data (hash + sign)
20
+ */
21
+ signData(data: Buffer | string): string;
22
+ /**
23
+ * Get public key from private key (compressed format)
24
+ */
25
+ getPublicKey(compressed?: boolean): Buffer;
26
+ /**
27
+ * Validate private key format
28
+ */
29
+ static validatePrivateKey(privateKeyHex: string): boolean;
30
+ }
31
+ //# sourceMappingURL=CryptographicSigner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CryptographicSigner.d.ts","sourceRoot":"","sources":["../src/CryptographicSigner.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAS;gBAEf,aAAa,EAAE,MAAM;IAqCjC;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAKnC;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAwB1B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAKvC;;OAEG;IACH,YAAY,CAAC,UAAU,GAAE,OAAc,GAAG,MAAM;IAahD;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;CAgB1D"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.CryptographicSigner = void 0;
40
+ const secp256k1 = __importStar(require("secp256k1"));
41
+ const keccak256_1 = __importDefault(require("keccak256"));
42
+ const types_1 = require("./types");
43
+ /**
44
+ * Cryptographic Signer
45
+ * Handles ECDSA secp256k1 signing for blockchain operations
46
+ */
47
+ class CryptographicSigner {
48
+ constructor(privateKeyHex) {
49
+ // Remove 0x prefix if present
50
+ const keyHex = privateKeyHex.startsWith('0x')
51
+ ? privateKeyHex.slice(2)
52
+ : privateKeyHex;
53
+ // Validate format
54
+ if (!/^[0-9a-fA-F]{64}$/.test(keyHex)) {
55
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, 'Invalid private key format. Must be a 64-character hex string (secp256k1)');
56
+ }
57
+ try {
58
+ // Create private key buffer
59
+ this.privateKey = Buffer.from(keyHex, 'hex');
60
+ // Validate private key is valid for secp256k1
61
+ if (!secp256k1.privateKeyVerify(this.privateKey)) {
62
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, 'Invalid private key: key is not valid for secp256k1 curve');
63
+ }
64
+ }
65
+ catch (error) {
66
+ if (error instanceof types_1.SDKError) {
67
+ throw error;
68
+ }
69
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, `Failed to parse private key: ${error.message}`, error);
70
+ }
71
+ }
72
+ /**
73
+ * Hash data deterministically (Keccak-256)
74
+ * Uses Keccak-256 to match the blockchain platform's hashing algorithm
75
+ */
76
+ hash(data) {
77
+ const dataBuffer = typeof data === 'string' ? Buffer.from(data, 'utf-8') : data;
78
+ return (0, keccak256_1.default)(dataBuffer);
79
+ }
80
+ /**
81
+ * Sign hash using ECDSA secp256k1
82
+ * Returns signature in hex format (r, s concatenated, 64 bytes)
83
+ */
84
+ sign(hash) {
85
+ try {
86
+ // secp256k1 expects 32-byte hash
87
+ if (hash.length !== 32) {
88
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, `Hash must be 32 bytes, got ${hash.length}`);
89
+ }
90
+ // Sign the hash
91
+ const signature = secp256k1.ecdsaSign(hash, this.privateKey);
92
+ // Return signature as hex (r and s concatenated, 64 bytes total)
93
+ return Buffer.from(signature.signature).toString('hex');
94
+ }
95
+ catch (error) {
96
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, `Failed to sign hash: ${error.message}`, error);
97
+ }
98
+ }
99
+ /**
100
+ * Sign data (hash + sign)
101
+ */
102
+ signData(data) {
103
+ const hash = this.hash(data);
104
+ return this.sign(hash);
105
+ }
106
+ /**
107
+ * Get public key from private key (compressed format)
108
+ */
109
+ getPublicKey(compressed = true) {
110
+ try {
111
+ const publicKey = secp256k1.publicKeyCreate(this.privateKey, compressed);
112
+ return Buffer.from(publicKey);
113
+ }
114
+ catch (error) {
115
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_PRIVATE_KEY, `Failed to derive public key: ${error.message}`, error);
116
+ }
117
+ }
118
+ /**
119
+ * Validate private key format
120
+ */
121
+ static validatePrivateKey(privateKeyHex) {
122
+ const keyHex = privateKeyHex.startsWith('0x')
123
+ ? privateKeyHex.slice(2)
124
+ : privateKeyHex;
125
+ if (!/^[0-9a-fA-F]{64}$/.test(keyHex)) {
126
+ return false;
127
+ }
128
+ try {
129
+ const keyBuffer = Buffer.from(keyHex, 'hex');
130
+ return secp256k1.privateKeyVerify(keyBuffer);
131
+ }
132
+ catch {
133
+ return false;
134
+ }
135
+ }
136
+ }
137
+ exports.CryptographicSigner = CryptographicSigner;
138
+ //# sourceMappingURL=CryptographicSigner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CryptographicSigner.js","sourceRoot":"","sources":["../src/CryptographicSigner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { SDKConfig } from './types';
2
+ /**
3
+ * Validate and normalize SDK configuration
4
+ */
5
+ export declare function validateConfig(config: SDKConfig): SDKConfig;
6
+ /**
7
+ * Get base URL for API requests
8
+ */
9
+ export declare function getBaseUrl(config: SDKConfig): string;
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAUpC;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAuC3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAEpD"}