@chimerai/cli 0.2.92 → 0.2.95

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;AA0DH,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,31 @@ 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 — 4-space indentation (provider/admin routes)
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
+ // Remove inline session check blocks — 2-space indentation (models/prompts routes)
67
+ code = code.replace(/\n {2}const session = await getServerSession\(authOptions\);\n {2}if \(!session\?\.user\) \{\n {4}return NextResponse\.json\(\{ error: 'Unauthorized' \}, \{ status: 401 \}\);\n {2}\}\n/g, '\n');
68
+ // Also catch orphaned getServerSession calls (import already removed but call remains)
69
+ code = code.replace(/^ {2}const session = await getServerSession\(authOptions\);\n/m, '');
70
+ code = code.replace(/^ {2}if \(!session\?\.user\) \{\n {4}return NextResponse\.json\(\{ error: 'Unauthorized' \}, \{ status: 401 \}\);\n {2}\}\n/m, '');
71
+ // Replace session.user.id with local-dev fallback
72
+ code = code.replace(/session\.user\.id/g, "'local-dev'");
73
+ code = code.replace(/session\?\.user\?\.id/g, "'local-dev'");
74
+ // Remove audit log blocks (multi-line, lazy match)
75
+ code = code.replace(/\n {4}\/\/ Audit log\n {4}await logAuditAction\(\{[\s\S]*?\n {4}\}\);\n/g, '\n');
76
+ code = code.replace(/\n {4}if \(session\?\.user\?\.id\) \{\n {6}await logAuditAction\(\{[\s\S]*?\n {4}\}\);\n {4}\}\n/g, '\n');
77
+ return code;
78
+ }
54
79
  /** Canonical feature definitions for `chimerai create` */
55
80
  const AVAILABLE_FEATURES = [
56
81
  { name: '🔐 Authentication (NextAuth)', value: 'auth', licenseKey: 'auth', checked: true },
@@ -954,6 +979,22 @@ async function copyFeatureFiles(targetDir, features) {
954
979
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'lib/auth'));
955
980
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/auth/resolve-auth.ts'), resolveAuth);
956
981
  }
982
+ else {
983
+ // No-auth mode: generate stubs so routes that import these modules compile
984
+ const apiProtectionStub = templates.generateApiProtectionLibNoAuth();
985
+ await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/api-protection.ts'), apiProtectionStub);
986
+ // resolve-auth stub (used by chat stream route and v1/models route)
987
+ const resolveAuthStub = templates.generateResolveAuthNoAuth();
988
+ await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'lib/auth'));
989
+ await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/auth/resolve-auth.ts'), resolveAuthStub);
990
+ }
991
+ // Shared no-auth helper — used for all route generators below
992
+ const _withAuth = features.includes('auth');
993
+ const _strip = (code) => (_withAuth ? code : stripAuthFromGeneratedCode(code));
994
+ // useAppName hook — always generated (used by chat page, dashboard layout, etc.)
995
+ const useAppNameHook = templates.generateUseAppNameHook();
996
+ await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'lib'));
997
+ await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/use-app-name.ts'), useAppNameHook);
957
998
  // ── Widget Infrastructure (embeddable chat for external apps) ──────
958
999
  // Rate limiter (supports both session and API-key tiers)
959
1000
  const rateLimiter = templates.generateRateLimiter();
@@ -966,10 +1007,10 @@ async function copyFeatureFiles(targetDir, features) {
966
1007
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'public/widget/loader.js'), widgetLoader);
967
1008
  // API-Key management routes
968
1009
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/v1/api-keys'));
969
- const apiKeysRoute = templates.generateApiKeysRoute();
1010
+ const apiKeysRoute = _strip(templates.generateApiKeysRoute());
970
1011
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/v1/api-keys/route.ts'), apiKeysRoute);
971
1012
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/v1/api-keys/[id]'));
972
- const apiKeyIdRoute = templates.generateApiKeyIdRoute();
1013
+ const apiKeyIdRoute = _strip(templates.generateApiKeyIdRoute());
973
1014
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/v1/api-keys/[id]/route.ts'), apiKeyIdRoute);
974
1015
  // API-Key management page (settings UI)
975
1016
  if (features.includes('auth')) {
@@ -981,19 +1022,19 @@ async function copyFeatureFiles(targetDir, features) {
981
1022
  const notifyLib = templates.generateNotifyProviderChangeLib();
982
1023
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/notify-provider-change.ts'), notifyLib);
983
1024
  // Provider CRUD route — /api/providers
984
- const providerCrudRoute = templates.generateProviderCrudRoute();
1025
+ const providerCrudRoute = _strip(templates.generateProviderCrudRoute());
985
1026
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers'));
986
1027
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/route.ts'), providerCrudRoute);
987
1028
  // Provider [id] route — /api/providers/[id]
988
- const providerIdRoute = templates.generateProviderIdRoute();
1029
+ const providerIdRoute = _strip(templates.generateProviderIdRoute());
989
1030
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers/[id]'));
990
1031
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/[id]/route.ts'), providerIdRoute);
991
1032
  // Provider test route — /api/providers/[id]/test
992
- const providerTestRoute = templates.generateProviderTestRoute();
1033
+ const providerTestRoute = _strip(templates.generateProviderTestRoute());
993
1034
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers/[id]/test'));
994
1035
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/[id]/test/route.ts'), providerTestRoute);
995
1036
  // Provider sync route — /api/providers/[id]/sync
996
- const providerSyncRoute = templates.generateProviderSyncRoute();
1037
+ const providerSyncRoute = _strip(templates.generateProviderSyncRoute());
997
1038
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/providers/[id]/sync'));
998
1039
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/providers/[id]/sync/route.ts'), providerSyncRoute);
999
1040
  // Internal providers route — /api/internal/providers
@@ -1070,10 +1111,6 @@ async function copyFeatureFiles(targetDir, features) {
1070
1111
  const appSettingsRoute = templates.generateAppSettingsRoute();
1071
1112
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/app-settings'));
1072
1113
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/app-settings/route.ts'), appSettingsRoute);
1073
- // useAppName client hook
1074
- const useAppNameHook = templates.generateUseAppNameHook();
1075
- await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'lib'));
1076
- await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'lib/use-app-name.ts'), useAppNameHook);
1077
1114
  // ── RBAC Permission utilities (required by admin API routes) ───
1078
1115
  const permissionsLib = `/**
1079
1116
  * Permission utility functions
@@ -1209,10 +1246,10 @@ async function getServerSessionWithPermissions() {
1209
1246
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/dashboard/prompts'));
1210
1247
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/dashboard/prompts/page.tsx'), promptsPage);
1211
1248
  // Prompts API routes
1212
- const promptsRoute = templates.generatePromptsRoute();
1249
+ const promptsRoute = _strip(templates.generatePromptsRoute());
1213
1250
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/prompts'));
1214
1251
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/prompts/route.ts'), promptsRoute);
1215
- const promptsIdRoute = templates.generatePromptsIdRoute();
1252
+ const promptsIdRoute = _strip(templates.generatePromptsIdRoute());
1216
1253
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/prompts/[id]'));
1217
1254
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/prompts/[id]/route.ts'), promptsIdRoute);
1218
1255
  }
@@ -1244,7 +1281,7 @@ async function getServerSessionWithPermissions() {
1244
1281
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/conversations/[id]/route.ts'), templates.generateConversationDetailRoute());
1245
1282
  // Models listing route (used by ModelSelector in chat — session-only, internal)
1246
1283
  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());
1284
+ await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'app/api/models/route.ts'), _strip(templates.generateModelsRoute()));
1248
1285
  // Public v1 models route (dual-auth: session OR API-key, for widgets/external apps)
1249
1286
  await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, 'app/api/v1/models'));
1250
1287
  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":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,sCAAsC,EACtC,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,8BAA8B,EAC9B,0BAA0B,EAC1B,wBAAwB,GAEzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,+BAA+B,EAC/B,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG/E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,eAAe,GAChB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,eAAe,EACf,SAAS,EACT,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;CA8DzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E7B,CAAC"}
@@ -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.95",
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": {