@smallwebco/tinypivot-core 1.0.38 → 1.0.47

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.
@@ -1,16 +1,24 @@
1
1
  /**
2
2
  * TinyPivot Core - License Management
3
3
  * Framework-agnostic license validation logic
4
+ *
5
+ * Uses ECDSA P-256 asymmetric cryptography:
6
+ * - Licenses are SIGNED with a private key (kept secret)
7
+ * - Licenses are VERIFIED with a public key (embedded here)
4
8
  */
5
9
  import type { LicenseInfo } from '../types';
6
10
  /**
7
11
  * Validate a license key and extract info
12
+ *
13
+ * Note: Licenses are PERPETUAL - the expiry date indicates update eligibility,
14
+ * not when features stop working. All Pro features remain active forever.
8
15
  */
9
16
  export declare function validateLicenseKey(key: string): Promise<LicenseInfo>;
10
17
  /**
11
- * Configure the license secret (for SSR/build-time injection)
18
+ * @deprecated No longer needed - license verification now uses asymmetric cryptography.
19
+ * Kept for backwards compatibility but does nothing.
12
20
  */
13
- export declare function configureLicenseSecret(secret: string): void;
21
+ export declare function configureLicenseSecret(_secret: string): void;
14
22
  /**
15
23
  * Validate demo secret and return demo license info if valid
16
24
  * Returns null if secret is invalid
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/license/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAgC,MAAM,UAAU,CAAA;AAqFzE;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3D;AAoBD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAWrF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAE/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/license/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,UAAU,CAAA;AAyKxD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiE1E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG5D;AAoBD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAWrF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAE/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKpD"}
@@ -31,31 +31,104 @@ const DEMO_LICENSE = {
31
31
  noWatermark: false, // Still show watermark in demo
32
32
  },
33
33
  };
34
+ // Public key for license verification (ECDSA P-256)
35
+ // This is safe to embed - it can only VERIFY signatures, not create them
36
+ const PUBLIC_KEY_PEM = `-----BEGIN PUBLIC KEY-----
37
+ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE436rfGofder4lfo4UHsRF2M88Gs0
38
+ zLsikg2H9GMkL8hLGuOtnGMpVfLRlc7cD8FdkPBBRgiQ8UFnG8hm+nMIug==
39
+ -----END PUBLIC KEY-----`;
34
40
  /**
35
- * HMAC-SHA256 based license signature verification
36
- * Must match the server-side generation algorithm
41
+ * Convert base64 (or URL-safe base64) to Uint8Array
37
42
  */
38
- async function verifySignature(typeCode, signature, expiry) {
39
- // The secret must be configured before license validation can work
40
- const secret = globalThis.__TP_LICENSE_SECRET__;
41
- if (!secret) {
42
- console.warn('[TinyPivot] License secret not configured. Call configureLicenseSecret() first.');
43
- return false;
43
+ function base64ToUint8Array(base64) {
44
+ // Convert URL-safe base64 to standard base64
45
+ let standardBase64 = base64.replace(/-/g, '+').replace(/_/g, '/');
46
+ // Add padding if needed
47
+ while (standardBase64.length % 4) {
48
+ standardBase64 += '=';
49
+ }
50
+ const binaryString = atob(standardBase64);
51
+ const bytes = new Uint8Array(binaryString.length);
52
+ for (let i = 0; i < binaryString.length; i++) {
53
+ bytes[i] = binaryString.charCodeAt(i);
54
+ }
55
+ return bytes;
56
+ }
57
+ /**
58
+ * Convert DER-encoded ECDSA signature to raw format (r || s)
59
+ * Web Crypto API expects raw format, but Node.js produces DER format
60
+ */
61
+ function derToRaw(der) {
62
+ // DER format: 0x30 [length] 0x02 [r-length] [r] 0x02 [s-length] [s]
63
+ if (der[0] !== 0x30) {
64
+ throw new Error('Invalid DER signature');
65
+ }
66
+ let offset = 2; // Skip 0x30 and length byte
67
+ // Read r
68
+ if (der[offset] !== 0x02)
69
+ throw new Error('Invalid DER signature');
70
+ offset++;
71
+ const rLen = der[offset];
72
+ offset++;
73
+ let r = der.slice(offset, offset + rLen);
74
+ offset += rLen;
75
+ // Read s
76
+ if (der[offset] !== 0x02)
77
+ throw new Error('Invalid DER signature');
78
+ offset++;
79
+ const sLen = der[offset];
80
+ offset++;
81
+ let s = der.slice(offset, offset + sLen);
82
+ // For P-256, r and s should each be 32 bytes
83
+ // Remove leading zero padding if present (used for positive sign in DER)
84
+ if (r.length === 33 && r[0] === 0)
85
+ r = r.slice(1);
86
+ if (s.length === 33 && s[0] === 0)
87
+ s = s.slice(1);
88
+ // Pad to 32 bytes if shorter
89
+ const padR = new Uint8Array(32);
90
+ const padS = new Uint8Array(32);
91
+ padR.set(r, 32 - r.length);
92
+ padS.set(s, 32 - s.length);
93
+ // Concatenate r || s
94
+ const raw = new Uint8Array(64);
95
+ raw.set(padR, 0);
96
+ raw.set(padS, 32);
97
+ return raw;
98
+ }
99
+ /**
100
+ * Import the public key for verification
101
+ */
102
+ async function importPublicKey() {
103
+ try {
104
+ // Convert PEM to binary
105
+ const pemContents = PUBLIC_KEY_PEM
106
+ .replace('-----BEGIN PUBLIC KEY-----', '')
107
+ .replace('-----END PUBLIC KEY-----', '')
108
+ .replace(/\s/g, '');
109
+ const binaryKey = base64ToUint8Array(pemContents);
110
+ return await crypto.subtle.importKey('spki', new Uint8Array(binaryKey).buffer, { name: 'ECDSA', namedCurve: 'P-256' }, false, ['verify']);
44
111
  }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ /**
117
+ * ECDSA P-256 signature verification
118
+ * Verifies that the license was signed with our private key
119
+ */
120
+ async function verifySignature(typeCode, signature, expiry) {
45
121
  const payload = `TP-${typeCode}-${expiry}`;
46
122
  try {
123
+ const publicKey = await importPublicKey();
124
+ if (!publicKey)
125
+ return false;
47
126
  const encoder = new TextEncoder();
48
- const keyData = encoder.encode(secret);
49
127
  const msgData = encoder.encode(payload);
50
- const cryptoKey = await crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
51
- const sig = await crypto.subtle.sign('HMAC', cryptoKey, msgData);
52
- const sigArray = Array.from(new Uint8Array(sig));
53
- const expectedSig = sigArray
54
- .map(b => b.toString(16).padStart(2, '0'))
55
- .join('')
56
- .slice(0, 12)
57
- .toUpperCase();
58
- return signature === expectedSig;
128
+ // Convert DER-encoded signature to raw format for Web Crypto
129
+ const derSig = base64ToUint8Array(signature);
130
+ const rawSig = derToRaw(derSig);
131
+ return await crypto.subtle.verify({ name: 'ECDSA', hash: 'SHA-256' }, publicKey, new Uint8Array(rawSig).buffer, msgData);
59
132
  }
60
133
  catch {
61
134
  // Fallback for environments without crypto.subtle (SSR, older browsers)
@@ -64,6 +137,9 @@ async function verifySignature(typeCode, signature, expiry) {
64
137
  }
65
138
  /**
66
139
  * Validate a license key and extract info
140
+ *
141
+ * Note: Licenses are PERPETUAL - the expiry date indicates update eligibility,
142
+ * not when features stop working. All Pro features remain active forever.
67
143
  */
68
144
  export async function validateLicenseKey(key) {
69
145
  // Free tier - no key needed
@@ -71,27 +147,37 @@ export async function validateLicenseKey(key) {
71
147
  return FREE_LICENSE;
72
148
  }
73
149
  // License key format: TP-{TYPE}-{SIGNATURE}-{EXPIRY}
74
- // Example: TP-PRO1-A1B2C3D4E5F6-20251231
75
- const parts = key.split('-');
76
- if (parts.length !== 4 || parts[0] !== 'TP') {
150
+ // Example: TP-PRO1-base64signature-20251231
151
+ // Note: signature uses URL-safe base64 which can contain dashes
152
+ // So we parse from known positions: prefix (TP), type (4 chars), expiry (8 chars at end)
153
+ if (!key.startsWith('TP-')) {
154
+ return INVALID_LICENSE;
155
+ }
156
+ // Extract expiry (last 8 characters after final dash)
157
+ const lastDashIdx = key.lastIndexOf('-');
158
+ if (lastDashIdx === -1 || key.length - lastDashIdx !== 9) {
77
159
  return INVALID_LICENSE;
78
160
  }
79
- const typeCode = parts[1];
80
- const signature = parts[2];
81
- const expiryStr = parts[3];
161
+ const expiryStr = key.slice(lastDashIdx + 1);
162
+ // Extract type code (between first and second dash)
163
+ const withoutPrefix = key.slice(3); // Remove "TP-"
164
+ const secondDashIdx = withoutPrefix.indexOf('-');
165
+ if (secondDashIdx === -1) {
166
+ return INVALID_LICENSE;
167
+ }
168
+ const typeCode = withoutPrefix.slice(0, secondDashIdx);
169
+ // Extract signature (everything between type and expiry)
170
+ const signature = withoutPrefix.slice(secondDashIdx + 1, withoutPrefix.lastIndexOf('-'));
82
171
  // Verify cryptographic signature
83
172
  const isValidSignature = await verifySignature(typeCode, signature, expiryStr);
84
173
  if (!isValidSignature) {
85
174
  return INVALID_LICENSE;
86
175
  }
87
- // Parse expiry date
176
+ // Parse expiry date (for update eligibility tracking, NOT feature expiration)
88
177
  const year = Number.parseInt(expiryStr.slice(0, 4));
89
178
  const month = Number.parseInt(expiryStr.slice(4, 6)) - 1;
90
179
  const day = Number.parseInt(expiryStr.slice(6, 8));
91
180
  const expiresAt = new Date(year, month, day);
92
- if (expiresAt < new Date()) {
93
- return { ...INVALID_LICENSE, expiresAt };
94
- }
95
181
  // Determine license type
96
182
  let type = 'free';
97
183
  if (typeCode === 'PRO1')
@@ -100,6 +186,8 @@ export async function validateLicenseKey(key) {
100
186
  type = 'pro-unlimited';
101
187
  else if (typeCode === 'PROT')
102
188
  type = 'pro-team';
189
+ // PERPETUAL LICENSE: Features never expire, only update eligibility does
190
+ // The expiresAt date is retained for informational purposes only
103
191
  return {
104
192
  type,
105
193
  isValid: true,
@@ -114,10 +202,12 @@ export async function validateLicenseKey(key) {
114
202
  };
115
203
  }
116
204
  /**
117
- * Configure the license secret (for SSR/build-time injection)
205
+ * @deprecated No longer needed - license verification now uses asymmetric cryptography.
206
+ * Kept for backwards compatibility but does nothing.
118
207
  */
119
- export function configureLicenseSecret(secret) {
120
- globalThis.__TP_LICENSE_SECRET__ = secret;
208
+ export function configureLicenseSecret(_secret) {
209
+ // No-op: Asymmetric verification doesn't need a shared secret
210
+ console.warn('[TinyPivot] configureLicenseSecret() is deprecated and no longer needed.');
121
211
  }
122
212
  // Hardcoded SHA-256 hash of the demo secret
123
213
  const DEMO_SECRET_HASH = 'A48AA0618518D3E62F31FCFCA2DD2B86E7FE0863E2F90756FB0A960AE7A51583';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/license/index.ts"],"names":[],"mappings":"AAMA,MAAM,YAAY,GAAgB;IAChC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK;QACZ,oBAAoB,EAAE,KAAK;QAC3B,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,KAAK;QACzB,WAAW,EAAE,KAAK;KACnB;CACF,CAAA;AAED,MAAM,eAAe,GAAgB;IACnC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK;QACZ,oBAAoB,EAAE,KAAK;QAC3B,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,KAAK;QACzB,WAAW,EAAE,KAAK;KACnB;CACF,CAAA;AAED,MAAM,YAAY,GAAgB;IAChC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE;QACR,KAAK,EAAE,IAAI;QACX,oBAAoB,EAAE,IAAI;QAC1B,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,KAAK,EAAE,+BAA+B;KACpD;CACF,CAAA;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe,CAC5B,QAAgB,EAChB,SAAiB,EACjB,MAAc;IAEd,mEAAmE;IACnE,MAAM,MAAM,GAAI,UAAsC,CAAC,qBAA+B,CAAA;IAEtF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;QAC/F,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAA;IAE1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEvC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAC7C,KAAK,EACL,OAAO,EACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAA;QAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;QAChD,MAAM,WAAW,GAAG,QAAQ;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACzC,IAAI,CAAC,EAAE,CAAC;aACR,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,WAAW,EAAE,CAAA;QAEhB,OAAO,SAAS,KAAK,WAAW,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,4BAA4B;IAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACvB,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,qDAAqD;IACrD,yCAAyC;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAE1B,iCAAiC;IACjC,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IAC9E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,oBAAoB;IACpB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAE5C,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,eAAe,EAAE,SAAS,EAAE,CAAA;IAC1C,CAAC;IAED,yBAAyB;IACzB,IAAI,IAAI,GAAgB,MAAM,CAAA;IAC9B,IAAI,QAAQ,KAAK,MAAM;QAAE,IAAI,GAAG,YAAY,CAAA;SACvC,IAAI,QAAQ,KAAK,MAAM;QAAE,IAAI,GAAG,eAAe,CAAA;SAC/C,IAAI,QAAQ,KAAK,MAAM;QAAE,IAAI,GAAG,UAAU,CAAA;IAE/C,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,IAAI;QACb,SAAS;QACT,QAAQ,EAAE;YACR,KAAK,EAAE,IAAI,KAAK,MAAM;YACtB,oBAAoB,EAAE,IAAI,KAAK,MAAM;YACrC,cAAc,EAAE,IAAI,KAAK,MAAM;YAC/B,kBAAkB,EAAE,IAAI,KAAK,MAAM;YACnC,WAAW,EAAE,IAAI,KAAK,MAAM;SAC7B;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IAClD,UAAsC,CAAC,qBAAqB,GAAG,MAAM,CAAA;AACxE,CAAC;AAED,4CAA4C;AAC5C,MAAM,gBAAgB,GAAG,kEAAkE,CAAA;AAE3F;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,MAAc;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACnC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;QACxD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAe;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAA;IACrC,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,IAAiB;IACrC,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAA;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,MAAe;IACpE,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,CAAC,IAAI,CACV,gBAAgB,OAAO,4BAA4B;QACjD,mDAAmD,CACtD,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/license/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smallwebco/tinypivot-core",
3
- "version": "1.0.38",
3
+ "version": "1.0.47",
4
4
  "description": "Core logic for TinyPivot - framework agnostic pivot table and data grid utilities",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",