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/config.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateConfig = validateConfig;
|
|
4
|
+
exports.getBaseUrl = getBaseUrl;
|
|
5
|
+
/**
|
|
6
|
+
* Default base URLs for different environments
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_BASE_URLS = {
|
|
9
|
+
sandbox: 'http://localhost:3000',
|
|
10
|
+
production: 'https://api.questverify.com',
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Validate and normalize SDK configuration
|
|
14
|
+
*/
|
|
15
|
+
function validateConfig(config) {
|
|
16
|
+
if (!config.environment || !['sandbox', 'production'].includes(config.environment)) {
|
|
17
|
+
throw new Error('Invalid environment. Must be "sandbox" or "production"');
|
|
18
|
+
}
|
|
19
|
+
if (!config.clientId || typeof config.clientId !== 'string') {
|
|
20
|
+
throw new Error('clientId is required and must be a string');
|
|
21
|
+
}
|
|
22
|
+
if (!config.clientSecret || typeof config.clientSecret !== 'string') {
|
|
23
|
+
throw new Error('clientSecret is required and must be a string');
|
|
24
|
+
}
|
|
25
|
+
// Private key is optional for auth-only flows (e.g., CSV/JSON uploads).
|
|
26
|
+
// Validate format only when provided.
|
|
27
|
+
if (config.privateKey !== undefined && config.privateKey !== null) {
|
|
28
|
+
if (typeof config.privateKey !== 'string' || !config.privateKey.trim()) {
|
|
29
|
+
throw new Error('privateKey must be a non-empty string when provided');
|
|
30
|
+
}
|
|
31
|
+
// Validate private key format (should be hex string, 64 characters for secp256k1)
|
|
32
|
+
const privateKeyHex = config.privateKey.startsWith('0x')
|
|
33
|
+
? config.privateKey.slice(2)
|
|
34
|
+
: config.privateKey;
|
|
35
|
+
if (!/^[0-9a-fA-F]{64}$/.test(privateKeyHex)) {
|
|
36
|
+
throw new Error('Invalid private key format. Must be a 64-character hex string (secp256k1)');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
...config,
|
|
41
|
+
baseUrl: config.baseUrl || DEFAULT_BASE_URLS[config.environment],
|
|
42
|
+
timeout: config.timeout || 30000,
|
|
43
|
+
retry: {
|
|
44
|
+
maxAttempts: config.retry?.maxAttempts || 3,
|
|
45
|
+
delay: config.retry?.delay || 1000,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get base URL for API requests
|
|
51
|
+
*/
|
|
52
|
+
function getBaseUrl(config) {
|
|
53
|
+
return config.baseUrl || DEFAULT_BASE_URLS[config.environment];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;AAaA,wCAuCC;AAKD,gCAEC;AAzDD;;GAEG;AACH,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,uBAAuB;IAChC,UAAU,EAAE,6BAA6B;CAC1C,CAAC;AAEF;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAiB;IAC9C,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,wEAAwE;IACxE,sCAAsC;IACtC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAClE,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,kFAAkF;QAClF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAEtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC;QAChE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;YAC3C,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI;SACnC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAiB;IAC1C,OAAO,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACjE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuestVerify Certificate SDK
|
|
3
|
+
* Server-side SDK for blockchain certificate platform
|
|
4
|
+
*/
|
|
5
|
+
export { CertSDK } from './CertSDK';
|
|
6
|
+
export { AuthManager } from './AuthManager';
|
|
7
|
+
export { CryptographicSigner } from './CryptographicSigner';
|
|
8
|
+
export * from './types';
|
|
9
|
+
export * from './config';
|
|
10
|
+
export * from './utils';
|
|
11
|
+
import { CertSDK } from './CertSDK';
|
|
12
|
+
export default CertSDK;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,eAAe,OAAO,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* QuestVerify Certificate SDK
|
|
4
|
+
* Server-side SDK for blockchain certificate platform
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.CryptographicSigner = exports.AuthManager = exports.CertSDK = void 0;
|
|
22
|
+
var CertSDK_1 = require("./CertSDK");
|
|
23
|
+
Object.defineProperty(exports, "CertSDK", { enumerable: true, get: function () { return CertSDK_1.CertSDK; } });
|
|
24
|
+
var AuthManager_1 = require("./AuthManager");
|
|
25
|
+
Object.defineProperty(exports, "AuthManager", { enumerable: true, get: function () { return AuthManager_1.AuthManager; } });
|
|
26
|
+
var CryptographicSigner_1 = require("./CryptographicSigner");
|
|
27
|
+
Object.defineProperty(exports, "CryptographicSigner", { enumerable: true, get: function () { return CryptographicSigner_1.CryptographicSigner; } });
|
|
28
|
+
__exportStar(require("./types"), exports);
|
|
29
|
+
__exportStar(require("./config"), exports);
|
|
30
|
+
__exportStar(require("./utils"), exports);
|
|
31
|
+
// Default export
|
|
32
|
+
const CertSDK_2 = require("./CertSDK");
|
|
33
|
+
exports.default = CertSDK_2.CertSDK;
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AAExB,iBAAiB;AACjB,uCAAoC;AACpC,kBAAe,iBAAO,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logging for canonicalization and validation
|
|
3
|
+
* Provides performance metrics and debugging information
|
|
4
|
+
*/
|
|
5
|
+
export interface LogContext {
|
|
6
|
+
jobId?: string;
|
|
7
|
+
batchId?: string;
|
|
8
|
+
recordIndex?: number;
|
|
9
|
+
schemaVersion?: string;
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}
|
|
12
|
+
export interface CanonicalizationMetrics {
|
|
13
|
+
startTime: number;
|
|
14
|
+
endTime?: number;
|
|
15
|
+
duration?: number;
|
|
16
|
+
inputFieldCount: number;
|
|
17
|
+
outputFieldCount: number;
|
|
18
|
+
hasNestedObjects: boolean;
|
|
19
|
+
hasArrays: boolean;
|
|
20
|
+
nullFieldsRemoved: number;
|
|
21
|
+
dateFieldsNormalized: number;
|
|
22
|
+
numberFieldsNormalized: number;
|
|
23
|
+
}
|
|
24
|
+
declare class Logger {
|
|
25
|
+
private enabled;
|
|
26
|
+
private logLevel;
|
|
27
|
+
constructor();
|
|
28
|
+
private shouldLog;
|
|
29
|
+
private formatMessage;
|
|
30
|
+
debug(message: string, context?: LogContext): void;
|
|
31
|
+
info(message: string, context?: LogContext): void;
|
|
32
|
+
warn(message: string, context?: LogContext): void;
|
|
33
|
+
error(message: string, context?: LogContext, error?: Error): void;
|
|
34
|
+
/**
|
|
35
|
+
* Log canonicalization start
|
|
36
|
+
*/
|
|
37
|
+
canonicalizationStart(context: LogContext, inputFieldCount: number): CanonicalizationMetrics;
|
|
38
|
+
/**
|
|
39
|
+
* Log canonicalization completion
|
|
40
|
+
*/
|
|
41
|
+
canonicalizationEnd(metrics: CanonicalizationMetrics, context: LogContext, outputFieldCount: number, canonicalHash?: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Log validation start
|
|
44
|
+
*/
|
|
45
|
+
validationStart(context: LogContext, fieldCount: number): void;
|
|
46
|
+
/**
|
|
47
|
+
* Log validation result
|
|
48
|
+
*/
|
|
49
|
+
validationEnd(context: LogContext, result: {
|
|
50
|
+
valid: boolean;
|
|
51
|
+
errors: string[];
|
|
52
|
+
warnings: string[];
|
|
53
|
+
}): void;
|
|
54
|
+
}
|
|
55
|
+
export declare const logger: Logger;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,cAAM,MAAM;IACV,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAsC;;IAOtD,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,aAAa;IAMrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAMlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAMjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAMjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAOjE;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,uBAAuB;IAqB5F;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,UAAU,EACnB,gBAAgB,EAAE,MAAM,EACxB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI;IA2BP;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAO9D;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;CAc3G;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Structured logging for canonicalization and validation
|
|
4
|
+
* Provides performance metrics and debugging information
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.logger = void 0;
|
|
8
|
+
class Logger {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.enabled = process.env.NODE_ENV !== 'production' || process.env.ENABLE_LOGGING === 'true';
|
|
11
|
+
this.logLevel = process.env.LOG_LEVEL || 'info';
|
|
12
|
+
}
|
|
13
|
+
shouldLog(level) {
|
|
14
|
+
if (!this.enabled)
|
|
15
|
+
return false;
|
|
16
|
+
const levels = ['debug', 'info', 'warn', 'error'];
|
|
17
|
+
return levels.indexOf(level) >= levels.indexOf(this.logLevel);
|
|
18
|
+
}
|
|
19
|
+
formatMessage(level, message, context) {
|
|
20
|
+
const timestamp = new Date().toISOString();
|
|
21
|
+
const contextStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
22
|
+
return `[${timestamp}] [${level.toUpperCase()}] ${message}${contextStr}`;
|
|
23
|
+
}
|
|
24
|
+
debug(message, context) {
|
|
25
|
+
if (this.shouldLog('debug')) {
|
|
26
|
+
console.debug(this.formatMessage('debug', message, context));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
info(message, context) {
|
|
30
|
+
if (this.shouldLog('info')) {
|
|
31
|
+
console.info(this.formatMessage('info', message, context));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
warn(message, context) {
|
|
35
|
+
if (this.shouldLog('warn')) {
|
|
36
|
+
console.warn(this.formatMessage('warn', message, context));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
error(message, context, error) {
|
|
40
|
+
if (this.shouldLog('error')) {
|
|
41
|
+
const errorContext = error ? { ...context, error: error.message, stack: error.stack } : context;
|
|
42
|
+
console.error(this.formatMessage('error', message, errorContext));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Log canonicalization start
|
|
47
|
+
*/
|
|
48
|
+
canonicalizationStart(context, inputFieldCount) {
|
|
49
|
+
const metrics = {
|
|
50
|
+
startTime: Date.now(),
|
|
51
|
+
inputFieldCount,
|
|
52
|
+
outputFieldCount: 0,
|
|
53
|
+
hasNestedObjects: false,
|
|
54
|
+
hasArrays: false,
|
|
55
|
+
nullFieldsRemoved: 0,
|
|
56
|
+
dateFieldsNormalized: 0,
|
|
57
|
+
numberFieldsNormalized: 0,
|
|
58
|
+
};
|
|
59
|
+
this.debug('Canonicalization started', {
|
|
60
|
+
...context,
|
|
61
|
+
inputFieldCount,
|
|
62
|
+
schemaVersion: context.schemaVersion || '1.0',
|
|
63
|
+
});
|
|
64
|
+
return metrics;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Log canonicalization completion
|
|
68
|
+
*/
|
|
69
|
+
canonicalizationEnd(metrics, context, outputFieldCount, canonicalHash) {
|
|
70
|
+
metrics.endTime = Date.now();
|
|
71
|
+
metrics.duration = metrics.endTime - metrics.startTime;
|
|
72
|
+
metrics.outputFieldCount = outputFieldCount;
|
|
73
|
+
this.info('Canonicalization completed', {
|
|
74
|
+
...context,
|
|
75
|
+
duration: `${metrics.duration}ms`,
|
|
76
|
+
inputFieldCount: metrics.inputFieldCount,
|
|
77
|
+
outputFieldCount: metrics.outputFieldCount,
|
|
78
|
+
nullFieldsRemoved: metrics.nullFieldsRemoved,
|
|
79
|
+
dateFieldsNormalized: metrics.dateFieldsNormalized,
|
|
80
|
+
numberFieldsNormalized: metrics.numberFieldsNormalized,
|
|
81
|
+
hasNestedObjects: metrics.hasNestedObjects,
|
|
82
|
+
hasArrays: metrics.hasArrays,
|
|
83
|
+
canonicalHash: canonicalHash?.substring(0, 16) + '...',
|
|
84
|
+
});
|
|
85
|
+
// Log performance warning if too slow
|
|
86
|
+
if (metrics.duration > 1000) {
|
|
87
|
+
this.warn('Canonicalization took longer than expected', {
|
|
88
|
+
...context,
|
|
89
|
+
duration: `${metrics.duration}ms`,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Log validation start
|
|
95
|
+
*/
|
|
96
|
+
validationStart(context, fieldCount) {
|
|
97
|
+
this.debug('Validation started', {
|
|
98
|
+
...context,
|
|
99
|
+
fieldCount,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Log validation result
|
|
104
|
+
*/
|
|
105
|
+
validationEnd(context, result) {
|
|
106
|
+
if (result.valid) {
|
|
107
|
+
this.info('Validation passed', {
|
|
108
|
+
...context,
|
|
109
|
+
warnings: result.warnings.length,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.error('Validation failed', {
|
|
114
|
+
...context,
|
|
115
|
+
errors: result.errors,
|
|
116
|
+
warnings: result.warnings,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Export singleton instance
|
|
122
|
+
exports.logger = new Logger();
|
|
123
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Configuration
|
|
3
|
+
*/
|
|
4
|
+
export interface SDKConfig {
|
|
5
|
+
/** Environment: 'sandbox' | 'production' */
|
|
6
|
+
environment: 'sandbox' | 'production';
|
|
7
|
+
/** Client ID for authentication */
|
|
8
|
+
clientId: string;
|
|
9
|
+
/** Client secret for authentication */
|
|
10
|
+
clientSecret: string;
|
|
11
|
+
/**
|
|
12
|
+
* Private key for cryptographic signing (hex format, secp256k1).
|
|
13
|
+
* Optional for flows that only require client authentication (e.g., CSV/JSON uploads).
|
|
14
|
+
*/
|
|
15
|
+
privateKey?: string;
|
|
16
|
+
/** Base URL override (optional, auto-set based on environment) */
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
/** Request timeout in milliseconds (default: 30000) */
|
|
19
|
+
timeout?: number;
|
|
20
|
+
/** Retry configuration */
|
|
21
|
+
retry?: {
|
|
22
|
+
/** Maximum retry attempts (default: 3) */
|
|
23
|
+
maxAttempts?: number;
|
|
24
|
+
/** Retry delay in milliseconds (default: 1000) */
|
|
25
|
+
delay?: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Token response from authentication
|
|
30
|
+
*/
|
|
31
|
+
export interface TokenResponse {
|
|
32
|
+
accessToken: string;
|
|
33
|
+
refreshToken: string;
|
|
34
|
+
expiresIn: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* PDF upload options
|
|
38
|
+
*/
|
|
39
|
+
export interface UploadPDFOptions {
|
|
40
|
+
/** PDF file buffer or path */
|
|
41
|
+
pdf: Buffer | string;
|
|
42
|
+
/** Optional filename */
|
|
43
|
+
filename?: string;
|
|
44
|
+
/** Optional metadata */
|
|
45
|
+
metadata?: Record<string, any>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* PDF upload result
|
|
49
|
+
*/
|
|
50
|
+
export interface UploadPDFResult {
|
|
51
|
+
batchId: string;
|
|
52
|
+
jobId: string;
|
|
53
|
+
totalRecords: number;
|
|
54
|
+
downloadUrl?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* CSV upload options
|
|
58
|
+
*/
|
|
59
|
+
export interface UploadCSVOptions {
|
|
60
|
+
/** CSV file buffer or path */
|
|
61
|
+
csv: Buffer | string;
|
|
62
|
+
/** Template ID (required for CSV uploads) */
|
|
63
|
+
templateId: string;
|
|
64
|
+
/** Optional template name (used when templateId is not a UUID) */
|
|
65
|
+
templateName?: string;
|
|
66
|
+
/** Optional template HTML content (used when templateId is not a UUID) */
|
|
67
|
+
templateContent?: string;
|
|
68
|
+
/** Optional template parameters (used when templateId is not a UUID) */
|
|
69
|
+
templateParameters?: Array<{
|
|
70
|
+
name: string;
|
|
71
|
+
type?: string;
|
|
72
|
+
required?: boolean;
|
|
73
|
+
}>;
|
|
74
|
+
/** Optional field mapping */
|
|
75
|
+
fieldMapping?: Record<string, string>;
|
|
76
|
+
/** Optional filename */
|
|
77
|
+
filename?: string;
|
|
78
|
+
/** Optional validation schema */
|
|
79
|
+
validationSchema?: import('./validation').ValidationSchema;
|
|
80
|
+
/** Strict validation mode (treats warnings as errors) */
|
|
81
|
+
strictValidation?: boolean;
|
|
82
|
+
/** Schema version for canonicalization */
|
|
83
|
+
schemaVersion?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* CSV upload result
|
|
87
|
+
*/
|
|
88
|
+
export interface UploadCSVResult {
|
|
89
|
+
batchId: string;
|
|
90
|
+
totalRecords: number;
|
|
91
|
+
merkleRoot?: string;
|
|
92
|
+
txHash?: string;
|
|
93
|
+
summary: {
|
|
94
|
+
success: number;
|
|
95
|
+
failed: number;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* JSON batch upload options
|
|
100
|
+
*/
|
|
101
|
+
export interface UploadJSONOptions {
|
|
102
|
+
/** Array of data objects */
|
|
103
|
+
data: Array<Record<string, any>>;
|
|
104
|
+
/** Template ID */
|
|
105
|
+
templateId: string;
|
|
106
|
+
/** Optional field mapping */
|
|
107
|
+
fieldMapping?: Record<string, string>;
|
|
108
|
+
/** Optional validation schema */
|
|
109
|
+
validationSchema?: import('./validation').ValidationSchema;
|
|
110
|
+
/** Strict validation mode (treats warnings as errors) */
|
|
111
|
+
strictValidation?: boolean;
|
|
112
|
+
/** Schema version for canonicalization */
|
|
113
|
+
schemaVersion?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Verification options
|
|
117
|
+
*/
|
|
118
|
+
export interface VerifyPDFOptions {
|
|
119
|
+
/** PDF file buffer or path */
|
|
120
|
+
pdf: Buffer | string;
|
|
121
|
+
/** Optional filename */
|
|
122
|
+
filename?: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Verification result
|
|
126
|
+
*/
|
|
127
|
+
export interface VerificationResult {
|
|
128
|
+
valid: boolean;
|
|
129
|
+
jobId?: string;
|
|
130
|
+
batchId?: string;
|
|
131
|
+
verificationResult?: {
|
|
132
|
+
isValid: boolean;
|
|
133
|
+
errors?: string[];
|
|
134
|
+
warnings?: string[];
|
|
135
|
+
blockchainTxHash?: string;
|
|
136
|
+
merkleRoot?: string;
|
|
137
|
+
};
|
|
138
|
+
error?: string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Options for emailing a batch
|
|
142
|
+
*/
|
|
143
|
+
export interface EmailBatchOptions {
|
|
144
|
+
/** Batch ID to email */
|
|
145
|
+
batchId: string;
|
|
146
|
+
/** Optional email address to send the entire batch ZIP to (instead of individual emails) */
|
|
147
|
+
sendZipTo?: string;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Result of emailing a batch
|
|
151
|
+
*/
|
|
152
|
+
export interface EmailBatchResult {
|
|
153
|
+
success: boolean;
|
|
154
|
+
message: string;
|
|
155
|
+
type: 'zip' | 'individual';
|
|
156
|
+
stats?: {
|
|
157
|
+
sent: number;
|
|
158
|
+
failed: number;
|
|
159
|
+
skipped: number;
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Batch status
|
|
164
|
+
*/
|
|
165
|
+
export interface BatchStatus {
|
|
166
|
+
batchId: string;
|
|
167
|
+
status: string;
|
|
168
|
+
signingStatus?: string;
|
|
169
|
+
totalJobs: number;
|
|
170
|
+
pendingSignatureCount: number;
|
|
171
|
+
generatedCount: number;
|
|
172
|
+
merkleRoot?: string;
|
|
173
|
+
merkleRootUltimate?: string;
|
|
174
|
+
txHash?: string;
|
|
175
|
+
network?: string;
|
|
176
|
+
finalizedAt?: string;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Batch details (includes job list). This matches the platform endpoint
|
|
180
|
+
* GET /api/documents/batches/:id.
|
|
181
|
+
*/
|
|
182
|
+
export interface BatchJobSummary {
|
|
183
|
+
id: string;
|
|
184
|
+
status: string;
|
|
185
|
+
data?: Record<string, any>;
|
|
186
|
+
}
|
|
187
|
+
export interface BatchDetails {
|
|
188
|
+
id: string;
|
|
189
|
+
templateId?: string;
|
|
190
|
+
templateName?: string;
|
|
191
|
+
originalFileName?: string;
|
|
192
|
+
status: string;
|
|
193
|
+
signingStatus?: string;
|
|
194
|
+
totalRecords?: number;
|
|
195
|
+
createdAt?: string;
|
|
196
|
+
updatedAt?: string;
|
|
197
|
+
stats?: {
|
|
198
|
+
total: number;
|
|
199
|
+
pending: number;
|
|
200
|
+
processing: number;
|
|
201
|
+
generated: number;
|
|
202
|
+
failed: number;
|
|
203
|
+
};
|
|
204
|
+
jobs: BatchJobSummary[];
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* SDK Error codes
|
|
208
|
+
*/
|
|
209
|
+
export declare enum SDKErrorCode {
|
|
210
|
+
AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED",
|
|
211
|
+
INVALID_CREDENTIALS = "INVALID_CREDENTIALS",
|
|
212
|
+
TOKEN_EXPIRED = "TOKEN_EXPIRED",
|
|
213
|
+
INVALID_PRIVATE_KEY = "INVALID_PRIVATE_KEY",
|
|
214
|
+
INVALID_PDF = "INVALID_PDF",
|
|
215
|
+
INVALID_CSV = "INVALID_CSV",
|
|
216
|
+
TEMPLATE_NOT_FOUND = "TEMPLATE_NOT_FOUND",
|
|
217
|
+
NETWORK_ERROR = "NETWORK_ERROR",
|
|
218
|
+
TIMEOUT = "TIMEOUT",
|
|
219
|
+
VALIDATION_ERROR = "VALIDATION_ERROR",
|
|
220
|
+
UNKNOWN_ERROR = "UNKNOWN_ERROR"
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* SDK Error class
|
|
224
|
+
*/
|
|
225
|
+
export declare class SDKError extends Error {
|
|
226
|
+
code: SDKErrorCode;
|
|
227
|
+
originalError?: Error | undefined;
|
|
228
|
+
constructor(code: SDKErrorCode, message: string, originalError?: Error | undefined);
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SDKError = exports.SDKErrorCode = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* SDK Error codes
|
|
6
|
+
*/
|
|
7
|
+
var SDKErrorCode;
|
|
8
|
+
(function (SDKErrorCode) {
|
|
9
|
+
SDKErrorCode["AUTHENTICATION_FAILED"] = "AUTHENTICATION_FAILED";
|
|
10
|
+
SDKErrorCode["INVALID_CREDENTIALS"] = "INVALID_CREDENTIALS";
|
|
11
|
+
SDKErrorCode["TOKEN_EXPIRED"] = "TOKEN_EXPIRED";
|
|
12
|
+
SDKErrorCode["INVALID_PRIVATE_KEY"] = "INVALID_PRIVATE_KEY";
|
|
13
|
+
SDKErrorCode["INVALID_PDF"] = "INVALID_PDF";
|
|
14
|
+
SDKErrorCode["INVALID_CSV"] = "INVALID_CSV";
|
|
15
|
+
SDKErrorCode["TEMPLATE_NOT_FOUND"] = "TEMPLATE_NOT_FOUND";
|
|
16
|
+
SDKErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
17
|
+
SDKErrorCode["TIMEOUT"] = "TIMEOUT";
|
|
18
|
+
SDKErrorCode["VALIDATION_ERROR"] = "VALIDATION_ERROR";
|
|
19
|
+
SDKErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
20
|
+
})(SDKErrorCode || (exports.SDKErrorCode = SDKErrorCode = {}));
|
|
21
|
+
/**
|
|
22
|
+
* SDK Error class
|
|
23
|
+
*/
|
|
24
|
+
class SDKError extends Error {
|
|
25
|
+
constructor(code, message, originalError) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.code = code;
|
|
28
|
+
this.originalError = originalError;
|
|
29
|
+
this.name = 'SDKError';
|
|
30
|
+
Object.setPrototypeOf(this, SDKError.prototype);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.SDKError = SDKError;
|
|
34
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAuNA;;GAEG;AACH,IAAY,YAYX;AAZD,WAAY,YAAY;IACtB,+DAA+C,CAAA;IAC/C,2DAA2C,CAAA;IAC3C,+CAA+B,CAAA;IAC/B,2DAA2C,CAAA;IAC3C,2CAA2B,CAAA;IAC3B,2CAA2B,CAAA;IAC3B,yDAAyC,CAAA;IACzC,+CAA+B,CAAA;IAC/B,mCAAmB,CAAA;IACnB,qDAAqC,CAAA;IACrC,+CAA+B,CAAA;AACjC,CAAC,EAZW,YAAY,4BAAZ,YAAY,QAYvB;AAED;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;IACjC,YACS,IAAkB,EACzB,OAAe,EACR,aAAqB;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAc;QAElB,kBAAa,GAAb,aAAa,CAAQ;QAG5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;CACF;AAVD,4BAUC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read file buffer from path or return buffer directly
|
|
3
|
+
*/
|
|
4
|
+
export declare function readFileBuffer(input: Buffer | string): Promise<Buffer>;
|
|
5
|
+
/**
|
|
6
|
+
* Validate PDF file
|
|
7
|
+
*/
|
|
8
|
+
export declare function validatePDF(buffer: Buffer): void;
|
|
9
|
+
/**
|
|
10
|
+
* Validate CSV file
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateCSV(buffer: Buffer): void;
|
|
13
|
+
/**
|
|
14
|
+
* Canonicalize certificate data for deterministic hashing
|
|
15
|
+
* Ensures same data always produces same hash regardless of:
|
|
16
|
+
* - JSON key order
|
|
17
|
+
* - Date format
|
|
18
|
+
* - Null/undefined/empty string differences
|
|
19
|
+
* - Number formatting
|
|
20
|
+
* - Nested objects and arrays
|
|
21
|
+
* - Unicode variations
|
|
22
|
+
*
|
|
23
|
+
* @param data - Certificate data object
|
|
24
|
+
* @param schemaVersion - Schema version (default: '1.0')
|
|
25
|
+
* @param metrics - Optional metrics object to track normalization
|
|
26
|
+
* @param isNested - Internal flag to indicate nested call
|
|
27
|
+
* @returns Canonical JSON string (compact, sorted keys)
|
|
28
|
+
*/
|
|
29
|
+
export declare function canonicalizeCertificateData(data: Record<string, any>, schemaVersion?: string, metrics?: {
|
|
30
|
+
nullFieldsRemoved: number;
|
|
31
|
+
dateFieldsNormalized: number;
|
|
32
|
+
numberFieldsNormalized: number;
|
|
33
|
+
hasNestedObjects: boolean;
|
|
34
|
+
hasArrays: boolean;
|
|
35
|
+
}, isNested?: boolean): string;
|
|
36
|
+
/**
|
|
37
|
+
* Hash data deterministically (Keccak-256)
|
|
38
|
+
* Uses Keccak-256 to match the blockchain platform's hashing algorithm
|
|
39
|
+
*/
|
|
40
|
+
export declare function hashData(data: Buffer | string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Build Merkle tree from hashes
|
|
43
|
+
* Returns merkle root
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildMerkleTree(hashes: string[]): string;
|
|
46
|
+
/**
|
|
47
|
+
* Retry function with exponential backoff
|
|
48
|
+
*/
|
|
49
|
+
export declare function retry<T>(fn: () => Promise<T>, maxAttempts?: number, delay?: number): Promise<T>;
|
|
50
|
+
/**
|
|
51
|
+
* Parse CSV buffer to array of objects
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseCSV(buffer: Buffer): Array<Record<string, string>>;
|
|
54
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc5E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAgBhD;AA0FD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,aAAa,GAAE,MAAc,EAC7B,OAAO,CAAC,EAAE;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EACpJ,QAAQ,GAAE,OAAe,GACxB,MAAM,CAkCR;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGtD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CA8BxD;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,WAAW,GAAE,MAAU,EACvB,KAAK,GAAE,MAAa,GACnB,OAAO,CAAC,CAAC,CAAC,CA0BZ;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmCtE"}
|