tetrons 2.3.72 → 2.3.73

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.
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ type EditorContentProps = {
4
+ apiKey: string;
5
+ };
6
+ declare function EditorContent({ apiKey }: EditorContentProps): React.JSX.Element;
7
+
8
+ declare function initializeTetrons(apiKey: string): Promise<void>;
9
+ declare function getTetronsVersion(): "" | "free" | "pro" | "premium" | "platinum";
10
+ declare function isApiKeyValid(): boolean;
11
+ declare function getTetronsRemainingDays(): Promise<number | null>;
12
+
13
+ export { EditorContent, EditorContent as default, getTetronsRemainingDays, getTetronsVersion, initializeTetrons, isApiKeyValid };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ type EditorContentProps = {
4
+ apiKey: string;
5
+ };
6
+ declare function EditorContent({ apiKey }: EditorContentProps): React.JSX.Element;
7
+
8
+ declare function initializeTetrons(apiKey: string): Promise<void>;
9
+ declare function getTetronsVersion(): "" | "free" | "pro" | "premium" | "platinum";
10
+ declare function isApiKeyValid(): boolean;
11
+ declare function getTetronsRemainingDays(): Promise<number | null>;
12
+
13
+ export { EditorContent, EditorContent as default, getTetronsRemainingDays, getTetronsVersion, initializeTetrons, isApiKeyValid };
@@ -1,7 +1,3 @@
1
- // src/index.nodeimpl.ts
2
- import fs from "fs";
3
- import path from "path";
4
-
5
1
  // src/components/tetrons/EditorContent.tsx
6
2
  import React14, { useEffect as useEffect8, useRef as useRef7, useState as useState9 } from "react";
7
3
  import {
@@ -9,14 +5,6 @@ import {
9
5
  EditorContent as TiptapEditorContent
10
6
  } from "@tiptap/react";
11
7
 
12
- // src/utils/getEnv.ts
13
- function getEnv(key, fallback = "") {
14
- if (typeof process !== "undefined") {
15
- return process.env[key] || fallback;
16
- }
17
- return fallback;
18
- }
19
-
20
8
  // node_modules/@tiptap/extension-document/dist/index.js
21
9
  import { Node } from "@tiptap/core";
22
10
  var Document = Node.create({
@@ -963,11 +951,11 @@ var ResolvedPos = class _ResolvedPos {
963
951
  /**
964
952
  @internal
965
953
  */
966
- constructor(pos, path2, parentOffset) {
954
+ constructor(pos, path, parentOffset) {
967
955
  this.pos = pos;
968
- this.path = path2;
956
+ this.path = path;
969
957
  this.parentOffset = parentOffset;
970
- this.depth = path2.length / 3 - 1;
958
+ this.depth = path.length / 3 - 1;
971
959
  }
972
960
  /**
973
961
  @internal
@@ -1198,12 +1186,12 @@ var ResolvedPos = class _ResolvedPos {
1198
1186
  static resolve(doc3, pos) {
1199
1187
  if (!(pos >= 0 && pos <= doc3.content.size))
1200
1188
  throw new RangeError("Position " + pos + " out of range");
1201
- let path2 = [];
1189
+ let path = [];
1202
1190
  let start = 0, parentOffset = pos;
1203
1191
  for (let node = doc3; ; ) {
1204
1192
  let { index, offset } = node.content.findIndex(parentOffset);
1205
1193
  let rem = parentOffset - offset;
1206
- path2.push(node, index, start + offset);
1194
+ path.push(node, index, start + offset);
1207
1195
  if (!rem)
1208
1196
  break;
1209
1197
  node = node.child(index);
@@ -1212,7 +1200,7 @@ var ResolvedPos = class _ResolvedPos {
1212
1200
  parentOffset = rem - 1;
1213
1201
  start += offset + 1;
1214
1202
  }
1215
- return new _ResolvedPos(pos, path2, parentOffset);
1203
+ return new _ResolvedPos(pos, path, parentOffset);
1216
1204
  }
1217
1205
  /**
1218
1206
  @internal
@@ -11516,16 +11504,16 @@ editHandlers.drop = (view, _event) => {
11516
11504
  tr.deleteSelection();
11517
11505
  }
11518
11506
  let pos = tr.mapping.map(insertPos);
11519
- let isNode = slice2.openStart == 0 && slice2.openEnd == 0 && slice2.content.childCount == 1;
11507
+ let isNode2 = slice2.openStart == 0 && slice2.openEnd == 0 && slice2.content.childCount == 1;
11520
11508
  let beforeInsert = tr.doc;
11521
- if (isNode)
11509
+ if (isNode2)
11522
11510
  tr.replaceRangeWith(pos, pos, slice2.content.firstChild);
11523
11511
  else
11524
11512
  tr.replaceRange(pos, pos, slice2);
11525
11513
  if (tr.doc.eq(beforeInsert))
11526
11514
  return;
11527
11515
  let $pos = tr.doc.resolve(pos);
11528
- if (isNode && NodeSelection.isSelectable(slice2.content.firstChild) && $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice2.content.firstChild)) {
11516
+ if (isNode2 && NodeSelection.isSelectable(slice2.content.firstChild) && $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice2.content.firstChild)) {
11529
11517
  tr.setSelection(new NodeSelection($pos));
11530
11518
  } else {
11531
11519
  let end = tr.mapping.map(insertPos);
@@ -16841,10 +16829,16 @@ function EditorContent({ apiKey }) {
16841
16829
  null
16842
16830
  );
16843
16831
  const wrapperRef = useRef7(null);
16844
- const API_BASE_URL = getEnv(
16845
- "VITE_TETRONS_API_URL",
16846
- "https://staging.tetrons.com"
16847
- );
16832
+ function getApiBaseUrl() {
16833
+ if (typeof import.meta !== "undefined" && import.meta.env?.VITE_TETRONS_API_URL) {
16834
+ return import.meta.env.VITE_TETRONS_API_URL;
16835
+ }
16836
+ if (typeof process !== "undefined" && process.env?.NEXT_PUBLIC_TETRONS_API_URL) {
16837
+ return process.env.NEXT_PUBLIC_TETRONS_API_URL;
16838
+ }
16839
+ return "https://staging.tetrons.com";
16840
+ }
16841
+ const API_BASE_URL = getApiBaseUrl();
16848
16842
  useEffect8(() => {
16849
16843
  const validateKey = async () => {
16850
16844
  try {
@@ -16990,49 +16984,39 @@ function EditorContent({ apiKey }) {
16990
16984
  ));
16991
16985
  }
16992
16986
 
16993
- // src/index.nodeimpl.ts
16994
- var USAGE_FILE = path.join(process.cwd(), ".tetrons-usage.json");
16995
- async function getOrCreateInstallDate() {
16996
- try {
16997
- if (fs.existsSync(USAGE_FILE)) {
16998
- const raw = fs.readFileSync(USAGE_FILE, "utf-8");
16999
- try {
17000
- const data = JSON.parse(raw);
17001
- if (typeof data.installedAt === "string") {
17002
- return new Date(data.installedAt);
17003
- }
17004
- } catch {
17005
- console.warn(
17006
- "[TETRONS] Malformed .tetrons-usage.json. Reinitializing..."
17007
- );
17008
- }
17009
- }
17010
- const now = (/* @__PURE__ */ new Date()).toISOString();
17011
- fs.writeFileSync(USAGE_FILE, JSON.stringify({ installedAt: now }), {
17012
- encoding: "utf-8",
17013
- flag: "w"
17014
- });
17015
- return new Date(now);
17016
- } catch (err) {
17017
- console.error("[TETRONS] Failed to read/write install date:", err);
17018
- throw new Error("Failed to access local usage record.");
17019
- }
17020
- }
17021
-
17022
16987
  // src/index.ts
17023
16988
  var API_VALID = false;
17024
16989
  var API_VERSION = "";
16990
+ var isNode = typeof window === "undefined";
17025
16991
  var validityMap = {
17026
16992
  free: 14,
17027
16993
  pro: 30,
17028
16994
  premium: 30,
17029
16995
  platinum: 30
17030
16996
  };
17031
- var _installedAt = null;
17032
- async function getOrCreateInstallDate2() {
17033
- if (_installedAt) return _installedAt;
17034
- _installedAt = await getOrCreateInstallDate();
17035
- return _installedAt;
16997
+ function getInstallDateKey() {
16998
+ return "tetrons_installed_at";
16999
+ }
17000
+ async function getOrCreateInstallDate() {
17001
+ const key = getInstallDateKey();
17002
+ if (isNode) {
17003
+ const fs = await import("fs");
17004
+ const path = await import("path");
17005
+ const usagePath = path.join(process.cwd(), ".tetrons-usage.json");
17006
+ if (fs.existsSync(usagePath)) {
17007
+ const data = JSON.parse(fs.readFileSync(usagePath, "utf-8"));
17008
+ return new Date(data.installedAt);
17009
+ }
17010
+ const now = (/* @__PURE__ */ new Date()).toISOString();
17011
+ fs.writeFileSync(usagePath, JSON.stringify({ installedAt: now }));
17012
+ return new Date(now);
17013
+ } else {
17014
+ const saved = localStorage.getItem(key);
17015
+ if (saved) return new Date(saved);
17016
+ const now = (/* @__PURE__ */ new Date()).toISOString();
17017
+ localStorage.setItem(key, now);
17018
+ return new Date(now);
17019
+ }
17036
17020
  }
17037
17021
  function getRemainingDays(installedAt, validityDays) {
17038
17022
  const now = /* @__PURE__ */ new Date();
@@ -17055,20 +17039,18 @@ async function initializeTetrons(apiKey) {
17055
17039
  }
17056
17040
  const data = await res.json();
17057
17041
  API_VALID = data.valid;
17042
+ API_VERSION = data.version;
17058
17043
  if (!API_VALID) {
17059
17044
  throw new Error("API Key is not valid.");
17060
17045
  }
17061
- if (!(data.version in validityMap)) {
17062
- throw new Error(`Unsupported license version: ${data.version}`);
17046
+ if (API_VERSION === "") {
17047
+ throw new Error("No license version provided.");
17063
17048
  }
17064
- API_VERSION = data.version;
17065
17049
  const validityDays = validityMap[API_VERSION];
17066
- const installedAt = await getOrCreateInstallDate2();
17050
+ const installedAt = await getOrCreateInstallDate();
17067
17051
  const remainingDays = getRemainingDays(installedAt, validityDays);
17068
17052
  if (remainingDays <= 0) {
17069
- throw new Error(
17070
- `Your ${API_VERSION} license expired after ${validityDays} days.`
17071
- );
17053
+ throw new Error(`Your ${API_VERSION} license has expired.`);
17072
17054
  }
17073
17055
  console.log(
17074
17056
  `[TETRONS] Initialized: ${API_VERSION} | Remaining days: ${remainingDays}`
@@ -17083,12 +17065,13 @@ function isApiKeyValid() {
17083
17065
  async function getTetronsRemainingDays() {
17084
17066
  if (!API_VALID || API_VERSION === "") return null;
17085
17067
  const validityDays = validityMap[API_VERSION];
17086
- const installedAt = await getOrCreateInstallDate2();
17068
+ const installedAt = await getOrCreateInstallDate();
17087
17069
  return getRemainingDays(installedAt, validityDays);
17088
17070
  }
17071
+ var index_default = EditorContent;
17089
17072
  export {
17090
17073
  EditorContent,
17091
- getOrCreateInstallDate,
17074
+ index_default as default,
17092
17075
  getTetronsRemainingDays,
17093
17076
  getTetronsVersion,
17094
17077
  initializeTetrons,
package/package.json CHANGED
@@ -1,20 +1,16 @@
1
1
  {
2
2
  "name": "tetrons",
3
- "version": "2.3.72",
3
+ "version": "2.3.73",
4
4
  "description": "A Next.js project written in TypeScript",
5
- "main": "./dist/node.node.cjs",
6
- "module": "./dist/node.node.mjs",
7
- "types": "./dist/browser.d.ts",
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
8
  "scripts": {
9
9
  "dev": "next dev --turbo",
10
10
  "build": "tsup && copyfiles -u 2 src/styles/*.css dist/styles && copyfiles -u 2 src/components/**/*.tsx dist/components",
11
11
  "start": "next start",
12
12
  "lint": "next lint"
13
13
  },
14
- "./browser": {
15
- "import": "./dist/browser.browser.js",
16
- "require": "./dist/browser.browser.js"
17
- },
18
14
  "dependencies": {
19
15
  "@emoji-mart/react": "1.1.1",
20
16
  "@tiptap/core": "2.24.1",
@@ -79,17 +75,8 @@
79
75
  "license": "MIT",
80
76
  "exports": {
81
77
  ".": {
82
- "browser": "./dist/browser.browser.js",
83
- "import": "./dist/node.node.mjs",
84
- "require": "./dist/node.node.cjs"
85
- },
86
- "./node": {
87
- "import": "./dist/node.node.mjs",
88
- "require": "./dist/node.node.cjs"
89
- },
90
- "./browser": {
91
- "import": "./dist/browser.browser.js",
92
- "require": "./dist/browser.browser.js"
78
+ "import": "./dist/index.mjs",
79
+ "require": "./dist/index.cjs"
93
80
  },
94
81
  "./style.css": "./dist/styles/tetrons.css",
95
82
  "./app/api/ai-action/route": {
@@ -117,6 +104,9 @@
117
104
  "require": "./dist/app/api/validate/route.cjs"
118
105
  }
119
106
  },
107
+ "browser": {
108
+ "./dist/licenseUtils.server.js": false
109
+ },
120
110
  "files": [
121
111
  "dist",
122
112
  "dist/styles/tetrons.css",
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
-
3
- type EditorContentProps = {
4
- apiKey: string;
5
- };
6
- declare function EditorContent({ apiKey }: EditorContentProps): React.JSX.Element;
7
-
8
- export { EditorContent, EditorContent as default };