mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
Add the enterprise package with Ed25519 license key validation and feature gating. Enterprise code lives in the public repo under a proprietary license (Cal.com/PostHog model), protected legally, not by code hiding. Implement S3-compatible storage backend as the first enterprise feature. The file-storage module now delegates to either local filesystem or S3 based on STORAGE_MODE env var. Works with AWS S3, Cloudflare R2, DigitalOcean Spaces, MinIO, and any S3-compatible provider. Workspace files remain local (ephemeral processing). New env vars: STORAGE_MODE, S3_BUCKET, S3_REGION, S3_ENDPOINT, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_FORCE_PATH_STYLE, S3_PREFIX, SNAPOTTER_LICENSE_KEY. Tested against MinIO: 10 S3 integration tests + 82 existing tests pass with zero regressions.
31 lines
809 B
TypeScript
31 lines
809 B
TypeScript
import {
|
|
ENTERPRISE_FEATURES,
|
|
type EnterpriseFeature,
|
|
type LicensePayload,
|
|
validateLicense,
|
|
} from "./license.js";
|
|
|
|
let activeLicense: LicensePayload | null = null;
|
|
|
|
export function initEnterprise(licenseKey: string | undefined): {
|
|
valid: boolean;
|
|
license: LicensePayload | null;
|
|
} {
|
|
if (!licenseKey) {
|
|
return { valid: false, license: null };
|
|
}
|
|
activeLicense = validateLicense(licenseKey);
|
|
return { valid: activeLicense !== null, license: activeLicense };
|
|
}
|
|
|
|
export function isFeatureEnabled(feature: EnterpriseFeature): boolean {
|
|
if (!activeLicense) return false;
|
|
return activeLicense.features.includes(feature);
|
|
}
|
|
|
|
export function getActiveLicense(): LicensePayload | null {
|
|
return activeLicense;
|
|
}
|
|
|
|
export { ENTERPRISE_FEATURES, type EnterpriseFeature, type LicensePayload };
|