1.98.1
This commit is contained in:
commit
2b9cb0a254
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/n8n*
|
||||||
66
build.sh
Executable file
66
build.sh
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
VERSION=1.98.1
|
||||||
|
|
||||||
|
REPO_DIR="n8n-$VERSION"
|
||||||
|
|
||||||
|
if [ -d "$REPO_DIR" ]; then
|
||||||
|
echo "---- Removing old directory of $VERSION ----"
|
||||||
|
rm -Rf $REPO_DIR
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "---- Cloning n8n for version $VERSION ----"
|
||||||
|
git -c advice.detachedHead=false clone --depth 1 --branch "n8n@$VERSION" --single-branch https://github.com/n8n-io/n8n.git $REPO_DIR
|
||||||
|
|
||||||
|
echo "---- Verifying patches for $VERSION ----"
|
||||||
|
cd $REPO_DIR
|
||||||
|
|
||||||
|
PATCH_VERSION=$VERSION
|
||||||
|
|
||||||
|
if [ ! -d "../patches/$PATCH_VERSION/" ]; then
|
||||||
|
echo " Direct patches for $PATCH_VERSION couldn't be found trying default patches"
|
||||||
|
PATCH_VERSION="default"
|
||||||
|
fi
|
||||||
|
|
||||||
|
has_patch_error=0
|
||||||
|
for patch_filename in ../patches/$PATCH_VERSION/*.patch; do
|
||||||
|
git apply --check $patch_filename;
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo " - Dryrun for \"$patch_filename\" successful"
|
||||||
|
else
|
||||||
|
echo " - Dryrun for \"$patch_filename\" was unsuccessful, please check the patch file"
|
||||||
|
has_patch_error=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $has_patch_error -ne 0 ]; then
|
||||||
|
echo " Found error while patching. Exiting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for patch_filename in ../patches/$PATCH_VERSION/*.patch; do
|
||||||
|
echo " - Applying \"$patch_filename\""
|
||||||
|
git apply --whitespace=nowarn $patch_filename;
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
echo "---- Building base image for $VERSION ----"
|
||||||
|
|
||||||
|
docker image rm n8n-license-patched-base:22 2>/dev/null
|
||||||
|
docker build -t n8n-license-patched-base:22 -f docker/images/n8n-base/Dockerfile .
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Build unsuccessful. Exiting"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "---- Patching and building main image for $VERSION ----"
|
||||||
|
|
||||||
|
sed -i 's/n8nio\/base/n8n-license-patched-base/g' docker/images/n8n/Dockerfile
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Base image tag patch unsuccessful. Exiting"
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker image rm n8n-license-patched:$VERSION 2>/dev/null
|
||||||
|
docker build -t n8n-license-patched:$VERSION -f docker/images/n8n/Dockerfile .
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Build unsuccessful. Exiting"
|
||||||
|
fi
|
||||||
|
|
||||||
28
patches/1.98.1/config.test.ts.patch
Normal file
28
patches/1.98.1/config.test.ts.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
diff --git a/packages/@n8n/config/test/config.test.ts b/packages/@n8n/config/test/config.test.ts
|
||||||
|
index bea302dbb..394e12a28 100644
|
||||||
|
--- a/packages/@n8n/config/test/config.test.ts
|
||||||
|
+++ b/packages/@n8n/config/test/config.test.ts
|
||||||
|
@@ -263,7 +263,7 @@ describe('GlobalConfig', () => {
|
||||||
|
gracefulShutdownTimeout: 30,
|
||||||
|
},
|
||||||
|
license: {
|
||||||
|
- serverUrl: 'https://license.n8n.io/v1',
|
||||||
|
+ serverUrl: 'https://0.0.0.0',
|
||||||
|
autoRenewalEnabled: true,
|
||||||
|
detachFloatingOnShutdown: true,
|
||||||
|
activationKey: '',
|
||||||
|
@@ -289,11 +289,11 @@ describe('GlobalConfig', () => {
|
||||||
|
},
|
||||||
|
diagnostics: {
|
||||||
|
enabled: true,
|
||||||
|
- frontendConfig: '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://telemetry.n8n.io',
|
||||||
|
- backendConfig: '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://telemetry.n8n.io',
|
||||||
|
+ frontendConfig: '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://0.0.0.0',
|
||||||
|
+ backendConfig: '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://0.0.0.0',
|
||||||
|
posthogConfig: {
|
||||||
|
apiKey: 'phc_4URIAm1uYfJO7j8kWSe0J8lc8IqnstRLS7Jx8NcakHo',
|
||||||
|
- apiHost: 'https://ph.n8n.io',
|
||||||
|
+ apiHost: 'https://0.0.0.0',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
aiAssistant: {
|
||||||
31
patches/1.98.1/diagnostics.config.ts.patch
Normal file
31
patches/1.98.1/diagnostics.config.ts.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
diff --git a/packages/@n8n/config/src/configs/diagnostics.config.ts b/packages/@n8n/config/src/configs/diagnostics.config.ts
|
||||||
|
index 5ff6abf83..c89777372 100644
|
||||||
|
--- a/packages/@n8n/config/src/configs/diagnostics.config.ts
|
||||||
|
+++ b/packages/@n8n/config/src/configs/diagnostics.config.ts
|
||||||
|
@@ -8,22 +8,22 @@ class PostHogConfig {
|
||||||
|
|
||||||
|
/** API host for PostHog. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_POSTHOG_API_HOST')
|
||||||
|
- apiHost: string = 'https://ph.n8n.io';
|
||||||
|
+ apiHost: string = 'https://0.0.0.0';
|
||||||
|
}
|
||||||
|
|
||||||
|
@Config
|
||||||
|
export class DiagnosticsConfig {
|
||||||
|
/** Whether diagnostics are enabled. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_ENABLED')
|
||||||
|
- enabled: boolean = true;
|
||||||
|
+ enabled: boolean = false;
|
||||||
|
|
||||||
|
/** Diagnostics config for frontend. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_CONFIG_FRONTEND')
|
||||||
|
- frontendConfig: string = '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://telemetry.n8n.io';
|
||||||
|
+ frontendConfig: string = '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://0.0.0.0';
|
||||||
|
|
||||||
|
/** Diagnostics config for backend. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_CONFIG_BACKEND')
|
||||||
|
- backendConfig: string = '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://telemetry.n8n.io';
|
||||||
|
+ backendConfig: string = '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://0.0.0.0';
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
posthogConfig: PostHogConfig;
|
||||||
40
patches/1.98.1/license-state.ts.patch
Normal file
40
patches/1.98.1/license-state.ts.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
diff --git a/packages/@n8n/backend-common/src/license-state.ts b/packages/@n8n/backend-common/src/license-state.ts
|
||||||
|
index b2ad56f84..4db90066e 100644
|
||||||
|
--- a/packages/@n8n/backend-common/src/license-state.ts
|
||||||
|
+++ b/packages/@n8n/backend-common/src/license-state.ts
|
||||||
|
@@ -4,6 +4,8 @@ import { UnexpectedError } from 'n8n-workflow';
|
||||||
|
|
||||||
|
import type { FeatureReturnType, LicenseProvider } from './types';
|
||||||
|
|
||||||
|
+import { LICENSE_FEATURES, LICENSE_QUOTAS } from '@n8n/constants';
|
||||||
|
+
|
||||||
|
class ProviderNotSetError extends UnexpectedError {
|
||||||
|
constructor() {
|
||||||
|
super('Cannot query license state because license provider has not been set');
|
||||||
|
@@ -27,15 +29,20 @@ export class LicenseState {
|
||||||
|
// --------------------
|
||||||
|
|
||||||
|
isLicensed(feature: BooleanLicenseFeature) {
|
||||||
|
- this.assertProvider();
|
||||||
|
-
|
||||||
|
- return this.licenseProvider.isLicensed(feature);
|
||||||
|
+ if(feature == "feat:showNonProdBanner") { return false; }
|
||||||
|
+ if(feature == "feat:apiDisabled") { return false; }
|
||||||
|
+ return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
getValue<T extends keyof FeatureReturnType>(feature: T): FeatureReturnType[T] {
|
||||||
|
- this.assertProvider();
|
||||||
|
-
|
||||||
|
- return this.licenseProvider.getValue(feature);
|
||||||
|
+ if(feature == "planName") { return "PatchedLicenseCheck" as FeatureReturnType[T]; }
|
||||||
|
+ if(feature in LICENSE_FEATURES || feature.startsWith("feat:")) {
|
||||||
|
+ return this.isLicensed(feature as BooleanLicenseFeature) as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ if(feature in LICENSE_QUOTAS || feature.startsWith("quota:")) {
|
||||||
|
+ return UNLIMITED_LICENSE_QUOTA as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------
|
||||||
18
patches/1.98.1/license.config.ts.patch
Normal file
18
patches/1.98.1/license.config.ts.patch
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
diff --git a/packages/@n8n/config/src/configs/license.config.ts b/packages/@n8n/config/src/configs/license.config.ts
|
||||||
|
index 005b5f5dc..b513fb6a2 100644
|
||||||
|
--- a/packages/@n8n/config/src/configs/license.config.ts
|
||||||
|
+++ b/packages/@n8n/config/src/configs/license.config.ts
|
||||||
|
@@ -4,11 +4,11 @@ import { Config, Env } from '../decorators';
|
||||||
|
export class LicenseConfig {
|
||||||
|
/** License server URL to retrieve license. */
|
||||||
|
@Env('N8N_LICENSE_SERVER_URL')
|
||||||
|
- serverUrl: string = 'https://license.n8n.io/v1';
|
||||||
|
+ serverUrl: string = 'https://0.0.0.0/';
|
||||||
|
|
||||||
|
/** Whether autorenewal for licenses is enabled. */
|
||||||
|
@Env('N8N_LICENSE_AUTO_RENEW_ENABLED')
|
||||||
|
- autoRenewalEnabled: boolean = true;
|
||||||
|
+ autoRenewalEnabled: boolean = false;
|
||||||
|
|
||||||
|
/** Activation key to initialize license. */
|
||||||
|
@Env('N8N_LICENSE_ACTIVATION_KEY')
|
||||||
66
patches/1.98.1/license.ts.patch
Normal file
66
patches/1.98.1/license.ts.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
diff --git a/packages/cli/src/license.ts b/packages/cli/src/license.ts
|
||||||
|
index eec82fe9e..2dd0429e3 100644
|
||||||
|
--- a/packages/cli/src/license.ts
|
||||||
|
+++ b/packages/cli/src/license.ts
|
||||||
|
@@ -89,34 +89,6 @@ export class License implements LicenseProvider {
|
||||||
|
this.logger.warn(LICENSE_RENEWAL_DISABLED_WARNING);
|
||||||
|
}
|
||||||
|
|
||||||
|
- try {
|
||||||
|
- this.manager = new LicenseManager({
|
||||||
|
- server,
|
||||||
|
- tenantId: this.globalConfig.license.tenantId,
|
||||||
|
- productIdentifier: `n8n-${N8N_VERSION}`,
|
||||||
|
- autoRenewEnabled: shouldRenew,
|
||||||
|
- renewOnInit: shouldRenew,
|
||||||
|
- autoRenewOffset,
|
||||||
|
- detachFloatingOnShutdown: this.globalConfig.license.detachFloatingOnShutdown,
|
||||||
|
- offlineMode,
|
||||||
|
- logger: this.logger,
|
||||||
|
- loadCertStr: async () => await this.loadCertStr(),
|
||||||
|
- saveCertStr,
|
||||||
|
- deviceFingerprint: () => this.instanceSettings.instanceId,
|
||||||
|
- collectUsageMetrics,
|
||||||
|
- collectPassthroughData,
|
||||||
|
- onFeatureChange,
|
||||||
|
- onLicenseRenewed,
|
||||||
|
- });
|
||||||
|
-
|
||||||
|
- await this.manager.initialize();
|
||||||
|
-
|
||||||
|
- this.logger.debug('License initialized');
|
||||||
|
- } catch (error: unknown) {
|
||||||
|
- if (error instanceof Error) {
|
||||||
|
- this.logger.error('Could not initialize license manager sdk', { error });
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
|
||||||
|
async loadCertStr(): Promise<TLicenseBlock> {
|
||||||
|
@@ -213,7 +185,9 @@ export class License implements LicenseProvider {
|
||||||
|
}
|
||||||
|
|
||||||
|
isLicensed(feature: BooleanLicenseFeature) {
|
||||||
|
- return this.manager?.hasFeatureEnabled(feature) ?? false;
|
||||||
|
+ if(feature == "feat:showNonProdBanner") { return false; }
|
||||||
|
+ if(feature == "feat:apiDisabled") { return false; }
|
||||||
|
+ return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use `LicenseState.isSharingLicensed` instead. */
|
||||||
|
@@ -341,7 +315,14 @@ export class License implements LicenseProvider {
|
||||||
|
}
|
||||||
|
|
||||||
|
getValue<T extends keyof FeatureReturnType>(feature: T): FeatureReturnType[T] {
|
||||||
|
- return this.manager?.getFeatureValue(feature) as FeatureReturnType[T];
|
||||||
|
+ if(feature == "planName") { return "PatchedLicenseCheck" as FeatureReturnType[T]; }
|
||||||
|
+ if(feature in LICENSE_FEATURES || feature.startsWith("feat:")) {
|
||||||
|
+ return this.isLicensed(feature as BooleanLicenseFeature) as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ if(feature in LICENSE_QUOTAS || feature.startsWith("quota:")) {
|
||||||
|
+ return UNLIMITED_LICENSE_QUOTA as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
getManagementJwt(): string {
|
||||||
28
patches/default/config.test.ts.patch
Normal file
28
patches/default/config.test.ts.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
diff --git a/packages/@n8n/config/test/config.test.ts b/packages/@n8n/config/test/config.test.ts
|
||||||
|
index bea302dbb..394e12a28 100644
|
||||||
|
--- a/packages/@n8n/config/test/config.test.ts
|
||||||
|
+++ b/packages/@n8n/config/test/config.test.ts
|
||||||
|
@@ -263,7 +263,7 @@ describe('GlobalConfig', () => {
|
||||||
|
gracefulShutdownTimeout: 30,
|
||||||
|
},
|
||||||
|
license: {
|
||||||
|
- serverUrl: 'https://license.n8n.io/v1',
|
||||||
|
+ serverUrl: 'https://0.0.0.0',
|
||||||
|
autoRenewalEnabled: true,
|
||||||
|
detachFloatingOnShutdown: true,
|
||||||
|
activationKey: '',
|
||||||
|
@@ -289,11 +289,11 @@ describe('GlobalConfig', () => {
|
||||||
|
},
|
||||||
|
diagnostics: {
|
||||||
|
enabled: true,
|
||||||
|
- frontendConfig: '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://telemetry.n8n.io',
|
||||||
|
- backendConfig: '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://telemetry.n8n.io',
|
||||||
|
+ frontendConfig: '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://0.0.0.0',
|
||||||
|
+ backendConfig: '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://0.0.0.0',
|
||||||
|
posthogConfig: {
|
||||||
|
apiKey: 'phc_4URIAm1uYfJO7j8kWSe0J8lc8IqnstRLS7Jx8NcakHo',
|
||||||
|
- apiHost: 'https://ph.n8n.io',
|
||||||
|
+ apiHost: 'https://0.0.0.0',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
aiAssistant: {
|
||||||
31
patches/default/diagnostics.config.ts.patch
Normal file
31
patches/default/diagnostics.config.ts.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
diff --git a/packages/@n8n/config/src/configs/diagnostics.config.ts b/packages/@n8n/config/src/configs/diagnostics.config.ts
|
||||||
|
index 5ff6abf83..c89777372 100644
|
||||||
|
--- a/packages/@n8n/config/src/configs/diagnostics.config.ts
|
||||||
|
+++ b/packages/@n8n/config/src/configs/diagnostics.config.ts
|
||||||
|
@@ -8,22 +8,22 @@ class PostHogConfig {
|
||||||
|
|
||||||
|
/** API host for PostHog. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_POSTHOG_API_HOST')
|
||||||
|
- apiHost: string = 'https://ph.n8n.io';
|
||||||
|
+ apiHost: string = 'https://0.0.0.0';
|
||||||
|
}
|
||||||
|
|
||||||
|
@Config
|
||||||
|
export class DiagnosticsConfig {
|
||||||
|
/** Whether diagnostics are enabled. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_ENABLED')
|
||||||
|
- enabled: boolean = true;
|
||||||
|
+ enabled: boolean = false;
|
||||||
|
|
||||||
|
/** Diagnostics config for frontend. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_CONFIG_FRONTEND')
|
||||||
|
- frontendConfig: string = '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://telemetry.n8n.io';
|
||||||
|
+ frontendConfig: string = '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://0.0.0.0';
|
||||||
|
|
||||||
|
/** Diagnostics config for backend. */
|
||||||
|
@Env('N8N_DIAGNOSTICS_CONFIG_BACKEND')
|
||||||
|
- backendConfig: string = '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://telemetry.n8n.io';
|
||||||
|
+ backendConfig: string = '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://0.0.0.0';
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
posthogConfig: PostHogConfig;
|
||||||
40
patches/default/license-state.ts.patch
Normal file
40
patches/default/license-state.ts.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
diff --git a/packages/@n8n/backend-common/src/license-state.ts b/packages/@n8n/backend-common/src/license-state.ts
|
||||||
|
index b2ad56f84..4db90066e 100644
|
||||||
|
--- a/packages/@n8n/backend-common/src/license-state.ts
|
||||||
|
+++ b/packages/@n8n/backend-common/src/license-state.ts
|
||||||
|
@@ -4,6 +4,8 @@ import { UnexpectedError } from 'n8n-workflow';
|
||||||
|
|
||||||
|
import type { FeatureReturnType, LicenseProvider } from './types';
|
||||||
|
|
||||||
|
+import { LICENSE_FEATURES, LICENSE_QUOTAS } from '@n8n/constants';
|
||||||
|
+
|
||||||
|
class ProviderNotSetError extends UnexpectedError {
|
||||||
|
constructor() {
|
||||||
|
super('Cannot query license state because license provider has not been set');
|
||||||
|
@@ -27,15 +29,20 @@ export class LicenseState {
|
||||||
|
// --------------------
|
||||||
|
|
||||||
|
isLicensed(feature: BooleanLicenseFeature) {
|
||||||
|
- this.assertProvider();
|
||||||
|
-
|
||||||
|
- return this.licenseProvider.isLicensed(feature);
|
||||||
|
+ if(feature == "feat:showNonProdBanner") { return false; }
|
||||||
|
+ if(feature == "feat:apiDisabled") { return false; }
|
||||||
|
+ return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
getValue<T extends keyof FeatureReturnType>(feature: T): FeatureReturnType[T] {
|
||||||
|
- this.assertProvider();
|
||||||
|
-
|
||||||
|
- return this.licenseProvider.getValue(feature);
|
||||||
|
+ if(feature == "planName") { return "PatchedLicenseCheck" as FeatureReturnType[T]; }
|
||||||
|
+ if(feature in LICENSE_FEATURES || feature.startsWith("feat:")) {
|
||||||
|
+ return this.isLicensed(feature as BooleanLicenseFeature) as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ if(feature in LICENSE_QUOTAS || feature.startsWith("quota:")) {
|
||||||
|
+ return UNLIMITED_LICENSE_QUOTA as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------
|
||||||
18
patches/default/license.config.ts.patch
Normal file
18
patches/default/license.config.ts.patch
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
diff --git a/packages/@n8n/config/src/configs/license.config.ts b/packages/@n8n/config/src/configs/license.config.ts
|
||||||
|
index 005b5f5dc..b513fb6a2 100644
|
||||||
|
--- a/packages/@n8n/config/src/configs/license.config.ts
|
||||||
|
+++ b/packages/@n8n/config/src/configs/license.config.ts
|
||||||
|
@@ -4,11 +4,11 @@ import { Config, Env } from '../decorators';
|
||||||
|
export class LicenseConfig {
|
||||||
|
/** License server URL to retrieve license. */
|
||||||
|
@Env('N8N_LICENSE_SERVER_URL')
|
||||||
|
- serverUrl: string = 'https://license.n8n.io/v1';
|
||||||
|
+ serverUrl: string = 'https://0.0.0.0/';
|
||||||
|
|
||||||
|
/** Whether autorenewal for licenses is enabled. */
|
||||||
|
@Env('N8N_LICENSE_AUTO_RENEW_ENABLED')
|
||||||
|
- autoRenewalEnabled: boolean = true;
|
||||||
|
+ autoRenewalEnabled: boolean = false;
|
||||||
|
|
||||||
|
/** Activation key to initialize license. */
|
||||||
|
@Env('N8N_LICENSE_ACTIVATION_KEY')
|
||||||
66
patches/default/license.ts.patch
Normal file
66
patches/default/license.ts.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
diff --git a/packages/cli/src/license.ts b/packages/cli/src/license.ts
|
||||||
|
index eec82fe9e..2dd0429e3 100644
|
||||||
|
--- a/packages/cli/src/license.ts
|
||||||
|
+++ b/packages/cli/src/license.ts
|
||||||
|
@@ -89,34 +89,6 @@ export class License implements LicenseProvider {
|
||||||
|
this.logger.warn(LICENSE_RENEWAL_DISABLED_WARNING);
|
||||||
|
}
|
||||||
|
|
||||||
|
- try {
|
||||||
|
- this.manager = new LicenseManager({
|
||||||
|
- server,
|
||||||
|
- tenantId: this.globalConfig.license.tenantId,
|
||||||
|
- productIdentifier: `n8n-${N8N_VERSION}`,
|
||||||
|
- autoRenewEnabled: shouldRenew,
|
||||||
|
- renewOnInit: shouldRenew,
|
||||||
|
- autoRenewOffset,
|
||||||
|
- detachFloatingOnShutdown: this.globalConfig.license.detachFloatingOnShutdown,
|
||||||
|
- offlineMode,
|
||||||
|
- logger: this.logger,
|
||||||
|
- loadCertStr: async () => await this.loadCertStr(),
|
||||||
|
- saveCertStr,
|
||||||
|
- deviceFingerprint: () => this.instanceSettings.instanceId,
|
||||||
|
- collectUsageMetrics,
|
||||||
|
- collectPassthroughData,
|
||||||
|
- onFeatureChange,
|
||||||
|
- onLicenseRenewed,
|
||||||
|
- });
|
||||||
|
-
|
||||||
|
- await this.manager.initialize();
|
||||||
|
-
|
||||||
|
- this.logger.debug('License initialized');
|
||||||
|
- } catch (error: unknown) {
|
||||||
|
- if (error instanceof Error) {
|
||||||
|
- this.logger.error('Could not initialize license manager sdk', { error });
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
|
||||||
|
async loadCertStr(): Promise<TLicenseBlock> {
|
||||||
|
@@ -213,7 +185,9 @@ export class License implements LicenseProvider {
|
||||||
|
}
|
||||||
|
|
||||||
|
isLicensed(feature: BooleanLicenseFeature) {
|
||||||
|
- return this.manager?.hasFeatureEnabled(feature) ?? false;
|
||||||
|
+ if(feature == "feat:showNonProdBanner") { return false; }
|
||||||
|
+ if(feature == "feat:apiDisabled") { return false; }
|
||||||
|
+ return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use `LicenseState.isSharingLicensed` instead. */
|
||||||
|
@@ -341,7 +315,14 @@ export class License implements LicenseProvider {
|
||||||
|
}
|
||||||
|
|
||||||
|
getValue<T extends keyof FeatureReturnType>(feature: T): FeatureReturnType[T] {
|
||||||
|
- return this.manager?.getFeatureValue(feature) as FeatureReturnType[T];
|
||||||
|
+ if(feature == "planName") { return "PatchedLicenseCheck" as FeatureReturnType[T]; }
|
||||||
|
+ if(feature in LICENSE_FEATURES || feature.startsWith("feat:")) {
|
||||||
|
+ return this.isLicensed(feature as BooleanLicenseFeature) as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ if(feature in LICENSE_QUOTAS || feature.startsWith("quota:")) {
|
||||||
|
+ return UNLIMITED_LICENSE_QUOTA as FeatureReturnType[T];
|
||||||
|
+ }
|
||||||
|
+ return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
getManagementJwt(): string {
|
||||||
Loading…
Reference in New Issue
Block a user