@neetru/cli 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/commands/agent-release.d.ts +13 -0
  2. package/dist/commands/agent-release.js +204 -0
  3. package/dist/commands/agent-release.js.map +1 -0
  4. package/dist/commands/agent-write.d.ts +12 -0
  5. package/dist/commands/agent-write.js +94 -0
  6. package/dist/commands/agent-write.js.map +1 -0
  7. package/dist/commands/api-catalog.d.ts +20 -0
  8. package/dist/commands/api-catalog.js +126 -0
  9. package/dist/commands/api-catalog.js.map +1 -0
  10. package/dist/commands/audit.d.ts +8 -0
  11. package/dist/commands/audit.js +69 -0
  12. package/dist/commands/audit.js.map +1 -0
  13. package/dist/commands/billing.d.ts +6 -0
  14. package/dist/commands/billing.js +69 -0
  15. package/dist/commands/billing.js.map +1 -0
  16. package/dist/commands/build.js +10 -3
  17. package/dist/commands/build.js.map +1 -1
  18. package/dist/commands/cloud-run.d.ts +11 -0
  19. package/dist/commands/cloud-run.js +87 -0
  20. package/dist/commands/cloud-run.js.map +1 -0
  21. package/dist/commands/deploy.d.ts +7 -0
  22. package/dist/commands/deploy.js +150 -17
  23. package/dist/commands/deploy.js.map +1 -1
  24. package/dist/commands/deployments.d.ts +11 -0
  25. package/dist/commands/deployments.js +69 -0
  26. package/dist/commands/deployments.js.map +1 -0
  27. package/dist/commands/dr.d.ts +11 -0
  28. package/dist/commands/dr.js +79 -0
  29. package/dist/commands/dr.js.map +1 -0
  30. package/dist/commands/infra-read.d.ts +9 -0
  31. package/dist/commands/infra-read.js +113 -0
  32. package/dist/commands/infra-read.js.map +1 -0
  33. package/dist/commands/init.d.ts +13 -1
  34. package/dist/commands/init.js +327 -70
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/products-db.d.ts +37 -0
  37. package/dist/commands/products-db.js +230 -0
  38. package/dist/commands/products-db.js.map +1 -0
  39. package/dist/commands/products.d.ts +12 -0
  40. package/dist/commands/products.js +97 -0
  41. package/dist/commands/products.js.map +1 -0
  42. package/dist/commands/servers.d.ts +23 -0
  43. package/dist/commands/servers.js +166 -0
  44. package/dist/commands/servers.js.map +1 -0
  45. package/dist/commands/support.d.ts +25 -0
  46. package/dist/commands/support.js +184 -0
  47. package/dist/commands/support.js.map +1 -0
  48. package/dist/commands/surface-status.d.ts +5 -0
  49. package/dist/commands/surface-status.js +63 -0
  50. package/dist/commands/surface-status.js.map +1 -0
  51. package/dist/commands/tenants.d.ts +34 -0
  52. package/dist/commands/tenants.js +179 -0
  53. package/dist/commands/tenants.js.map +1 -0
  54. package/dist/commands/workspaces.d.ts +15 -0
  55. package/dist/commands/workspaces.js +72 -0
  56. package/dist/commands/workspaces.js.map +1 -0
  57. package/dist/index.js +775 -6
  58. package/dist/index.js.map +1 -1
  59. package/dist/lib/api-client.d.ts +18 -0
  60. package/dist/lib/api-client.js +124 -4
  61. package/dist/lib/api-client.js.map +1 -1
  62. package/dist/lib/cli-read.d.ts +13 -0
  63. package/dist/lib/cli-read.js +103 -0
  64. package/dist/lib/cli-read.js.map +1 -0
  65. package/dist/lib/cli-write.d.ts +47 -0
  66. package/dist/lib/cli-write.js +137 -0
  67. package/dist/lib/cli-write.js.map +1 -0
  68. package/dist/lib/config-schema.d.ts +10 -10
  69. package/dist/lib/render.d.ts +16 -0
  70. package/dist/lib/render.js +74 -0
  71. package/dist/lib/render.js.map +1 -0
  72. package/package.json +4 -4
@@ -1,46 +1,240 @@
1
1
  import * as fs from 'fs/promises';
2
2
  import * as path from 'path';
3
3
  import ora from 'ora';
4
+ import inquirer from 'inquirer';
4
5
  import { log } from '../utils/logger.js';
6
+ /**
7
+ * Inspeciona um diretório pra decidir se é projeto existente, vazio, ou
8
+ * misto. Usado pra escolher merge vs new dir vs abort.
9
+ */
10
+ async function inspectDir(dir) {
11
+ try {
12
+ const entries = await fs.readdir(dir);
13
+ const files = entries.filter((e) => !e.startsWith('.DS_Store'));
14
+ return {
15
+ exists: true,
16
+ isEmpty: files.length === 0,
17
+ hasPackageJson: entries.includes('package.json'),
18
+ hasSrc: entries.includes('src'),
19
+ hasGit: entries.includes('.git'),
20
+ hasNeetruConfig: entries.includes('neetru.config.json'),
21
+ fileCount: files.length,
22
+ };
23
+ }
24
+ catch {
25
+ return {
26
+ exists: false,
27
+ isEmpty: true,
28
+ hasPackageJson: false,
29
+ hasSrc: false,
30
+ hasGit: false,
31
+ hasNeetruConfig: false,
32
+ fileCount: 0,
33
+ };
34
+ }
35
+ }
36
+ /**
37
+ * Decide o caminho final + modo (new|merge|abort) interativamente.
38
+ * Imprime hints pra dev entender porque cada opção aparece.
39
+ */
40
+ async function resolveTarget(name, cwd, opts) {
41
+ const subDir = path.resolve(cwd, name);
42
+ const customDir = opts.path ? path.resolve(cwd, opts.path) : null;
43
+ const cwdInspection = await inspectDir(cwd);
44
+ // ── Flags explícitas curtem o prompt ─────────────────────────────────
45
+ if (opts.here) {
46
+ return { dir: cwd, mode: 'merge', force: Boolean(opts.force) };
47
+ }
48
+ if (customDir) {
49
+ const insp = await inspectDir(customDir);
50
+ if (insp.exists && !insp.isEmpty && !opts.force) {
51
+ log.warn(`${customDir} tem ${insp.fileCount} arquivo(s). Use --force pra sobrescrever ou prossiga em modo merge.`);
52
+ return null;
53
+ }
54
+ return {
55
+ dir: customDir,
56
+ mode: insp.hasPackageJson ? 'merge' : 'new',
57
+ force: Boolean(opts.force),
58
+ };
59
+ }
60
+ // ── Modo non-interactive sem flags ───────────────────────────────────
61
+ if (opts.yes) {
62
+ // Default: cria subdir <cwd>/<name>
63
+ const insp = await inspectDir(subDir);
64
+ if (insp.exists && !insp.isEmpty) {
65
+ log.error(`Diretório "${name}" já existe com arquivos. Use --here ou --path ou --force.`);
66
+ return null;
67
+ }
68
+ return { dir: subDir, mode: 'new', force: false };
69
+ }
70
+ // ── Interactive ──────────────────────────────────────────────────────
71
+ console.log();
72
+ log.info(`Onde você quer inicializar o projeto "${name}"?`);
73
+ console.log();
74
+ log.dim(` cwd atual: ${cwd}`);
75
+ if (cwdInspection.hasPackageJson) {
76
+ log.dim(` ⚠ cwd já tem package.json — parece projeto existente`);
77
+ }
78
+ else if (!cwdInspection.isEmpty) {
79
+ log.dim(` ⚠ cwd tem ${cwdInspection.fileCount} arquivo(s)`);
80
+ }
81
+ else {
82
+ log.dim(` cwd está vazio`);
83
+ }
84
+ if (cwdInspection.hasNeetruConfig) {
85
+ log.dim(` ⚠ cwd já tem neetru.config.json — projeto Neetru existente`);
86
+ }
87
+ console.log();
88
+ const choices = [
89
+ {
90
+ name: `Criar novo subdiretório → ./${name}/`,
91
+ value: 'subdir',
92
+ short: 'subdir',
93
+ },
94
+ ];
95
+ if (cwdInspection.exists) {
96
+ const label = cwdInspection.hasPackageJson
97
+ ? `Mesclar no cwd atual (merge — preserva arquivos) → ${cwd}`
98
+ : cwdInspection.isEmpty
99
+ ? `Inicializar AQUI no cwd vazio → ${cwd}`
100
+ : `Mesclar no cwd (tem ${cwdInspection.fileCount} arq, vai preservar) → ${cwd}`;
101
+ choices.push({ name: label, value: 'here', short: 'here' });
102
+ }
103
+ choices.push({ name: 'Outro caminho (digite)', value: 'custom', short: 'custom' }, { name: 'Cancelar', value: 'abort', short: 'cancel' });
104
+ const { choice } = await inquirer.prompt([
105
+ { type: 'list', name: 'choice', message: 'Caminho do init:', choices },
106
+ ]);
107
+ if (choice === 'abort') {
108
+ log.warn('Cancelado.');
109
+ return null;
110
+ }
111
+ let dir;
112
+ let mode;
113
+ if (choice === 'here') {
114
+ dir = cwd;
115
+ mode = cwdInspection.isEmpty ? 'new' : 'merge';
116
+ }
117
+ else if (choice === 'custom') {
118
+ const { custom } = await inquirer.prompt([
119
+ { type: 'input', name: 'custom', message: 'Caminho (relativo ou absoluto):', default: `./${name}` },
120
+ ]);
121
+ dir = path.resolve(cwd, custom);
122
+ const insp = await inspectDir(dir);
123
+ mode = insp.isEmpty || !insp.exists ? 'new' : 'merge';
124
+ }
125
+ else {
126
+ dir = subDir;
127
+ const insp = await inspectDir(dir);
128
+ if (insp.exists && !insp.isEmpty) {
129
+ log.warn(`./${name} já existe com ${insp.fileCount} arquivo(s).`);
130
+ const { proceed } = await inquirer.prompt([
131
+ {
132
+ type: 'list',
133
+ name: 'proceed',
134
+ message: 'O que fazer?',
135
+ choices: [
136
+ { name: 'Merge (preserva existentes, adiciona scaffold)', value: 'merge' },
137
+ { name: 'Cancelar', value: 'abort' },
138
+ ],
139
+ },
140
+ ]);
141
+ if (proceed === 'abort') {
142
+ log.warn('Cancelado.');
143
+ return null;
144
+ }
145
+ mode = 'merge';
146
+ }
147
+ else {
148
+ mode = 'new';
149
+ }
150
+ }
151
+ // ── Confirmação final ─────────────────────────────────────────────────
152
+ console.log();
153
+ log.info(`Vou ${mode === 'merge' ? 'MESCLAR scaffold em' : 'CRIAR estrutura em'}: ${dir}`);
154
+ if (mode === 'merge') {
155
+ log.dim(` → arquivos existentes serão PRESERVADOS (skip silencioso).`);
156
+ log.dim(` → só arquivos ausentes do scaffold serão criados.`);
157
+ }
158
+ const { confirm } = await inquirer.prompt([
159
+ { type: 'confirm', name: 'confirm', message: 'Confirma?', default: true },
160
+ ]);
161
+ if (!confirm) {
162
+ log.warn('Cancelado.');
163
+ return null;
164
+ }
165
+ return { dir, mode, force: false };
166
+ }
167
+ /**
168
+ * Wrapper write-if-missing — preserva existentes em modo merge.
169
+ */
170
+ function makeWriter(mode, force) {
171
+ return async function writeFileSafe(filePath, content) {
172
+ if (mode === 'merge' && !force) {
173
+ try {
174
+ await fs.access(filePath);
175
+ return 'skipped'; // já existe, preserva
176
+ }
177
+ catch {
178
+ // não existe, escreve
179
+ }
180
+ }
181
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
182
+ await fs.writeFile(filePath, content);
183
+ return 'wrote';
184
+ };
185
+ }
5
186
  /**
6
187
  * Scaffold de projeto SaaS Neetru.
7
188
  * Gera estrutura mínima com Core SDK wired: auth, tenant gate, billing hook.
189
+ *
190
+ * v2.1.1 (2026-05-16): adiciona prompt interativo de caminho + merge mode +
191
+ * preservação de arquivos existentes. Antes sempre criava subdiretório e
192
+ * falhava se nome existia.
8
193
  */
9
- export async function runInit({ name, type }) {
194
+ export async function runInit(opts) {
10
195
  log.banner();
11
- log.heading(`Inicializando produto: ${name}`);
12
- console.log();
13
- const dir = path.resolve(process.cwd(), name);
14
- // Verifica se diretório já existe
15
- try {
16
- await fs.access(dir);
17
- log.error(`Diretório "${name}" já existe.`);
18
- process.exit(1);
196
+ log.heading(`Inicializando produto: ${opts.name}`);
197
+ const target = await resolveTarget(opts.name, process.cwd(), opts);
198
+ if (!target) {
199
+ process.exit(0); // cancelado limpo
19
200
  }
20
- catch {
21
- // ok, não existe
201
+ const { dir, mode, force } = target;
202
+ console.log();
203
+ const spinner = ora({
204
+ text: mode === 'merge' ? 'Mesclando scaffold...' : 'Criando estrutura...',
205
+ color: 'blue',
206
+ }).start();
207
+ const writer = makeWriter(mode, force);
208
+ const writes = [];
209
+ const skips = [];
210
+ async function track(filePath, content) {
211
+ const res = await writer(filePath, content);
212
+ const rel = path.relative(dir, filePath) || path.basename(filePath);
213
+ if (res === 'wrote')
214
+ writes.push(rel);
215
+ else
216
+ skips.push(rel);
22
217
  }
23
- const spinner = ora({ text: 'Criando estrutura...', color: 'blue' }).start();
24
218
  try {
25
219
  await fs.mkdir(dir, { recursive: true });
26
- if (type === 'nextjs') {
27
- await scaffoldNextjs(dir, name);
220
+ if (opts.type === 'nextjs') {
221
+ await scaffoldNextjs(dir, opts.name, track);
28
222
  }
29
223
  else {
30
- await scaffoldNodeApi(dir, name);
224
+ await scaffoldNodeApi(dir, opts.name, track);
31
225
  }
32
- // Arquivo de config do projeto
33
- const slug = name
226
+ // neetru.config.json sempre escreve (se merge, só se não existir)
227
+ const slug = opts.name
34
228
  .trim()
35
229
  .toLowerCase()
36
230
  .replace(/[^a-z0-9-]+/g, '-')
37
231
  .replace(/-+/g, '-')
38
232
  .replace(/^-|-$/g, '');
39
- await fs.writeFile(path.join(dir, 'neetru.config.json'), JSON.stringify({
233
+ await track(path.join(dir, 'neetru.config.json'), JSON.stringify({
40
234
  $schema: 'https://neetru.com/schema/neetru.config.json',
41
- slug: slug || name,
42
- name,
43
- runtime: type,
235
+ slug: slug || opts.name,
236
+ name: opts.name,
237
+ runtime: opts.type,
44
238
  tenantId: '',
45
239
  publish: {
46
240
  tagline: '',
@@ -50,29 +244,38 @@ export async function runInit({ name, type }) {
50
244
  order: 100,
51
245
  },
52
246
  }, null, 2));
53
- spinner.succeed('Projeto criado com sucesso!');
247
+ spinner.succeed(mode === 'merge' ? 'Scaffold mesclado!' : 'Projeto criado!');
54
248
  console.log();
55
249
  log.info(`Diretório: ${dir}`);
56
- log.info(`Próximos passos:`);
57
- log.dim(` cd ${name}`);
250
+ log.info(`Modo: ${mode === 'merge' ? 'MERGE (preserved existing files)' : 'NEW (full scaffold)'}`);
251
+ log.info(`${writes.length} arquivo(s) criado(s)${skips.length ? `, ${skips.length} preservado(s)` : ''}.`);
252
+ if (skips.length > 0 && skips.length <= 8) {
253
+ log.dim(' Preservados:');
254
+ for (const f of skips)
255
+ log.dim(` · ${f}`);
256
+ }
257
+ else if (skips.length > 8) {
258
+ log.dim(` ${skips.length} arquivos preservados (rode com --force pra sobrescrever).`);
259
+ }
260
+ console.log();
261
+ log.info('Próximos passos:');
262
+ if (dir !== process.cwd()) {
263
+ log.dim(` cd ${path.relative(process.cwd(), dir) || opts.name}`);
264
+ }
58
265
  log.dim(` npm install`);
59
- log.dim(` neetru ai # inicie o assistente dentro do projeto`);
60
- log.dim(` neetru dev # inicia servidor de dev local`);
266
+ log.dim(` neetru ai # inicie o assistente dentro do projeto`);
267
+ log.dim(` npm run dev # inicia servidor de dev local`);
61
268
  console.log();
62
269
  }
63
270
  catch (err) {
64
- spinner.fail('Falha ao criar projeto.');
65
- log.error(err?.message);
271
+ spinner.fail('Falha no scaffold.');
272
+ log.error(err instanceof Error ? err.message : String(err));
66
273
  process.exit(1);
67
274
  }
68
275
  }
69
- async function scaffoldNextjs(dir, name) {
70
- const src = path.join(dir, 'src', 'app');
71
- await fs.mkdir(src, { recursive: true });
72
- await fs.mkdir(path.join(dir, 'src', 'lib'), { recursive: true });
73
- await fs.mkdir(path.join(dir, 'src', 'components'), { recursive: true });
276
+ async function scaffoldNextjs(dir, name, write) {
74
277
  // package.json
75
- await fs.writeFile(path.join(dir, 'package.json'), JSON.stringify({
278
+ await write(path.join(dir, 'package.json'), JSON.stringify({
76
279
  name,
77
280
  version: '0.1.0',
78
281
  private: true,
@@ -95,12 +298,12 @@ async function scaffoldNextjs(dir, name) {
95
298
  },
96
299
  }, null, 2));
97
300
  // next.config.mjs
98
- await fs.writeFile(path.join(dir, 'next.config.mjs'), `/** @type {import('next').NextConfig} */
301
+ await write(path.join(dir, 'next.config.mjs'), `/** @type {import('next').NextConfig} */
99
302
  const nextConfig = {};
100
303
  export default nextConfig;
101
304
  `);
102
305
  // Layout raiz
103
- await fs.writeFile(path.join(src, 'layout.tsx'), `import type { Metadata } from 'next';
306
+ await write(path.join(dir, 'src', 'app', 'layout.tsx'), `import type { Metadata } from 'next';
104
307
 
105
308
  export const metadata: Metadata = {
106
309
  title: '${name}',
@@ -114,39 +317,80 @@ export default function RootLayout({ children }: { children: React.ReactNode })
114
317
  );
115
318
  }
116
319
  `);
117
- // Página inicial com tenant gate
118
- await fs.writeFile(path.join(src, 'page.tsx'), `// Produto Neetru — gerado por neetru init
119
- // Auth via Core session cookie + tenant gate
320
+ // Página inicial com auth gate via SDK 1.1
321
+ await write(path.join(dir, 'src', 'app', 'page.tsx'), `// Produto Neetru — gerado por neetru init
322
+ // Auth via @neetru/sdk client (createNeetruClient + auth namespace)
323
+
324
+ 'use client';
325
+
326
+ import { createNeetruClient } from '@neetru/sdk';
327
+ import { useEffect, useState } from 'react';
328
+ import type { NeetruUser } from '@neetru/sdk';
120
329
 
121
- import { getServerSession } from '@neetru/sdk/server';
122
- import { redirect } from 'next/navigation';
330
+ const neetru = createNeetruClient({
331
+ apiKey: process.env.NEXT_PUBLIC_NEETRU_API_KEY,
332
+ env: (process.env.NEXT_PUBLIC_NEETRU_ENV as 'dev' | 'prod') ?? 'dev',
333
+ });
334
+
335
+ export default function HomePage() {
336
+ const [user, setUser] = useState<NeetruUser | null>(null);
337
+ const [loading, setLoading] = useState(true);
123
338
 
124
- export default async function HomePage() {
125
- const session = await getServerSession();
126
- if (!session) redirect('/login');
339
+ useEffect(() => {
340
+ let unsub: (() => void) | undefined;
341
+ neetru.auth.getUser().then((u) => {
342
+ setUser(u);
343
+ setLoading(false);
344
+ });
345
+ unsub = neetru.auth.onAuthStateChanged((u) => setUser(u));
346
+ return () => unsub?.();
347
+ }, []);
127
348
 
349
+ if (loading) return <main><p>Carregando...</p></main>;
350
+ if (!user) {
351
+ return (
352
+ <main>
353
+ <h1>${name}</h1>
354
+ <button onClick={() => neetru.auth.signIn()}>Entrar com Neetru</button>
355
+ </main>
356
+ );
357
+ }
128
358
  return (
129
359
  <main>
130
- <h1>Bem-vindo, {session.email}</h1>
131
- <p>Tenant: {session.tenantId}</p>
360
+ <h1>Bem-vindo, {user.email}</h1>
361
+ <p>UID: {user.uid}</p>
362
+ <button onClick={() => neetru.auth.signOut()}>Sair</button>
132
363
  </main>
133
364
  );
134
365
  }
135
366
  `);
136
- // Middleware com tenant gate
137
- await fs.writeFile(path.join(dir, 'src', 'middleware.ts'), `import { withNeetruAuth } from '@neetru/sdk/middleware';
367
+ // Middleware Next.js gate de cookie de sessão em rotas privadas
368
+ await write(path.join(dir, 'src', 'middleware.ts'), `import { NextRequest, NextResponse } from 'next/server';
138
369
 
139
- export const middleware = withNeetruAuth({
140
- loginPath: '/login',
141
- publicPaths: ['/login', '/api/auth'],
142
- });
370
+ const PUBLIC_PATHS = ['/login', '/api/auth', '/_next', '/favicon.ico'];
371
+
372
+ export function middleware(request: NextRequest) {
373
+ const { pathname } = request.nextUrl;
374
+ if (PUBLIC_PATHS.some((p) => pathname.startsWith(p))) {
375
+ return NextResponse.next();
376
+ }
377
+
378
+ const hasSession = request.cookies.has('__session');
379
+ if (!hasSession) {
380
+ const url = request.nextUrl.clone();
381
+ url.pathname = '/login';
382
+ return NextResponse.redirect(url);
383
+ }
384
+
385
+ return NextResponse.next();
386
+ }
143
387
 
144
388
  export const config = {
145
389
  matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
146
390
  };
147
391
  `);
148
392
  // tsconfig.json
149
- await fs.writeFile(path.join(dir, 'tsconfig.json'), JSON.stringify({
393
+ await write(path.join(dir, 'tsconfig.json'), JSON.stringify({
150
394
  compilerOptions: {
151
395
  target: 'ES2017',
152
396
  lib: ['dom', 'dom.iterable', 'esnext'],
@@ -168,10 +412,8 @@ export const config = {
168
412
  exclude: ['node_modules'],
169
413
  }, null, 2));
170
414
  }
171
- async function scaffoldNodeApi(dir, name) {
172
- await fs.mkdir(path.join(dir, 'src', 'routes'), { recursive: true });
173
- await fs.mkdir(path.join(dir, 'src', 'middleware'), { recursive: true });
174
- await fs.writeFile(path.join(dir, 'package.json'), JSON.stringify({
415
+ async function scaffoldNodeApi(dir, name, write) {
416
+ await write(path.join(dir, 'package.json'), JSON.stringify({
175
417
  name,
176
418
  version: '0.1.0',
177
419
  private: true,
@@ -191,26 +433,41 @@ async function scaffoldNodeApi(dir, name) {
191
433
  '@types/node': '^22.0.0',
192
434
  },
193
435
  }, null, 2));
194
- await fs.writeFile(path.join(dir, 'src', 'index.ts'), `import Fastify from 'fastify';
195
- import { neetruPlugin } from '@neetru/sdk/fastify';
196
-
197
- const app = Fastify({ logger: true });
436
+ await write(path.join(dir, 'src', 'index.ts'), `import Fastify from 'fastify';
437
+ import { createNeetruClient } from '@neetru/sdk';
198
438
 
199
- // Plugin Core: auth, tenant gate, entitlements
200
- await app.register(neetruPlugin, {
439
+ // Padrão @neetru/sdk@1.1 namespaces server-side: entitlements/usage/telemetry.
440
+ const neetru = createNeetruClient({
201
441
  apiKey: process.env.NEETRU_API_KEY,
442
+ env: (process.env.NEETRU_ENV as 'dev' | 'prod') ?? 'dev',
202
443
  });
203
444
 
445
+ const PRODUCT_SLUG = process.env.NEETRU_PRODUCT_SLUG ?? '${name}';
446
+
447
+ const app = Fastify({ logger: true });
448
+
449
+ function requireEntitlement(feature: string) {
450
+ return async (
451
+ _request: import('fastify').FastifyRequest,
452
+ reply: import('fastify').FastifyReply,
453
+ ) => {
454
+ const allowed = await neetru.entitlements.check(PRODUCT_SLUG, feature);
455
+ if (!allowed) {
456
+ return reply.code(403).send({ error: 'entitlement_denied', feature });
457
+ }
458
+ };
459
+ }
460
+
204
461
  app.get('/health', async () => ({ status: 'ok' }));
205
462
 
206
- // Rota protegida com verificação de entitlement
207
- app.get('/api/data', {
208
- preHandler: app.auth([app.neetruAuth]),
209
- handler: async (req) => {
210
- const { tenantId } = req.neetruSession;
211
- return { tenantId, data: [] };
463
+ app.get(
464
+ '/api/data',
465
+ { preHandler: requireEntitlement('api-access') },
466
+ async () => {
467
+ await neetru.usage.report('api_call', 1, { productId: PRODUCT_SLUG });
468
+ return { data: [] };
212
469
  },
213
- });
470
+ );
214
471
 
215
472
  await app.listen({ port: 3000, host: '0.0.0.0' });
216
473
  `);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface DbListOptions {
2
+ productId?: string;
3
+ engine?: string;
4
+ status?: string;
5
+ json?: boolean;
6
+ }
7
+ export declare function runDbList(opts: DbListOptions): Promise<void>;
8
+ export interface DbCreateOptions {
9
+ productId: string;
10
+ label: string;
11
+ engine: string;
12
+ environment: string;
13
+ region: string;
14
+ serverId?: string;
15
+ replicaCount?: string;
16
+ json?: boolean;
17
+ }
18
+ export declare function runDbCreate(opts: DbCreateOptions): Promise<void>;
19
+ export declare function runDbGet(id: string, opts: {
20
+ json?: boolean;
21
+ }): Promise<void>;
22
+ export declare function runDbStatus(id: string, status: string, opts: {
23
+ reason?: string;
24
+ json?: boolean;
25
+ }): Promise<void>;
26
+ export declare function runDbRetry(id: string, opts: {
27
+ json?: boolean;
28
+ }): Promise<void>;
29
+ export declare function runDbRotate(id: string, opts: {
30
+ json?: boolean;
31
+ }): Promise<void>;
32
+ export declare function runDbDelete(id: string, opts: {
33
+ json?: boolean;
34
+ }): Promise<void>;
35
+ export declare function runDbEngines(opts: {
36
+ json?: boolean;
37
+ }): Promise<void>;