@licensechain/nodejs-sdk 1.0.0
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/LICENSE +21 -0
- package/README.md +500 -0
- package/dist/api-client.d.ts +13 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +52 -0
- package/dist/api-client.js.map +1 -0
- package/dist/client.d.ts +24 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +60 -0
- package/dist/client.js.map +1 -0
- package/dist/configuration.d.ts +26 -0
- package/dist/configuration.d.ts.map +1 -0
- package/dist/configuration.js +63 -0
- package/dist/configuration.js.map +1 -0
- package/dist/exceptions.d.ts +46 -0
- package/dist/exceptions.d.ts.map +1 -0
- package/dist/exceptions.js +105 -0
- package/dist/exceptions.js.map +1 -0
- package/dist/http-core.d.ts +36 -0
- package/dist/http-core.d.ts.map +1 -0
- package/dist/http-core.js +119 -0
- package/dist/http-core.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/license-assertion.d.ts +15 -0
- package/dist/license-assertion.d.ts.map +1 -0
- package/dist/license-assertion.js +59 -0
- package/dist/license-assertion.js.map +1 -0
- package/dist/license-validator.d.ts +53 -0
- package/dist/license-validator.d.ts.map +1 -0
- package/dist/license-validator.js +208 -0
- package/dist/license-validator.js.map +1 -0
- package/dist/services/license-service.d.ts +55 -0
- package/dist/services/license-service.d.ts.map +1 -0
- package/dist/services/license-service.js +85 -0
- package/dist/services/license-service.js.map +1 -0
- package/dist/services/product-service.d.ts +48 -0
- package/dist/services/product-service.d.ts.map +1 -0
- package/dist/services/product-service.js +53 -0
- package/dist/services/product-service.js.map +1 -0
- package/dist/services/user-service.d.ts +43 -0
- package/dist/services/user-service.d.ts.map +1 -0
- package/dist/services/user-service.js +58 -0
- package/dist/services/user-service.js.map +1 -0
- package/dist/services/webhook-service.d.ts +37 -0
- package/dist/services/webhook-service.d.ts.map +1 -0
- package/dist/services/webhook-service.js +57 -0
- package/dist/services/webhook-service.js.map +1 -0
- package/dist/types.d.ts +197 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -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 +396 -0
- package/dist/utils.js.map +1 -0
- package/dist/webhook-handler.d.ts +40 -0
- package/dist/webhook-handler.d.ts.map +1 -0
- package/dist/webhook-handler.js +160 -0
- package/dist/webhook-handler.js.map +1 -0
- package/dist/webhook-verifier.d.ts +41 -0
- package/dist/webhook-verifier.d.ts.map +1 -0
- package/dist/webhook-verifier.js +153 -0
- package/dist/webhook-verifier.js.map +1 -0
- package/package.json +71 -0
package/dist/utils.js
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
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.validateEmail = validateEmail;
|
|
7
|
+
exports.validateLicenseKey = validateLicenseKey;
|
|
8
|
+
exports.validateUuid = validateUuid;
|
|
9
|
+
exports.validateAmount = validateAmount;
|
|
10
|
+
exports.validateCurrency = validateCurrency;
|
|
11
|
+
exports.validateStatus = validateStatus;
|
|
12
|
+
exports.sanitizeInput = sanitizeInput;
|
|
13
|
+
exports.sanitizeMetadata = sanitizeMetadata;
|
|
14
|
+
exports.generateLicenseKey = generateLicenseKey;
|
|
15
|
+
exports.generateUuid = generateUuid;
|
|
16
|
+
exports.formatTimestamp = formatTimestamp;
|
|
17
|
+
exports.parseTimestamp = parseTimestamp;
|
|
18
|
+
exports.validatePagination = validatePagination;
|
|
19
|
+
exports.validateDateRange = validateDateRange;
|
|
20
|
+
exports.createWebhookSignature = createWebhookSignature;
|
|
21
|
+
exports.verifyWebhookSignature = verifyWebhookSignature;
|
|
22
|
+
exports.retryWithBackoff = retryWithBackoff;
|
|
23
|
+
exports.formatBytes = formatBytes;
|
|
24
|
+
exports.formatDuration = formatDuration;
|
|
25
|
+
exports.capitalizeFirst = capitalizeFirst;
|
|
26
|
+
exports.toSnakeCase = toSnakeCase;
|
|
27
|
+
exports.toPascalCase = toPascalCase;
|
|
28
|
+
exports.truncateString = truncateString;
|
|
29
|
+
exports.removeSpecialChars = removeSpecialChars;
|
|
30
|
+
exports.slugify = slugify;
|
|
31
|
+
exports.validateNotEmpty = validateNotEmpty;
|
|
32
|
+
exports.validatePositive = validatePositive;
|
|
33
|
+
exports.validateRange = validateRange;
|
|
34
|
+
exports.jsonSerialize = jsonSerialize;
|
|
35
|
+
exports.jsonDeserialize = jsonDeserialize;
|
|
36
|
+
exports.deepMerge = deepMerge;
|
|
37
|
+
exports.chunkArray = chunkArray;
|
|
38
|
+
exports.flattenObject = flattenObject;
|
|
39
|
+
exports.unflattenObject = unflattenObject;
|
|
40
|
+
exports.generateRandomString = generateRandomString;
|
|
41
|
+
exports.generateRandomBytes = generateRandomBytes;
|
|
42
|
+
exports.sha256 = sha256;
|
|
43
|
+
exports.sha1 = sha1;
|
|
44
|
+
exports.md5 = md5;
|
|
45
|
+
exports.base64Encode = base64Encode;
|
|
46
|
+
exports.base64Decode = base64Decode;
|
|
47
|
+
exports.urlEncode = urlEncode;
|
|
48
|
+
exports.urlDecode = urlDecode;
|
|
49
|
+
exports.isValidJson = isValidJson;
|
|
50
|
+
exports.isValidUrl = isValidUrl;
|
|
51
|
+
exports.isValidIp = isValidIp;
|
|
52
|
+
exports.isValidEmail = isValidEmail;
|
|
53
|
+
exports.getCurrentTimestamp = getCurrentTimestamp;
|
|
54
|
+
exports.getCurrentDate = getCurrentDate;
|
|
55
|
+
exports.getCurrentDateFormatted = getCurrentDateFormatted;
|
|
56
|
+
exports.sleep = sleep;
|
|
57
|
+
exports.debounce = debounce;
|
|
58
|
+
exports.throttle = throttle;
|
|
59
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
60
|
+
function validateEmail(email) {
|
|
61
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
62
|
+
return emailRegex.test(email);
|
|
63
|
+
}
|
|
64
|
+
function validateLicenseKey(licenseKey) {
|
|
65
|
+
return licenseKey.length === 32 && /^[A-Z0-9]+$/.test(licenseKey);
|
|
66
|
+
}
|
|
67
|
+
function validateUuid(uuid) {
|
|
68
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
69
|
+
return uuidRegex.test(uuid);
|
|
70
|
+
}
|
|
71
|
+
function validateAmount(amount) {
|
|
72
|
+
return typeof amount === 'number' && amount > 0 && isFinite(amount);
|
|
73
|
+
}
|
|
74
|
+
function validateCurrency(currency) {
|
|
75
|
+
const validCurrencies = ['USD', 'EUR', 'GBP', 'CAD', 'AUD', 'JPY', 'CHF', 'CNY'];
|
|
76
|
+
return validCurrencies.includes(currency.toUpperCase());
|
|
77
|
+
}
|
|
78
|
+
function validateStatus(status, allowedStatuses) {
|
|
79
|
+
return allowedStatuses.includes(status);
|
|
80
|
+
}
|
|
81
|
+
function sanitizeInput(input) {
|
|
82
|
+
if (typeof input !== 'string') {
|
|
83
|
+
return String(input);
|
|
84
|
+
}
|
|
85
|
+
return input
|
|
86
|
+
.replace(/&/g, '&')
|
|
87
|
+
.replace(/</g, '<')
|
|
88
|
+
.replace(/>/g, '>')
|
|
89
|
+
.replace(/"/g, '"')
|
|
90
|
+
.replace(/'/g, ''');
|
|
91
|
+
}
|
|
92
|
+
function sanitizeMetadata(metadata) {
|
|
93
|
+
if (typeof metadata !== 'object' || metadata === null) {
|
|
94
|
+
return metadata;
|
|
95
|
+
}
|
|
96
|
+
const sanitized = {};
|
|
97
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
98
|
+
if (typeof value === 'string') {
|
|
99
|
+
sanitized[key] = sanitizeInput(value);
|
|
100
|
+
}
|
|
101
|
+
else if (Array.isArray(value)) {
|
|
102
|
+
sanitized[key] = value.map(item => typeof item === 'string' ? sanitizeInput(item) : item);
|
|
103
|
+
}
|
|
104
|
+
else if (typeof value === 'object' && value !== null) {
|
|
105
|
+
sanitized[key] = sanitizeMetadata(value);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
sanitized[key] = value;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return sanitized;
|
|
112
|
+
}
|
|
113
|
+
function generateLicenseKey() {
|
|
114
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
115
|
+
let result = '';
|
|
116
|
+
for (let i = 0; i < 32; i++) {
|
|
117
|
+
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
function generateUuid() {
|
|
122
|
+
return crypto_1.default.randomUUID();
|
|
123
|
+
}
|
|
124
|
+
function formatTimestamp(timestamp) {
|
|
125
|
+
return new Date(timestamp * 1000).toISOString();
|
|
126
|
+
}
|
|
127
|
+
function parseTimestamp(timestamp) {
|
|
128
|
+
return Math.floor(new Date(timestamp).getTime() / 1000);
|
|
129
|
+
}
|
|
130
|
+
function validatePagination(page, limit) {
|
|
131
|
+
const validPage = Math.max(page || 1, 1);
|
|
132
|
+
const validLimit = Math.min(Math.max(limit || 10, 1), 100);
|
|
133
|
+
return [validPage, validLimit];
|
|
134
|
+
}
|
|
135
|
+
function validateDateRange(startDate, endDate) {
|
|
136
|
+
const startTime = parseTimestamp(startDate);
|
|
137
|
+
const endTime = parseTimestamp(endDate);
|
|
138
|
+
if (startTime > endTime) {
|
|
139
|
+
throw new Error('Start date must be before or equal to end date');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function createWebhookSignature(payload, secret) {
|
|
143
|
+
return crypto_1.default.createHmac('sha256', secret).update(payload).digest('hex');
|
|
144
|
+
}
|
|
145
|
+
function verifyWebhookSignature(payload, signature, secret) {
|
|
146
|
+
const expectedSignature = createWebhookSignature(payload, secret);
|
|
147
|
+
return crypto_1.default.timingSafeEqual(Buffer.from(signature, 'hex'), Buffer.from(expectedSignature, 'hex'));
|
|
148
|
+
}
|
|
149
|
+
function retryWithBackoff(fn, maxRetries = 3, initialDelay = 1000) {
|
|
150
|
+
return new Promise((resolve, reject) => {
|
|
151
|
+
let attempts = 0;
|
|
152
|
+
const attempt = async () => {
|
|
153
|
+
try {
|
|
154
|
+
const result = await fn();
|
|
155
|
+
resolve(result);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
attempts++;
|
|
159
|
+
if (attempts >= maxRetries) {
|
|
160
|
+
reject(error);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
setTimeout(attempt, initialDelay * Math.pow(2, attempts - 1));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
attempt();
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function formatBytes(bytes) {
|
|
171
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
|
|
172
|
+
let size = bytes;
|
|
173
|
+
let unitIndex = 0;
|
|
174
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
175
|
+
size /= 1024;
|
|
176
|
+
unitIndex++;
|
|
177
|
+
}
|
|
178
|
+
return `${size.toFixed(1)} ${units[unitIndex]}`;
|
|
179
|
+
}
|
|
180
|
+
function formatDuration(seconds) {
|
|
181
|
+
if (seconds < 60) {
|
|
182
|
+
return `${Math.floor(seconds)}s`;
|
|
183
|
+
}
|
|
184
|
+
else if (seconds < 3600) {
|
|
185
|
+
const minutes = Math.floor(seconds / 60);
|
|
186
|
+
const remainingSeconds = Math.floor(seconds % 60);
|
|
187
|
+
return `${minutes}m ${remainingSeconds}s`;
|
|
188
|
+
}
|
|
189
|
+
else if (seconds < 86400) {
|
|
190
|
+
const hours = Math.floor(seconds / 3600);
|
|
191
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
|
192
|
+
return `${hours}h ${minutes}m`;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
const days = Math.floor(seconds / 86400);
|
|
196
|
+
const hours = Math.floor((seconds % 86400) / 3600);
|
|
197
|
+
return `${days}d ${hours}h`;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function capitalizeFirst(text) {
|
|
201
|
+
if (!text)
|
|
202
|
+
return text;
|
|
203
|
+
return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
|
|
204
|
+
}
|
|
205
|
+
function toSnakeCase(text) {
|
|
206
|
+
return text.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '');
|
|
207
|
+
}
|
|
208
|
+
function toPascalCase(text) {
|
|
209
|
+
return text.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join('');
|
|
210
|
+
}
|
|
211
|
+
function truncateString(text, maxLength) {
|
|
212
|
+
if (text.length <= maxLength) {
|
|
213
|
+
return text;
|
|
214
|
+
}
|
|
215
|
+
return text.slice(0, maxLength - 3) + '...';
|
|
216
|
+
}
|
|
217
|
+
function removeSpecialChars(text) {
|
|
218
|
+
return text.replace(/[^a-zA-Z0-9\s]/g, '');
|
|
219
|
+
}
|
|
220
|
+
function slugify(text) {
|
|
221
|
+
return text
|
|
222
|
+
.toLowerCase()
|
|
223
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
224
|
+
.replace(/\s+/g, '-')
|
|
225
|
+
.replace(/-+/g, '-')
|
|
226
|
+
.replace(/^-|-$/g, '');
|
|
227
|
+
}
|
|
228
|
+
function validateNotEmpty(value, fieldName) {
|
|
229
|
+
if (!value || !value.trim()) {
|
|
230
|
+
throw new Error(`${fieldName} cannot be empty`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function validatePositive(value, fieldName) {
|
|
234
|
+
if (value <= 0) {
|
|
235
|
+
throw new Error(`${fieldName} must be positive`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function validateRange(value, min, max, fieldName) {
|
|
239
|
+
if (value < min || value > max) {
|
|
240
|
+
throw new Error(`${fieldName} must be between ${min} and ${max}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function jsonSerialize(obj) {
|
|
244
|
+
return JSON.stringify(obj, null, 2);
|
|
245
|
+
}
|
|
246
|
+
function jsonDeserialize(jsonString) {
|
|
247
|
+
return JSON.parse(jsonString);
|
|
248
|
+
}
|
|
249
|
+
function deepMerge(target, source) {
|
|
250
|
+
const result = { ...target };
|
|
251
|
+
for (const [key, value] of Object.entries(source)) {
|
|
252
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
253
|
+
result[key] = deepMerge(result[key] || {}, value);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
result[key] = value;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return result;
|
|
260
|
+
}
|
|
261
|
+
function chunkArray(array, chunkSize) {
|
|
262
|
+
const chunks = [];
|
|
263
|
+
for (let i = 0; i < array.length; i += chunkSize) {
|
|
264
|
+
chunks.push(array.slice(i, i + chunkSize));
|
|
265
|
+
}
|
|
266
|
+
return chunks;
|
|
267
|
+
}
|
|
268
|
+
function flattenObject(obj, separator = '.') {
|
|
269
|
+
const result = {};
|
|
270
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
271
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
272
|
+
const flattened = flattenObject(value, separator);
|
|
273
|
+
for (const [subKey, subValue] of Object.entries(flattened)) {
|
|
274
|
+
result[`${key}${separator}${subKey}`] = subValue;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
result[key] = value;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
function unflattenObject(obj, separator = '.') {
|
|
284
|
+
const result = {};
|
|
285
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
286
|
+
const keys = key.split(separator);
|
|
287
|
+
let current = result;
|
|
288
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
289
|
+
if (!current[keys[i]]) {
|
|
290
|
+
current[keys[i]] = {};
|
|
291
|
+
}
|
|
292
|
+
current = current[keys[i]];
|
|
293
|
+
}
|
|
294
|
+
current[keys[keys.length - 1]] = value;
|
|
295
|
+
}
|
|
296
|
+
return result;
|
|
297
|
+
}
|
|
298
|
+
function generateRandomString(length, characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {
|
|
299
|
+
let result = '';
|
|
300
|
+
for (let i = 0; i < length; i++) {
|
|
301
|
+
result += characters.charAt(Math.floor(Math.random() * characters.length));
|
|
302
|
+
}
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
function generateRandomBytes(length) {
|
|
306
|
+
return crypto_1.default.randomBytes(length);
|
|
307
|
+
}
|
|
308
|
+
function sha256(data) {
|
|
309
|
+
return crypto_1.default.createHash('sha256').update(data).digest('hex');
|
|
310
|
+
}
|
|
311
|
+
function sha1(data) {
|
|
312
|
+
return crypto_1.default.createHash('sha1').update(data).digest('hex');
|
|
313
|
+
}
|
|
314
|
+
function md5(data) {
|
|
315
|
+
return crypto_1.default.createHash('md5').update(data).digest('hex');
|
|
316
|
+
}
|
|
317
|
+
function base64Encode(data) {
|
|
318
|
+
return Buffer.from(data).toString('base64');
|
|
319
|
+
}
|
|
320
|
+
function base64Decode(data) {
|
|
321
|
+
return Buffer.from(data, 'base64').toString('utf8');
|
|
322
|
+
}
|
|
323
|
+
function urlEncode(data) {
|
|
324
|
+
return encodeURIComponent(data);
|
|
325
|
+
}
|
|
326
|
+
function urlDecode(data) {
|
|
327
|
+
return decodeURIComponent(data);
|
|
328
|
+
}
|
|
329
|
+
function isValidJson(jsonString) {
|
|
330
|
+
try {
|
|
331
|
+
JSON.parse(jsonString);
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
function isValidUrl(url) {
|
|
339
|
+
try {
|
|
340
|
+
new URL(url);
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
return false;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
function isValidIp(ip) {
|
|
348
|
+
const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;
|
|
349
|
+
return ipRegex.test(ip);
|
|
350
|
+
}
|
|
351
|
+
function isValidEmail(email) {
|
|
352
|
+
return validateEmail(email);
|
|
353
|
+
}
|
|
354
|
+
function getCurrentTimestamp() {
|
|
355
|
+
return Math.floor(Date.now() / 1000);
|
|
356
|
+
}
|
|
357
|
+
function getCurrentDate() {
|
|
358
|
+
return new Date().toISOString();
|
|
359
|
+
}
|
|
360
|
+
function getCurrentDateFormatted(format) {
|
|
361
|
+
const date = new Date();
|
|
362
|
+
const year = date.getFullYear();
|
|
363
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
364
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
365
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
366
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
367
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
368
|
+
return format
|
|
369
|
+
.replace('YYYY', year.toString())
|
|
370
|
+
.replace('MM', month)
|
|
371
|
+
.replace('DD', day)
|
|
372
|
+
.replace('HH', hours)
|
|
373
|
+
.replace('mm', minutes)
|
|
374
|
+
.replace('ss', seconds);
|
|
375
|
+
}
|
|
376
|
+
function sleep(ms) {
|
|
377
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
378
|
+
}
|
|
379
|
+
function debounce(func, wait) {
|
|
380
|
+
let timeout;
|
|
381
|
+
return (...args) => {
|
|
382
|
+
clearTimeout(timeout);
|
|
383
|
+
timeout = setTimeout(() => func(...args), wait);
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
function throttle(func, limit) {
|
|
387
|
+
let inThrottle;
|
|
388
|
+
return (...args) => {
|
|
389
|
+
if (!inThrottle) {
|
|
390
|
+
func(...args);
|
|
391
|
+
inThrottle = true;
|
|
392
|
+
setTimeout(() => (inThrottle = false), limit);
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare class WebhookHandler {
|
|
2
|
+
private secret;
|
|
3
|
+
private tolerance;
|
|
4
|
+
constructor(secret: string, tolerance?: number);
|
|
5
|
+
verifySignature(payload: string, signature: string): boolean;
|
|
6
|
+
verifyTimestamp(timestamp: string): void;
|
|
7
|
+
verifyWebhook(payload: string, signature: string, timestamp: string): void;
|
|
8
|
+
processEvent(eventData: any): void;
|
|
9
|
+
private handleLicenseCreated;
|
|
10
|
+
private handleLicenseUpdated;
|
|
11
|
+
private handleLicenseRevoked;
|
|
12
|
+
private handleLicenseExpired;
|
|
13
|
+
private handleUserCreated;
|
|
14
|
+
private handleUserUpdated;
|
|
15
|
+
private handleUserDeleted;
|
|
16
|
+
private handleProductCreated;
|
|
17
|
+
private handleProductUpdated;
|
|
18
|
+
private handleProductDeleted;
|
|
19
|
+
private handlePaymentCompleted;
|
|
20
|
+
private handlePaymentFailed;
|
|
21
|
+
private handlePaymentRefunded;
|
|
22
|
+
}
|
|
23
|
+
export declare class WebhookEvents {
|
|
24
|
+
static readonly LICENSE_CREATED = "license.created";
|
|
25
|
+
static readonly LICENSE_UPDATED = "license.updated";
|
|
26
|
+
static readonly LICENSE_REVOKED = "license.revoked";
|
|
27
|
+
static readonly LICENSE_EXPIRED = "license.expired";
|
|
28
|
+
static readonly USER_CREATED = "user.created";
|
|
29
|
+
static readonly USER_UPDATED = "user.updated";
|
|
30
|
+
static readonly USER_DELETED = "user.deleted";
|
|
31
|
+
static readonly PRODUCT_CREATED = "product.created";
|
|
32
|
+
static readonly PRODUCT_UPDATED = "product.updated";
|
|
33
|
+
static readonly PRODUCT_DELETED = "product.deleted";
|
|
34
|
+
static readonly PAYMENT_COMPLETED = "payment.completed";
|
|
35
|
+
static readonly PAYMENT_FAILED = "payment.failed";
|
|
36
|
+
static readonly PAYMENT_REFUNDED = "payment.refunded";
|
|
37
|
+
}
|
|
38
|
+
export declare function createOutgoingWebhookSignature(payload: string, secret: string): string;
|
|
39
|
+
export declare function verifyIncomingWebhookSignature(payload: string, signature: string, secret: string): boolean;
|
|
40
|
+
//# sourceMappingURL=webhook-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-handler.d.ts","sourceRoot":"","sources":["../src/webhook-handler.ts"],"names":[],"mappings":"AAGA,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY;IAKnD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5D,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAcxC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ1E,YAAY,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;IAmDlC,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,qBAAqB;CAI9B;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY,kBAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,eAAe,qBAAqB;IACpD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,uBAAuB;IACxD,MAAM,CAAC,QAAQ,CAAC,cAAc,oBAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,sBAAsB;CACvD;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1G"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebhookEvents = exports.WebhookHandler = void 0;
|
|
4
|
+
exports.createOutgoingWebhookSignature = createOutgoingWebhookSignature;
|
|
5
|
+
exports.verifyIncomingWebhookSignature = verifyIncomingWebhookSignature;
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
const exceptions_1 = require("./exceptions");
|
|
8
|
+
class WebhookHandler {
|
|
9
|
+
constructor(secret, tolerance = 300) {
|
|
10
|
+
this.secret = secret;
|
|
11
|
+
this.tolerance = tolerance; // seconds
|
|
12
|
+
}
|
|
13
|
+
verifySignature(payload, signature) {
|
|
14
|
+
return (0, utils_1.verifyWebhookSignature)(payload, signature, this.secret);
|
|
15
|
+
}
|
|
16
|
+
verifyTimestamp(timestamp) {
|
|
17
|
+
try {
|
|
18
|
+
const webhookTime = new Date(timestamp);
|
|
19
|
+
const currentTime = new Date();
|
|
20
|
+
const timeDiff = Math.abs((currentTime.getTime() - webhookTime.getTime()) / 1000);
|
|
21
|
+
if (timeDiff > this.tolerance) {
|
|
22
|
+
throw new exceptions_1.ValidationException(`Webhook timestamp too old: ${timeDiff} seconds`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
throw new exceptions_1.ValidationException(`Invalid timestamp format: ${error}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
verifyWebhook(payload, signature, timestamp) {
|
|
30
|
+
this.verifyTimestamp(timestamp);
|
|
31
|
+
if (!this.verifySignature(payload, signature)) {
|
|
32
|
+
throw new exceptions_1.AuthenticationException('Invalid webhook signature');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
processEvent(eventData) {
|
|
36
|
+
const payload = (0, utils_1.jsonSerialize)(eventData.data || {});
|
|
37
|
+
this.verifyWebhook(payload, eventData.signature, eventData.timestamp);
|
|
38
|
+
const eventType = eventData.type || '';
|
|
39
|
+
switch (eventType) {
|
|
40
|
+
case 'license.created':
|
|
41
|
+
this.handleLicenseCreated(eventData);
|
|
42
|
+
break;
|
|
43
|
+
case 'license.updated':
|
|
44
|
+
this.handleLicenseUpdated(eventData);
|
|
45
|
+
break;
|
|
46
|
+
case 'license.revoked':
|
|
47
|
+
this.handleLicenseRevoked(eventData);
|
|
48
|
+
break;
|
|
49
|
+
case 'license.expired':
|
|
50
|
+
this.handleLicenseExpired(eventData);
|
|
51
|
+
break;
|
|
52
|
+
case 'user.created':
|
|
53
|
+
this.handleUserCreated(eventData);
|
|
54
|
+
break;
|
|
55
|
+
case 'user.updated':
|
|
56
|
+
this.handleUserUpdated(eventData);
|
|
57
|
+
break;
|
|
58
|
+
case 'user.deleted':
|
|
59
|
+
this.handleUserDeleted(eventData);
|
|
60
|
+
break;
|
|
61
|
+
case 'product.created':
|
|
62
|
+
this.handleProductCreated(eventData);
|
|
63
|
+
break;
|
|
64
|
+
case 'product.updated':
|
|
65
|
+
this.handleProductUpdated(eventData);
|
|
66
|
+
break;
|
|
67
|
+
case 'product.deleted':
|
|
68
|
+
this.handleProductDeleted(eventData);
|
|
69
|
+
break;
|
|
70
|
+
case 'payment.completed':
|
|
71
|
+
this.handlePaymentCompleted(eventData);
|
|
72
|
+
break;
|
|
73
|
+
case 'payment.failed':
|
|
74
|
+
this.handlePaymentFailed(eventData);
|
|
75
|
+
break;
|
|
76
|
+
case 'payment.refunded':
|
|
77
|
+
this.handlePaymentRefunded(eventData);
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
console.log(`Unknown webhook event type: ${eventType}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
handleLicenseCreated(eventData) {
|
|
84
|
+
console.log(`License created: ${eventData.id}`);
|
|
85
|
+
// Add custom logic for license created event
|
|
86
|
+
}
|
|
87
|
+
handleLicenseUpdated(eventData) {
|
|
88
|
+
console.log(`License updated: ${eventData.id}`);
|
|
89
|
+
// Add custom logic for license updated event
|
|
90
|
+
}
|
|
91
|
+
handleLicenseRevoked(eventData) {
|
|
92
|
+
console.log(`License revoked: ${eventData.id}`);
|
|
93
|
+
// Add custom logic for license revoked event
|
|
94
|
+
}
|
|
95
|
+
handleLicenseExpired(eventData) {
|
|
96
|
+
console.log(`License expired: ${eventData.id}`);
|
|
97
|
+
// Add custom logic for license expired event
|
|
98
|
+
}
|
|
99
|
+
handleUserCreated(eventData) {
|
|
100
|
+
console.log(`User created: ${eventData.id}`);
|
|
101
|
+
// Add custom logic for user created event
|
|
102
|
+
}
|
|
103
|
+
handleUserUpdated(eventData) {
|
|
104
|
+
console.log(`User updated: ${eventData.id}`);
|
|
105
|
+
// Add custom logic for user updated event
|
|
106
|
+
}
|
|
107
|
+
handleUserDeleted(eventData) {
|
|
108
|
+
console.log(`User deleted: ${eventData.id}`);
|
|
109
|
+
// Add custom logic for user deleted event
|
|
110
|
+
}
|
|
111
|
+
handleProductCreated(eventData) {
|
|
112
|
+
console.log(`Product created: ${eventData.id}`);
|
|
113
|
+
// Add custom logic for product created event
|
|
114
|
+
}
|
|
115
|
+
handleProductUpdated(eventData) {
|
|
116
|
+
console.log(`Product updated: ${eventData.id}`);
|
|
117
|
+
// Add custom logic for product updated event
|
|
118
|
+
}
|
|
119
|
+
handleProductDeleted(eventData) {
|
|
120
|
+
console.log(`Product deleted: ${eventData.id}`);
|
|
121
|
+
// Add custom logic for product deleted event
|
|
122
|
+
}
|
|
123
|
+
handlePaymentCompleted(eventData) {
|
|
124
|
+
console.log(`Payment completed: ${eventData.id}`);
|
|
125
|
+
// Add custom logic for payment completed event
|
|
126
|
+
}
|
|
127
|
+
handlePaymentFailed(eventData) {
|
|
128
|
+
console.log(`Payment failed: ${eventData.id}`);
|
|
129
|
+
// Add custom logic for payment failed event
|
|
130
|
+
}
|
|
131
|
+
handlePaymentRefunded(eventData) {
|
|
132
|
+
console.log(`Payment refunded: ${eventData.id}`);
|
|
133
|
+
// Add custom logic for payment refunded event
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.WebhookHandler = WebhookHandler;
|
|
137
|
+
class WebhookEvents {
|
|
138
|
+
}
|
|
139
|
+
exports.WebhookEvents = WebhookEvents;
|
|
140
|
+
WebhookEvents.LICENSE_CREATED = 'license.created';
|
|
141
|
+
WebhookEvents.LICENSE_UPDATED = 'license.updated';
|
|
142
|
+
WebhookEvents.LICENSE_REVOKED = 'license.revoked';
|
|
143
|
+
WebhookEvents.LICENSE_EXPIRED = 'license.expired';
|
|
144
|
+
WebhookEvents.USER_CREATED = 'user.created';
|
|
145
|
+
WebhookEvents.USER_UPDATED = 'user.updated';
|
|
146
|
+
WebhookEvents.USER_DELETED = 'user.deleted';
|
|
147
|
+
WebhookEvents.PRODUCT_CREATED = 'product.created';
|
|
148
|
+
WebhookEvents.PRODUCT_UPDATED = 'product.updated';
|
|
149
|
+
WebhookEvents.PRODUCT_DELETED = 'product.deleted';
|
|
150
|
+
WebhookEvents.PAYMENT_COMPLETED = 'payment.completed';
|
|
151
|
+
WebhookEvents.PAYMENT_FAILED = 'payment.failed';
|
|
152
|
+
WebhookEvents.PAYMENT_REFUNDED = 'payment.refunded';
|
|
153
|
+
function createOutgoingWebhookSignature(payload, secret) {
|
|
154
|
+
const crypto = require('crypto');
|
|
155
|
+
return crypto.createHmac('sha256', secret).update(payload).digest('hex');
|
|
156
|
+
}
|
|
157
|
+
function verifyIncomingWebhookSignature(payload, signature, secret) {
|
|
158
|
+
return (0, utils_1.verifyWebhookSignature)(payload, signature, secret);
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=webhook-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-handler.js","sourceRoot":"","sources":["../src/webhook-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook Verifier for LicenseChain Node.js SDK
|
|
3
|
+
*/
|
|
4
|
+
import { WebhookData } from './types';
|
|
5
|
+
export declare class WebhookVerifier {
|
|
6
|
+
private secret;
|
|
7
|
+
constructor(secret: string);
|
|
8
|
+
/**
|
|
9
|
+
* Verify webhook signature
|
|
10
|
+
*/
|
|
11
|
+
verify(payload: string, signature: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Verify webhook data
|
|
14
|
+
*/
|
|
15
|
+
verifyWebhookData(webhookData: WebhookData): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Generate signature for payload
|
|
18
|
+
*/
|
|
19
|
+
private generateSignature;
|
|
20
|
+
/**
|
|
21
|
+
* Compare signatures securely
|
|
22
|
+
*/
|
|
23
|
+
private compareSignatures;
|
|
24
|
+
/**
|
|
25
|
+
* Parse webhook payload
|
|
26
|
+
*/
|
|
27
|
+
parseWebhookPayload(payload: string, signature: string): WebhookData;
|
|
28
|
+
/**
|
|
29
|
+
* Create webhook signature
|
|
30
|
+
*/
|
|
31
|
+
createSignature(payload: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Validate webhook event type
|
|
34
|
+
*/
|
|
35
|
+
isValidEventType(eventType: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get webhook event handler
|
|
38
|
+
*/
|
|
39
|
+
getEventHandler(eventType: string): string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=webhook-verifier.d.ts.map
|