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/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"}
@@ -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"}
@@ -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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"}
@@ -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"}
@@ -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"}