@chimerai/cli 0.2.92 → 0.2.93

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.
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,iBAyI9E"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkDH,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,iBAyI9E"}
@@ -51,6 +51,26 @@ const templates = __importStar(require("../templates/index.js"));
51
51
  const index_js_1 = require("../templates/index.js");
52
52
  const utils_js_1 = require("../utils.js");
53
53
  const license_js_1 = require("../license.js");
54
+ /**
55
+ * Strips next-auth and auth-library dependencies from a generated route file.
56
+ * Used when the app is created without the 'auth' feature, so the project builds
57
+ * without next-auth installed. Removes: imports, session checks, audit log calls.
58
+ */
59
+ function stripAuthFromGeneratedCode(code) {
60
+ // Remove next-auth and related imports
61
+ code = code.replace(/^import \{ getServerSession \} from 'next-auth';\n/m, '');
62
+ code = code.replace(/^import \{ authOptions \} from '@\/lib\/auth';\n/m, '');
63
+ code = code.replace(/^import \{ logAuditAction \} from '@\/lib\/audit';\n/m, '');
64
+ // Remove inline session check blocks
65
+ code = code.replace(/\n {4}const session = await getServerSession\(authOptions\);\n {4}if \(!session\?\.user\) \{\n {6}return NextResponse\.json\(\{ error: 'Unauthorized' \}, \{ status: 401 \}\);\n {4}\}\n/g, '\n');
66
+ // Replace session.user.id with local-dev fallback
67
+ code = code.replace(/session\.user\.id/g, "'local-dev'");
68
+ code = code.replace(/session\?\.user\?\.id/g, "'local-dev'");
69
+ // Remove audit log blocks (multi-line, lazy match)
70
+ code = code.replace(/\n {4}\/\/ Audit log\n {4}await logAuditAction\(\{[\s\S]*?\n {4}\}\);\n/g, '\n');
71
+ code = code.replace(/\n {4}if \(session\?\.user\?\.id\) \{\n {6}await logAuditAction\(\{[\s\S]*?\n {4}\}\);\n {4}\}\n/g, '\n');
72
+ return code;
73
+ }
54
74
  /** Canonical feature definitions for `chimerai create` */
55
75
  const AVAILABLE_FEATURES = [
56
76
  { name: '🔐 Authentication (NextAuth)', value: 'auth', licenseKey: 'auth', checked: true },
@@ -954,6 +974,15 @@ async function copyFeatureFiles(targetDir, features) {
954
974
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'lib/auth'));
955
975
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/auth/resolve-auth.ts'), resolveAuth);
956
976
  }
977
+ else {
978
+ // No-auth mode: generate stubs so routes that import these modules compile
979
+ const apiProtectionStub = templates.generateApiProtectionLibNoAuth();
980
+ await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/api-protection.ts'), apiProtectionStub);
981
+ // resolve-auth stub (used by chat stream route and v1/models route)
982
+ const resolveAuthStub = templates.generateResolveAuthNoAuth();
983
+ await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'lib/auth'));
984
+ await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/auth/resolve-auth.ts'), resolveAuthStub);
985
+ }
957
986
  // ── Widget Infrastructure (embeddable chat for external apps) ──────
958
987
  // Rate limiter (supports both session and API-key tiers)
959
988
  const rateLimiter = templates.generateRateLimiter();
@@ -980,20 +1009,23 @@ async function copyFeatureFiles(targetDir, features) {
980
1009
  // Notify provider change utility
981
1010
  const notifyLib = templates.generateNotifyProviderChangeLib();
982
1011
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/notify-provider-change.ts'), notifyLib);
1012
+ // When auth is not enabled, strip next-auth imports/checks from provider routes
1013
+ const _withAuth = features.includes('auth');
1014
+ const _strip = (code) => (_withAuth ? code : stripAuthFromGeneratedCode(code));
983
1015
  // Provider CRUD route — /api/providers
984
- const providerCrudRoute = templates.generateProviderCrudRoute();
1016
+ const providerCrudRoute = _strip(templates.generateProviderCrudRoute());
985
1017
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers'));
986
1018
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/route.ts'), providerCrudRoute);
987
1019
  // Provider [id] route — /api/providers/[id]
988
- const providerIdRoute = templates.generateProviderIdRoute();
1020
+ const providerIdRoute = _strip(templates.generateProviderIdRoute());
989
1021
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers/[id]'));
990
1022
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/[id]/route.ts'), providerIdRoute);
991
1023
  // Provider test route — /api/providers/[id]/test
992
- const providerTestRoute = templates.generateProviderTestRoute();
1024
+ const providerTestRoute = _strip(templates.generateProviderTestRoute());
993
1025
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers/[id]/test'));
994
1026
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/[id]/test/route.ts'), providerTestRoute);
995
1027
  // Provider sync route — /api/providers/[id]/sync
996
- const providerSyncRoute = templates.generateProviderSyncRoute();
1028
+ const providerSyncRoute = _strip(templates.generateProviderSyncRoute());
997
1029
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers/[id]/sync'));
998
1030
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/[id]/sync/route.ts'), providerSyncRoute);
999
1031
  // Internal providers route — /api/internal/providers
@@ -1244,7 +1276,7 @@ async function getServerSessionWithPermissions() {
1244
1276
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/conversations/[id]/route.ts'), templates.generateConversationDetailRoute());
1245
1277
  // Models listing route (used by ModelSelector in chat — session-only, internal)
1246
1278
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/models'));
1247
- await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/models/route.ts'), templates.generateModelsRoute());
1279
+ await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/models/route.ts'), _strip(templates.generateModelsRoute()));
1248
1280
  // Public v1 models route (dual-auth: session OR API-key, for widgets/external apps)
1249
1281
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/v1/models'));
1250
1282
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/v1/models/route.ts'), templates.generateV1ModelsRoute());
@@ -45,4 +45,11 @@ export declare function generateAuthLib(): string;
45
45
  * @returns TypeScript content for lib/auth/resolve-auth.ts
46
46
  */
47
47
  export declare function generateResolveAuth(): string;
48
+ /**
49
+ * Generates a no-auth resolve-auth stub.
50
+ * Returns a local dev user without checking sessions or API keys.
51
+ * Use when auth feature is not selected.
52
+ * @returns TypeScript content for lib/auth/resolve-auth.ts
53
+ */
54
+ export declare function generateResolveAuthNoAuth(): string;
48
55
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/templates/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAS9C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA4G1C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAUhD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAiB7C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAuC9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAgGxC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CA8C5C"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/templates/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAS9C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA4G1C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAUhD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAiB7C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAuC9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAgGxC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CA8C5C;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAqBlD"}
@@ -11,6 +11,7 @@ exports.generateLogoutButton = generateLogoutButton;
11
11
  exports.generateNextAuthTypes = generateNextAuthTypes;
12
12
  exports.generateAuthLib = generateAuthLib;
13
13
  exports.generateResolveAuth = generateResolveAuth;
14
+ exports.generateResolveAuthNoAuth = generateResolveAuthNoAuth;
14
15
  /**
15
16
  * Generates the NextAuth API route with credentials provider
16
17
  * Includes user authentication, JWT callbacks, and role/permissions handling
@@ -379,3 +380,31 @@ export async function resolveAuth(request: NextRequest): Promise<AuthContext> {
379
380
  }
380
381
  `;
381
382
  }
383
+ /**
384
+ * Generates a no-auth resolve-auth stub.
385
+ * Returns a local dev user without checking sessions or API keys.
386
+ * Use when auth feature is not selected.
387
+ * @returns TypeScript content for lib/auth/resolve-auth.ts
388
+ */
389
+ function generateResolveAuthNoAuth() {
390
+ return `// @chimerai component=ResolveAuth version=1.0-no-auth
391
+ // No-Auth mode: returns a local dev user without session checks.
392
+ import { NextRequest } from 'next/server';
393
+
394
+ export interface AuthContext {
395
+ userId: string;
396
+ email: string;
397
+ authMethod: 'session' | 'api-key';
398
+ scopes?: string[];
399
+ }
400
+
401
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
402
+ export async function resolveAuth(_request: NextRequest): Promise<AuthContext> {
403
+ return {
404
+ userId: 'local-dev',
405
+ email: 'local@localhost',
406
+ authMethod: 'session',
407
+ };
408
+ }
409
+ `;
410
+ }
@@ -7,13 +7,13 @@
7
7
  */
8
8
  export { generateNextConfig, generateTsConfig, generateTailwindConfig, generatePostcssConfig, generateGlobalsCss, } from './config.js';
9
9
  export { generateAppLayout, generateAppLayoutWithAuth, generateAppPage, generateAppPageNoAuth, generateAuthBasicLayout, generateDashboardLayout, generateDashboardLayoutNoAuth, generateDashboardPage, generateDashboardPageNoAuth, generateProfilePage, generateUserProfileRoute, generateSettingsPage, generateUseAppNameHook, } from './layout.js';
10
- export { generateNextAuthRoute, generateLoginPage, generateSessionProvider, generateLogoutButton, generateNextAuthTypes, generateAuthLib, generateResolveAuth, } from './auth.js';
10
+ export { generateNextAuthRoute, generateLoginPage, generateSessionProvider, generateLogoutButton, generateNextAuthTypes, generateAuthLib, generateResolveAuth, generateResolveAuthNoAuth, } from './auth.js';
11
11
  export { generateChatPage, generateChatPageNoAuth, generateUseChatHook, generateChatMessage, generateChatInput, generateChatSidebar, generateModelSelector, generateChatStreamRouteWithPersistence, generateConversationsRoute, generateConversationDetailRoute, } from './chat.js';
12
12
  export { generateAdminLayout, generateAdminDashboardPage, generateAdminUsersPage, generateAdminRolesPage, generateAdminSettingsPage, generateAdminLogsPage, generateAuditLogHelper, generatePermissionsLib, generateRequirePermissionLib, } from './admin.js';
13
13
  export { generateModelProvidersPage, generatePromptManagementPage, generatePromptSelector, } from './components.js';
14
14
  export { generateAdminUsersRoute, generateAdminUsersIdRoute, generateAdminRolesRoute, generateAdminRolesIdRoute, generatePromptsRoute, generatePromptsIdRoute, generatePromptsSetDefaultRoute, generateHealthRoute, generateModelsRoute, generateV1ModelsRoute, generateAuditLogRoute, generateGdprDataExportRoute, generateGdprAccountDeleteRoute, generateAdminSettingsRoute, generateAppSettingsRoute, } from './api-routes.js';
15
15
  export { generateProviderCrudRoute, generateProviderIdRoute, generateProviderTestRoute, generateProviderSyncRoute, generateInternalProvidersRoute, generateInternalProviderIdRoute, generateInternalProviderUsageRoute, generateNotifyProviderChangeLib, } from './provider-routes.js';
16
- export { generatePrismaLib, generateEncryptionLib, generateApiKeyAuthLib, generateApiProtectionLib, generatePrismaSchema, } from './prisma.js';
16
+ export { generatePrismaLib, generateEncryptionLib, generateApiKeyAuthLib, generateApiProtectionLib, generateApiProtectionLibNoAuth, generatePrismaSchema, } from './prisma.js';
17
17
  export { generateMiddleware, generateMiddlewareNoAuth } from './middleware.js';
18
18
  export { generateStripeLib, generateBillingPage, generateCheckoutRoute, generatePortalRoute, generateSubscriptionRoute, generateStripeWebhookRoute, } from './billing.js';
19
19
  export { generateRagLib, generateRagPage, generateRagUploadRoute, generateRagQueryRoute, generateRagStatsRoute, generateRagClearRoute, generateRagDeleteRoute, } from './rag.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,10 @@
7
7
  * written to a file in the generated project.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.generateAdminRolesRoute = exports.generateAdminUsersIdRoute = exports.generateAdminUsersRoute = exports.generatePromptSelector = exports.generatePromptManagementPage = exports.generateModelProvidersPage = exports.generateRequirePermissionLib = exports.generatePermissionsLib = exports.generateAuditLogHelper = exports.generateAdminLogsPage = exports.generateAdminSettingsPage = exports.generateAdminRolesPage = exports.generateAdminUsersPage = exports.generateAdminDashboardPage = exports.generateAdminLayout = exports.generateConversationDetailRoute = exports.generateConversationsRoute = exports.generateChatStreamRouteWithPersistence = exports.generateModelSelector = exports.generateChatSidebar = exports.generateChatInput = exports.generateChatMessage = exports.generateUseChatHook = exports.generateChatPageNoAuth = exports.generateChatPage = exports.generateResolveAuth = exports.generateAuthLib = exports.generateNextAuthTypes = exports.generateLogoutButton = exports.generateSessionProvider = exports.generateLoginPage = exports.generateNextAuthRoute = exports.generateUseAppNameHook = exports.generateSettingsPage = exports.generateUserProfileRoute = exports.generateProfilePage = exports.generateDashboardPageNoAuth = exports.generateDashboardPage = exports.generateDashboardLayoutNoAuth = exports.generateDashboardLayout = exports.generateAuthBasicLayout = exports.generateAppPageNoAuth = exports.generateAppPage = exports.generateAppLayoutWithAuth = exports.generateAppLayout = exports.generateGlobalsCss = exports.generatePostcssConfig = exports.generateTailwindConfig = exports.generateTsConfig = exports.generateNextConfig = void 0;
11
- exports.generateMfaDisableRoute = exports.generateMfaVerifyRoute = exports.generateMfaSetupRoute = exports.generateMfaLib = exports.generateRateLimiter = exports.generateApiKeyIdRoute = exports.generateApiKeysRoute = exports.generateApiKeyManagementPage = exports.generateWidgetLoader = exports.generateWidgetBundle = exports.generateRagDeleteRoute = exports.generateRagClearRoute = exports.generateRagStatsRoute = exports.generateRagQueryRoute = exports.generateRagUploadRoute = exports.generateRagPage = exports.generateRagLib = exports.generateStripeWebhookRoute = exports.generateSubscriptionRoute = exports.generatePortalRoute = exports.generateCheckoutRoute = exports.generateBillingPage = exports.generateStripeLib = exports.generateMiddlewareNoAuth = exports.generateMiddleware = exports.generatePrismaSchema = exports.generateApiProtectionLib = exports.generateApiKeyAuthLib = exports.generateEncryptionLib = exports.generatePrismaLib = exports.generateNotifyProviderChangeLib = exports.generateInternalProviderUsageRoute = exports.generateInternalProviderIdRoute = exports.generateInternalProvidersRoute = exports.generateProviderSyncRoute = exports.generateProviderTestRoute = exports.generateProviderIdRoute = exports.generateProviderCrudRoute = exports.generateAppSettingsRoute = exports.generateAdminSettingsRoute = exports.generateGdprAccountDeleteRoute = exports.generateGdprDataExportRoute = exports.generateAuditLogRoute = exports.generateV1ModelsRoute = exports.generateModelsRoute = exports.generateHealthRoute = exports.generatePromptsSetDefaultRoute = exports.generatePromptsIdRoute = exports.generatePromptsRoute = exports.generateAdminRolesIdRoute = void 0;
12
- exports.FEATURE_TEMPLATES = exports.ALL_TEMPLATES = exports.TOOL_GENERATORS = exports.generateToolsInit = exports.generateWebhookTools = exports.generateDeeplTools = exports.generateAirtableTools = exports.generateGoogleSheetsTools = exports.generateVisionTools = exports.generateNlpTools = exports.generateCodeTools = exports.generateDocumentTools = exports.generateWebTools = exports.generateRoutesInit = exports.generateToolsRoutes = exports.generateGuardrailsRoutes = exports.generateRagRoutes = exports.generateChatRoutes = exports.generateFileExtractor = exports.generateDockerComposeAiService = exports.generateAiServiceReadme = exports.generateAiServiceDockerfile = exports.generateAiServiceRequirements = exports.generateAiServiceModels = exports.generateAiServiceConfig = exports.generateAiServiceMain = exports.generateGuardrailsService = exports.generateVectorStore = exports.generateRagService = exports.generateEmbeddingService = exports.generateModerationService = exports.generateModelService = exports.generateChatService = exports.generateServicesInit = exports.generateProviderClient = exports.TOOL_INFO = exports.writeAiManifest = exports.readAiManifest = exports.generateDockerComposeDev = exports.generateDockerComposeProd = exports.generateDockerignore = exports.generateDockerfile = exports.GDPR_SCHEMA_EXTENSION = exports.generateGdprConsentRoute = exports.generateGdprPage = exports.generateGdprLib = exports.MFA_USER_FIELDS = exports.MFA_SCHEMA_EXTENSION = exports.generateMfaPage = void 0;
10
+ exports.generateAdminUsersIdRoute = exports.generateAdminUsersRoute = exports.generatePromptSelector = exports.generatePromptManagementPage = exports.generateModelProvidersPage = exports.generateRequirePermissionLib = exports.generatePermissionsLib = exports.generateAuditLogHelper = exports.generateAdminLogsPage = exports.generateAdminSettingsPage = exports.generateAdminRolesPage = exports.generateAdminUsersPage = exports.generateAdminDashboardPage = exports.generateAdminLayout = exports.generateConversationDetailRoute = exports.generateConversationsRoute = exports.generateChatStreamRouteWithPersistence = exports.generateModelSelector = exports.generateChatSidebar = exports.generateChatInput = exports.generateChatMessage = exports.generateUseChatHook = exports.generateChatPageNoAuth = exports.generateChatPage = exports.generateResolveAuthNoAuth = exports.generateResolveAuth = exports.generateAuthLib = exports.generateNextAuthTypes = exports.generateLogoutButton = exports.generateSessionProvider = exports.generateLoginPage = exports.generateNextAuthRoute = exports.generateUseAppNameHook = exports.generateSettingsPage = exports.generateUserProfileRoute = exports.generateProfilePage = exports.generateDashboardPageNoAuth = exports.generateDashboardPage = exports.generateDashboardLayoutNoAuth = exports.generateDashboardLayout = exports.generateAuthBasicLayout = exports.generateAppPageNoAuth = exports.generateAppPage = exports.generateAppLayoutWithAuth = exports.generateAppLayout = exports.generateGlobalsCss = exports.generatePostcssConfig = exports.generateTailwindConfig = exports.generateTsConfig = exports.generateNextConfig = void 0;
11
+ exports.generateMfaSetupRoute = exports.generateMfaLib = exports.generateRateLimiter = exports.generateApiKeyIdRoute = exports.generateApiKeysRoute = exports.generateApiKeyManagementPage = exports.generateWidgetLoader = exports.generateWidgetBundle = exports.generateRagDeleteRoute = exports.generateRagClearRoute = exports.generateRagStatsRoute = exports.generateRagQueryRoute = exports.generateRagUploadRoute = exports.generateRagPage = exports.generateRagLib = exports.generateStripeWebhookRoute = exports.generateSubscriptionRoute = exports.generatePortalRoute = exports.generateCheckoutRoute = exports.generateBillingPage = exports.generateStripeLib = exports.generateMiddlewareNoAuth = exports.generateMiddleware = exports.generatePrismaSchema = exports.generateApiProtectionLibNoAuth = exports.generateApiProtectionLib = exports.generateApiKeyAuthLib = exports.generateEncryptionLib = exports.generatePrismaLib = exports.generateNotifyProviderChangeLib = exports.generateInternalProviderUsageRoute = exports.generateInternalProviderIdRoute = exports.generateInternalProvidersRoute = exports.generateProviderSyncRoute = exports.generateProviderTestRoute = exports.generateProviderIdRoute = exports.generateProviderCrudRoute = exports.generateAppSettingsRoute = exports.generateAdminSettingsRoute = exports.generateGdprAccountDeleteRoute = exports.generateGdprDataExportRoute = exports.generateAuditLogRoute = exports.generateV1ModelsRoute = exports.generateModelsRoute = exports.generateHealthRoute = exports.generatePromptsSetDefaultRoute = exports.generatePromptsIdRoute = exports.generatePromptsRoute = exports.generateAdminRolesIdRoute = exports.generateAdminRolesRoute = void 0;
12
+ exports.ALL_TEMPLATES = exports.TOOL_GENERATORS = exports.generateToolsInit = exports.generateWebhookTools = exports.generateDeeplTools = exports.generateAirtableTools = exports.generateGoogleSheetsTools = exports.generateVisionTools = exports.generateNlpTools = exports.generateCodeTools = exports.generateDocumentTools = exports.generateWebTools = exports.generateRoutesInit = exports.generateToolsRoutes = exports.generateGuardrailsRoutes = exports.generateRagRoutes = exports.generateChatRoutes = exports.generateFileExtractor = exports.generateDockerComposeAiService = exports.generateAiServiceReadme = exports.generateAiServiceDockerfile = exports.generateAiServiceRequirements = exports.generateAiServiceModels = exports.generateAiServiceConfig = exports.generateAiServiceMain = exports.generateGuardrailsService = exports.generateVectorStore = exports.generateRagService = exports.generateEmbeddingService = exports.generateModerationService = exports.generateModelService = exports.generateChatService = exports.generateServicesInit = exports.generateProviderClient = exports.TOOL_INFO = exports.writeAiManifest = exports.readAiManifest = exports.generateDockerComposeDev = exports.generateDockerComposeProd = exports.generateDockerignore = exports.generateDockerfile = exports.GDPR_SCHEMA_EXTENSION = exports.generateGdprConsentRoute = exports.generateGdprPage = exports.generateGdprLib = exports.MFA_USER_FIELDS = exports.MFA_SCHEMA_EXTENSION = exports.generateMfaPage = exports.generateMfaDisableRoute = exports.generateMfaVerifyRoute = void 0;
13
+ exports.FEATURE_TEMPLATES = void 0;
13
14
  // Config templates
14
15
  var config_js_1 = require("./config.js");
15
16
  Object.defineProperty(exports, "generateNextConfig", { enumerable: true, get: function () { return config_js_1.generateNextConfig; } });
@@ -41,6 +42,7 @@ Object.defineProperty(exports, "generateLogoutButton", { enumerable: true, get:
41
42
  Object.defineProperty(exports, "generateNextAuthTypes", { enumerable: true, get: function () { return auth_js_1.generateNextAuthTypes; } });
42
43
  Object.defineProperty(exports, "generateAuthLib", { enumerable: true, get: function () { return auth_js_1.generateAuthLib; } });
43
44
  Object.defineProperty(exports, "generateResolveAuth", { enumerable: true, get: function () { return auth_js_1.generateResolveAuth; } });
45
+ Object.defineProperty(exports, "generateResolveAuthNoAuth", { enumerable: true, get: function () { return auth_js_1.generateResolveAuthNoAuth; } });
44
46
  // Chat templates
45
47
  var chat_js_1 = require("./chat.js");
46
48
  Object.defineProperty(exports, "generateChatPage", { enumerable: true, get: function () { return chat_js_1.generateChatPage; } });
@@ -102,6 +104,7 @@ Object.defineProperty(exports, "generatePrismaLib", { enumerable: true, get: fun
102
104
  Object.defineProperty(exports, "generateEncryptionLib", { enumerable: true, get: function () { return prisma_js_1.generateEncryptionLib; } });
103
105
  Object.defineProperty(exports, "generateApiKeyAuthLib", { enumerable: true, get: function () { return prisma_js_1.generateApiKeyAuthLib; } });
104
106
  Object.defineProperty(exports, "generateApiProtectionLib", { enumerable: true, get: function () { return prisma_js_1.generateApiProtectionLib; } });
107
+ Object.defineProperty(exports, "generateApiProtectionLibNoAuth", { enumerable: true, get: function () { return prisma_js_1.generateApiProtectionLibNoAuth; } });
105
108
  Object.defineProperty(exports, "generatePrismaSchema", { enumerable: true, get: function () { return prisma_js_1.generatePrismaSchema; } });
106
109
  // Middleware template
107
110
  var middleware_js_1 = require("./middleware.js");
@@ -20,6 +20,13 @@ export declare function generateEncryptionLib(): string;
20
20
  * @returns TypeScript content for lib/api-key-auth.ts
21
21
  */
22
22
  export declare function generateApiKeyAuthLib(): string;
23
+ /**
24
+ * Generates the API protection middleware — No-Auth stub
25
+ * All requests are treated as authorized with a local dev user.
26
+ * Use when auth feature is not selected.
27
+ * @returns TypeScript content for lib/api-protection.ts
28
+ */
29
+ export declare function generateApiProtectionLibNoAuth(): string;
23
30
  /**
24
31
  * Generates the API protection middleware
25
32
  * Handles session/auth checks, permission verification, and usage tracking
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/templates/prisma.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAY1C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA8D9C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAiJ9C;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAiLjD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CA+R7C"}
1
+ {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/templates/prisma.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAY1C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA8D9C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAiJ9C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAsCvD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAiLjD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CA+R7C"}
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.generatePrismaLib = generatePrismaLib;
8
8
  exports.generateEncryptionLib = generateEncryptionLib;
9
9
  exports.generateApiKeyAuthLib = generateApiKeyAuthLib;
10
+ exports.generateApiProtectionLibNoAuth = generateApiProtectionLibNoAuth;
10
11
  exports.generateApiProtectionLib = generateApiProtectionLib;
11
12
  exports.generatePrismaSchema = generatePrismaSchema;
12
13
  /**
@@ -246,6 +247,51 @@ export async function verifyApiKey(request: NextRequest): Promise<ApiKeyResult>
246
247
  }
247
248
  `;
248
249
  }
250
+ /**
251
+ * Generates the API protection middleware — No-Auth stub
252
+ * All requests are treated as authorized with a local dev user.
253
+ * Use when auth feature is not selected.
254
+ * @returns TypeScript content for lib/api-protection.ts
255
+ */
256
+ function generateApiProtectionLibNoAuth() {
257
+ return `// @chimerai component=ApiProtectionLib version=1.0-no-auth
258
+ // No-Auth mode: all requests are authorized as a local dev user.
259
+ import { NextRequest, NextResponse } from 'next/server';
260
+
261
+ export interface AuthResult {
262
+ authorized: boolean;
263
+ user?: { id: string; email: string };
264
+ error?: { code: string; message: string; statusCode: number };
265
+ }
266
+
267
+ const LOCAL_USER = { id: 'local-dev', email: 'local@localhost' };
268
+
269
+ export async function requireAuth(_request: NextRequest): Promise<AuthResult> {
270
+ return { authorized: true, user: LOCAL_USER };
271
+ }
272
+
273
+ export async function requireModelPermission(
274
+ _request: NextRequest,
275
+ _model: string
276
+ ): Promise<AuthResult> {
277
+ return { authorized: true, user: LOCAL_USER };
278
+ }
279
+
280
+ export async function requireCredits(
281
+ _request: NextRequest,
282
+ _estimatedTokens: number
283
+ ): Promise<AuthResult> {
284
+ return { authorized: true, user: LOCAL_USER };
285
+ }
286
+
287
+ export function createErrorResponse(authResult: AuthResult): NextResponse {
288
+ return NextResponse.json(
289
+ { error: authResult.error?.message || 'Unauthorized' },
290
+ { status: authResult.error?.statusCode || 401 }
291
+ );
292
+ }
293
+ `;
294
+ }
249
295
  /**
250
296
  * Generates the API protection middleware
251
297
  * Handles session/auth checks, permission verification, and usage tracking
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chimerai/cli",
3
- "version": "0.2.92",
3
+ "version": "0.2.93",
4
4
  "description": "CLI wizard for ChimerAI starter kit — scaffold auth, RBAC, AI chat, billing and more into any Next.js project",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {