faf-cli 2.3.5 → 2.4.0

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.
Files changed (67) hide show
  1. package/README.md +13 -2
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +128 -5
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/about.d.ts +10 -0
  6. package/dist/commands/about.d.ts.map +1 -0
  7. package/dist/commands/about.js +249 -0
  8. package/dist/commands/about.js.map +1 -0
  9. package/dist/commands/art.d.ts +10 -0
  10. package/dist/commands/art.d.ts.map +1 -0
  11. package/dist/commands/art.js +129 -0
  12. package/dist/commands/art.js.map +1 -0
  13. package/dist/commands/license-config.d.ts +10 -0
  14. package/dist/commands/license-config.d.ts.map +1 -0
  15. package/dist/commands/license-config.js +140 -0
  16. package/dist/commands/license-config.js.map +1 -0
  17. package/dist/commands/license.d.ts +7 -0
  18. package/dist/commands/license.d.ts.map +1 -0
  19. package/dist/commands/license.js +60 -0
  20. package/dist/commands/license.js.map +1 -0
  21. package/dist/commands/score-v3.d.ts.map +1 -1
  22. package/dist/commands/score-v3.js +14 -7
  23. package/dist/commands/score-v3.js.map +1 -1
  24. package/dist/commands/score.d.ts.map +1 -1
  25. package/dist/commands/score.js +30 -10
  26. package/dist/commands/score.js.map +1 -1
  27. package/dist/commands/submit-art.d.ts +25 -0
  28. package/dist/commands/submit-art.d.ts.map +1 -0
  29. package/dist/commands/submit-art.js +348 -0
  30. package/dist/commands/submit-art.js.map +1 -0
  31. package/dist/engine/engine-loader.d.ts +24 -0
  32. package/dist/engine/engine-loader.d.ts.map +1 -0
  33. package/dist/engine/engine-loader.js +156 -0
  34. package/dist/engine/engine-loader.js.map +1 -0
  35. package/dist/engine-bridge.d.ts +5 -5
  36. package/dist/engine-bridge.d.ts.map +1 -1
  37. package/dist/engine-bridge.js +20 -7
  38. package/dist/engine-bridge.js.map +1 -1
  39. package/dist/engine-mk2/mk2-core.d.ts +38 -0
  40. package/dist/engine-mk2/mk2-core.d.ts.map +1 -0
  41. package/dist/engine-mk2/mk2-core.js +217 -0
  42. package/dist/engine-mk2/mk2-core.js.map +1 -0
  43. package/dist/license/license-config.d.ts +59 -0
  44. package/dist/license/license-config.d.ts.map +1 -0
  45. package/dist/license/license-config.js +263 -0
  46. package/dist/license/license-config.js.map +1 -0
  47. package/dist/license/license-controller.d.ts +41 -0
  48. package/dist/license/license-controller.d.ts.map +1 -0
  49. package/dist/license/license-controller.js +243 -0
  50. package/dist/license/license-controller.js.map +1 -0
  51. package/dist/utils/art-gallery.d.ts +58 -0
  52. package/dist/utils/art-gallery.d.ts.map +1 -0
  53. package/dist/utils/art-gallery.js +275 -0
  54. package/dist/utils/art-gallery.js.map +1 -0
  55. package/dist/utils/championship-style.d.ts +1 -1
  56. package/dist/utils/championship-style.d.ts.map +1 -1
  57. package/dist/utils/championship-style.js +17 -13
  58. package/dist/utils/championship-style.js.map +1 -1
  59. package/dist/utils/score-header.d.ts +22 -0
  60. package/dist/utils/score-header.d.ts.map +1 -0
  61. package/dist/utils/score-header.js +85 -0
  62. package/dist/utils/score-header.js.map +1 -0
  63. package/dist/utils/score-indicators.d.ts +47 -0
  64. package/dist/utils/score-indicators.d.ts.map +1 -0
  65. package/dist/utils/score-indicators.js +197 -0
  66. package/dist/utils/score-indicators.js.map +1 -0
  67. package/package.json +8 -3
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 🏎️ FAF Engine MK-2 Core
3
+ * Championship Edition - The Secret Sauce
4
+ */
5
+ declare const MK2_SIGNATURE = "FAF-ENGINE-MK2-CHAMPIONSHIP";
6
+ /**
7
+ * FAF Engine MK-2 - Main Class
8
+ */
9
+ export declare class FafEngineMK2 {
10
+ private fabFormats;
11
+ private dnaManager;
12
+ private licenseLevel;
13
+ private initialized;
14
+ constructor(licenseKey?: string);
15
+ /**
16
+ * Initialize MK-2 engine
17
+ */
18
+ private initialize;
19
+ /**
20
+ * Analyze project with MK-2 intelligence
21
+ */
22
+ analyzeProject(projectPath: string): Promise<any>;
23
+ /**
24
+ * Calculate championship score
25
+ */
26
+ calculateScore(data: any): Promise<any>;
27
+ /**
28
+ * Generate checksum for verification
29
+ */
30
+ private generateChecksum;
31
+ /**
32
+ * Get engine info
33
+ */
34
+ getInfo(): any;
35
+ }
36
+ export default FafEngineMK2;
37
+ export { FafEngineMK2, MK2_SIGNATURE };
38
+ //# sourceMappingURL=mk2-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mk2-core.d.ts","sourceRoot":"","sources":["../../src/engine-mk2/mk2-core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,QAAA,MAAM,aAAa,gCAAgC,CAAC;AAwEpD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAkB;gBAEzB,UAAU,CAAC,EAAE,MAAM;IAW/B;;OAEG;YACW,UAAU;IAYxB;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAgCvD;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAmC7C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,IAAI,GAAG;CAgBf;AAeD,eAAe,YAAY,CAAC;AAG5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ /**
3
+ * 🏎️ FAF Engine MK-2 Core
4
+ * Championship Edition - The Secret Sauce
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MK2_SIGNATURE = exports.FafEngineMK2 = void 0;
8
+ // Import all proprietary modules (these will be bundled and obfuscated)
9
+ const fab_formats_processor_1 = require("../engines/fab-formats-processor");
10
+ const relentless_context_extractor_1 = require("../engines/relentless-context-extractor");
11
+ const faf_dna_1 = require("../engines/faf-dna");
12
+ const turbo_cat_knowledge_1 = require("../utils/turbo-cat-knowledge");
13
+ // MK-2 Version identifier
14
+ const MK2_SIGNATURE = 'FAF-ENGINE-MK2-CHAMPIONSHIP';
15
+ exports.MK2_SIGNATURE = MK2_SIGNATURE;
16
+ const BUILD_TIME = process.env.ENGINE_BUILD || Date.now();
17
+ /**
18
+ * License validation for MK-2
19
+ */
20
+ class MK2LicenseValidator {
21
+ static CHECKSUM = 'mk2-2025-championship';
22
+ static validatedCache = new Map();
23
+ static validate(key) {
24
+ if (!key)
25
+ return 'free';
26
+ // Cache validation results
27
+ if (this.validatedCache.has(key)) {
28
+ return this.validatedCache.get(key) ? 'championship' : 'free';
29
+ }
30
+ // Simple validation (enhanced in obfuscated version)
31
+ const isValid = key.includes('MK2') || key.startsWith('dev_');
32
+ this.validatedCache.set(key, isValid);
33
+ if (key.startsWith('CHAMPIONSHIP'))
34
+ return 'championship';
35
+ if (key.startsWith('dev_'))
36
+ return 'developer';
37
+ return 'free';
38
+ }
39
+ static getScoreLimit(level) {
40
+ switch (level) {
41
+ case 'championship': return 100;
42
+ case 'developer': return 85;
43
+ default: return 70;
44
+ }
45
+ }
46
+ }
47
+ /**
48
+ * Self-protection mechanisms
49
+ */
50
+ class MK2Protection {
51
+ static tamperDetected = false;
52
+ static initialize() {
53
+ // Detect debugger
54
+ const detectDebugger = () => {
55
+ const start = Date.now();
56
+ // debugger; // Uncomment in production
57
+ const duration = Date.now() - start;
58
+ if (duration > 100) {
59
+ this.tamperDetected = true;
60
+ }
61
+ };
62
+ // Check periodically
63
+ setInterval(detectDebugger, 5000);
64
+ // Detect tampering via function toString
65
+ const originalToString = Function.prototype.toString;
66
+ Function.prototype.toString = function (...args) {
67
+ if (this === FafEngineMK2 || this === MK2Protection) {
68
+ MK2Protection.tamperDetected = true;
69
+ return 'function() { [native code] }';
70
+ }
71
+ return originalToString.apply(this, args);
72
+ };
73
+ }
74
+ static checkIntegrity() {
75
+ return !this.tamperDetected;
76
+ }
77
+ }
78
+ /**
79
+ * FAF Engine MK-2 - Main Class
80
+ */
81
+ class FafEngineMK2 {
82
+ fabFormats;
83
+ dnaManager = null;
84
+ licenseLevel;
85
+ initialized = false;
86
+ constructor(licenseKey) {
87
+ // Initialize protection
88
+ MK2Protection.initialize();
89
+ // Validate license
90
+ this.licenseLevel = MK2LicenseValidator.validate(licenseKey);
91
+ // Initialize processors
92
+ this.fabFormats = new fab_formats_processor_1.FabFormatsProcessor();
93
+ }
94
+ /**
95
+ * Initialize MK-2 engine
96
+ */
97
+ async initialize(projectPath) {
98
+ if (this.initialized)
99
+ return;
100
+ try {
101
+ this.dnaManager = new faf_dna_1.FafDNAManager(projectPath);
102
+ this.initialized = true;
103
+ }
104
+ catch (error) {
105
+ console.warn('MK-2 initialization warning:', error);
106
+ this.initialized = true; // Continue without DNA
107
+ }
108
+ }
109
+ /**
110
+ * Analyze project with MK-2 intelligence
111
+ */
112
+ async analyzeProject(projectPath) {
113
+ // Check integrity
114
+ if (!MK2Protection.checkIntegrity()) {
115
+ throw new Error('Engine integrity check failed');
116
+ }
117
+ await this.initialize(projectPath);
118
+ // Run championship analysis
119
+ const fabResults = await this.fabFormats.processFiles(projectPath);
120
+ const contextResults = await relentless_context_extractor_1.relentlessExtractor.extractFromProject(projectPath);
121
+ // Apply license limits
122
+ const scoreLimit = MK2LicenseValidator.getScoreLimit(this.licenseLevel);
123
+ return {
124
+ engine: MK2_SIGNATURE,
125
+ version: 'MK-2',
126
+ build: BUILD_TIME,
127
+ license: this.licenseLevel,
128
+ analysis: {
129
+ fabFormats: fabResults,
130
+ context: contextResults,
131
+ scoreLimit,
132
+ turbocat: {
133
+ formats: turbo_cat_knowledge_1.TURBO_CAT_KNOWLEDGE.knowledgeBase.formats.length,
134
+ pyramid: turbo_cat_knowledge_1.TURBO_CAT_KNOWLEDGE.formatPyramid.length
135
+ }
136
+ }
137
+ };
138
+ }
139
+ /**
140
+ * Calculate championship score
141
+ */
142
+ async calculateScore(data) {
143
+ // Check integrity
144
+ if (!MK2Protection.checkIntegrity()) {
145
+ return { score: 0, error: 'Integrity check failed' };
146
+ }
147
+ // Calculate raw score
148
+ let score = 10; // Base score
149
+ // Add FAB-FORMATS intelligence
150
+ if (data.fabFormats) {
151
+ score += data.fabFormats.totalBonus || 0;
152
+ }
153
+ // Add context extraction bonus
154
+ if (data.context) {
155
+ const contextSlots = Object.keys(data.context).filter(k => data.context[k]).length;
156
+ score += contextSlots * 5;
157
+ }
158
+ // Apply license cap
159
+ const scoreLimit = MK2LicenseValidator.getScoreLimit(this.licenseLevel);
160
+ const finalScore = Math.min(score, scoreLimit);
161
+ return {
162
+ engine: 'MK-2',
163
+ rawScore: score,
164
+ finalScore,
165
+ capped: score > scoreLimit,
166
+ license: this.licenseLevel,
167
+ scoreLimit,
168
+ checksum: this.generateChecksum(data)
169
+ };
170
+ }
171
+ /**
172
+ * Generate checksum for verification
173
+ */
174
+ generateChecksum(data) {
175
+ const crypto = require('crypto');
176
+ const stringified = JSON.stringify(data, Object.keys(data).sort());
177
+ return crypto
178
+ .createHash('sha256')
179
+ .update(stringified + MK2_SIGNATURE)
180
+ .digest('hex')
181
+ .substring(0, 8);
182
+ }
183
+ /**
184
+ * Get engine info
185
+ */
186
+ getInfo() {
187
+ return {
188
+ engine: 'FAF Engine MK-2',
189
+ version: '2.0.0',
190
+ signature: MK2_SIGNATURE,
191
+ build: BUILD_TIME,
192
+ license: this.licenseLevel,
193
+ features: this.licenseLevel === 'championship'
194
+ ? ['all']
195
+ : this.licenseLevel === 'developer'
196
+ ? ['advanced', 'cache', 'chrome']
197
+ : ['basic'],
198
+ protection: 'MAXIMUM',
199
+ formats: turbo_cat_knowledge_1.TURBO_CAT_KNOWLEDGE.knowledgeBase.formats.length
200
+ };
201
+ }
202
+ }
203
+ exports.FafEngineMK2 = FafEngineMK2;
204
+ // Self-defending wrapper
205
+ (function () {
206
+ // Prevent extraction of source
207
+ if (typeof global !== 'undefined') {
208
+ Object.defineProperty(global, 'FafEngineMK2', {
209
+ value: FafEngineMK2,
210
+ writable: false,
211
+ configurable: false
212
+ });
213
+ }
214
+ })();
215
+ // Default export for CommonJS
216
+ exports.default = FafEngineMK2;
217
+ //# sourceMappingURL=mk2-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mk2-core.js","sourceRoot":"","sources":["../../src/engine-mk2/mk2-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * License Configuration - Dynamically configurable limits
3
+ * Can be updated without code changes
4
+ */
5
+ interface TierConfig {
6
+ scoreLimit: number;
7
+ enabled: boolean;
8
+ features: string[];
9
+ message?: string;
10
+ }
11
+ interface LicenseConfig {
12
+ tiers: {
13
+ free: TierConfig;
14
+ developer: TierConfig;
15
+ professional: TierConfig;
16
+ enterprise: TierConfig;
17
+ championship: TierConfig;
18
+ };
19
+ championshipMode: {
20
+ enabled: boolean;
21
+ duration: number;
22
+ limit: number;
23
+ };
24
+ messaging: {
25
+ upgradeCTA: boolean;
26
+ showLimitWarnings: boolean;
27
+ };
28
+ }
29
+ declare class LicenseConfigManager {
30
+ private static instance;
31
+ private config;
32
+ private configPath;
33
+ private constructor();
34
+ static getInstance(): LicenseConfigManager;
35
+ private findConfigFile;
36
+ private loadConfig;
37
+ private getDefaultConfig;
38
+ private getEnvOverrides;
39
+ private mergeConfigs;
40
+ getScoreLimit(tier: string): number;
41
+ isTierEnabled(tier: string): boolean;
42
+ getTierConfig(tier: string): TierConfig | null;
43
+ isChampionshipModeEnabled(): boolean;
44
+ getChampionshipDuration(): number;
45
+ shouldShowUpgradeMessages(): boolean;
46
+ updateTierLimit(tier: string, limit: number): void;
47
+ enableTier(tier: string): void;
48
+ disableTier(tier: string): void;
49
+ saveConfig(): void;
50
+ setTestConfig(config: Partial<LicenseConfig>): void;
51
+ resetToDefaults(): void;
52
+ getFullConfig(): LicenseConfig;
53
+ }
54
+ export declare const licenseConfig: LicenseConfigManager;
55
+ export declare function configureLicenseLimits(limits: {
56
+ [key: string]: number;
57
+ }): void;
58
+ export {};
59
+ //# sourceMappingURL=license-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-config.d.ts","sourceRoot":"","sources":["../../src/license/license-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE;QACL,IAAI,EAAE,UAAU,CAAC;QACjB,SAAS,EAAE,UAAU,CAAC;QACtB,YAAY,EAAE,UAAU,CAAC;QACzB,UAAU,EAAE,UAAU,CAAC;QACvB,YAAY,EAAE,UAAU,CAAC;KAC1B,CAAC;IACF,gBAAgB,EAAE;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,OAAO,CAAC;QACpB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;CACH;AAED,cAAM,oBAAoB;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO;IAKP,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,YAAY;IA8BpB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQnC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKpC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAK9C,yBAAyB,IAAI,OAAO;IAIpC,uBAAuB,IAAI,MAAM;IAIjC,yBAAyB,IAAI,OAAO;IAMpC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOlD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO9B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/B,UAAU,IAAI,IAAI;IAclB,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAInD,eAAe,IAAI,IAAI;IAKvB,aAAa,IAAI,aAAa;CAG/B;AAED,eAAO,MAAM,aAAa,sBAAqC,CAAC;AAGhE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,IAAI,CAK9E"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * License Configuration - Dynamically configurable limits
4
+ * Can be updated without code changes
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.licenseConfig = void 0;
41
+ exports.configureLicenseLimits = configureLicenseLimits;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ class LicenseConfigManager {
45
+ static instance;
46
+ config;
47
+ configPath;
48
+ constructor() {
49
+ this.configPath = this.findConfigFile();
50
+ this.config = this.loadConfig();
51
+ }
52
+ static getInstance() {
53
+ if (!this.instance) {
54
+ this.instance = new LicenseConfigManager();
55
+ }
56
+ return this.instance;
57
+ }
58
+ findConfigFile() {
59
+ // Check for config file in order of precedence
60
+ const locations = [
61
+ process.env.FAF_LICENSE_CONFIG, // Environment variable
62
+ path.join(process.cwd(), '.faf-license-config.json'), // Project directory
63
+ path.join(require('os').homedir(), '.faf', 'license-config.json'), // User home
64
+ '/etc/faf/license-config.json' // System-wide
65
+ ].filter(Boolean);
66
+ for (const location of locations) {
67
+ if (location && fs.existsSync(location)) {
68
+ return location;
69
+ }
70
+ }
71
+ // Return default location
72
+ return path.join(require('os').homedir(), '.faf', 'license-config.json');
73
+ }
74
+ loadConfig() {
75
+ // Try environment variable overrides first
76
+ const envConfig = this.getEnvOverrides();
77
+ // Try loading from file
78
+ let fileConfig = {};
79
+ try {
80
+ if (fs.existsSync(this.configPath)) {
81
+ const content = fs.readFileSync(this.configPath, 'utf-8');
82
+ fileConfig = JSON.parse(content);
83
+ }
84
+ }
85
+ catch (error) {
86
+ console.warn('Failed to load license config file, using defaults');
87
+ }
88
+ // Merge with defaults
89
+ return this.mergeConfigs(this.getDefaultConfig(), fileConfig, envConfig);
90
+ }
91
+ getDefaultConfig() {
92
+ return {
93
+ tiers: {
94
+ free: {
95
+ scoreLimit: 85, // Can be changed!
96
+ enabled: true,
97
+ features: ['basic'],
98
+ message: "You're doing great! Unlock more with an upgrade"
99
+ },
100
+ developer: {
101
+ scoreLimit: 90,
102
+ enabled: true,
103
+ features: ['basic', 'cache', 'chrome-extension']
104
+ },
105
+ professional: {
106
+ scoreLimit: 95,
107
+ enabled: true,
108
+ features: ['basic', 'cache', 'chrome-extension', 'advanced-scoring', 'compiler']
109
+ },
110
+ enterprise: {
111
+ scoreLimit: 100,
112
+ enabled: true,
113
+ features: ['all']
114
+ },
115
+ championship: {
116
+ scoreLimit: 100,
117
+ enabled: true,
118
+ features: ['all', 'priority-support', 'custom-features']
119
+ }
120
+ },
121
+ championshipMode: {
122
+ enabled: true,
123
+ duration: 60, // minutes
124
+ limit: 100
125
+ },
126
+ messaging: {
127
+ upgradeCTA: true,
128
+ showLimitWarnings: true
129
+ }
130
+ };
131
+ }
132
+ getEnvOverrides() {
133
+ const overrides = {};
134
+ // Check environment variables for overrides
135
+ // FAF_FREE_LIMIT=75 sets free tier to 75%
136
+ if (process.env.FAF_FREE_LIMIT) {
137
+ overrides.tiers = overrides.tiers || {};
138
+ overrides.tiers.free = overrides.tiers.free || {};
139
+ overrides.tiers.free.scoreLimit = parseInt(process.env.FAF_FREE_LIMIT);
140
+ }
141
+ // FAF_FREE_ENABLED=false disables free tier
142
+ if (process.env.FAF_FREE_ENABLED === 'false') {
143
+ overrides.tiers = overrides.tiers || {};
144
+ overrides.tiers.free = overrides.tiers.free || {};
145
+ overrides.tiers.free.enabled = false;
146
+ }
147
+ // FAF_CHAMPIONSHIP_MODE=false disables championship mode
148
+ if (process.env.FAF_CHAMPIONSHIP_MODE === 'false') {
149
+ overrides.championshipMode = overrides.championshipMode || {};
150
+ overrides.championshipMode.enabled = false;
151
+ }
152
+ // FAF_UPGRADE_CTA=false disables upgrade messages
153
+ if (process.env.FAF_UPGRADE_CTA === 'false') {
154
+ overrides.messaging = overrides.messaging || {};
155
+ overrides.messaging.upgradeCTA = false;
156
+ }
157
+ return overrides;
158
+ }
159
+ mergeConfigs(...configs) {
160
+ // Deep merge configs, later ones override earlier ones
161
+ const result = this.getDefaultConfig();
162
+ for (const config of configs) {
163
+ if (config.tiers) {
164
+ Object.keys(config.tiers).forEach(tier => {
165
+ if (config.tiers[tier]) {
166
+ result.tiers[tier] = {
167
+ ...result.tiers[tier],
168
+ ...config.tiers[tier]
169
+ };
170
+ }
171
+ });
172
+ }
173
+ if (config.championshipMode) {
174
+ result.championshipMode = { ...result.championshipMode, ...config.championshipMode };
175
+ }
176
+ if (config.messaging) {
177
+ result.messaging = { ...result.messaging, ...config.messaging };
178
+ }
179
+ }
180
+ return result;
181
+ }
182
+ // Public API
183
+ getScoreLimit(tier) {
184
+ const tierConfig = this.config.tiers[tier];
185
+ if (!tierConfig || !tierConfig.enabled) {
186
+ return 0;
187
+ }
188
+ return tierConfig.scoreLimit;
189
+ }
190
+ isTierEnabled(tier) {
191
+ const tierConfig = this.config.tiers[tier];
192
+ return tierConfig?.enabled || false;
193
+ }
194
+ getTierConfig(tier) {
195
+ const tierConfig = this.config.tiers[tier];
196
+ return tierConfig || null;
197
+ }
198
+ isChampionshipModeEnabled() {
199
+ return this.config.championshipMode.enabled;
200
+ }
201
+ getChampionshipDuration() {
202
+ return this.config.championshipMode.duration;
203
+ }
204
+ shouldShowUpgradeMessages() {
205
+ return this.config.messaging.upgradeCTA;
206
+ }
207
+ // Dynamic updates
208
+ updateTierLimit(tier, limit) {
209
+ if (this.config.tiers[tier]) {
210
+ this.config.tiers[tier].scoreLimit = limit;
211
+ this.saveConfig();
212
+ }
213
+ }
214
+ enableTier(tier) {
215
+ if (this.config.tiers[tier]) {
216
+ this.config.tiers[tier].enabled = true;
217
+ this.saveConfig();
218
+ }
219
+ }
220
+ disableTier(tier) {
221
+ if (this.config.tiers[tier]) {
222
+ this.config.tiers[tier].enabled = false;
223
+ this.saveConfig();
224
+ }
225
+ }
226
+ saveConfig() {
227
+ try {
228
+ const dir = path.dirname(this.configPath);
229
+ if (!fs.existsSync(dir)) {
230
+ fs.mkdirSync(dir, { recursive: true });
231
+ }
232
+ fs.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2), 'utf-8');
233
+ }
234
+ catch (error) {
235
+ console.warn('Failed to save license config');
236
+ }
237
+ }
238
+ // Testing/Admin functions
239
+ setTestConfig(config) {
240
+ this.config = this.mergeConfigs(this.config, config);
241
+ }
242
+ resetToDefaults() {
243
+ this.config = this.getDefaultConfig();
244
+ this.saveConfig();
245
+ }
246
+ getFullConfig() {
247
+ return this.config;
248
+ }
249
+ }
250
+ exports.licenseConfig = LicenseConfigManager.getInstance();
251
+ // CLI helpers for easy configuration
252
+ function configureLicenseLimits(limits) {
253
+ const config = exports.licenseConfig;
254
+ Object.entries(limits).forEach(([tier, limit]) => {
255
+ config.updateTierLimit(tier, limit);
256
+ });
257
+ }
258
+ // Usage examples:
259
+ // FAF_FREE_LIMIT=75 faf score # Free tier at 75%
260
+ // FAF_FREE_LIMIT=90 faf score # Free tier at 90%
261
+ // FAF_FREE_ENABLED=false faf score # No free tier
262
+ // FAF_CHAMPIONSHIP_MODE=false faf # No championship mode
263
+ //# sourceMappingURL=license-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-config.js","sourceRoot":"","sources":["../../src/license/license-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * License Controller for FAF Engine
3
+ * Controls which engine (MK-1/MK-2) and features are available
4
+ */
5
+ export type LicenseType = 'free' | 'developer' | 'professional' | 'enterprise' | 'championship';
6
+ export type EngineVersion = 'MK-1' | 'MK-2';
7
+ interface License {
8
+ type: LicenseType;
9
+ engine: EngineVersion;
10
+ scoreLimit: number;
11
+ features: string[];
12
+ expiresAt?: Date;
13
+ issuedTo?: string;
14
+ key?: string;
15
+ }
16
+ export declare class LicenseController {
17
+ private static instance;
18
+ private currentLicense;
19
+ private licensePath;
20
+ private constructor();
21
+ static getInstance(): LicenseController;
22
+ private findLicenseFile;
23
+ private loadLicense;
24
+ private validateKey;
25
+ private verifySignature;
26
+ private buildLicense;
27
+ private getFreeTier;
28
+ private getChampionshipTier;
29
+ getLicense(): License;
30
+ getEngine(): EngineVersion;
31
+ getScoreLimit(): number;
32
+ hasFeature(feature: string): boolean;
33
+ canUseEngine(engine: EngineVersion): boolean;
34
+ setLicense(key: string): boolean;
35
+ generateTrialKey(email: string, days?: number): string;
36
+ private hash;
37
+ getInfo(): string;
38
+ }
39
+ export declare const licenseController: LicenseController;
40
+ export {};
41
+ //# sourceMappingURL=license-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-controller.d.ts","sourceRoot":"","sources":["../../src/license/license-controller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,YAAY,GAAG,cAAc,CAAC;AAChG,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,UAAU,OAAO;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAC3C,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO;IAMP,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,WAAW;IAgCnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,mBAAmB;IAW3B,UAAU,IAAI,OAAO;IAIrB,SAAS,IAAI,aAAa;IAI1B,aAAa,IAAI,MAAM;IAIvB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKpC,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAQ5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAoBhC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM;IAM1D,OAAO,CAAC,IAAI;IAIZ,OAAO,IAAI,MAAM;CAmBlB;AAGD,eAAO,MAAM,iBAAiB,mBAAkC,CAAC"}