Files
SnapOtter/packages/enterprise/src/index.ts
T
SnapOtter 3b84fab765 feat: add enterprise licensing and S3 storage backend
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.
2026-06-06 20:17:49 +08:00

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 };