@deessejs/cli 0.6.2 → 0.6.4

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/bin/deesse.js CHANGED
File without changes
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Admin user creation command
3
+ *
4
+ * Implements the `deesse admin create` command for creating admin users
5
+ * via better-auth's admin plugin.
6
+ */
7
+ import 'dotenv/config';
8
+ interface AdminOptions {
9
+ email?: string;
10
+ password?: string;
11
+ name?: string;
12
+ cwd?: string;
13
+ }
14
+ export declare function adminCreate(options: AdminOptions): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=admin-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-create.d.ts","sourceRoot":"","sources":["../../src/commands/admin-create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,eAAe,CAAC;AAUvB,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAsQD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtE"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Admin user creation command
3
+ *
4
+ * Implements the `deesse admin create` command for creating admin users
5
+ * via better-auth's admin plugin.
6
+ */
7
+ import * as p from '@clack/prompts';
8
+ import { z } from 'zod';
9
+ import * as path from 'node:path';
10
+ import { pathToFileURL } from 'node:url';
11
+ import { createRequire } from 'module';
12
+ // Load environment variables
13
+ import 'dotenv/config';
14
+ const AdminSchema = z.object({
15
+ email: z.string().email('Invalid email format'),
16
+ password: z.string().min(8, 'Password must be at least 8 characters'),
17
+ name: z.string().min(1, 'Name is required').default('Admin'),
18
+ });
19
+ // Public email domains that should warn users
20
+ const PUBLIC_EMAIL_DOMAINS = [
21
+ 'gmail.com',
22
+ 'yahoo.com',
23
+ 'hotmail.com',
24
+ 'outlook.com',
25
+ 'icloud.com',
26
+ 'mail.com',
27
+ 'aol.com',
28
+ ];
29
+ function isPublicEmailDomain(email) {
30
+ const domain = email.split('@')[1]?.toLowerCase();
31
+ return PUBLIC_EMAIL_DOMAINS.includes(domain);
32
+ }
33
+ function warnPublicEmail(email) {
34
+ p.log.warn(`Warning: ${email} is a public email domain.\n` +
35
+ ' Admin accounts should use organizational email addresses.');
36
+ }
37
+ const ERROR_MAP = {
38
+ USER_ALREADY_EXISTS: {
39
+ message: 'A user with this email already exists',
40
+ suggestion: 'Use a different email or check if an admin already exists',
41
+ },
42
+ DATABASE_ERROR: {
43
+ message: 'Cannot connect to database',
44
+ suggestion: 'Check DATABASE_URL in your .env file and ensure PostgreSQL is running',
45
+ },
46
+ INVALID_PASSWORD: {
47
+ message: 'Password must be at least 8 characters',
48
+ suggestion: 'Choose a longer password',
49
+ },
50
+ CONNECTION_REFUSED: {
51
+ message: 'Database connection refused',
52
+ suggestion: 'Ensure PostgreSQL is running and DATABASE_URL is correct',
53
+ },
54
+ };
55
+ function handleError(error) {
56
+ const err = error;
57
+ const code = err.code || '';
58
+ const mapped = ERROR_MAP[code];
59
+ if (mapped) {
60
+ p.log.error(mapped.message);
61
+ p.log.info(mapped.suggestion);
62
+ process.exit(1);
63
+ }
64
+ // Fallback for unknown errors
65
+ p.log.error('Unexpected error: ' + (error instanceof Error ? error.message : String(error)));
66
+ process.exit(1);
67
+ }
68
+ function validateEmail(value) {
69
+ if (!value)
70
+ return 'Email is required';
71
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
72
+ if (!emailRegex.test(value))
73
+ return 'Invalid email format';
74
+ return undefined;
75
+ }
76
+ function validatePassword(value) {
77
+ if (value.length < 8)
78
+ return 'Password must be at least 8 characters';
79
+ return undefined;
80
+ }
81
+ async function promptForAdminDetails() {
82
+ p.intro('Creating admin user');
83
+ const emailResult = await p.text({
84
+ message: 'Admin email:',
85
+ validate: validateEmail,
86
+ });
87
+ if (p.isCancel(emailResult)) {
88
+ p.cancel('Operation cancelled.');
89
+ process.exit(0);
90
+ }
91
+ if (isPublicEmailDomain(emailResult)) {
92
+ p.log.warn(`Warning: ${emailResult} is a public email domain.\n` +
93
+ ' Admin accounts should use organizational email addresses.');
94
+ }
95
+ const passwordResult = await p.password({
96
+ message: 'Admin password:',
97
+ mask: true,
98
+ validate: validatePassword,
99
+ });
100
+ if (p.isCancel(passwordResult)) {
101
+ p.cancel('Operation cancelled.');
102
+ process.exit(0);
103
+ }
104
+ const nameResult = await p.text({
105
+ message: 'Admin display name:',
106
+ defaultValue: 'Admin',
107
+ });
108
+ if (p.isCancel(nameResult)) {
109
+ p.cancel('Operation cancelled.');
110
+ process.exit(0);
111
+ }
112
+ return {
113
+ email: emailResult,
114
+ password: passwordResult,
115
+ name: nameResult || 'Admin',
116
+ };
117
+ }
118
+ function validateInput(options) {
119
+ const result = AdminSchema.safeParse(options);
120
+ if (!result.success) {
121
+ const error = result.error.errors[0];
122
+ throw new Error(`${error.path.join('.')}: ${error.message}`);
123
+ }
124
+ return result.data;
125
+ }
126
+ async function loadConfig(cwd) {
127
+ const CONFIG_PATHS = ['src/deesse.config.ts', 'deesse.config.ts', 'config/deesse.ts'];
128
+ let configModule = null;
129
+ let configPath = '';
130
+ for (const configFile of CONFIG_PATHS) {
131
+ configPath = path.resolve(cwd, configFile);
132
+ try {
133
+ // Windows ESM compatibility: use file:// URL
134
+ const url = pathToFileURL(configPath).toString();
135
+ configModule = await import(url);
136
+ break;
137
+ }
138
+ catch (error) {
139
+ const err = error;
140
+ if (err.code !== 'ENOENT') {
141
+ throw error;
142
+ }
143
+ }
144
+ }
145
+ if (!configModule) {
146
+ throw new Error(`Config file not found. Searched paths:\n` +
147
+ CONFIG_PATHS.map((p) => ` - ${p}`).join('\n') +
148
+ `\nRun 'deesse init' to create a new project.`);
149
+ }
150
+ const rawConfig = configModule.default ||
151
+ configModule.config;
152
+ if (!rawConfig) {
153
+ throw new Error(`No config found in ${configPath}`);
154
+ }
155
+ return rawConfig;
156
+ }
157
+ async function createAdminUser(options) {
158
+ const { email, password, name, cwd = process.cwd() } = options;
159
+ // Load the deesse config
160
+ const rawConfig = await loadConfig(cwd);
161
+ // Dynamically import defineConfig to process the config
162
+ const require = createRequire(import.meta.url);
163
+ let defineConfig = null;
164
+ try {
165
+ // Use require for CJS module
166
+ const deesse = require('deesse');
167
+ defineConfig = deesse.defineConfig;
168
+ }
169
+ catch {
170
+ // defineConfig not available, we'll do basic checks
171
+ }
172
+ let config = null;
173
+ if (defineConfig) {
174
+ config = defineConfig(rawConfig);
175
+ }
176
+ else {
177
+ // If we can't load defineConfig, assume rawConfig is already processed or use it directly
178
+ config = rawConfig;
179
+ }
180
+ // Check if admin plugin is configured
181
+ const hasAdminPlugin = config?.auth?.plugins?.some((p) => {
182
+ const pluginStr = String(p);
183
+ return pluginStr.includes('admin') || pluginStr.includes('Admin');
184
+ }) ?? false;
185
+ if (!hasAdminPlugin) {
186
+ throw new Error('Admin plugin not configured. Add admin() to your auth.plugins in deesse.config.ts:\n\n' +
187
+ ' import { admin } from "better-auth/plugins";\n\n' +
188
+ ' export const config = defineConfig({\n' +
189
+ ' auth: {\n' +
190
+ ' plugins: [admin()],\n' +
191
+ ' },\n' +
192
+ ' });');
193
+ }
194
+ // Get better-auth instance - using require for better module resolution
195
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
196
+ const betterAuth = require('better-auth');
197
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
198
+ const betterAuthDrizzleAdapter = require('@better-auth/drizzle-adapter');
199
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
200
+ const drizzleOrm = require('drizzle-orm');
201
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
202
+ const pg = require('pg');
203
+ const Pool = pg.Pool;
204
+ // Create database client
205
+ const databaseUrl = process.env['DATABASE_URL'];
206
+ if (!databaseUrl) {
207
+ throw new Error('DATABASE_URL not found in environment. Check your .env file.');
208
+ }
209
+ // Create better-auth instance with admin plugin
210
+ const pool = new Pool({ connectionString: databaseUrl });
211
+ const auth = betterAuth.betterAuth({
212
+ database: betterAuthDrizzleAdapter.drizzleAdapter(drizzleOrm.drizzle(pool)),
213
+ plugins: [betterAuth.admin()],
214
+ });
215
+ // Create admin user via better-auth API
216
+ const result = await auth.api.createUser({
217
+ body: {
218
+ email,
219
+ password,
220
+ name,
221
+ role: 'admin',
222
+ },
223
+ });
224
+ await pool.end();
225
+ return result;
226
+ }
227
+ function printSuccess(result) {
228
+ p.log.success('Admin user created successfully!');
229
+ p.log.info(`Email: ${result.user.email}`);
230
+ p.log.info(`Name: ${result.user.name}`);
231
+ p.log.info(`ID: ${result.user.id.slice(0, 8)}...`);
232
+ }
233
+ export async function adminCreate(options) {
234
+ try {
235
+ // Normalize options
236
+ const opts = {
237
+ name: options.name || 'Admin',
238
+ cwd: options.cwd || process.cwd(),
239
+ };
240
+ // If email and password provided via CLI args, use them directly
241
+ // Otherwise prompt interactively
242
+ let adminInput;
243
+ if (options.email && options.password) {
244
+ opts['email'] = options.email;
245
+ opts['password'] = options.password;
246
+ p.log.info('Creating admin user with provided credentials...');
247
+ adminInput = validateInput(opts);
248
+ }
249
+ else {
250
+ adminInput = await promptForAdminDetails();
251
+ }
252
+ // Validate email domain
253
+ if (isPublicEmailDomain(adminInput.email)) {
254
+ warnPublicEmail(adminInput.email);
255
+ }
256
+ // Create the admin user
257
+ const result = await createAdminUser({ ...adminInput, cwd: opts['cwd'] });
258
+ printSuccess(result);
259
+ }
260
+ catch (error) {
261
+ handleError(error);
262
+ }
263
+ }
264
+ //# sourceMappingURL=admin-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-create.js","sourceRoot":"","sources":["../../src/commands/admin-create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Admin command for managing admin users
3
+ *
4
+ * Usage: deesse admin create [options]
5
+ */
6
+ export interface AdminCreateOptions {
7
+ email?: string;
8
+ password?: string;
9
+ name?: string;
10
+ cwd?: string;
11
+ }
12
+ export declare const adminCommand: {
13
+ name: "admin";
14
+ description: string;
15
+ subcommands: {
16
+ name: "create";
17
+ description: string;
18
+ options: ({
19
+ name: string;
20
+ description: string;
21
+ default?: undefined;
22
+ } | {
23
+ name: string;
24
+ description: string;
25
+ default: string;
26
+ })[];
27
+ }[];
28
+ };
29
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;CAexB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Admin command for managing admin users
3
+ *
4
+ * Usage: deesse admin create [options]
5
+ */
6
+ export const adminCommand = {
7
+ name: 'admin',
8
+ description: 'Manage admin users',
9
+ subcommands: [
10
+ {
11
+ name: 'create',
12
+ description: 'Create an admin user',
13
+ options: [
14
+ { name: '--email <email>', description: 'Admin email address' },
15
+ { name: '--password <password>', description: 'Admin password (min 8 characters)' },
16
+ { name: '--name <name>', description: 'Admin display name', default: 'Admin' },
17
+ { name: '--cwd <path>', description: 'Working directory', default: process.cwd() },
18
+ ],
19
+ },
20
+ ],
21
+ };
22
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,OAAgB;IACtB,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE;QACX;YACE,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAE;gBAC/D,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,mCAAmC,EAAE;gBACnF,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE;gBAC9E,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;aACnF;SACF;KACF;CACF,CAAC"}
@@ -1,14 +1,16 @@
1
1
  /**
2
2
  * db:migrate command
3
3
  *
4
- * Verifies schema setup and provides instructions for applying migrations.
4
+ * Verifies schema and config exist, then delegates to drizzle-kit CLI.
5
5
  *
6
- * For Drizzle, run:
7
- * npx drizzle-kit migrate
6
+ * Requirements:
7
+ * - src/db/schema.ts: Your Drizzle tables
8
+ * - drizzle.config.ts: Standard drizzle-kit config with schema and dbCredentials
9
+ * - .env: Should contain DATABASE_URL
8
10
  */
9
11
  export interface DbMigrateOptions {
10
12
  cwd?: string;
11
13
  dryRun?: boolean;
12
14
  }
13
- export declare function dbMigrate(_options?: DbMigrateOptions): Promise<void>;
15
+ export declare function dbMigrate(options?: DbMigrateOptions): Promise<void>;
14
16
  //# sourceMappingURL=db-migrate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-migrate.d.ts","sourceRoot":"","sources":["../../src/commands/db-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,QAAQ,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB9E"}
1
+ {"version":3,"file":"db-migrate.d.ts","sourceRoot":"","sources":["../../src/commands/db-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE7E"}
@@ -1,13 +1,21 @@
1
1
  /**
2
2
  * db:migrate command
3
3
  *
4
- * Verifies schema setup and provides instructions for applying migrations.
4
+ * Verifies schema and config exist, then delegates to drizzle-kit CLI.
5
5
  *
6
- * For Drizzle, run:
7
- * npx drizzle-kit migrate
6
+ * Requirements:
7
+ * - src/db/schema.ts: Your Drizzle tables
8
+ * - drizzle.config.ts: Standard drizzle-kit config with schema and dbCredentials
9
+ * - .env: Should contain DATABASE_URL
8
10
  */
11
+ import { spawn } from 'node:child_process';
9
12
  import { verifySchemaPath, SCHEMA_PATH } from '../utils/schema-loader.js';
10
- export async function dbMigrate(_options = {}) {
13
+ import * as fs from 'node:fs/promises';
14
+ import * as path from 'node:path';
15
+ import * as dotenv from 'dotenv';
16
+ const DRIZZLE_CONFIG_PATH = './drizzle.config.ts';
17
+ export async function dbMigrate(options = {}) {
18
+ const { cwd = process.cwd(), dryRun = false } = options;
11
19
  // Verify schema file exists
12
20
  try {
13
21
  await verifySchemaPath();
@@ -16,18 +24,51 @@ export async function dbMigrate(_options = {}) {
16
24
  throw new Error(`db:migrate requires ${SCHEMA_PATH} to exist.\n` +
17
25
  `Please create this file and export your Drizzle tables.`);
18
26
  }
19
- console.warn(`
20
- Database Schema OK: ${SCHEMA_PATH}
21
-
22
- To apply pending migrations with Drizzle, run:
23
-
24
- npx drizzle-kit migrate
25
-
26
- Use --dry-run to see what would be applied:
27
-
28
- npx drizzle-kit migrate --dry
29
-
30
- Note: This command requires a drizzle.config.ts file. See 'deesse db:generate' for setup.
31
- `);
27
+ // Verify drizzle.config.ts exists
28
+ const drizzleConfigPath = path.join(cwd, DRIZZLE_CONFIG_PATH);
29
+ try {
30
+ await fs.access(drizzleConfigPath);
31
+ }
32
+ catch {
33
+ throw new Error(`db:migrate requires ${DRIZZLE_CONFIG_PATH} to exist.\n` +
34
+ `Please create this file with your drizzle-kit configuration.\n\n` +
35
+ `Example:\n` +
36
+ `import { defineConfig } from 'drizzle-kit';\n` +
37
+ `export default defineConfig({\n` +
38
+ ` schema: './src/db/schema.ts',\n` +
39
+ ` out: './src/db/migrations',\n` +
40
+ ` dialect: 'postgresql',\n` +
41
+ ` dbCredentials: {\n` +
42
+ ` url: process.env.DATABASE_URL!,\n` +
43
+ ` },\n` +
44
+ `});`);
45
+ }
46
+ console.warn('Applying migrations with drizzle-kit...');
47
+ // Load .env file
48
+ dotenv.config();
49
+ // Build command
50
+ const cmd = dryRun ? 'npx drizzle-kit migrate --dry' : 'npx drizzle-kit migrate';
51
+ // Use spawn with shell:true so .env is inherited
52
+ return new Promise((resolve, reject) => {
53
+ const child = spawn(cmd, {
54
+ cwd,
55
+ stdio: 'inherit',
56
+ shell: true,
57
+ });
58
+ child.on('close', (code) => {
59
+ if (code === 0) {
60
+ resolve();
61
+ }
62
+ else {
63
+ reject(new Error(`Command failed: npx drizzle-kit migrate${dryRun ? ' --dry' : ''}`));
64
+ }
65
+ });
66
+ child.on('error', (error) => {
67
+ if (error.code === 'ENOENT') {
68
+ reject(new Error('drizzle-kit not found. Please install it: npm install drizzle-kit'));
69
+ }
70
+ reject(error);
71
+ });
72
+ });
32
73
  }
33
74
  //# sourceMappingURL=db-migrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-migrate.js","sourceRoot":"","sources":["../../src/commands/db-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO1E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,WAA6B,EAAE;IAC7D,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uBAAuB,WAAW,cAAc;YAChD,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;sBACO,WAAW;;;;;;;;;;;CAWhC,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"db-migrate.js","sourceRoot":"","sources":["../../src/commands/db-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAOlD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA4B,EAAE;IAC5D,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAExD,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uBAAuB,WAAW,cAAc;YAChD,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uBAAuB,mBAAmB,cAAc;YACxD,kEAAkE;YAClE,YAAY;YACZ,+CAA+C;YAC/C,iCAAiC;YACjC,mCAAmC;YACnC,iCAAiC;YACjC,4BAA4B;YAC5B,sBAAsB;YACtB,uCAAuC;YACvC,QAAQ;YACR,KAAK,CACN,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAExD,iBAAiB;IACjB,MAAM,CAAC,MAAM,EAAE,CAAC;IAEhB,gBAAgB;IAChB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,yBAAyB,CAAC;IAEjF,iDAAiD;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE;YACvB,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -4,6 +4,7 @@
4
4
  * Handles all db:* subcommands:
5
5
  * - db:generate Generate migrations from schema changes
6
6
  * - db:push Push schema changes directly (dev only)
7
+ * - db:migrate Apply pending migrations to database
7
8
  */
8
9
  export interface DbCommandOptions {
9
10
  subcommand: string;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/commands/db.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3E;AA4BD,wBAAgB,UAAU,IAAI,IAAI,CAwBjC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/commands/db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B3E;AA0CD,wBAAgB,UAAU,IAAI,IAAI,CA+BjC"}
@@ -4,9 +4,11 @@
4
4
  * Handles all db:* subcommands:
5
5
  * - db:generate Generate migrations from schema changes
6
6
  * - db:push Push schema changes directly (dev only)
7
+ * - db:migrate Apply pending migrations to database
7
8
  */
8
9
  import { dbGenerate } from './db-generate.js';
9
10
  import { dbPush } from './db-push.js';
11
+ import { dbMigrate } from './db-migrate.js';
10
12
  export async function runDbCommand(options) {
11
13
  const { subcommand, args } = options;
12
14
  switch (subcommand) {
@@ -20,9 +22,14 @@ export async function runDbCommand(options) {
20
22
  await dbPush(opts);
21
23
  break;
22
24
  }
25
+ case 'migrate': {
26
+ const opts = parseDbMigrateArgs(args);
27
+ await dbMigrate(opts);
28
+ break;
29
+ }
23
30
  default:
24
31
  throw new Error(`Unknown db command: ${subcommand}\n` +
25
- `Valid commands: generate, push`);
32
+ `Valid commands: generate, push, migrate`);
26
33
  }
27
34
  }
28
35
  function parseDbGenerateArgs(args) {
@@ -46,6 +53,18 @@ function parseDbPushArgs(args) {
46
53
  }
47
54
  return opts;
48
55
  }
56
+ function parseDbMigrateArgs(args) {
57
+ const opts = {};
58
+ for (let i = 0; i < args.length; i++) {
59
+ if (args[i] === '--cwd' && i + 1 < args.length) {
60
+ opts.cwd = args[++i];
61
+ }
62
+ else if (args[i] === '--dry-run') {
63
+ opts.dryRun = true;
64
+ }
65
+ }
66
+ return opts;
67
+ }
49
68
  export function showDbHelp() {
50
69
  console.warn(`
51
70
  Deesse DB Commands
@@ -55,6 +74,7 @@ Usage: npx deesse db:<command> [options]
55
74
  Commands:
56
75
  db:generate Generate migrations from schema changes
57
76
  db:push Push schema changes directly to database
77
+ db:migrate Apply pending migrations to database
58
78
 
59
79
  Options:
60
80
 
@@ -65,10 +85,16 @@ Options:
65
85
  --cwd <path> Set working directory
66
86
  --force, -f Force push without confirmation
67
87
 
88
+ db:migrate
89
+ --cwd <path> Set working directory
90
+ --dry-run Show what would be migrated without executing
91
+
68
92
  Examples:
69
93
  npx deesse db:generate
70
94
  npx deesse db:push
71
95
  npx deesse db:push --force
96
+ npx deesse db:migrate
97
+ npx deesse db:migrate --dry-run
72
98
  `);
73
99
  }
74
100
  //# sourceMappingURL=db.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/commands/db.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAOtC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC1D,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAErC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM;QACR,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CACb,uBAAuB,UAAU,IAAI;gBACrC,gCAAgC,CACjC,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,MAAM,IAAI,GAAqB,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,IAAI,GAAsC,EAAE,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBd,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/commands/db.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC1D,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAErC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM;QACR,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM;QACR,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CACb,uBAAuB,UAAU,IAAI;gBACrC,yCAAyC,CAC1C,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,MAAM,IAAI,GAAqB,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,IAAI,GAAsC,EAAE,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,IAAI,GAAuC,EAAE,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bd,CAAC,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import * as p from '@clack/prompts';
3
3
  import { readFileSync } from 'node:fs';
4
4
  import { execSync } from 'node:child_process';
5
5
  import { runDbCommand, showDbHelp } from './commands/db.js';
6
+ import { adminCreate } from './commands/admin-create.js';
6
7
  const getVersion = () => {
7
8
  try {
8
9
  const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
@@ -22,12 +23,14 @@ Commands:
22
23
  help Show this help message
23
24
  init Initialize a new DeesseJS project in current directory
24
25
  db Database management commands (db:generate, db:push, etc.)
26
+ admin Admin user management (admin create)
25
27
 
26
28
  Examples:
27
29
  npx deesse help
28
30
  npx deesse init
29
31
  npx deesse db:generate
30
32
  npx deesse db:push --force
33
+ npx deesse admin create
31
34
 
32
35
  For more information, visit: https://github.com/nesalia-inc/deessejs
33
36
  `);
@@ -55,6 +58,24 @@ const runInit = async () => {
55
58
  process.exit(1);
56
59
  }
57
60
  };
61
+ function parseAdminCreateArgs(args) {
62
+ const opts = {};
63
+ for (let i = 0; i < args.length; i++) {
64
+ if (args[i] === '--email' && i + 1 < args.length) {
65
+ opts.email = args[++i];
66
+ }
67
+ else if (args[i] === '--password' && i + 1 < args.length) {
68
+ opts.password = args[++i];
69
+ }
70
+ else if (args[i] === '--name' && i + 1 < args.length) {
71
+ opts.name = args[++i];
72
+ }
73
+ else if (args[i] === '--cwd' && i + 1 < args.length) {
74
+ opts.cwd = args[++i];
75
+ }
76
+ }
77
+ return opts;
78
+ }
58
79
  async function main() {
59
80
  const args = process.argv.slice(2);
60
81
  const command = args[0] || 'help';
@@ -82,6 +103,47 @@ async function main() {
82
103
  }
83
104
  return;
84
105
  }
106
+ // Handle admin commands
107
+ if (command === 'admin') {
108
+ const subcommand = args[1];
109
+ const subArgs = args.slice(2);
110
+ if (!subcommand || subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
111
+ console.warn(`
112
+ DeesseJS Admin Commands
113
+
114
+ Usage: npx deesse admin <command>
115
+
116
+ Commands:
117
+ admin create Create an admin user
118
+
119
+ Options:
120
+ --email <email> Admin email address
121
+ --password <password> Admin password (min 8 characters)
122
+ --name <name> Admin display name (default: Admin)
123
+ --cwd <path> Working directory
124
+
125
+ Examples:
126
+ npx deesse admin create
127
+ npx deesse admin create --email admin@example.com --password Secur3P@ss!
128
+ `);
129
+ return;
130
+ }
131
+ if (subcommand === 'create') {
132
+ const opts = parseAdminCreateArgs(subArgs);
133
+ try {
134
+ await adminCreate(opts);
135
+ }
136
+ catch (error) {
137
+ console.error(`Error: ${error.message}`);
138
+ process.exit(1);
139
+ }
140
+ return;
141
+ }
142
+ console.error(`Unknown admin command: ${subcommand}`);
143
+ console.error('Run "npx deesse admin help" for usage information.');
144
+ process.exit(1);
145
+ return;
146
+ }
85
147
  switch (command) {
86
148
  case 'help':
87
149
  case '--help':
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deessejs/cli",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "description": "DeesseJS CLI for managing DeesseJS projects",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,6 +16,14 @@
16
16
  "bin",
17
17
  "dist"
18
18
  ],
19
+ "scripts": {
20
+ "dev": "tsc --watch",
21
+ "build": "tsc",
22
+ "type-check": "tsc --noEmit",
23
+ "lint": "eslint src",
24
+ "lint:fix": "eslint src --fix",
25
+ "clean": "rm -rf dist"
26
+ },
19
27
  "keywords": [
20
28
  "cli",
21
29
  "deessejs",
@@ -24,8 +32,13 @@
24
32
  "author": "DeesseJS",
25
33
  "license": "MIT",
26
34
  "dependencies": {
35
+ "@better-auth/drizzle-adapter": "^1.0.0",
27
36
  "@clack/prompts": "^0.8.2",
28
- "dotenv": "^17.3.1"
37
+ "better-auth": "^1.0.0",
38
+ "dotenv": "^17.3.1",
39
+ "drizzle-orm": "^0.38.0",
40
+ "pg": "^8.13.0",
41
+ "zod": "^3.23.0"
29
42
  },
30
43
  "devDependencies": {
31
44
  "@types/node": "^22.10.6",
@@ -33,13 +46,5 @@
33
46
  },
34
47
  "engines": {
35
48
  "node": ">=18.0.0"
36
- },
37
- "scripts": {
38
- "dev": "tsc --watch",
39
- "build": "tsc",
40
- "type-check": "tsc --noEmit",
41
- "lint": "eslint src",
42
- "lint:fix": "eslint src --fix",
43
- "clean": "rm -rf dist"
44
49
  }
45
- }
50
+ }