@nice2dev/licensing 1.1.6 → 1.1.9
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/CHANGELOG.md +125 -0
- package/dist/index.cjs +67 -70
- package/dist/index.mjs +26 -29
- package/dist/{FeatureGate-9rvyns7j.cjs → marks-KVqpGsfU.cjs} +55 -0
- package/dist/{FeatureGate-cIgJ8Gq2.js → marks-KzIFNheE.js} +63 -8
- package/dist/react.cjs +20 -21
- package/dist/react.mjs +11 -12
- package/package.json +2 -1
- package/dist/FeatureGate-9rvyns7j.cjs.map +0 -1
- package/dist/FeatureGate-Cs1zphXs.cjs +0 -1405
- package/dist/FeatureGate-Cs1zphXs.cjs.map +0 -1
- package/dist/FeatureGate-Da7fCJA5.js +0 -1406
- package/dist/FeatureGate-Da7fCJA5.js.map +0 -1
- package/dist/FeatureGate-cIgJ8Gq2.js.map +0 -1
- package/dist/__vite-browser-external-2Ng8QIWW.js.map +0 -1
- package/dist/__vite-browser-external-DES75WN9.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/react.cjs.map +0 -1
- package/dist/react.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,130 @@
|
|
|
1
1
|
# @nice2dev/licensing
|
|
2
2
|
|
|
3
|
+
## 1.1.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1.1.9 — themes reach the controls again, every control has a rendered demo, no breaking changes.
|
|
8
|
+
|
|
9
|
+
**Theming.** `NiceThemeProvider`, `applyTheme` and `NiceThemePreview` write the `--nice-*` tokens
|
|
10
|
+
again, so a theme recolours the controls and not only the app's own CSS — since 1.1.7 only
|
|
11
|
+
light/dark switched. The provider's scope wins over values set on `:root`, as it did before 1.1.7:
|
|
12
|
+
put a brand colour into the theme rather than on `<html>`. Alias tokens are computed in the theme
|
|
13
|
+
scope, not only on `:root`. About 1,600 places that used a text token as a background or border, or
|
|
14
|
+
a surface token as text colour, now use the token of the right role. `--nice-warning-light` and
|
|
15
|
+
`--nice-danger-light` are the light shade of the status colour, like `--nice-success-light`
|
|
16
|
+
(new: `--nice-color-warning-light`, `--nice-color-error-light`); backgrounds use `--nice-*-bg`.
|
|
17
|
+
|
|
18
|
+
**Styles that never shipped.** Six stylesheets in `@nice2dev/ui` were unreachable from its entry
|
|
19
|
+
point, so `NiceLiveDataGrid`, `NiceTaskInbox`, `NiceBPMNDesigner`, `NiceInstanceMonitor`,
|
|
20
|
+
`NiceIntegrationHub`, `NiceRulesEngine` and `NiceVideoEditor` rendered unstyled; eleven more
|
|
21
|
+
components had no stylesheet at all; `workflow.css` read its spacing scale as pixels; and
|
|
22
|
+
`NiceModuleGrid` was styled for a `<table>` it does not render.
|
|
23
|
+
|
|
24
|
+
**Language.** `useNiceTranslation()` returns `{ t, lang }` and dates are formatted in the interface
|
|
25
|
+
language rather than the browser's (`ui-presentations` adds `useNiceLang()`). `NiceInvoiceLineEditor`
|
|
26
|
+
takes its currency and units from the active language unless you pass them. `NiceAuditLog`,
|
|
27
|
+
`NiceRecordingPanel`, the four game-engine editors and `NiceTemplateEditor` are translated, the
|
|
28
|
+
game-engine dictionary is actually registered, and 136 ui-audio strings have English defaults
|
|
29
|
+
instead of rendering raw keys.
|
|
30
|
+
|
|
31
|
+
**Canvas and document colours.** Canvas never resolves `var()`: the QR and barcode generators drew a
|
|
32
|
+
black rectangle, the whiteboard lost its colours and light presets parsed to `NaN`. Data colours are
|
|
33
|
+
resolved first now. Colours stored in documents — slide templates, theme presets, brand kits,
|
|
34
|
+
exports — are literals, so a saved document looks the same in every theme.
|
|
35
|
+
|
|
36
|
+
**Fixes found by the new demos.** All 895 controls now have a rendered showcase demo, and roughly
|
|
37
|
+
every third new demo exposed a bug. `ui-platform`: the service worker re-registered on every
|
|
38
|
+
render, a screen permission prompt appeared on mount, reconnects and start-up tasks ran twice,
|
|
39
|
+
valid EAN-13 codes were rejected. `ui-ai`: `createProviderFromConfig` dropped the endpoint path —
|
|
40
|
+
OpenAI, Anthropic and Groq were called without `/v1` and Azure always threw — and the theme
|
|
41
|
+
generator failed on every request. `ui-communication`: the local participant appeared twice in a
|
|
42
|
+
conference and `activeConversationId` was ignored. `ui-buildings`: automation days were saved as
|
|
43
|
+
indices (both forms are read now), the row toggle changed the selected rule instead of the clicked
|
|
44
|
+
one, and floor-plan devices were drawn in the corner. `ui-mobile`: `NiceTouchTable` rendered invalid
|
|
45
|
+
table markup. `ui-diagrams`: arrowheads grew with the stroke width and transition clicks never fired.
|
|
46
|
+
`ui-3d`: opening a code editor before the 3D view broke the whole app. `ui-presentations`: the editor
|
|
47
|
+
clipped slides in columns narrower than 800 px.
|
|
48
|
+
|
|
49
|
+
**Additive API only.** `@nice2dev/ui-platform` now exports its hooks, provider aliases and Props / Ref
|
|
50
|
+
types. Nothing was renamed or removed.
|
|
51
|
+
|
|
52
|
+
## 1.1.8
|
|
53
|
+
|
|
54
|
+
### Patch Changes
|
|
55
|
+
|
|
56
|
+
- 1.1.8 — old problems closed, no breaking changes.
|
|
57
|
+
|
|
58
|
+
**English-first UI.** Text that was hardcoded Polish now goes through `t()` with an English
|
|
59
|
+
default: the planning views, the whole of `@nice2dev/ui-printing`, smart home, backup, the
|
|
60
|
+
navigation and settings panels, `@nice2dev/ui-buildings` end to end, the photo editor and the
|
|
61
|
+
presentation Q&A panel. The dictionary gains 566 keys in en, pl, de, fr, es and uk, so an app
|
|
62
|
+
with `locale="pl"` reads as before. Three prop defaults changed with it:
|
|
63
|
+
`NiceInvoiceLineEditor` (`currencySymbol` `'zł'` → `'$'`, `units` → English) and
|
|
64
|
+
`NiceTimeoutFeedback`'s two messages.
|
|
65
|
+
|
|
66
|
+
**Icons.** No emoji, unicode glyphs or inline `<svg>` are used as icons any more — not in JSX,
|
|
67
|
+
not in `icon:` data fields, not on canvas. Ten icons in `icons-business` / `icons-education`
|
|
68
|
+
that drew their artwork as `<text>` use paths now, and the behaviour-tree palette names resolve
|
|
69
|
+
to real `NiceIcon` builtins (`shield` and `repeat` are new; 176 in total).
|
|
70
|
+
|
|
71
|
+
**Fixes.** The shadcn adapter reads the host's `--primary` / `--accent` again instead of
|
|
72
|
+
producing invalid `hsl(#hex)`; `ui-diagrams` ships the 21 translation keys its components were
|
|
73
|
+
already asking for; `--nice-font-size-2xl` is declared; `NiceScheduler` warns in development
|
|
74
|
+
when it ignores a `currentDate`, `view` or `events` change; `ui-buildings` typechecks clean and
|
|
75
|
+
`DeviceProtocol` accepts `'mqtt'`.
|
|
76
|
+
|
|
77
|
+
**Docs.** `doc.json` no longer lists CSS variables no component implements; eleven components
|
|
78
|
+
document the tokens their stylesheets really read.
|
|
79
|
+
|
|
80
|
+
## 1.1.7
|
|
81
|
+
|
|
82
|
+
### Patch Changes
|
|
83
|
+
|
|
84
|
+
- Close the three items left open in the 1.1.6 response to OmniVerk.
|
|
85
|
+
|
|
86
|
+
**Every value control works without state in the parent.** The `audit-controllable-state` gate
|
|
87
|
+
counted 87 value props that were required with no `default*`, so the control could not render from a
|
|
88
|
+
manifest without data. It now reports 0 and gates CI at `--max=0`. 48 controls gained `default*` props
|
|
89
|
+
through `useControllableState` (existing `value` + handler call sites behave as before); 33 read-only
|
|
90
|
+
data lists are optional with a stable empty default; 4 props paired with a handler only by name are
|
|
91
|
+
optional; `NiceWhiteboard` and `NiceMetricsDashboard` render an empty state until a session or
|
|
92
|
+
dashboard arrives. Additive API only — nothing renamed or removed.
|
|
93
|
+
|
|
94
|
+
- `NicePivotGrid.fields`, `NiceScheduler.events` and `NiceGitHooks.hooks` are controlled only together
|
|
95
|
+
with their change handler, as `NiceScheduler` already documented for `currentDate`/`view`. A bare
|
|
96
|
+
prop stays an initial value; prop plus handler now always wins (later prop updates used to be
|
|
97
|
+
ignored). `NiceGitHooks.onHookChange` is now called; `onHooksChange` and
|
|
98
|
+
`NiceLocaleManager.onTranslationsChange` are new.
|
|
99
|
+
- `NiceCodeEditor` / `NiceCodeDiffEditor` no longer report a value written from the prop back through
|
|
100
|
+
`onChange`, and call the latest handler rather than the one captured at mount.
|
|
101
|
+
- `NiceHtmlEditor` no longer rewrites its content on every render (React 19 compares the
|
|
102
|
+
`dangerouslySetInnerHTML` object, not its string), which moved the caret; the HTML source and
|
|
103
|
+
Markdown views can be closed again.
|
|
104
|
+
- Selections seeded once from the first item (access manager, automation/scene editors, git diff
|
|
105
|
+
viewer, ribbon, setup wizard) follow data that arrives after mount.
|
|
106
|
+
- `useControllableState`: new `fallbackValue` seed that never triggers the value/default clash warning;
|
|
107
|
+
two functional updates in one tick no longer lose the first; `onChange` is called with one argument
|
|
108
|
+
when there is no meta. `UseControllableStateOptions` is now a union type alias.
|
|
109
|
+
|
|
110
|
+
**`--nice-*` is the source of truth for design tokens.** Controls read only `--nice-*` (9,225 reads in
|
|
111
|
+
339 files). The unprefixed names (`--color-primary`, `--bg-primary`, `--text-muted`, …) stay declared
|
|
112
|
+
as aliases pointing at the Nice tokens, so reading them works, but setting them no longer repaints Nice
|
|
113
|
+
controls. Apps that relied on that can import `@nice2dev/ui/css/legacy-bg-text-aliases.css` after
|
|
114
|
+
`style.css` (removed in 1.2), or set `--nice-color-primary` and friends directly. 13 tokens that were
|
|
115
|
+
read and never declared (`--color-danger`, `--text-on-primary`, `--color-white`, …) are defined; the
|
|
116
|
+
dark blocks define the canonical names, so `.nice-dark` on `<body>` no longer leaves them on light
|
|
117
|
+
values; `--nice-primary-bg` and `--nice-selected-bg` are a primary tint instead of falling through to
|
|
118
|
+
grey. New gate `audit-token-names`.
|
|
119
|
+
|
|
120
|
+
**Node ESM and `require()`.** `@nice2dev/spatial-core` imports from plain Node ESM (51 relative
|
|
121
|
+
specifiers gained extensions, enforced by `nodenext`), and so does `@nice2dev/ui-buildings`, which
|
|
122
|
+
failed through it. `require()` works for `ui-3d`, `ui-graphics` and `game-engine`. The package-exports
|
|
123
|
+
gate now loads every entry in both module systems.
|
|
124
|
+
|
|
125
|
+
**Hygiene.** Sources are prettier-formatted and CI gates on it; 640 stale `.d.ts` files were removed
|
|
126
|
+
from source trees (never published).
|
|
127
|
+
|
|
3
128
|
## 1.1.6
|
|
4
129
|
|
|
5
130
|
No changes in this release.
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
3
|
+
const marks = require("./marks-KVqpGsfU.cjs");
|
|
4
4
|
const jsxRuntime = require("react/jsx-runtime");
|
|
5
5
|
const React = require("react");
|
|
6
6
|
const HEARTBEAT_INTERVAL_MS = 5 * 60 * 1e3;
|
|
@@ -13,7 +13,7 @@ class SeatManager {
|
|
|
13
13
|
* Acquire a seat for the current user
|
|
14
14
|
*/
|
|
15
15
|
async acquireSeat(licenseKey, userId, displayName, email) {
|
|
16
|
-
const machineId = await
|
|
16
|
+
const machineId = await marks.generateMachineId();
|
|
17
17
|
try {
|
|
18
18
|
const response = await fetch(`${this.serverUrl}/seats/acquire`, {
|
|
19
19
|
method: "POST",
|
|
@@ -188,7 +188,7 @@ class FloatingLicenseManager {
|
|
|
188
188
|
* Acquire a floating license
|
|
189
189
|
*/
|
|
190
190
|
async acquireLease(licenseKey) {
|
|
191
|
-
const machineId = await
|
|
191
|
+
const machineId = await marks.generateMachineId();
|
|
192
192
|
try {
|
|
193
193
|
const response = await fetch(`${this.serverUrl}/floating/acquire`, {
|
|
194
194
|
method: "POST",
|
|
@@ -1814,8 +1814,8 @@ function useActivationWizard(config) {
|
|
|
1814
1814
|
}));
|
|
1815
1815
|
return;
|
|
1816
1816
|
}
|
|
1817
|
-
const fingerprintData = await
|
|
1818
|
-
const machineId = await
|
|
1817
|
+
const fingerprintData = await marks.generateFingerprint();
|
|
1818
|
+
const machineId = await marks.generateMachineId();
|
|
1819
1819
|
const machineName = state.machineName || await getDefaultMachineName();
|
|
1820
1820
|
setState((s) => ({
|
|
1821
1821
|
...s,
|
|
@@ -1890,7 +1890,7 @@ function useActivationWizard(config) {
|
|
|
1890
1890
|
return;
|
|
1891
1891
|
}
|
|
1892
1892
|
try {
|
|
1893
|
-
const machineId = state.machineId || await
|
|
1893
|
+
const machineId = state.machineId || await marks.generateMachineId();
|
|
1894
1894
|
const challenge = await service.getOfflineChallenge(state.licenseKey, machineId);
|
|
1895
1895
|
setState((s) => ({
|
|
1896
1896
|
...s,
|
|
@@ -1996,7 +1996,7 @@ const StepIndicator = ({ currentStep }) => {
|
|
|
1996
1996
|
"div",
|
|
1997
1997
|
{
|
|
1998
1998
|
className: `w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium ${index < currentIndex ? "bg-green-500 text-white" : index === currentIndex ? "bg-blue-500 text-white" : "bg-gray-200 text-gray-500"}`,
|
|
1999
|
-
children: index < currentIndex ? "
|
|
1999
|
+
children: index < currentIndex ? /* @__PURE__ */ jsxRuntime.jsx(marks.CheckMark, { style: { margin: "0 0 0.15em" } }) : index + 1
|
|
2000
2000
|
}
|
|
2001
2001
|
),
|
|
2002
2002
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs mt-1 text-gray-500", children: step.label })
|
|
@@ -2037,7 +2037,7 @@ const ActivationWizard = (props) => {
|
|
|
2037
2037
|
state.step !== "error" && /* @__PURE__ */ jsxRuntime.jsx(StepIndicator, { currentStep: state.step }),
|
|
2038
2038
|
state.step === "error" && state.error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
2039
2039
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-red-50 border border-red-200 rounded-lg p-6 text-center", children: [
|
|
2040
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-red-500 text-4xl mb-3", children: "
|
|
2040
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-red-500 text-4xl mb-3 font-bold", "aria-hidden": "true", children: "!" }),
|
|
2041
2041
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-red-800", children: "Activation Failed" }),
|
|
2042
2042
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-red-600 mt-2", children: state.error.message }),
|
|
2043
2043
|
state.error.supportRequired && config.supportEmail && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-gray-600 mt-4", children: [
|
|
@@ -2213,7 +2213,7 @@ const ActivationWizard = (props) => {
|
|
|
2213
2213
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-gray-500 mt-2", children: "Please wait while we activate your license" })
|
|
2214
2214
|
] }),
|
|
2215
2215
|
state.step === "success" && state.activatedLicense && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center space-y-6", children: [
|
|
2216
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-green-500 text-6xl", children:
|
|
2216
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-green-500 text-6xl", children: /* @__PURE__ */ jsxRuntime.jsx(marks.CheckMark, {}) }),
|
|
2217
2217
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2218
2218
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-bold text-gray-900", children: "License Activated!" }),
|
|
2219
2219
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-gray-600 mt-2", children: "Your license has been successfully activated on this machine." })
|
|
@@ -2640,15 +2640,12 @@ const LicenseTransfer = (props) => {
|
|
|
2640
2640
|
{
|
|
2641
2641
|
className: `mt-2 text-sm ${recipientValidation.valid ? "text-green-600" : "text-red-600"}`,
|
|
2642
2642
|
children: [
|
|
2643
|
-
recipientValidation.valid ? "
|
|
2643
|
+
recipientValidation.valid ? "Valid recipient" : "Invalid recipient",
|
|
2644
2644
|
recipientValidation.isExternal && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-orange-600", children: "(External organization)" })
|
|
2645
2645
|
]
|
|
2646
2646
|
}
|
|
2647
2647
|
),
|
|
2648
|
-
(_a = recipientValidation == null ? void 0 : recipientValidation.warnings) == null ? void 0 : _a.map((warning, i) => /* @__PURE__ */ jsxRuntime.
|
|
2649
|
-
"⚠ ",
|
|
2650
|
-
warning
|
|
2651
|
-
] }, i))
|
|
2648
|
+
(_a = recipientValidation == null ? void 0 : recipientValidation.warnings) == null ? void 0 : _a.map((warning, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-sm text-orange-600", children: warning }, i))
|
|
2652
2649
|
] }),
|
|
2653
2650
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2654
2651
|
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "Recipient Name" }),
|
|
@@ -2734,7 +2731,7 @@ const LicenseTransfer = (props) => {
|
|
|
2734
2731
|
] })
|
|
2735
2732
|
] }),
|
|
2736
2733
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 bg-orange-50 border border-orange-200 rounded-lg", children: [
|
|
2737
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-orange-800 mb-2", children: "
|
|
2734
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-orange-800 mb-2", children: "Important" }),
|
|
2738
2735
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-orange-700", children: "Once the transfer is completed, this license will be deactivated from all your machines and the new owner will need to activate it." })
|
|
2739
2736
|
] }),
|
|
2740
2737
|
/* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-start gap-3 cursor-pointer", children: [
|
|
@@ -2775,7 +2772,7 @@ const LicenseTransfer = (props) => {
|
|
|
2775
2772
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-gray-500", children: "Please wait while we process your transfer request" })
|
|
2776
2773
|
] }),
|
|
2777
2774
|
step === "complete" && transfer && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center space-y-6", children: [
|
|
2778
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-green-500 text-6xl", children:
|
|
2775
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-green-500 text-6xl", children: /* @__PURE__ */ jsxRuntime.jsx(marks.CheckMark, {}) }),
|
|
2779
2776
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2780
2777
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-bold", children: "Transfer Initiated" }),
|
|
2781
2778
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-gray-600 mt-2", children: transfer.approvalRequired ? "Your transfer request has been submitted for approval." : "An email has been sent to the recipient with instructions to accept the transfer." })
|
|
@@ -3331,7 +3328,7 @@ const UsageAnalyticsDashboard = (props) => {
|
|
|
3331
3328
|
onClick: () => refresh(),
|
|
3332
3329
|
className: "p-2 text-gray-500 hover:text-gray-700 rounded-lg hover:bg-gray-100",
|
|
3333
3330
|
title: "Refresh",
|
|
3334
|
-
children:
|
|
3331
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(marks.RefreshMark, {})
|
|
3335
3332
|
}
|
|
3336
3333
|
),
|
|
3337
3334
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3614,10 +3611,10 @@ class BuildLicenseValidator {
|
|
|
3614
3611
|
const prefix = "[nice2dev/license]";
|
|
3615
3612
|
switch (type) {
|
|
3616
3613
|
case "warn":
|
|
3617
|
-
console.warn(`${prefix}
|
|
3614
|
+
console.warn(`${prefix} warning: ${message}`);
|
|
3618
3615
|
break;
|
|
3619
3616
|
case "error":
|
|
3620
|
-
console.error(`${prefix}
|
|
3617
|
+
console.error(`${prefix} error: ${message}`);
|
|
3621
3618
|
break;
|
|
3622
3619
|
default:
|
|
3623
3620
|
console.log(`${prefix} ${message}`);
|
|
@@ -3712,12 +3709,12 @@ class BuildLicenseValidator {
|
|
|
3712
3709
|
this.validationResult = result;
|
|
3713
3710
|
return result;
|
|
3714
3711
|
}
|
|
3715
|
-
if (!
|
|
3712
|
+
if (!marks.validateKeyFormat(licenseKey)) {
|
|
3716
3713
|
result.errors.push("Invalid license key format.");
|
|
3717
3714
|
this.validationResult = result;
|
|
3718
3715
|
return result;
|
|
3719
3716
|
}
|
|
3720
|
-
const metadata =
|
|
3717
|
+
const metadata = marks.extractKeyMetadata(licenseKey);
|
|
3721
3718
|
result.licenseKey = licenseKey;
|
|
3722
3719
|
result.tier = metadata == null ? void 0 : metadata.tier;
|
|
3723
3720
|
let license = await this.validateOnline(licenseKey);
|
|
@@ -3731,7 +3728,7 @@ class BuildLicenseValidator {
|
|
|
3731
3728
|
this.log("Could not validate license online, using key metadata.", "warn");
|
|
3732
3729
|
result.warnings.push("License could not be validated online.");
|
|
3733
3730
|
if (this.config.requiredTier && (metadata == null ? void 0 : metadata.tier)) {
|
|
3734
|
-
if (!
|
|
3731
|
+
if (!marks.tierMeetsRequirement(metadata.tier, this.config.requiredTier)) {
|
|
3735
3732
|
result.errors.push(
|
|
3736
3733
|
`License tier "${metadata.tier}" does not meet required tier "${this.config.requiredTier}".`
|
|
3737
3734
|
);
|
|
@@ -3769,7 +3766,7 @@ class BuildLicenseValidator {
|
|
|
3769
3766
|
}
|
|
3770
3767
|
}
|
|
3771
3768
|
if (this.config.requiredTier) {
|
|
3772
|
-
if (!
|
|
3769
|
+
if (!marks.tierMeetsRequirement(license.tier, this.config.requiredTier)) {
|
|
3773
3770
|
result.errors.push(
|
|
3774
3771
|
`License tier "${license.tier}" does not meet required tier "${this.config.requiredTier}".`
|
|
3775
3772
|
);
|
|
@@ -3807,7 +3804,7 @@ class BuildLicenseValidator {
|
|
|
3807
3804
|
}
|
|
3808
3805
|
/** Check if tier meets requirement */
|
|
3809
3806
|
meetsTier(requiredTier) {
|
|
3810
|
-
return this.licenseInfo ?
|
|
3807
|
+
return this.licenseInfo ? marks.tierMeetsRequirement(this.licenseInfo.tier, requiredTier) : false;
|
|
3811
3808
|
}
|
|
3812
3809
|
}
|
|
3813
3810
|
class Nice2DevLicenseWebpackPlugin {
|
|
@@ -3823,9 +3820,9 @@ class Nice2DevLicenseWebpackPlugin {
|
|
|
3823
3820
|
}
|
|
3824
3821
|
const result = await this.validator.validate();
|
|
3825
3822
|
this.validated = true;
|
|
3826
|
-
result.warnings.forEach((w) => console.warn(`[nice2dev]
|
|
3823
|
+
result.warnings.forEach((w) => console.warn(`[nice2dev] warning: ${w}`));
|
|
3827
3824
|
if (result.errors.length > 0 && this.options.failOnInvalid !== false) {
|
|
3828
|
-
result.errors.forEach((e) => console.error(`[nice2dev]
|
|
3825
|
+
result.errors.forEach((e) => console.error(`[nice2dev] error: ${e}`));
|
|
3829
3826
|
throw new Error("License validation failed");
|
|
3830
3827
|
}
|
|
3831
3828
|
});
|
|
@@ -3941,7 +3938,7 @@ class CIOutputFormatter {
|
|
|
3941
3938
|
if (this.outputFormat === "json") {
|
|
3942
3939
|
return;
|
|
3943
3940
|
}
|
|
3944
|
-
console.log(
|
|
3941
|
+
console.log(`info: ${message}`);
|
|
3945
3942
|
}
|
|
3946
3943
|
success(message) {
|
|
3947
3944
|
if (this.outputFormat === "json") {
|
|
@@ -3955,7 +3952,7 @@ class CIOutputFormatter {
|
|
|
3955
3952
|
console.log(`##[section]${message}`);
|
|
3956
3953
|
break;
|
|
3957
3954
|
default:
|
|
3958
|
-
console.log(
|
|
3955
|
+
console.log(`ok: ${message}`);
|
|
3959
3956
|
}
|
|
3960
3957
|
}
|
|
3961
3958
|
warning(message) {
|
|
@@ -3973,7 +3970,7 @@ class CIOutputFormatter {
|
|
|
3973
3970
|
console.warn(`\x1B[33mWarning: ${message}\x1B[0m`);
|
|
3974
3971
|
break;
|
|
3975
3972
|
default:
|
|
3976
|
-
console.warn(
|
|
3973
|
+
console.warn(`warning: ${message}`);
|
|
3977
3974
|
}
|
|
3978
3975
|
}
|
|
3979
3976
|
error(message) {
|
|
@@ -3991,7 +3988,7 @@ class CIOutputFormatter {
|
|
|
3991
3988
|
console.error(`\x1B[31mError: ${message}\x1B[0m`);
|
|
3992
3989
|
break;
|
|
3993
3990
|
default:
|
|
3994
|
-
console.error(
|
|
3991
|
+
console.error(`error: ${message}`);
|
|
3995
3992
|
}
|
|
3996
3993
|
}
|
|
3997
3994
|
setOutput(name, value) {
|
|
@@ -4091,7 +4088,7 @@ async function runCILicenseCheck(options = {}) {
|
|
|
4091
4088
|
return result;
|
|
4092
4089
|
}
|
|
4093
4090
|
formatter.info(`Validating license: ${licenseKey.substring(0, 12)}...`);
|
|
4094
|
-
if (!
|
|
4091
|
+
if (!marks.validateKeyFormat(licenseKey)) {
|
|
4095
4092
|
const error = "Invalid license key format";
|
|
4096
4093
|
formatter.error(error);
|
|
4097
4094
|
result.errors.push(error);
|
|
@@ -4099,7 +4096,7 @@ async function runCILicenseCheck(options = {}) {
|
|
|
4099
4096
|
result.exitCode = 1;
|
|
4100
4097
|
return result;
|
|
4101
4098
|
}
|
|
4102
|
-
const metadata =
|
|
4099
|
+
const metadata = marks.extractKeyMetadata(licenseKey);
|
|
4103
4100
|
const license = {
|
|
4104
4101
|
key: licenseKey,
|
|
4105
4102
|
tier: (metadata == null ? void 0 : metadata.tier) || "trial",
|
|
@@ -4152,7 +4149,7 @@ async function runCILicenseCheck(options = {}) {
|
|
|
4152
4149
|
}
|
|
4153
4150
|
}
|
|
4154
4151
|
if (options.requiredTier) {
|
|
4155
|
-
if (!
|
|
4152
|
+
if (!marks.tierMeetsRequirement(license.tier, options.requiredTier)) {
|
|
4156
4153
|
const error = `License tier "${license.tier}" does not meet required tier "${options.requiredTier}"`;
|
|
4157
4154
|
formatter.error(error);
|
|
4158
4155
|
result.errors.push(error);
|
|
@@ -4254,43 +4251,43 @@ license-check:
|
|
|
4254
4251
|
`;
|
|
4255
4252
|
}
|
|
4256
4253
|
const VERSION = "1.1.0";
|
|
4257
|
-
exports.LicenseValidator =
|
|
4258
|
-
exports.checkFeatureAccess =
|
|
4259
|
-
exports.collectFingerprintData =
|
|
4260
|
-
exports.compareFingerprintsData =
|
|
4261
|
-
exports.compareTiers =
|
|
4262
|
-
exports.extractKeyMetadata =
|
|
4263
|
-
exports.generateFingerprint =
|
|
4264
|
-
exports.generateLicenseInfo =
|
|
4265
|
-
exports.generateLicenseKey =
|
|
4266
|
-
exports.generateMachineId =
|
|
4267
|
-
exports.getAllFeatures =
|
|
4268
|
-
exports.getAllPlans =
|
|
4269
|
-
exports.getAvailableFeatures =
|
|
4270
|
-
exports.getDefaultFeatures =
|
|
4271
|
-
exports.getDefaultMachines =
|
|
4272
|
-
exports.getDefaultSeats =
|
|
4273
|
-
exports.getFeature =
|
|
4274
|
-
exports.getFeaturesByCategory =
|
|
4275
|
-
exports.getMissingFeatures =
|
|
4276
|
-
exports.getOrGenerateFingerprint =
|
|
4277
|
-
exports.getPlan =
|
|
4278
|
-
exports.getStoredFingerprint =
|
|
4279
|
-
exports.getValidator =
|
|
4280
|
-
exports.hasFeature =
|
|
4281
|
-
exports.hasTier =
|
|
4282
|
-
exports.initializeDefaults =
|
|
4283
|
-
exports.isFeatureLicensed =
|
|
4284
|
-
exports.maskLicenseKey =
|
|
4285
|
-
exports.normalizeLicenseKey =
|
|
4286
|
-
exports.registerFeature =
|
|
4287
|
-
exports.registerFeatures =
|
|
4288
|
-
exports.registerPlan =
|
|
4289
|
-
exports.registerPlans =
|
|
4290
|
-
exports.storeFingerprint =
|
|
4291
|
-
exports.tierMeetsRequirement =
|
|
4292
|
-
exports.validateKeyFormat =
|
|
4293
|
-
exports.validateLicense =
|
|
4254
|
+
exports.LicenseValidator = marks.LicenseValidator;
|
|
4255
|
+
exports.checkFeatureAccess = marks.checkFeatureAccess;
|
|
4256
|
+
exports.collectFingerprintData = marks.collectFingerprintData;
|
|
4257
|
+
exports.compareFingerprintsData = marks.compareFingerprintsData;
|
|
4258
|
+
exports.compareTiers = marks.compareTiers;
|
|
4259
|
+
exports.extractKeyMetadata = marks.extractKeyMetadata;
|
|
4260
|
+
exports.generateFingerprint = marks.generateFingerprint;
|
|
4261
|
+
exports.generateLicenseInfo = marks.generateLicenseInfo;
|
|
4262
|
+
exports.generateLicenseKey = marks.generateLicenseKey;
|
|
4263
|
+
exports.generateMachineId = marks.generateMachineId;
|
|
4264
|
+
exports.getAllFeatures = marks.getAllFeatures;
|
|
4265
|
+
exports.getAllPlans = marks.getAllPlans;
|
|
4266
|
+
exports.getAvailableFeatures = marks.getAvailableFeatures;
|
|
4267
|
+
exports.getDefaultFeatures = marks.getDefaultFeatures;
|
|
4268
|
+
exports.getDefaultMachines = marks.getDefaultMachines;
|
|
4269
|
+
exports.getDefaultSeats = marks.getDefaultSeats;
|
|
4270
|
+
exports.getFeature = marks.getFeature;
|
|
4271
|
+
exports.getFeaturesByCategory = marks.getFeaturesByCategory;
|
|
4272
|
+
exports.getMissingFeatures = marks.getMissingFeatures;
|
|
4273
|
+
exports.getOrGenerateFingerprint = marks.getOrGenerateFingerprint;
|
|
4274
|
+
exports.getPlan = marks.getPlan;
|
|
4275
|
+
exports.getStoredFingerprint = marks.getStoredFingerprint;
|
|
4276
|
+
exports.getValidator = marks.getValidator;
|
|
4277
|
+
exports.hasFeature = marks.hasFeature;
|
|
4278
|
+
exports.hasTier = marks.hasTier;
|
|
4279
|
+
exports.initializeDefaults = marks.initializeDefaults;
|
|
4280
|
+
exports.isFeatureLicensed = marks.isFeatureLicensed;
|
|
4281
|
+
exports.maskLicenseKey = marks.maskLicenseKey;
|
|
4282
|
+
exports.normalizeLicenseKey = marks.normalizeLicenseKey;
|
|
4283
|
+
exports.registerFeature = marks.registerFeature;
|
|
4284
|
+
exports.registerFeatures = marks.registerFeatures;
|
|
4285
|
+
exports.registerPlan = marks.registerPlan;
|
|
4286
|
+
exports.registerPlans = marks.registerPlans;
|
|
4287
|
+
exports.storeFingerprint = marks.storeFingerprint;
|
|
4288
|
+
exports.tierMeetsRequirement = marks.tierMeetsRequirement;
|
|
4289
|
+
exports.validateKeyFormat = marks.validateKeyFormat;
|
|
4290
|
+
exports.validateLicense = marks.validateLicense;
|
|
4294
4291
|
exports.ActivationService = ActivationService;
|
|
4295
4292
|
exports.ActivationWizard = ActivationWizard;
|
|
4296
4293
|
exports.ApiRateLimiter = ApiRateLimiter;
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { g as generateMachineId, a as generateFingerprint, v as validateKeyFormat$1, e as extractKeyMetadata, t as tierMeetsRequirement } from "./
|
|
2
|
-
import { L, c, b, d, f, h, i, j, k, l, m, n, o, p, q, r, s, u, w, x, y, z, A, B,
|
|
1
|
+
import { g as generateMachineId, C as CheckMark, a as generateFingerprint, R as RefreshMark, v as validateKeyFormat$1, e as extractKeyMetadata, t as tierMeetsRequirement } from "./marks-KzIFNheE.js";
|
|
2
|
+
import { L, c, b, d, f, h, i, j, k, l, m, n, o, p, q, r, s, u, w, x, y, z, A, B, D, E, F, G, H, I, J, K } from "./marks-KzIFNheE.js";
|
|
3
3
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
4
4
|
import React, { useState, useCallback, useEffect, useMemo } from "react";
|
|
5
5
|
const HEARTBEAT_INTERVAL_MS = 5 * 60 * 1e3;
|
|
@@ -1995,7 +1995,7 @@ const StepIndicator = ({ currentStep }) => {
|
|
|
1995
1995
|
"div",
|
|
1996
1996
|
{
|
|
1997
1997
|
className: `w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium ${index < currentIndex ? "bg-green-500 text-white" : index === currentIndex ? "bg-blue-500 text-white" : "bg-gray-200 text-gray-500"}`,
|
|
1998
|
-
children: index < currentIndex ? "
|
|
1998
|
+
children: index < currentIndex ? /* @__PURE__ */ jsx(CheckMark, { style: { margin: "0 0 0.15em" } }) : index + 1
|
|
1999
1999
|
}
|
|
2000
2000
|
),
|
|
2001
2001
|
/* @__PURE__ */ jsx("span", { className: "text-xs mt-1 text-gray-500", children: step.label })
|
|
@@ -2036,7 +2036,7 @@ const ActivationWizard = (props) => {
|
|
|
2036
2036
|
state.step !== "error" && /* @__PURE__ */ jsx(StepIndicator, { currentStep: state.step }),
|
|
2037
2037
|
state.step === "error" && state.error && /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
2038
2038
|
/* @__PURE__ */ jsxs("div", { className: "bg-red-50 border border-red-200 rounded-lg p-6 text-center", children: [
|
|
2039
|
-
/* @__PURE__ */ jsx("div", { className: "text-red-500 text-4xl mb-3", children: "
|
|
2039
|
+
/* @__PURE__ */ jsx("div", { className: "text-red-500 text-4xl mb-3 font-bold", "aria-hidden": "true", children: "!" }),
|
|
2040
2040
|
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-red-800", children: "Activation Failed" }),
|
|
2041
2041
|
/* @__PURE__ */ jsx("p", { className: "text-red-600 mt-2", children: state.error.message }),
|
|
2042
2042
|
state.error.supportRequired && config.supportEmail && /* @__PURE__ */ jsxs("p", { className: "text-sm text-gray-600 mt-4", children: [
|
|
@@ -2212,7 +2212,7 @@ const ActivationWizard = (props) => {
|
|
|
2212
2212
|
/* @__PURE__ */ jsx("p", { className: "text-gray-500 mt-2", children: "Please wait while we activate your license" })
|
|
2213
2213
|
] }),
|
|
2214
2214
|
state.step === "success" && state.activatedLicense && /* @__PURE__ */ jsxs("div", { className: "text-center space-y-6", children: [
|
|
2215
|
-
/* @__PURE__ */ jsx("div", { className: "text-green-500 text-6xl", children:
|
|
2215
|
+
/* @__PURE__ */ jsx("div", { className: "text-green-500 text-6xl", children: /* @__PURE__ */ jsx(CheckMark, {}) }),
|
|
2216
2216
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
2217
2217
|
/* @__PURE__ */ jsx("h2", { className: "text-xl font-bold text-gray-900", children: "License Activated!" }),
|
|
2218
2218
|
/* @__PURE__ */ jsx("p", { className: "text-gray-600 mt-2", children: "Your license has been successfully activated on this machine." })
|
|
@@ -2639,15 +2639,12 @@ const LicenseTransfer = (props) => {
|
|
|
2639
2639
|
{
|
|
2640
2640
|
className: `mt-2 text-sm ${recipientValidation.valid ? "text-green-600" : "text-red-600"}`,
|
|
2641
2641
|
children: [
|
|
2642
|
-
recipientValidation.valid ? "
|
|
2642
|
+
recipientValidation.valid ? "Valid recipient" : "Invalid recipient",
|
|
2643
2643
|
recipientValidation.isExternal && /* @__PURE__ */ jsx("span", { className: "ml-2 text-orange-600", children: "(External organization)" })
|
|
2644
2644
|
]
|
|
2645
2645
|
}
|
|
2646
2646
|
),
|
|
2647
|
-
(_a = recipientValidation == null ? void 0 : recipientValidation.warnings) == null ? void 0 : _a.map((warning, i2) => /* @__PURE__ */
|
|
2648
|
-
"⚠ ",
|
|
2649
|
-
warning
|
|
2650
|
-
] }, i2))
|
|
2647
|
+
(_a = recipientValidation == null ? void 0 : recipientValidation.warnings) == null ? void 0 : _a.map((warning, i2) => /* @__PURE__ */ jsx("div", { className: "mt-1 text-sm text-orange-600", children: warning }, i2))
|
|
2651
2648
|
] }),
|
|
2652
2649
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
2653
2650
|
/* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "Recipient Name" }),
|
|
@@ -2733,7 +2730,7 @@ const LicenseTransfer = (props) => {
|
|
|
2733
2730
|
] })
|
|
2734
2731
|
] }),
|
|
2735
2732
|
/* @__PURE__ */ jsxs("div", { className: "p-4 bg-orange-50 border border-orange-200 rounded-lg", children: [
|
|
2736
|
-
/* @__PURE__ */ jsx("h3", { className: "font-semibold text-orange-800 mb-2", children: "
|
|
2733
|
+
/* @__PURE__ */ jsx("h3", { className: "font-semibold text-orange-800 mb-2", children: "Important" }),
|
|
2737
2734
|
/* @__PURE__ */ jsx("p", { className: "text-sm text-orange-700", children: "Once the transfer is completed, this license will be deactivated from all your machines and the new owner will need to activate it." })
|
|
2738
2735
|
] }),
|
|
2739
2736
|
/* @__PURE__ */ jsxs("label", { className: "flex items-start gap-3 cursor-pointer", children: [
|
|
@@ -2774,7 +2771,7 @@ const LicenseTransfer = (props) => {
|
|
|
2774
2771
|
/* @__PURE__ */ jsx("p", { className: "text-gray-500", children: "Please wait while we process your transfer request" })
|
|
2775
2772
|
] }),
|
|
2776
2773
|
step === "complete" && transfer && /* @__PURE__ */ jsxs("div", { className: "text-center space-y-6", children: [
|
|
2777
|
-
/* @__PURE__ */ jsx("div", { className: "text-green-500 text-6xl", children:
|
|
2774
|
+
/* @__PURE__ */ jsx("div", { className: "text-green-500 text-6xl", children: /* @__PURE__ */ jsx(CheckMark, {}) }),
|
|
2778
2775
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
2779
2776
|
/* @__PURE__ */ jsx("h2", { className: "text-xl font-bold", children: "Transfer Initiated" }),
|
|
2780
2777
|
/* @__PURE__ */ jsx("p", { className: "text-gray-600 mt-2", children: transfer.approvalRequired ? "Your transfer request has been submitted for approval." : "An email has been sent to the recipient with instructions to accept the transfer." })
|
|
@@ -3330,7 +3327,7 @@ const UsageAnalyticsDashboard = (props) => {
|
|
|
3330
3327
|
onClick: () => refresh(),
|
|
3331
3328
|
className: "p-2 text-gray-500 hover:text-gray-700 rounded-lg hover:bg-gray-100",
|
|
3332
3329
|
title: "Refresh",
|
|
3333
|
-
children:
|
|
3330
|
+
children: /* @__PURE__ */ jsx(RefreshMark, {})
|
|
3334
3331
|
}
|
|
3335
3332
|
),
|
|
3336
3333
|
/* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsx(
|
|
@@ -3613,10 +3610,10 @@ class BuildLicenseValidator {
|
|
|
3613
3610
|
const prefix = "[nice2dev/license]";
|
|
3614
3611
|
switch (type) {
|
|
3615
3612
|
case "warn":
|
|
3616
|
-
console.warn(`${prefix}
|
|
3613
|
+
console.warn(`${prefix} warning: ${message}`);
|
|
3617
3614
|
break;
|
|
3618
3615
|
case "error":
|
|
3619
|
-
console.error(`${prefix}
|
|
3616
|
+
console.error(`${prefix} error: ${message}`);
|
|
3620
3617
|
break;
|
|
3621
3618
|
default:
|
|
3622
3619
|
console.log(`${prefix} ${message}`);
|
|
@@ -3822,9 +3819,9 @@ class Nice2DevLicenseWebpackPlugin {
|
|
|
3822
3819
|
}
|
|
3823
3820
|
const result = await this.validator.validate();
|
|
3824
3821
|
this.validated = true;
|
|
3825
|
-
result.warnings.forEach((w2) => console.warn(`[nice2dev]
|
|
3822
|
+
result.warnings.forEach((w2) => console.warn(`[nice2dev] warning: ${w2}`));
|
|
3826
3823
|
if (result.errors.length > 0 && this.options.failOnInvalid !== false) {
|
|
3827
|
-
result.errors.forEach((e) => console.error(`[nice2dev]
|
|
3824
|
+
result.errors.forEach((e) => console.error(`[nice2dev] error: ${e}`));
|
|
3828
3825
|
throw new Error("License validation failed");
|
|
3829
3826
|
}
|
|
3830
3827
|
});
|
|
@@ -3940,7 +3937,7 @@ class CIOutputFormatter {
|
|
|
3940
3937
|
if (this.outputFormat === "json") {
|
|
3941
3938
|
return;
|
|
3942
3939
|
}
|
|
3943
|
-
console.log(
|
|
3940
|
+
console.log(`info: ${message}`);
|
|
3944
3941
|
}
|
|
3945
3942
|
success(message) {
|
|
3946
3943
|
if (this.outputFormat === "json") {
|
|
@@ -3954,7 +3951,7 @@ class CIOutputFormatter {
|
|
|
3954
3951
|
console.log(`##[section]${message}`);
|
|
3955
3952
|
break;
|
|
3956
3953
|
default:
|
|
3957
|
-
console.log(
|
|
3954
|
+
console.log(`ok: ${message}`);
|
|
3958
3955
|
}
|
|
3959
3956
|
}
|
|
3960
3957
|
warning(message) {
|
|
@@ -3972,7 +3969,7 @@ class CIOutputFormatter {
|
|
|
3972
3969
|
console.warn(`\x1B[33mWarning: ${message}\x1B[0m`);
|
|
3973
3970
|
break;
|
|
3974
3971
|
default:
|
|
3975
|
-
console.warn(
|
|
3972
|
+
console.warn(`warning: ${message}`);
|
|
3976
3973
|
}
|
|
3977
3974
|
}
|
|
3978
3975
|
error(message) {
|
|
@@ -3990,7 +3987,7 @@ class CIOutputFormatter {
|
|
|
3990
3987
|
console.error(`\x1B[31mError: ${message}\x1B[0m`);
|
|
3991
3988
|
break;
|
|
3992
3989
|
default:
|
|
3993
|
-
console.error(
|
|
3990
|
+
console.error(`error: ${message}`);
|
|
3994
3991
|
}
|
|
3995
3992
|
}
|
|
3996
3993
|
setOutput(name, value) {
|
|
@@ -4332,23 +4329,23 @@ export {
|
|
|
4332
4329
|
B as isFeatureLicensed,
|
|
4333
4330
|
isForkPR,
|
|
4334
4331
|
isModuleAccessible,
|
|
4335
|
-
|
|
4332
|
+
D as maskLicenseKey,
|
|
4336
4333
|
nice2devLicenseRollupPlugin,
|
|
4337
4334
|
nice2devLicenseVitePlugin,
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4335
|
+
E as normalizeLicenseKey,
|
|
4336
|
+
F as registerFeature,
|
|
4337
|
+
G as registerFeatures,
|
|
4338
|
+
H as registerPlan,
|
|
4339
|
+
I as registerPlans,
|
|
4343
4340
|
registerProtectedModule,
|
|
4344
4341
|
registerProtectedModules,
|
|
4345
4342
|
runCILicenseCheck,
|
|
4346
|
-
|
|
4343
|
+
J as storeFingerprint,
|
|
4347
4344
|
tierMeetsRequirement,
|
|
4348
4345
|
useActivationWizard,
|
|
4349
4346
|
useLicensePortal,
|
|
4350
4347
|
useLicenseTransfer,
|
|
4351
4348
|
useUsageAnalytics,
|
|
4352
4349
|
validateKeyFormat$1 as validateKeyFormat,
|
|
4353
|
-
|
|
4350
|
+
K as validateLicense
|
|
4354
4351
|
};
|