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.
- package/README.md +122 -0
- package/dist/AuthManager.d.ts +40 -0
- package/dist/AuthManager.d.ts.map +1 -0
- package/dist/AuthManager.js +188 -0
- package/dist/AuthManager.js.map +1 -0
- package/dist/CertSDK.d.ts +93 -0
- package/dist/CertSDK.d.ts.map +1 -0
- package/dist/CertSDK.js +416 -0
- package/dist/CertSDK.js.map +1 -0
- package/dist/CryptographicSigner.d.ts +31 -0
- package/dist/CryptographicSigner.d.ts.map +1 -0
- package/dist/CryptographicSigner.js +138 -0
- package/dist/CryptographicSigner.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +57 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +123 -0
- package/dist/logger.js.map +1 -0
- package/dist/types.d.ts +230 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +34 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +54 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +312 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation.d.ts +48 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +216 -0
- package/dist/validation.js.map +1 -0
- package/package.json +67 -0
package/dist/CertSDK.js
ADDED
|
@@ -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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|