@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.
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +50 -13
- package/dist/templates/auth.d.ts +7 -0
- package/dist/templates/auth.d.ts.map +1 -1
- package/dist/templates/auth.js +29 -0
- package/dist/templates/index.d.ts +2 -2
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +6 -3
- package/dist/templates/prisma.d.ts +7 -0
- package/dist/templates/prisma.d.ts.map +1 -1
- package/dist/templates/prisma.js +46 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
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"}
|
package/dist/commands/create.js
CHANGED
|
@@ -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());
|
package/dist/templates/auth.d.ts
CHANGED
|
@@ -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"}
|
package/dist/templates/auth.js
CHANGED
|
@@ -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":"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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
|
package/dist/templates/index.js
CHANGED
|
@@ -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.
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
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"}
|
package/dist/templates/prisma.js
CHANGED
|
@@ -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