@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.
- package/dist/commands/agent-release.d.ts +13 -0
- package/dist/commands/agent-release.js +204 -0
- package/dist/commands/agent-release.js.map +1 -0
- package/dist/commands/agent-write.d.ts +12 -0
- package/dist/commands/agent-write.js +94 -0
- package/dist/commands/agent-write.js.map +1 -0
- package/dist/commands/api-catalog.d.ts +20 -0
- package/dist/commands/api-catalog.js +126 -0
- package/dist/commands/api-catalog.js.map +1 -0
- package/dist/commands/audit.d.ts +8 -0
- package/dist/commands/audit.js +69 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/billing.d.ts +6 -0
- package/dist/commands/billing.js +69 -0
- package/dist/commands/billing.js.map +1 -0
- package/dist/commands/build.js +10 -3
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cloud-run.d.ts +11 -0
- package/dist/commands/cloud-run.js +87 -0
- package/dist/commands/cloud-run.js.map +1 -0
- package/dist/commands/deploy.d.ts +7 -0
- package/dist/commands/deploy.js +150 -17
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/deployments.d.ts +11 -0
- package/dist/commands/deployments.js +69 -0
- package/dist/commands/deployments.js.map +1 -0
- package/dist/commands/dr.d.ts +11 -0
- package/dist/commands/dr.js +79 -0
- package/dist/commands/dr.js.map +1 -0
- package/dist/commands/infra-read.d.ts +9 -0
- package/dist/commands/infra-read.js +113 -0
- package/dist/commands/infra-read.js.map +1 -0
- package/dist/commands/init.d.ts +13 -1
- package/dist/commands/init.js +327 -70
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/products-db.d.ts +37 -0
- package/dist/commands/products-db.js +230 -0
- package/dist/commands/products-db.js.map +1 -0
- package/dist/commands/products.d.ts +12 -0
- package/dist/commands/products.js +97 -0
- package/dist/commands/products.js.map +1 -0
- package/dist/commands/servers.d.ts +23 -0
- package/dist/commands/servers.js +166 -0
- package/dist/commands/servers.js.map +1 -0
- package/dist/commands/support.d.ts +25 -0
- package/dist/commands/support.js +184 -0
- package/dist/commands/support.js.map +1 -0
- package/dist/commands/surface-status.d.ts +5 -0
- package/dist/commands/surface-status.js +63 -0
- package/dist/commands/surface-status.js.map +1 -0
- package/dist/commands/tenants.d.ts +34 -0
- package/dist/commands/tenants.js +179 -0
- package/dist/commands/tenants.js.map +1 -0
- package/dist/commands/workspaces.d.ts +15 -0
- package/dist/commands/workspaces.js +72 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/index.js +775 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +18 -0
- package/dist/lib/api-client.js +124 -4
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/cli-read.d.ts +13 -0
- package/dist/lib/cli-read.js +103 -0
- package/dist/lib/cli-read.js.map +1 -0
- package/dist/lib/cli-write.d.ts +47 -0
- package/dist/lib/cli-write.js +137 -0
- package/dist/lib/cli-write.js.map +1 -0
- package/dist/lib/config-schema.d.ts +10 -10
- package/dist/lib/render.d.ts +16 -0
- package/dist/lib/render.js +74 -0
- package/dist/lib/render.js.map +1 -0
- package/package.json +4 -4
package/dist/commands/init.js
CHANGED
|
@@ -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(
|
|
194
|
+
export async function runInit(opts) {
|
|
10
195
|
log.banner();
|
|
11
|
-
log.heading(`Inicializando produto: ${name}`);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
//
|
|
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
|
|
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('
|
|
247
|
+
spinner.succeed(mode === 'merge' ? 'Scaffold mesclado!' : 'Projeto criado!');
|
|
54
248
|
console.log();
|
|
55
249
|
log.info(`Diretório: ${dir}`);
|
|
56
|
-
log.info(`
|
|
57
|
-
log.
|
|
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
|
|
60
|
-
log.dim(`
|
|
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
|
|
65
|
-
log.error(err
|
|
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
|
|
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
|
|
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
|
|
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
|
|
118
|
-
await
|
|
119
|
-
// Auth via
|
|
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
|
-
|
|
122
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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, {
|
|
131
|
-
<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
|
|
137
|
-
await
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
|
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
|
|
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
|
|
195
|
-
import {
|
|
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
|
-
//
|
|
200
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
preHandler:
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
return {
|
|
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>;
|