@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,53 @@
1
+ /**
2
+ * License Validator for LicenseChain Node.js SDK
3
+ */
4
+ import { LicenseData, ValidationResult } from './types';
5
+ export declare class LicenseValidator {
6
+ private client;
7
+ constructor(client: any);
8
+ /**
9
+ * Validate a license key
10
+ */
11
+ validate(licenseKey: string, hardwareId?: string): Promise<ValidationResult>;
12
+ /**
13
+ * Perform comprehensive license validation
14
+ */
15
+ private performValidation;
16
+ /**
17
+ * Check if license key has valid format
18
+ */
19
+ private isValidLicenseKeyFormat;
20
+ /**
21
+ * Check if license is expired
22
+ */
23
+ private isLicenseExpired;
24
+ /**
25
+ * Check if hardware is allowed for this license
26
+ */
27
+ private isHardwareAllowed;
28
+ /**
29
+ * Check if validation limit is exceeded
30
+ */
31
+ private isValidationLimitExceeded;
32
+ /**
33
+ * Update usage statistics
34
+ */
35
+ private updateUsageStatistics;
36
+ /**
37
+ * Generate hardware ID from system information
38
+ */
39
+ generateHardwareId(): string;
40
+ /**
41
+ * Check if license has specific feature
42
+ */
43
+ hasFeature(license: LicenseData, feature: string): boolean;
44
+ /**
45
+ * Get days until expiration
46
+ */
47
+ getDaysUntilExpiration(license: LicenseData): number | null;
48
+ /**
49
+ * Check if license is near expiration
50
+ */
51
+ isNearExpiration(license: LicenseData, daysThreshold?: number): boolean;
52
+ }
53
+ //# sourceMappingURL=license-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-validator.d.ts","sourceRoot":"","sources":["../src/license-validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGxD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAM;gBAER,MAAM,EAAE,GAAG;IAIvB;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0BlF;;OAEG;YACW,iBAAiB;IAiD/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;OAEG;YACW,qBAAqB;IAqCnC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAe5B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAI1D;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IAa3D;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,GAAE,MAAU,GAAG,OAAO;CAI3E"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * License Validator 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.LicenseValidator = void 0;
10
+ const crypto_1 = __importDefault(require("crypto"));
11
+ const exceptions_1 = require("./exceptions");
12
+ class LicenseValidator {
13
+ constructor(client) {
14
+ this.client = client;
15
+ }
16
+ /**
17
+ * Validate a license key
18
+ */
19
+ async validate(licenseKey, hardwareId) {
20
+ try {
21
+ // Validate license key format
22
+ if (!this.isValidLicenseKeyFormat(licenseKey)) {
23
+ return {
24
+ valid: false,
25
+ message: 'Invalid license key format'
26
+ };
27
+ }
28
+ // Get license data from API
29
+ const licenseData = await this.client.getLicense(licenseKey);
30
+ // Perform validation checks
31
+ const validation = await this.performValidation(licenseData, hardwareId);
32
+ return validation;
33
+ }
34
+ catch (error) {
35
+ if (error instanceof exceptions_1.LicenseChainException) {
36
+ throw error;
37
+ }
38
+ const message = error instanceof Error ? error.message : String(error);
39
+ throw new exceptions_1.LicenseChainException(`License validation failed: ${message}`);
40
+ }
41
+ }
42
+ /**
43
+ * Perform comprehensive license validation
44
+ */
45
+ async performValidation(license, hardwareId) {
46
+ // Check if license exists and is active
47
+ if (!license) {
48
+ return {
49
+ valid: false,
50
+ message: 'License not found'
51
+ };
52
+ }
53
+ // Check license status
54
+ if (license.status === 'suspended') {
55
+ throw new exceptions_1.LicenseSuspendedException('License has been suspended');
56
+ }
57
+ if (license.status === 'cancelled') {
58
+ return {
59
+ valid: false,
60
+ message: 'License has been cancelled'
61
+ };
62
+ }
63
+ // Check if license is expired
64
+ if (license.status === 'expired' || this.isLicenseExpired(license)) {
65
+ throw new exceptions_1.LicenseExpiredException('License has expired');
66
+ }
67
+ // Check hardware limits
68
+ if (hardwareId && !this.isHardwareAllowed(license, hardwareId)) {
69
+ throw new exceptions_1.HardwareLimitExceededException('Hardware limit exceeded for this license');
70
+ }
71
+ // Check validation limits
72
+ if (this.isValidationLimitExceeded(license)) {
73
+ throw new exceptions_1.ValidationLimitExceededException('Validation limit exceeded for this license');
74
+ }
75
+ // Update usage statistics
76
+ await this.updateUsageStatistics(license, hardwareId);
77
+ return {
78
+ valid: true,
79
+ message: 'License is valid and active',
80
+ licenseId: license.id,
81
+ expiresAt: license.expiresAt,
82
+ features: license.features,
83
+ usage: license.usage
84
+ };
85
+ }
86
+ /**
87
+ * Check if license key has valid format
88
+ */
89
+ isValidLicenseKeyFormat(licenseKey) {
90
+ // License key format: LC-XXXXXXXX-XXXXXXXX-XXXXXXXX
91
+ const licenseKeyRegex = /^LC-[A-Z0-9]{8}-[A-Z0-9]{8}-[A-Z0-9]{8}$/;
92
+ return licenseKeyRegex.test(licenseKey);
93
+ }
94
+ /**
95
+ * Check if license is expired
96
+ */
97
+ isLicenseExpired(license) {
98
+ if (!license.expiresAt) {
99
+ return false; // Lifetime license
100
+ }
101
+ const now = new Date();
102
+ const expiresAt = new Date(license.expiresAt);
103
+ return now > expiresAt;
104
+ }
105
+ /**
106
+ * Check if hardware is allowed for this license
107
+ */
108
+ isHardwareAllowed(license, hardwareId) {
109
+ if (!license.hardware || license.hardware.length === 0) {
110
+ return true; // No hardware restrictions
111
+ }
112
+ // Check if hardware ID is already registered
113
+ const isRegistered = license.hardware.some(hw => hw.fingerprint === hardwareId);
114
+ if (isRegistered) {
115
+ return true;
116
+ }
117
+ // Check if we can add new hardware (based on application settings)
118
+ // This would require additional API call to get application settings
119
+ return license.hardware.length < 5; // Default limit
120
+ }
121
+ /**
122
+ * Check if validation limit is exceeded
123
+ */
124
+ isValidationLimitExceeded(license) {
125
+ if (license.usage.maxValidations === -1) {
126
+ return false; // Unlimited validations
127
+ }
128
+ return license.usage.totalValidations >= license.usage.maxValidations;
129
+ }
130
+ /**
131
+ * Update usage statistics
132
+ */
133
+ async updateUsageStatistics(license, hardwareId) {
134
+ try {
135
+ // Update validation count
136
+ const updatedUsage = {
137
+ ...license.usage,
138
+ totalValidations: license.usage.totalValidations + 1,
139
+ lastValidated: new Date().toISOString()
140
+ };
141
+ // Update hardware information if provided
142
+ if (hardwareId) {
143
+ const existingHardware = license.hardware.find(hw => hw.fingerprint === hardwareId);
144
+ if (existingHardware) {
145
+ existingHardware.lastSeen = new Date().toISOString();
146
+ }
147
+ else {
148
+ license.hardware.push({
149
+ id: crypto_1.default.randomUUID(),
150
+ fingerprint: hardwareId,
151
+ name: 'Unknown Device',
152
+ lastSeen: new Date().toISOString()
153
+ });
154
+ }
155
+ }
156
+ // Update license in API
157
+ await this.client.updateLicense(license.id, {
158
+ usage: updatedUsage,
159
+ hardware: license.hardware
160
+ });
161
+ }
162
+ catch (error) {
163
+ const message = error instanceof Error ? error.message : String(error);
164
+ console.warn('Failed to update usage statistics:', message);
165
+ // Don't throw error as validation should still succeed
166
+ }
167
+ }
168
+ /**
169
+ * Generate hardware ID from system information
170
+ */
171
+ generateHardwareId() {
172
+ const os = require('os');
173
+ const networkInterfaces = os.networkInterfaces();
174
+ const macAddress = Object.values(networkInterfaces || {})
175
+ .flat()
176
+ .find((iface) => iface && !iface.internal && iface.mac !== '00:00:00:00:00:00')
177
+ ?.mac || 'unknown';
178
+ return crypto_1.default.createHash('sha256').update(macAddress).digest('hex').substring(0, 16);
179
+ }
180
+ /**
181
+ * Check if license has specific feature
182
+ */
183
+ hasFeature(license, feature) {
184
+ return license.features.includes(feature);
185
+ }
186
+ /**
187
+ * Get days until expiration
188
+ */
189
+ getDaysUntilExpiration(license) {
190
+ if (!license.expiresAt) {
191
+ return null; // Lifetime license
192
+ }
193
+ const now = new Date();
194
+ const expiresAt = new Date(license.expiresAt);
195
+ const diffTime = expiresAt.getTime() - now.getTime();
196
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
197
+ return diffDays > 0 ? diffDays : 0;
198
+ }
199
+ /**
200
+ * Check if license is near expiration
201
+ */
202
+ isNearExpiration(license, daysThreshold = 7) {
203
+ const daysUntilExpiration = this.getDaysUntilExpiration(license);
204
+ return daysUntilExpiration !== null && daysUntilExpiration <= daysThreshold;
205
+ }
206
+ }
207
+ exports.LicenseValidator = LicenseValidator;
208
+ //# sourceMappingURL=license-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-validator.js","sourceRoot":"","sources":["../src/license-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { ApiClient } from '../api-client';
2
+ export interface License {
3
+ id: string;
4
+ user_id: string;
5
+ product_id: string;
6
+ license_key: string;
7
+ status: string;
8
+ created_at: string;
9
+ updated_at: string;
10
+ expires_at?: string;
11
+ metadata?: Record<string, any>;
12
+ }
13
+ export interface CreateLicenseRequest {
14
+ user_id?: string;
15
+ product_id?: string;
16
+ app_id?: string;
17
+ plan?: 'FREE' | 'PRO' | 'BUSINESS' | 'ENTERPRISE';
18
+ issued_email?: string;
19
+ expires_at?: string;
20
+ metadata?: Record<string, any>;
21
+ }
22
+ export interface UpdateLicenseRequest {
23
+ status?: string;
24
+ expires_at?: string;
25
+ metadata?: Record<string, any>;
26
+ }
27
+ export interface LicenseListResponse {
28
+ data: License[];
29
+ total: number;
30
+ page: number;
31
+ limit: number;
32
+ }
33
+ export interface LicenseStats {
34
+ total: number;
35
+ active: number;
36
+ expired: number;
37
+ revoked: number;
38
+ revenue: number;
39
+ }
40
+ export declare class LicenseService {
41
+ private client;
42
+ constructor(client: ApiClient);
43
+ create(request: CreateLicenseRequest): Promise<License>;
44
+ get(licenseId: string): Promise<License>;
45
+ update(licenseId: string, updates: UpdateLicenseRequest): Promise<License>;
46
+ revoke(licenseId: string): Promise<void>;
47
+ validate(licenseKey: string, hwuid?: string | null): Promise<boolean>;
48
+ /** Full POST /v1/licenses/verify JSON (includes optional license_token / license_jwks_uri when API signing is enabled). */
49
+ verifyWithDetails(licenseKey: string, hwuid?: string | null): Promise<Record<string, unknown>>;
50
+ listUserLicenses(userId: string, page?: number, limit?: number): Promise<LicenseListResponse>;
51
+ stats(): Promise<LicenseStats>;
52
+ private extractLicenseResponse;
53
+ private defaultHwuid;
54
+ }
55
+ //# sourceMappingURL=license-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-service.d.ts","sourceRoot":"","sources":["../../src/services/license-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK1C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAIvB,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAM1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3E,2HAA2H;IACrH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO9F,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAwB7F,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;IAKpC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,YAAY;CAKrB"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LicenseService = void 0;
4
+ const utils_1 = require("../utils");
5
+ const exceptions_1 = require("../exceptions");
6
+ const crypto_1 = require("crypto");
7
+ class LicenseService {
8
+ constructor(client) {
9
+ this.client = client;
10
+ }
11
+ async create(request) {
12
+ const appId = request.app_id;
13
+ if (!appId) {
14
+ throw new exceptions_1.ValidationException('app_id is required for API v1 license creation');
15
+ }
16
+ const data = {
17
+ appId,
18
+ plan: request.plan || 'FREE',
19
+ issuedEmail: request.issued_email,
20
+ expiresAt: request.expires_at
21
+ };
22
+ const response = await this.client.post(`/apps/${appId}/licenses`, data);
23
+ return this.extractLicenseResponse(response);
24
+ }
25
+ async get(licenseId) {
26
+ (0, utils_1.validateNotEmpty)(licenseId, 'license_id');
27
+ const response = await this.client.get(`/licenses/${licenseId}`);
28
+ return this.extractLicenseResponse(response);
29
+ }
30
+ async update(licenseId, updates) {
31
+ (0, utils_1.validateNotEmpty)(licenseId, 'license_id');
32
+ const response = await this.client.patch(`/licenses/${licenseId}`, (0, utils_1.sanitizeMetadata)(updates));
33
+ return this.extractLicenseResponse(response);
34
+ }
35
+ async revoke(licenseId) {
36
+ (0, utils_1.validateNotEmpty)(licenseId, 'license_id');
37
+ await this.client.delete(`/licenses/${licenseId}`);
38
+ }
39
+ async validate(licenseKey, hwuid) {
40
+ (0, utils_1.validateNotEmpty)(licenseKey, 'license_key');
41
+ const body = { key: licenseKey };
42
+ body.hwuid = hwuid != null && String(hwuid).trim() !== '' ? hwuid.trim() : this.defaultHwuid();
43
+ const response = await this.client.post('/licenses/verify', body);
44
+ return response.valid || false;
45
+ }
46
+ /** Full POST /v1/licenses/verify JSON (includes optional license_token / license_jwks_uri when API signing is enabled). */
47
+ async verifyWithDetails(licenseKey, hwuid) {
48
+ (0, utils_1.validateNotEmpty)(licenseKey, 'license_key');
49
+ const body = { key: licenseKey };
50
+ body.hwuid = hwuid != null && String(hwuid).trim() !== '' ? hwuid.trim() : this.defaultHwuid();
51
+ return this.client.post('/licenses/verify', body);
52
+ }
53
+ async listUserLicenses(userId, page, limit) {
54
+ (0, utils_1.validateNotEmpty)(userId, 'user_id');
55
+ const [validPage, validLimit] = (0, utils_1.validatePagination)(page, limit);
56
+ const response = await this.client.get('/licenses', {
57
+ page: validPage,
58
+ limit: validLimit
59
+ });
60
+ const allLicenses = response.licenses || response.data || [];
61
+ const filtered = allLicenses.filter((license) => license?.issuedEmail === userId ||
62
+ license?.email === userId ||
63
+ license?.user_id === userId);
64
+ return {
65
+ data: filtered,
66
+ total: filtered.length,
67
+ page: validPage,
68
+ limit: validLimit
69
+ };
70
+ }
71
+ async stats() {
72
+ const response = await this.client.get('/licenses/stats');
73
+ return response.data || response;
74
+ }
75
+ extractLicenseResponse(response) {
76
+ return response?.data ? response.data : response;
77
+ }
78
+ defaultHwuid() {
79
+ return (0, crypto_1.createHash)('sha256')
80
+ .update(`licensechain|nodejs|${process.platform}|${process.arch}|${process.version}`)
81
+ .digest('hex');
82
+ }
83
+ }
84
+ exports.LicenseService = LicenseService;
85
+ //# sourceMappingURL=license-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-service.js","sourceRoot":"","sources":["../../src/services/license-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { ApiClient } from '../api-client';
2
+ export interface Product {
3
+ id: string;
4
+ name: string;
5
+ description?: string;
6
+ price: number;
7
+ currency: string;
8
+ created_at: string;
9
+ updated_at: string;
10
+ metadata?: Record<string, any>;
11
+ }
12
+ export interface CreateProductRequest {
13
+ name: string;
14
+ description?: string;
15
+ price: number;
16
+ currency: string;
17
+ metadata?: Record<string, any>;
18
+ }
19
+ export interface UpdateProductRequest {
20
+ name?: string;
21
+ description?: string;
22
+ price?: number;
23
+ currency?: string;
24
+ metadata?: Record<string, any>;
25
+ }
26
+ export interface ProductListResponse {
27
+ data: Product[];
28
+ total: number;
29
+ page: number;
30
+ limit: number;
31
+ }
32
+ export interface ProductStats {
33
+ total: number;
34
+ active: number;
35
+ revenue: number;
36
+ }
37
+ export declare class ProductService {
38
+ private client;
39
+ constructor(client: ApiClient);
40
+ create(request: CreateProductRequest): Promise<Product>;
41
+ get(productId: string): Promise<Product>;
42
+ update(productId: string, updates: UpdateProductRequest): Promise<Product>;
43
+ delete(productId: string): Promise<void>;
44
+ list(page?: number, limit?: number): Promise<ProductListResponse>;
45
+ stats(): Promise<ProductStats>;
46
+ private validateRequiredParams;
47
+ }
48
+ //# sourceMappingURL=product-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-service.d.ts","sourceRoot":"","sources":["../../src/services/product-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAIvB,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAWjE,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;IAQpC,OAAO,CAAC,sBAAsB;CAU/B"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProductService = void 0;
4
+ const utils_1 = require("../utils");
5
+ const exceptions_1 = require("../exceptions");
6
+ class ProductService {
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ async create(request) {
11
+ this.validateRequiredParams(request.name, request.price, request.currency);
12
+ throw new exceptions_1.ValidationException('Product endpoints are not available in API v1');
13
+ }
14
+ async get(productId) {
15
+ (0, utils_1.validateNotEmpty)(productId, 'product_id');
16
+ throw new exceptions_1.ValidationException('Product endpoints are not available in API v1');
17
+ }
18
+ async update(productId, updates) {
19
+ (0, utils_1.validateNotEmpty)(productId, 'product_id');
20
+ throw new exceptions_1.ValidationException('Product endpoints are not available in API v1');
21
+ }
22
+ async delete(productId) {
23
+ (0, utils_1.validateNotEmpty)(productId, 'product_id');
24
+ throw new exceptions_1.ValidationException('Product endpoints are not available in API v1');
25
+ }
26
+ async list(page, limit) {
27
+ const [validPage, validLimit] = (0, utils_1.validatePagination)(page, limit);
28
+ return {
29
+ data: [],
30
+ total: 0,
31
+ page: validPage,
32
+ limit: validLimit
33
+ };
34
+ }
35
+ async stats() {
36
+ return {
37
+ total: 0,
38
+ active: 0,
39
+ revenue: 0
40
+ };
41
+ }
42
+ validateRequiredParams(name, price, currency) {
43
+ (0, utils_1.validateNotEmpty)(name, 'name');
44
+ if (price !== undefined) {
45
+ (0, utils_1.validatePositive)(price, 'price');
46
+ }
47
+ if (!(0, utils_1.validateCurrency)(currency)) {
48
+ throw new exceptions_1.ValidationException('Invalid currency');
49
+ }
50
+ }
51
+ }
52
+ exports.ProductService = ProductService;
53
+ //# sourceMappingURL=product-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-service.js","sourceRoot":"","sources":["../../src/services/product-service.ts"],"names":[],"mappings":";;;AACA,oCAAoG;AACpG,8CAAoD;AA0CpD,MAAa,cAAc;IAGzB,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA6B;QACxC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,IAAI,gCAAmB,CAAC,+CAA+C,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,IAAA,wBAAgB,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1C,MAAM,IAAI,gCAAmB,CAAC,+CAA+C,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,OAA6B;QAC3D,IAAA,wBAAgB,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1C,MAAM,IAAI,gCAAmB,CAAC,+CAA+C,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,IAAA,wBAAgB,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1C,MAAM,IAAI,gCAAmB,CAAC,+CAA+C,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAa,EAAE,KAAc;QACtC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAA,0BAAkB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEhE,OAAO;YACL,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,UAAU;SAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO;YACL,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;SACX,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,IAAY,EAAE,KAAa,EAAE,QAAgB;QAC1E,IAAA,wBAAgB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAA,wBAAgB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAA,wBAAgB,EAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,gCAAmB,CAAC,kBAAkB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;CAEF;AAxDD,wCAwDC"}
@@ -0,0 +1,43 @@
1
+ import { ApiClient } from '../api-client';
2
+ export interface User {
3
+ id: string;
4
+ email: string;
5
+ name: string;
6
+ created_at: string;
7
+ updated_at: string;
8
+ metadata?: Record<string, any>;
9
+ }
10
+ export interface CreateUserRequest {
11
+ email: string;
12
+ name: string;
13
+ password?: string;
14
+ metadata?: Record<string, any>;
15
+ }
16
+ export interface UpdateUserRequest {
17
+ email?: string;
18
+ name?: string;
19
+ metadata?: Record<string, any>;
20
+ }
21
+ export interface UserListResponse {
22
+ data: User[];
23
+ total: number;
24
+ page: number;
25
+ limit: number;
26
+ }
27
+ export interface UserStats {
28
+ total: number;
29
+ active: number;
30
+ inactive: number;
31
+ }
32
+ export declare class UserService {
33
+ private client;
34
+ constructor(client: ApiClient);
35
+ create(request: CreateUserRequest): Promise<User>;
36
+ get(userId: string): Promise<User>;
37
+ update(userId: string, updates: UpdateUserRequest): Promise<User>;
38
+ delete(userId: string): Promise<void>;
39
+ list(page?: number, limit?: number): Promise<UserListResponse>;
40
+ stats(): Promise<UserStats>;
41
+ private validateEmail;
42
+ }
43
+ //# sourceMappingURL=user-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-service.d.ts","sourceRoot":"","sources":["../../src/services/user-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAIvB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAW9D,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;IAQjC,OAAO,CAAC,aAAa;CAOtB"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserService = void 0;
4
+ const utils_1 = require("../utils");
5
+ const exceptions_1 = require("../exceptions");
6
+ class UserService {
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ async create(request) {
11
+ this.validateEmail(request.email);
12
+ const data = {
13
+ email: request.email,
14
+ password: request.password || 'ChangeMe123!',
15
+ name: request.name,
16
+ metadata: (0, utils_1.sanitizeMetadata)(request.metadata || {})
17
+ };
18
+ const response = await this.client.post('/auth/register', data);
19
+ return (response.user || response.data);
20
+ }
21
+ async get(userId) {
22
+ (0, utils_1.validateNotEmpty)(userId, 'user_id');
23
+ const response = await this.client.get('/auth/me');
24
+ return response?.data || response;
25
+ }
26
+ async update(userId, updates) {
27
+ (0, utils_1.validateNotEmpty)(userId, 'user_id');
28
+ throw new exceptions_1.ValidationException('User update endpoint is not available in API v1');
29
+ }
30
+ async delete(userId) {
31
+ (0, utils_1.validateNotEmpty)(userId, 'user_id');
32
+ throw new exceptions_1.ValidationException('User delete endpoint is not available in API v1');
33
+ }
34
+ async list(page, limit) {
35
+ const [validPage, validLimit] = (0, utils_1.validatePagination)(page, limit);
36
+ return {
37
+ data: [],
38
+ total: 0,
39
+ page: validPage,
40
+ limit: validLimit
41
+ };
42
+ }
43
+ async stats() {
44
+ return {
45
+ total: 0,
46
+ active: 0,
47
+ inactive: 0
48
+ };
49
+ }
50
+ validateEmail(email) {
51
+ (0, utils_1.validateNotEmpty)(email, 'email');
52
+ if (!(0, utils_1.validateEmail)(email)) {
53
+ throw new exceptions_1.ValidationException('Invalid email format');
54
+ }
55
+ }
56
+ }
57
+ exports.UserService = UserService;
58
+ //# sourceMappingURL=user-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-service.js","sourceRoot":"","sources":["../../src/services/user-service.ts"],"names":[],"mappings":";;;AACA,oCAAiG;AACjG,8CAAoD;AAqCpD,MAAa,WAAW;IAGtB,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA0B;QACrC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,cAAc;YAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,IAAA,wBAAgB,EAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;SACnD,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAA+B,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC9F,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAS,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,IAAA,wBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAM,UAAU,CAAC,CAAC;QACxD,OAAO,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,OAA0B;QACrD,IAAA,wBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACpC,MAAM,IAAI,gCAAmB,CAAC,iDAAiD,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,IAAA,wBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACpC,MAAM,IAAI,gCAAmB,CAAC,iDAAiD,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAa,EAAE,KAAc;QACtC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAA,0BAAkB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEhE,OAAO;YACL,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,UAAU;SAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO;YACL,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,IAAA,wBAAgB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,gCAAmB,CAAC,sBAAsB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CAEF;AA/DD,kCA+DC"}