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 ADDED
@@ -0,0 +1,122 @@
1
+ # QuestVerify Certificate SDK
2
+
3
+ Server-side SDK for QuestVerify blockchain certificate platform.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @questverify/cert-sdk
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { CertSDK } from '@questverify/cert-sdk';
15
+
16
+ const sdk = new CertSDK({
17
+ environment: 'sandbox', // or 'production'
18
+ clientId: 'your-client-id',
19
+ clientSecret: 'your-client-secret',
20
+ privateKey: 'your-secp256k1-private-key-hex', // 64 character hex string
21
+ });
22
+
23
+ // Upload PDF
24
+ const result = await sdk.uploadPDF({
25
+ pdf: Buffer.from('...'), // or file path
26
+ filename: 'certificate.pdf',
27
+ });
28
+
29
+ console.log('Batch ID:', result.batchId);
30
+ ```
31
+
32
+ ## API Reference
33
+
34
+ ### Upload PDF
35
+
36
+ ```typescript
37
+ await sdk.uploadPDF({
38
+ pdf: Buffer | string,
39
+ filename?: string,
40
+ metadata?: Record<string, any>,
41
+ });
42
+ ```
43
+
44
+ ### Upload CSV
45
+
46
+ ```typescript
47
+ await sdk.uploadCSV({
48
+ csv: Buffer | string,
49
+ templateId: string,
50
+ fieldMapping?: Record<string, string>,
51
+ filename?: string,
52
+ });
53
+ ```
54
+
55
+ ### Upload JSON
56
+
57
+ ```typescript
58
+ await sdk.uploadJSON({
59
+ data: Array<Record<string, any>>,
60
+ templateId: string,
61
+ fieldMapping?: Record<string, string>,
62
+ });
63
+ ```
64
+
65
+ ### Verify PDF
66
+
67
+ ```typescript
68
+ await sdk.verifyPDF({
69
+ pdf: Buffer | string,
70
+ filename?: string,
71
+ });
72
+ ```
73
+
74
+ ### Batch Status
75
+
76
+ ```typescript
77
+ await sdk.getBatchStatus('batch-uuid');
78
+ await sdk.waitForBatchCompletion('batch-uuid', { interval?: number, timeout?: number });
79
+ ```
80
+
81
+ ## Configuration
82
+
83
+ ```typescript
84
+ interface SDKConfig {
85
+ environment: 'sandbox' | 'production';
86
+ clientId: string;
87
+ clientSecret: string;
88
+ privateKey: string; // secp256k1 private key in hex format (64 chars)
89
+ baseUrl?: string;
90
+ timeout?: number; // default: 30000
91
+ retry?: {
92
+ maxAttempts?: number; // default: 3
93
+ delay?: number; // default: 1000
94
+ };
95
+ }
96
+ ```
97
+
98
+ ## Error Handling
99
+
100
+ ```typescript
101
+ import { SDKError, SDKErrorCode } from '@questverify/cert-sdk';
102
+
103
+ try {
104
+ await sdk.uploadPDF({ pdf: buffer });
105
+ } catch (error) {
106
+ if (error instanceof SDKError) {
107
+ console.error(error.code, error.message);
108
+ }
109
+ }
110
+ ```
111
+
112
+ **Error Codes:** `AUTHENTICATION_FAILED`, `INVALID_CREDENTIALS`, `INVALID_PDF`, `INVALID_CSV`, `TEMPLATE_NOT_FOUND`, `NETWORK_ERROR`, `TIMEOUT`, `VALIDATION_ERROR`, `UNKNOWN_ERROR`
113
+
114
+ ## Security
115
+
116
+ - Never commit private keys to version control
117
+ - Use environment variables for sensitive configuration
118
+ - Use different keys for sandbox and production
119
+
120
+ ## License
121
+
122
+ MIT
@@ -0,0 +1,40 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { SDKConfig } from './types';
3
+ /**
4
+ * Authentication Manager
5
+ * Handles token acquisition, refresh, and automatic retry on 401
6
+ */
7
+ export declare class AuthManager {
8
+ private accessToken;
9
+ private refreshToken;
10
+ private tokenExpiry;
11
+ private refreshPromise;
12
+ private config;
13
+ private axiosInstance;
14
+ constructor(config: SDKConfig);
15
+ /**
16
+ * Get valid access token (auto-refresh if needed)
17
+ */
18
+ getAccessToken(): Promise<string>;
19
+ /**
20
+ * Authenticate and get tokens
21
+ */
22
+ private authenticate;
23
+ /**
24
+ * Refresh access token using refresh token
25
+ */
26
+ private refreshAccessToken;
27
+ /**
28
+ * Make authenticated request with auto-retry on 401
29
+ */
30
+ request<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, data?: any, headers?: Record<string, string>): Promise<T>;
31
+ /**
32
+ * Get axios instance with authentication
33
+ */
34
+ getAxiosInstance(): AxiosInstance;
35
+ /**
36
+ * Clear tokens (for logout/testing)
37
+ */
38
+ clearTokens(): void;
39
+ }
40
+ //# sourceMappingURL=AuthManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAyC,MAAM,SAAS,CAAC;AAG3E;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE,SAAS;IAQ7B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAsBvC;;OAEG;YACW,YAAY;IAyC1B;;OAEG;YACW,kBAAkB;IAwChC;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EACzC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAmEb;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,WAAW,IAAI,IAAI;CAKpB"}
@@ -0,0 +1,188 @@
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.AuthManager = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const types_1 = require("./types");
9
+ const config_1 = require("./config");
10
+ /**
11
+ * Authentication Manager
12
+ * Handles token acquisition, refresh, and automatic retry on 401
13
+ */
14
+ class AuthManager {
15
+ constructor(config) {
16
+ this.accessToken = null;
17
+ this.refreshToken = null;
18
+ this.tokenExpiry = 0;
19
+ this.refreshPromise = null;
20
+ this.config = config;
21
+ this.axiosInstance = axios_1.default.create({
22
+ baseURL: (0, config_1.getBaseUrl)(config),
23
+ timeout: config.timeout,
24
+ });
25
+ }
26
+ /**
27
+ * Get valid access token (auto-refresh if needed)
28
+ */
29
+ async getAccessToken() {
30
+ // If we have a valid token, return it
31
+ if (this.accessToken && Date.now() < this.tokenExpiry - 60000) {
32
+ // Refresh 1 minute before expiry
33
+ return this.accessToken;
34
+ }
35
+ // If refresh is already in progress, wait for it
36
+ if (this.refreshPromise) {
37
+ return this.refreshPromise;
38
+ }
39
+ // Start new refresh
40
+ this.refreshPromise = this.refreshAccessToken();
41
+ try {
42
+ const token = await this.refreshPromise;
43
+ return token;
44
+ }
45
+ finally {
46
+ this.refreshPromise = null;
47
+ }
48
+ }
49
+ /**
50
+ * Authenticate and get tokens
51
+ */
52
+ async authenticate() {
53
+ try {
54
+ const response = await this.axiosInstance.post('/api/auth/client/token', {
55
+ clientId: this.config.clientId,
56
+ clientSecret: this.config.clientSecret,
57
+ });
58
+ if (!response.data.success || !response.data.data) {
59
+ throw new types_1.SDKError(types_1.SDKErrorCode.AUTHENTICATION_FAILED, 'Authentication failed: Invalid response from server');
60
+ }
61
+ return response.data.data;
62
+ }
63
+ catch (error) {
64
+ if (axios_1.default.isAxiosError(error)) {
65
+ if (error.response?.status === 401) {
66
+ throw new types_1.SDKError(types_1.SDKErrorCode.INVALID_CREDENTIALS, 'Invalid client credentials', error);
67
+ }
68
+ throw new types_1.SDKError(types_1.SDKErrorCode.AUTHENTICATION_FAILED, `Authentication failed: ${error.message}`, error);
69
+ }
70
+ throw new types_1.SDKError(types_1.SDKErrorCode.AUTHENTICATION_FAILED, `Authentication failed: ${error.message}`, error);
71
+ }
72
+ }
73
+ /**
74
+ * Refresh access token using refresh token
75
+ */
76
+ async refreshAccessToken() {
77
+ // If no refresh token, authenticate fresh
78
+ if (!this.refreshToken) {
79
+ const tokens = await this.authenticate();
80
+ this.accessToken = tokens.accessToken;
81
+ this.refreshToken = tokens.refreshToken;
82
+ this.tokenExpiry = Date.now() + tokens.expiresIn * 1000;
83
+ return this.accessToken;
84
+ }
85
+ try {
86
+ const response = await this.axiosInstance.post('/api/auth/client/refresh', {
87
+ refreshToken: this.refreshToken,
88
+ });
89
+ if (!response.data.success || !response.data.data) {
90
+ // Refresh token invalid, authenticate fresh
91
+ const tokens = await this.authenticate();
92
+ this.accessToken = tokens.accessToken;
93
+ this.refreshToken = tokens.refreshToken;
94
+ this.tokenExpiry = Date.now() + tokens.expiresIn * 1000;
95
+ return this.accessToken;
96
+ }
97
+ this.accessToken = response.data.data.accessToken;
98
+ this.tokenExpiry = Date.now() + response.data.data.expiresIn * 1000;
99
+ return this.accessToken;
100
+ }
101
+ catch (error) {
102
+ // Refresh failed, authenticate fresh
103
+ const tokens = await this.authenticate();
104
+ this.accessToken = tokens.accessToken;
105
+ this.refreshToken = tokens.refreshToken;
106
+ this.tokenExpiry = Date.now() + tokens.expiresIn * 1000;
107
+ return this.accessToken;
108
+ }
109
+ }
110
+ /**
111
+ * Make authenticated request with auto-retry on 401
112
+ */
113
+ async request(method, url, data, headers) {
114
+ const token = await this.getAccessToken();
115
+ try {
116
+ // Handle FormData specially
117
+ const requestHeaders = {
118
+ Authorization: `Bearer ${token}`,
119
+ };
120
+ // If data is FormData, don't set Content-Type (let FormData set it with boundary)
121
+ if (data && typeof data.getHeaders === 'function') {
122
+ // FormData object
123
+ const formDataHeaders = data.getHeaders();
124
+ Object.assign(requestHeaders, formDataHeaders);
125
+ }
126
+ else {
127
+ // Regular JSON data
128
+ requestHeaders['Content-Type'] = 'application/json';
129
+ }
130
+ // Merge with custom headers (custom headers take precedence)
131
+ if (headers) {
132
+ Object.assign(requestHeaders, headers);
133
+ }
134
+ const response = await this.axiosInstance.request({
135
+ method,
136
+ url,
137
+ data,
138
+ headers: requestHeaders,
139
+ });
140
+ return response.data;
141
+ }
142
+ catch (error) {
143
+ if (axios_1.default.isAxiosError(error) && error.response?.status === 401) {
144
+ // Token expired, refresh and retry once
145
+ this.accessToken = null; // Force refresh
146
+ const newToken = await this.getAccessToken();
147
+ // Rebuild headers for retry
148
+ const retryHeaders = {
149
+ Authorization: `Bearer ${newToken}`,
150
+ };
151
+ if (data && typeof data.getHeaders === 'function') {
152
+ const formDataHeaders = data.getHeaders();
153
+ Object.assign(retryHeaders, formDataHeaders);
154
+ }
155
+ else {
156
+ retryHeaders['Content-Type'] = 'application/json';
157
+ }
158
+ if (headers) {
159
+ Object.assign(retryHeaders, headers);
160
+ }
161
+ const retryResponse = await this.axiosInstance.request({
162
+ method,
163
+ url,
164
+ data,
165
+ headers: retryHeaders,
166
+ });
167
+ return retryResponse.data;
168
+ }
169
+ throw error;
170
+ }
171
+ }
172
+ /**
173
+ * Get axios instance with authentication
174
+ */
175
+ getAxiosInstance() {
176
+ return this.axiosInstance;
177
+ }
178
+ /**
179
+ * Clear tokens (for logout/testing)
180
+ */
181
+ clearTokens() {
182
+ this.accessToken = null;
183
+ this.refreshToken = null;
184
+ this.tokenExpiry = 0;
185
+ }
186
+ }
187
+ exports.AuthManager = AuthManager;
188
+ //# sourceMappingURL=AuthManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../src/AuthManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { SDKConfig, UploadPDFOptions, UploadPDFResult, UploadCSVOptions, UploadCSVResult, UploadJSONOptions, VerifyPDFOptions, VerificationResult, BatchStatus, BatchDetails } from './types';
2
+ /**
3
+ * QuestVerify Certificate SDK
4
+ * Main SDK class for blockchain certificate operations
5
+ */
6
+ export declare class CertSDK {
7
+ private config;
8
+ private authManager;
9
+ private signer;
10
+ private axiosInstance;
11
+ constructor(config: SDKConfig);
12
+ /**
13
+ * Upload single or multiple PDFs for certificate issuance
14
+ */
15
+ uploadPDF(options: UploadPDFOptions): Promise<UploadPDFResult>;
16
+ /**
17
+ * Upload multiple PDFs (ZIP file or array of buffers)
18
+ */
19
+ uploadPDFs(pdfs: Array<Buffer | string>): Promise<{
20
+ batchId: string;
21
+ totalRecords: number;
22
+ jobs: Array<{
23
+ jobId: string;
24
+ filename: string;
25
+ status: string;
26
+ }>;
27
+ }>;
28
+ /**
29
+ * Upload CSV file for bulk certificate issuance
30
+ */
31
+ uploadCSV(options: UploadCSVOptions): Promise<UploadCSVResult>;
32
+ /**
33
+ * Upload JSON data for bulk certificate issuance
34
+ */
35
+ uploadJSON(options: UploadJSONOptions): Promise<UploadCSVResult>;
36
+ /**
37
+ * Verify PDF certificate
38
+ */
39
+ verifyPDF(options: VerifyPDFOptions): Promise<VerificationResult>;
40
+ /**
41
+ * Get batch status
42
+ */
43
+ getBatchStatus(batchId: string): Promise<BatchStatus>;
44
+ /**
45
+ * Wait for batch to complete (polling)
46
+ */
47
+ waitForBatchCompletion(batchId: string, options?: {
48
+ interval?: number;
49
+ timeout?: number;
50
+ }): Promise<BatchStatus>;
51
+ /**
52
+ * Get full batch details including job IDs.
53
+ * Useful for downloading generated PDFs after a batch completes.
54
+ */
55
+ getBatchDetails(batchId: string): Promise<BatchDetails>;
56
+ /**
57
+ * Download the generated (QR/VD embedded) certificate PDF for a job.
58
+ */
59
+ downloadJobPDF(jobId: string): Promise<Buffer>;
60
+ /**
61
+ * Download all certificates in a batch as a ZIP file.
62
+ */
63
+ downloadBatchZIP(batchId: string): Promise<Buffer>;
64
+ /**
65
+ * Trigger email sending for a batch.
66
+ */
67
+ emailBatch(options: {
68
+ batchId: string;
69
+ sendZipTo?: string;
70
+ }): Promise<{
71
+ success: boolean;
72
+ message: string;
73
+ type: 'zip' | 'individual';
74
+ stats?: {
75
+ sent: number;
76
+ failed: number;
77
+ skipped: number;
78
+ };
79
+ }>;
80
+ /**
81
+ * Get public key (for verification/display)
82
+ */
83
+ getPublicKey(compressed?: boolean): Buffer;
84
+ /**
85
+ * Hash data (utility method)
86
+ */
87
+ hashData(data: Buffer | string): string;
88
+ /**
89
+ * Sign data (utility method)
90
+ */
91
+ signData(data: Buffer | string): string;
92
+ }
93
+ //# sourceMappingURL=CertSDK.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CertSDK.d.ts","sourceRoot":"","sources":["../src/CertSDK.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,YAAY,EAGb,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE,SAAS;IAe7B;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwEpE;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC;QACtD,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClE,CAAC;IAUF;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsGpE;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IA6GtE;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuEvE;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B3D;;OAEG;IACG,sBAAsB,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GACL,OAAO,CAAC,WAAW,CAAC;IAuBvB;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB7D;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBpD;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBxD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC1E,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,KAAK,GAAG,YAAY,CAAC;QAC3B,KAAK,CAAC,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;IAgCF;;OAEG;IACH,YAAY,CAAC,UAAU,GAAE,OAAc,GAAG,MAAM;IAUhD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;CASxC"}