@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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +500 -0
  3. package/dist/api-client.d.ts +13 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +52 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/client.d.ts +24 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +60 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/configuration.d.ts +26 -0
  12. package/dist/configuration.d.ts.map +1 -0
  13. package/dist/configuration.js +63 -0
  14. package/dist/configuration.js.map +1 -0
  15. package/dist/exceptions.d.ts +46 -0
  16. package/dist/exceptions.d.ts.map +1 -0
  17. package/dist/exceptions.js +105 -0
  18. package/dist/exceptions.js.map +1 -0
  19. package/dist/http-core.d.ts +36 -0
  20. package/dist/http-core.d.ts.map +1 -0
  21. package/dist/http-core.js +119 -0
  22. package/dist/http-core.js.map +1 -0
  23. package/dist/index.d.ts +15 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +53 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/license-assertion.d.ts +15 -0
  28. package/dist/license-assertion.d.ts.map +1 -0
  29. package/dist/license-assertion.js +59 -0
  30. package/dist/license-assertion.js.map +1 -0
  31. package/dist/license-validator.d.ts +53 -0
  32. package/dist/license-validator.d.ts.map +1 -0
  33. package/dist/license-validator.js +208 -0
  34. package/dist/license-validator.js.map +1 -0
  35. package/dist/services/license-service.d.ts +55 -0
  36. package/dist/services/license-service.d.ts.map +1 -0
  37. package/dist/services/license-service.js +85 -0
  38. package/dist/services/license-service.js.map +1 -0
  39. package/dist/services/product-service.d.ts +48 -0
  40. package/dist/services/product-service.d.ts.map +1 -0
  41. package/dist/services/product-service.js +53 -0
  42. package/dist/services/product-service.js.map +1 -0
  43. package/dist/services/user-service.d.ts +43 -0
  44. package/dist/services/user-service.d.ts.map +1 -0
  45. package/dist/services/user-service.js +58 -0
  46. package/dist/services/user-service.js.map +1 -0
  47. package/dist/services/webhook-service.d.ts +37 -0
  48. package/dist/services/webhook-service.d.ts.map +1 -0
  49. package/dist/services/webhook-service.js +57 -0
  50. package/dist/services/webhook-service.js.map +1 -0
  51. package/dist/types.d.ts +197 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +6 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/utils.d.ts +54 -0
  56. package/dist/utils.d.ts.map +1 -0
  57. package/dist/utils.js +396 -0
  58. package/dist/utils.js.map +1 -0
  59. package/dist/webhook-handler.d.ts +40 -0
  60. package/dist/webhook-handler.d.ts.map +1 -0
  61. package/dist/webhook-handler.js +160 -0
  62. package/dist/webhook-handler.js.map +1 -0
  63. package/dist/webhook-verifier.d.ts +41 -0
  64. package/dist/webhook-verifier.d.ts.map +1 -0
  65. package/dist/webhook-verifier.js +153 -0
  66. package/dist/webhook-verifier.js.map +1 -0
  67. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-verifier.d.ts","sourceRoot":"","sources":["../src/webhook-verifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAUnD;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAuBpD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW;IAyBpE;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIxC;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAwB5C;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAuB3C"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /**
3
+ * Webhook Verifier for LicenseChain Node.js SDK
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.WebhookVerifier = void 0;
10
+ const crypto_1 = __importDefault(require("crypto"));
11
+ const exceptions_1 = require("./exceptions");
12
+ class WebhookVerifier {
13
+ constructor(secret) {
14
+ this.secret = secret;
15
+ }
16
+ /**
17
+ * Verify webhook signature
18
+ */
19
+ verify(payload, signature) {
20
+ try {
21
+ const expectedSignature = this.generateSignature(payload);
22
+ return this.compareSignatures(signature, expectedSignature);
23
+ }
24
+ catch (error) {
25
+ const message = error instanceof Error ? error.message : String(error);
26
+ throw new exceptions_1.WebhookVerificationException(`Signature verification failed: ${message}`);
27
+ }
28
+ }
29
+ /**
30
+ * Verify webhook data
31
+ */
32
+ verifyWebhookData(webhookData) {
33
+ try {
34
+ // Check required fields
35
+ if (!webhookData.event || !webhookData.data || !webhookData.timestamp) {
36
+ return false;
37
+ }
38
+ // Check timestamp (prevent replay attacks)
39
+ const now = new Date().getTime();
40
+ const webhookTime = new Date(webhookData.timestamp).getTime();
41
+ const timeDiff = Math.abs(now - webhookTime);
42
+ // Allow 5 minutes tolerance
43
+ if (timeDiff > 5 * 60 * 1000) {
44
+ return false;
45
+ }
46
+ return true;
47
+ }
48
+ catch (error) {
49
+ return false;
50
+ }
51
+ }
52
+ /**
53
+ * Generate signature for payload
54
+ */
55
+ generateSignature(payload) {
56
+ return crypto_1.default
57
+ .createHmac('sha256', this.secret)
58
+ .update(payload, 'utf8')
59
+ .digest('hex');
60
+ }
61
+ /**
62
+ * Compare signatures securely
63
+ */
64
+ compareSignatures(signature1, signature2) {
65
+ if (signature1.length !== signature2.length) {
66
+ return false;
67
+ }
68
+ return crypto_1.default.timingSafeEqual(Buffer.from(signature1, 'hex'), Buffer.from(signature2, 'hex'));
69
+ }
70
+ /**
71
+ * Parse webhook payload
72
+ */
73
+ parseWebhookPayload(payload, signature) {
74
+ try {
75
+ // Verify signature first
76
+ if (!this.verify(payload, signature)) {
77
+ throw new exceptions_1.WebhookVerificationException('Invalid webhook signature');
78
+ }
79
+ // Parse JSON payload
80
+ const webhookData = JSON.parse(payload);
81
+ // Verify webhook data structure
82
+ if (!this.verifyWebhookData(webhookData)) {
83
+ throw new exceptions_1.WebhookVerificationException('Invalid webhook data');
84
+ }
85
+ return webhookData;
86
+ }
87
+ catch (error) {
88
+ if (error instanceof exceptions_1.WebhookVerificationException) {
89
+ throw error;
90
+ }
91
+ const message = error instanceof Error ? error.message : String(error);
92
+ throw new exceptions_1.WebhookVerificationException(`Failed to parse webhook payload: ${message}`);
93
+ }
94
+ }
95
+ /**
96
+ * Create webhook signature
97
+ */
98
+ createSignature(payload) {
99
+ return `sha256=${this.generateSignature(payload)}`;
100
+ }
101
+ /**
102
+ * Validate webhook event type
103
+ */
104
+ isValidEventType(eventType) {
105
+ const validEvents = [
106
+ 'license.created',
107
+ 'license.updated',
108
+ 'license.deleted',
109
+ 'license.validated',
110
+ 'license.expired',
111
+ 'license.suspended',
112
+ 'user.created',
113
+ 'user.updated',
114
+ 'user.deleted',
115
+ 'application.created',
116
+ 'application.updated',
117
+ 'application.deleted',
118
+ 'payment.completed',
119
+ 'payment.failed',
120
+ 'subscription.created',
121
+ 'subscription.updated',
122
+ 'subscription.cancelled'
123
+ ];
124
+ return validEvents.includes(eventType);
125
+ }
126
+ /**
127
+ * Get webhook event handler
128
+ */
129
+ getEventHandler(eventType) {
130
+ const eventHandlers = {
131
+ 'license.created': 'onLicenseCreated',
132
+ 'license.updated': 'onLicenseUpdated',
133
+ 'license.deleted': 'onLicenseDeleted',
134
+ 'license.validated': 'onLicenseValidated',
135
+ 'license.expired': 'onLicenseExpired',
136
+ 'license.suspended': 'onLicenseSuspended',
137
+ 'user.created': 'onUserCreated',
138
+ 'user.updated': 'onUserUpdated',
139
+ 'user.deleted': 'onUserDeleted',
140
+ 'application.created': 'onApplicationCreated',
141
+ 'application.updated': 'onApplicationUpdated',
142
+ 'application.deleted': 'onApplicationDeleted',
143
+ 'payment.completed': 'onPaymentCompleted',
144
+ 'payment.failed': 'onPaymentFailed',
145
+ 'subscription.created': 'onSubscriptionCreated',
146
+ 'subscription.updated': 'onSubscriptionUpdated',
147
+ 'subscription.cancelled': 'onSubscriptionCancelled'
148
+ };
149
+ return eventHandlers[eventType] || 'onUnknownEvent';
150
+ }
151
+ }
152
+ exports.WebhookVerifier = WebhookVerifier;
153
+ //# sourceMappingURL=webhook-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-verifier.js","sourceRoot":"","sources":["../src/webhook-verifier.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@licensechain/nodejs-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Official LicenseChain Node.js SDK for license management and validation",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "lint": "eslint src/**/*.ts",
16
+ "lint:fix": "eslint src/**/*.ts --fix",
17
+ "format": "prettier --write src/**/*.ts"
18
+ },
19
+ "keywords": [
20
+ "license",
21
+ "validation",
22
+ "api",
23
+ "sdk",
24
+ "nodejs",
25
+ "licensechain",
26
+ "license-management",
27
+ "webhook",
28
+ "authentication",
29
+ "typescript"
30
+ ],
31
+ "author": "LicenseChain Team <support@licensechain.app>",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/LicenseChain/LicenseChain-NodeJS-SDK.git"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/LicenseChain/LicenseChain-NodeJS-SDK/issues"
39
+ },
40
+ "homepage": "https://docs.licensechain.app/sdks/nodejs",
41
+ "engines": {
42
+ "node": ">=14.0.0"
43
+ },
44
+ "dependencies": {
45
+ "axios": "^1.6.0",
46
+ "crypto": "^1.0.1",
47
+ "form-data": "^4.0.0",
48
+ "jose": "^5.9.6"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^20.10.0",
52
+ "@typescript-eslint/eslint-plugin": "^6.12.0",
53
+ "@typescript-eslint/parser": "^6.12.0",
54
+ "eslint": "^8.54.0",
55
+ "eslint-config-prettier": "^9.0.0",
56
+ "eslint-plugin-prettier": "^5.0.1",
57
+ "prettier": "^3.1.0",
58
+ "typescript": "^5.3.2"
59
+ },
60
+ "peerDependencies": {
61
+ "axios": "^1.6.0"
62
+ },
63
+ "peerDependenciesMeta": {
64
+ "axios": {
65
+ "optional": true
66
+ }
67
+ },
68
+ "publishConfig": {
69
+ "access": "public"
70
+ }
71
+ }