tetrons 2.3.36 → 2.3.38
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/dist/index.cjs +18 -53
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +18 -60
- package/package.json +11 -5
- package/dist/src/index.d.ts +0 -7
- package/dist/src/index.js +0 -51
- package/dist/src/server/usage.d.ts +0 -2
- package/dist/src/server/usage.js +0 -17
package/dist/index.cjs
CHANGED
|
@@ -5,9 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __esm = (fn, res) => function __init() {
|
|
9
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
10
|
-
};
|
|
11
8
|
var __export = (target, all) => {
|
|
12
9
|
for (var name in all)
|
|
13
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -30,38 +27,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
27
|
));
|
|
31
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
29
|
|
|
33
|
-
// src/server/usage.ts
|
|
34
|
-
var usage_exports = {};
|
|
35
|
-
__export(usage_exports, {
|
|
36
|
-
getOrCreateInstallDate: () => getOrCreateInstallDate,
|
|
37
|
-
getRemainingDays: () => getRemainingDays
|
|
38
|
-
});
|
|
39
|
-
function getOrCreateInstallDate() {
|
|
40
|
-
if (import_fs.default.existsSync(USAGE_FILE_PATH)) {
|
|
41
|
-
const data = JSON.parse(import_fs.default.readFileSync(USAGE_FILE_PATH, "utf-8"));
|
|
42
|
-
return new Date(data.installedAt);
|
|
43
|
-
}
|
|
44
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
45
|
-
import_fs.default.writeFileSync(USAGE_FILE_PATH, JSON.stringify({ installedAt: now }));
|
|
46
|
-
return new Date(now);
|
|
47
|
-
}
|
|
48
|
-
function getRemainingDays(installedAt, validityDays) {
|
|
49
|
-
const now = /* @__PURE__ */ new Date();
|
|
50
|
-
const diff = Math.floor(
|
|
51
|
-
(now.getTime() - installedAt.getTime()) / (1e3 * 60 * 60 * 24)
|
|
52
|
-
);
|
|
53
|
-
return validityDays - diff;
|
|
54
|
-
}
|
|
55
|
-
var import_fs, import_path, USAGE_FILE_PATH;
|
|
56
|
-
var init_usage = __esm({
|
|
57
|
-
"src/server/usage.ts"() {
|
|
58
|
-
"use strict";
|
|
59
|
-
import_fs = __toESM(require("fs"));
|
|
60
|
-
import_path = __toESM(require("path"));
|
|
61
|
-
USAGE_FILE_PATH = import_path.default.join(process.cwd(), ".tetrons-usage.json");
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
30
|
// src/index.ts
|
|
66
31
|
var index_exports = {};
|
|
67
32
|
__export(index_exports, {
|
|
@@ -1024,11 +989,11 @@ var ResolvedPos = class _ResolvedPos {
|
|
|
1024
989
|
/**
|
|
1025
990
|
@internal
|
|
1026
991
|
*/
|
|
1027
|
-
constructor(pos,
|
|
992
|
+
constructor(pos, path, parentOffset) {
|
|
1028
993
|
this.pos = pos;
|
|
1029
|
-
this.path =
|
|
994
|
+
this.path = path;
|
|
1030
995
|
this.parentOffset = parentOffset;
|
|
1031
|
-
this.depth =
|
|
996
|
+
this.depth = path.length / 3 - 1;
|
|
1032
997
|
}
|
|
1033
998
|
/**
|
|
1034
999
|
@internal
|
|
@@ -1259,12 +1224,12 @@ var ResolvedPos = class _ResolvedPos {
|
|
|
1259
1224
|
static resolve(doc3, pos) {
|
|
1260
1225
|
if (!(pos >= 0 && pos <= doc3.content.size))
|
|
1261
1226
|
throw new RangeError("Position " + pos + " out of range");
|
|
1262
|
-
let
|
|
1227
|
+
let path = [];
|
|
1263
1228
|
let start = 0, parentOffset = pos;
|
|
1264
1229
|
for (let node = doc3; ; ) {
|
|
1265
1230
|
let { index, offset } = node.content.findIndex(parentOffset);
|
|
1266
1231
|
let rem = parentOffset - offset;
|
|
1267
|
-
|
|
1232
|
+
path.push(node, index, start + offset);
|
|
1268
1233
|
if (!rem)
|
|
1269
1234
|
break;
|
|
1270
1235
|
node = node.child(index);
|
|
@@ -1273,7 +1238,7 @@ var ResolvedPos = class _ResolvedPos {
|
|
|
1273
1238
|
parentOffset = rem - 1;
|
|
1274
1239
|
start += offset + 1;
|
|
1275
1240
|
}
|
|
1276
|
-
return new _ResolvedPos(pos,
|
|
1241
|
+
return new _ResolvedPos(pos, path, parentOffset);
|
|
1277
1242
|
}
|
|
1278
1243
|
/**
|
|
1279
1244
|
@internal
|
|
@@ -17035,12 +17000,12 @@ async function initializeTetrons(apiKey) {
|
|
|
17035
17000
|
throw new Error("API Key is not valid.");
|
|
17036
17001
|
}
|
|
17037
17002
|
if (typeof window !== "undefined") {
|
|
17038
|
-
throw new Error("initializeTetrons
|
|
17003
|
+
throw new Error("initializeTetrons must be called server-side");
|
|
17039
17004
|
}
|
|
17040
|
-
const { getOrCreateInstallDate
|
|
17005
|
+
const { getOrCreateInstallDate, getRemainingDays } = await import("./server/licenseUtils.js");
|
|
17041
17006
|
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
17042
|
-
const installedAt =
|
|
17043
|
-
const remainingDays =
|
|
17007
|
+
const installedAt = getOrCreateInstallDate();
|
|
17008
|
+
const remainingDays = getRemainingDays(installedAt, validityDays);
|
|
17044
17009
|
if (remainingDays <= 0) {
|
|
17045
17010
|
throw new Error(`Your ${API_VERSION} license has expired.`);
|
|
17046
17011
|
}
|
|
@@ -17048,20 +17013,20 @@ async function initializeTetrons(apiKey) {
|
|
|
17048
17013
|
`[TETRONS] Initialized: ${API_VERSION} | Remaining days: ${remainingDays}`
|
|
17049
17014
|
);
|
|
17050
17015
|
}
|
|
17016
|
+
async function getTetronsRemainingDays() {
|
|
17017
|
+
if (!API_VALID || !API_VERSION) return null;
|
|
17018
|
+
if (typeof window !== "undefined") return null;
|
|
17019
|
+
const { getOrCreateInstallDate, getRemainingDays } = await import("./server/licenseUtils.js");
|
|
17020
|
+
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
17021
|
+
const installedAt = getOrCreateInstallDate();
|
|
17022
|
+
return getRemainingDays(installedAt, validityDays);
|
|
17023
|
+
}
|
|
17051
17024
|
function getTetronsVersion() {
|
|
17052
17025
|
return API_VERSION;
|
|
17053
17026
|
}
|
|
17054
17027
|
function isApiKeyValid() {
|
|
17055
17028
|
return API_VALID;
|
|
17056
17029
|
}
|
|
17057
|
-
async function getTetronsRemainingDays() {
|
|
17058
|
-
if (!API_VALID || !API_VERSION) return null;
|
|
17059
|
-
if (typeof window !== "undefined") return null;
|
|
17060
|
-
const { getOrCreateInstallDate: getOrCreateInstallDate2, getRemainingDays: getRemainingDays2 } = await Promise.resolve().then(() => (init_usage(), usage_exports));
|
|
17061
|
-
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
17062
|
-
const installedAt = getOrCreateInstallDate2();
|
|
17063
|
-
return getRemainingDays2(installedAt, validityDays);
|
|
17064
|
-
}
|
|
17065
17030
|
var index_default = EditorContent;
|
|
17066
17031
|
// Annotate the CommonJS export names for ESM import in node:
|
|
17067
17032
|
0 && (module.exports = {
|
package/dist/index.d.mts
CHANGED
|
@@ -6,8 +6,8 @@ type EditorContentProps = {
|
|
|
6
6
|
declare function EditorContent({ apiKey }: EditorContentProps): React.JSX.Element;
|
|
7
7
|
|
|
8
8
|
declare function initializeTetrons(apiKey: string): Promise<void>;
|
|
9
|
+
declare function getTetronsRemainingDays(): Promise<number | null>;
|
|
9
10
|
declare function getTetronsVersion(): "" | "free" | "pro" | "premium" | "platinum";
|
|
10
11
|
declare function isApiKeyValid(): boolean;
|
|
11
|
-
declare function getTetronsRemainingDays(): Promise<number | null>;
|
|
12
12
|
|
|
13
13
|
export { EditorContent, EditorContent as default, getTetronsRemainingDays, getTetronsVersion, initializeTetrons, isApiKeyValid };
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ type EditorContentProps = {
|
|
|
6
6
|
declare function EditorContent({ apiKey }: EditorContentProps): React.JSX.Element;
|
|
7
7
|
|
|
8
8
|
declare function initializeTetrons(apiKey: string): Promise<void>;
|
|
9
|
+
declare function getTetronsRemainingDays(): Promise<number | null>;
|
|
9
10
|
declare function getTetronsVersion(): "" | "free" | "pro" | "premium" | "platinum";
|
|
10
11
|
declare function isApiKeyValid(): boolean;
|
|
11
|
-
declare function getTetronsRemainingDays(): Promise<number | null>;
|
|
12
12
|
|
|
13
13
|
export { EditorContent, EditorContent as default, getTetronsRemainingDays, getTetronsVersion, initializeTetrons, isApiKeyValid };
|
package/dist/index.mjs
CHANGED
|
@@ -1,45 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
-
var __esm = (fn, res) => function __init() {
|
|
4
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
5
|
-
};
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
// src/server/usage.ts
|
|
12
|
-
var usage_exports = {};
|
|
13
|
-
__export(usage_exports, {
|
|
14
|
-
getOrCreateInstallDate: () => getOrCreateInstallDate,
|
|
15
|
-
getRemainingDays: () => getRemainingDays
|
|
16
|
-
});
|
|
17
|
-
import fs from "fs";
|
|
18
|
-
import path from "path";
|
|
19
|
-
function getOrCreateInstallDate() {
|
|
20
|
-
if (fs.existsSync(USAGE_FILE_PATH)) {
|
|
21
|
-
const data = JSON.parse(fs.readFileSync(USAGE_FILE_PATH, "utf-8"));
|
|
22
|
-
return new Date(data.installedAt);
|
|
23
|
-
}
|
|
24
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
25
|
-
fs.writeFileSync(USAGE_FILE_PATH, JSON.stringify({ installedAt: now }));
|
|
26
|
-
return new Date(now);
|
|
27
|
-
}
|
|
28
|
-
function getRemainingDays(installedAt, validityDays) {
|
|
29
|
-
const now = /* @__PURE__ */ new Date();
|
|
30
|
-
const diff = Math.floor(
|
|
31
|
-
(now.getTime() - installedAt.getTime()) / (1e3 * 60 * 60 * 24)
|
|
32
|
-
);
|
|
33
|
-
return validityDays - diff;
|
|
34
|
-
}
|
|
35
|
-
var USAGE_FILE_PATH;
|
|
36
|
-
var init_usage = __esm({
|
|
37
|
-
"src/server/usage.ts"() {
|
|
38
|
-
"use strict";
|
|
39
|
-
USAGE_FILE_PATH = path.join(process.cwd(), ".tetrons-usage.json");
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
|
|
43
1
|
// src/components/tetrons/EditorContent.tsx
|
|
44
2
|
import React14, { useEffect as useEffect8, useRef as useRef7, useState as useState9 } from "react";
|
|
45
3
|
import {
|
|
@@ -993,11 +951,11 @@ var ResolvedPos = class _ResolvedPos {
|
|
|
993
951
|
/**
|
|
994
952
|
@internal
|
|
995
953
|
*/
|
|
996
|
-
constructor(pos,
|
|
954
|
+
constructor(pos, path, parentOffset) {
|
|
997
955
|
this.pos = pos;
|
|
998
|
-
this.path =
|
|
956
|
+
this.path = path;
|
|
999
957
|
this.parentOffset = parentOffset;
|
|
1000
|
-
this.depth =
|
|
958
|
+
this.depth = path.length / 3 - 1;
|
|
1001
959
|
}
|
|
1002
960
|
/**
|
|
1003
961
|
@internal
|
|
@@ -1228,12 +1186,12 @@ var ResolvedPos = class _ResolvedPos {
|
|
|
1228
1186
|
static resolve(doc3, pos) {
|
|
1229
1187
|
if (!(pos >= 0 && pos <= doc3.content.size))
|
|
1230
1188
|
throw new RangeError("Position " + pos + " out of range");
|
|
1231
|
-
let
|
|
1189
|
+
let path = [];
|
|
1232
1190
|
let start = 0, parentOffset = pos;
|
|
1233
1191
|
for (let node = doc3; ; ) {
|
|
1234
1192
|
let { index, offset } = node.content.findIndex(parentOffset);
|
|
1235
1193
|
let rem = parentOffset - offset;
|
|
1236
|
-
|
|
1194
|
+
path.push(node, index, start + offset);
|
|
1237
1195
|
if (!rem)
|
|
1238
1196
|
break;
|
|
1239
1197
|
node = node.child(index);
|
|
@@ -1242,7 +1200,7 @@ var ResolvedPos = class _ResolvedPos {
|
|
|
1242
1200
|
parentOffset = rem - 1;
|
|
1243
1201
|
start += offset + 1;
|
|
1244
1202
|
}
|
|
1245
|
-
return new _ResolvedPos(pos,
|
|
1203
|
+
return new _ResolvedPos(pos, path, parentOffset);
|
|
1246
1204
|
}
|
|
1247
1205
|
/**
|
|
1248
1206
|
@internal
|
|
@@ -17048,12 +17006,12 @@ async function initializeTetrons(apiKey) {
|
|
|
17048
17006
|
throw new Error("API Key is not valid.");
|
|
17049
17007
|
}
|
|
17050
17008
|
if (typeof window !== "undefined") {
|
|
17051
|
-
throw new Error("initializeTetrons
|
|
17009
|
+
throw new Error("initializeTetrons must be called server-side");
|
|
17052
17010
|
}
|
|
17053
|
-
const { getOrCreateInstallDate
|
|
17011
|
+
const { getOrCreateInstallDate, getRemainingDays } = await import("./server/licenseUtils.js");
|
|
17054
17012
|
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
17055
|
-
const installedAt =
|
|
17056
|
-
const remainingDays =
|
|
17013
|
+
const installedAt = getOrCreateInstallDate();
|
|
17014
|
+
const remainingDays = getRemainingDays(installedAt, validityDays);
|
|
17057
17015
|
if (remainingDays <= 0) {
|
|
17058
17016
|
throw new Error(`Your ${API_VERSION} license has expired.`);
|
|
17059
17017
|
}
|
|
@@ -17061,20 +17019,20 @@ async function initializeTetrons(apiKey) {
|
|
|
17061
17019
|
`[TETRONS] Initialized: ${API_VERSION} | Remaining days: ${remainingDays}`
|
|
17062
17020
|
);
|
|
17063
17021
|
}
|
|
17022
|
+
async function getTetronsRemainingDays() {
|
|
17023
|
+
if (!API_VALID || !API_VERSION) return null;
|
|
17024
|
+
if (typeof window !== "undefined") return null;
|
|
17025
|
+
const { getOrCreateInstallDate, getRemainingDays } = await import("./server/licenseUtils.js");
|
|
17026
|
+
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
17027
|
+
const installedAt = getOrCreateInstallDate();
|
|
17028
|
+
return getRemainingDays(installedAt, validityDays);
|
|
17029
|
+
}
|
|
17064
17030
|
function getTetronsVersion() {
|
|
17065
17031
|
return API_VERSION;
|
|
17066
17032
|
}
|
|
17067
17033
|
function isApiKeyValid() {
|
|
17068
17034
|
return API_VALID;
|
|
17069
17035
|
}
|
|
17070
|
-
async function getTetronsRemainingDays() {
|
|
17071
|
-
if (!API_VALID || !API_VERSION) return null;
|
|
17072
|
-
if (typeof window !== "undefined") return null;
|
|
17073
|
-
const { getOrCreateInstallDate: getOrCreateInstallDate2, getRemainingDays: getRemainingDays2 } = await Promise.resolve().then(() => (init_usage(), usage_exports));
|
|
17074
|
-
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
17075
|
-
const installedAt = getOrCreateInstallDate2();
|
|
17076
|
-
return getRemainingDays2(installedAt, validityDays);
|
|
17077
|
-
}
|
|
17078
17036
|
var index_default = EditorContent;
|
|
17079
17037
|
export {
|
|
17080
17038
|
EditorContent,
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tetrons",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.38",
|
|
4
4
|
"description": "A Next.js project written in TypeScript",
|
|
5
|
-
"main": "dist/index.
|
|
5
|
+
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"scripts": {
|
|
@@ -70,7 +70,8 @@
|
|
|
70
70
|
"react",
|
|
71
71
|
"web"
|
|
72
72
|
],
|
|
73
|
-
"
|
|
73
|
+
"sideEffects": false,
|
|
74
|
+
"author": "Swastik Jha <swastik.jha@finapsys.co.in>",
|
|
74
75
|
"license": "MIT",
|
|
75
76
|
"exports": {
|
|
76
77
|
".": {
|
|
@@ -101,12 +102,17 @@
|
|
|
101
102
|
"./app/api/validate/route": {
|
|
102
103
|
"import": "./dist/app/api/validate/route.mjs",
|
|
103
104
|
"require": "./dist/app/api/validate/route.cjs"
|
|
105
|
+
},
|
|
106
|
+
"./server/licenseUtils": {
|
|
107
|
+
"import": "./dist/server/licenseUtils.js",
|
|
108
|
+
"require": "./dist/server/licenseUtils.js"
|
|
104
109
|
}
|
|
105
110
|
},
|
|
106
111
|
"files": [
|
|
107
|
-
"dist",
|
|
112
|
+
"dist",
|
|
108
113
|
"dist/styles/tetrons.css",
|
|
109
|
-
"dist/components"
|
|
114
|
+
"dist/components",
|
|
115
|
+
"dist/server"
|
|
110
116
|
],
|
|
111
117
|
"bugs": {
|
|
112
118
|
"url": "https://github.com/Finapsys/Tetrons/issues"
|
package/dist/src/index.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import EditorContent from "./components/tetrons/EditorContent";
|
|
2
|
-
export declare function initializeTetrons(apiKey: string): Promise<void>;
|
|
3
|
-
export declare function getTetronsVersion(): "" | "free" | "pro" | "premium" | "platinum";
|
|
4
|
-
export declare function isApiKeyValid(): boolean;
|
|
5
|
-
export declare function getTetronsRemainingDays(): Promise<number | null>;
|
|
6
|
-
export { EditorContent };
|
|
7
|
-
export default EditorContent;
|
package/dist/src/index.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import EditorContent from "./components/tetrons/EditorContent";
|
|
2
|
-
let API_VALID = false;
|
|
3
|
-
let API_VERSION = "";
|
|
4
|
-
export async function initializeTetrons(apiKey) {
|
|
5
|
-
const res = await fetch("https://staging.tetrons.com/api/validate", {
|
|
6
|
-
method: "POST",
|
|
7
|
-
headers: {
|
|
8
|
-
"Content-Type": "application/json",
|
|
9
|
-
},
|
|
10
|
-
body: JSON.stringify({ apiKey }),
|
|
11
|
-
});
|
|
12
|
-
if (!res.ok) {
|
|
13
|
-
const error = await res.json();
|
|
14
|
-
throw new Error(`API Key validation failed: ${error.error}`);
|
|
15
|
-
}
|
|
16
|
-
const data = await res.json();
|
|
17
|
-
API_VALID = data.valid;
|
|
18
|
-
API_VERSION = data.version;
|
|
19
|
-
if (!API_VALID) {
|
|
20
|
-
throw new Error("API Key is not valid.");
|
|
21
|
-
}
|
|
22
|
-
if (typeof window !== "undefined") {
|
|
23
|
-
throw new Error("initializeTetrons() must be called server-side.");
|
|
24
|
-
}
|
|
25
|
-
const { getOrCreateInstallDate, getRemainingDays } = await import("./server/usage.js");
|
|
26
|
-
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
27
|
-
const installedAt = getOrCreateInstallDate();
|
|
28
|
-
const remainingDays = getRemainingDays(installedAt, validityDays);
|
|
29
|
-
if (remainingDays <= 0) {
|
|
30
|
-
throw new Error(`Your ${API_VERSION} license has expired.`);
|
|
31
|
-
}
|
|
32
|
-
console.log(`[TETRONS] Initialized: ${API_VERSION} | Remaining days: ${remainingDays}`);
|
|
33
|
-
}
|
|
34
|
-
export function getTetronsVersion() {
|
|
35
|
-
return API_VERSION;
|
|
36
|
-
}
|
|
37
|
-
export function isApiKeyValid() {
|
|
38
|
-
return API_VALID;
|
|
39
|
-
}
|
|
40
|
-
export async function getTetronsRemainingDays() {
|
|
41
|
-
if (!API_VALID || !API_VERSION)
|
|
42
|
-
return null;
|
|
43
|
-
if (typeof window !== "undefined")
|
|
44
|
-
return null;
|
|
45
|
-
const { getOrCreateInstallDate, getRemainingDays } = await import("./server/usage.js");
|
|
46
|
-
const validityDays = API_VERSION === "free" ? 14 : 30;
|
|
47
|
-
const installedAt = getOrCreateInstallDate();
|
|
48
|
-
return getRemainingDays(installedAt, validityDays);
|
|
49
|
-
}
|
|
50
|
-
export { EditorContent };
|
|
51
|
-
export default EditorContent;
|
package/dist/src/server/usage.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
const USAGE_FILE_PATH = path.join(process.cwd(), ".tetrons-usage.json");
|
|
4
|
-
export function getOrCreateInstallDate() {
|
|
5
|
-
if (fs.existsSync(USAGE_FILE_PATH)) {
|
|
6
|
-
const data = JSON.parse(fs.readFileSync(USAGE_FILE_PATH, "utf-8"));
|
|
7
|
-
return new Date(data.installedAt);
|
|
8
|
-
}
|
|
9
|
-
const now = new Date().toISOString();
|
|
10
|
-
fs.writeFileSync(USAGE_FILE_PATH, JSON.stringify({ installedAt: now }));
|
|
11
|
-
return new Date(now);
|
|
12
|
-
}
|
|
13
|
-
export function getRemainingDays(installedAt, validityDays) {
|
|
14
|
-
const now = new Date();
|
|
15
|
-
const diff = Math.floor((now.getTime() - installedAt.getTime()) / (1000 * 60 * 60 * 24));
|
|
16
|
-
return validityDays - diff;
|
|
17
|
-
}
|