@neetru/cli 2.0.0 → 2.1.0
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.js +91 -27
- 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 +761 -4
- 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
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `neetru deployments create|rollback` — control plane de deployments.
|
|
3
|
+
*
|
|
4
|
+
* Endpoints:
|
|
5
|
+
* POST /api/cli/v1/deployments (create)
|
|
6
|
+
* POST /api/cli/v1/deployments/{id}/rollback (rollback — destrutivo)
|
|
7
|
+
*
|
|
8
|
+
* `neetru deploy` (pipeline de produto interativo) continua existindo à parte;
|
|
9
|
+
* estes comandos operam o recurso `deployments/` direto (paridade com a UI).
|
|
10
|
+
*/
|
|
11
|
+
import ora from 'ora';
|
|
12
|
+
import { apiRequest } from '../lib/api-client.js';
|
|
13
|
+
import { requireToken, handleApiError, confirmDestructive, printWriteResult, resolveStepUp, } from '../lib/cli-write.js';
|
|
14
|
+
import { log } from '../utils/logger.js';
|
|
15
|
+
export async function runDeploymentsCreate(opts) {
|
|
16
|
+
const token = await requireToken(opts.json);
|
|
17
|
+
const spinner = opts.json
|
|
18
|
+
? null
|
|
19
|
+
: ora({ text: `Criando deployment ${opts.product}@${opts.version}…`, color: 'blue' }).start();
|
|
20
|
+
let res;
|
|
21
|
+
try {
|
|
22
|
+
res = await apiRequest('/api/cli/v1/deployments', {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
token,
|
|
25
|
+
body: {
|
|
26
|
+
productId: opts.product,
|
|
27
|
+
tenantId: opts.tenant,
|
|
28
|
+
version: opts.version,
|
|
29
|
+
environmentId: opts.env,
|
|
30
|
+
serverId: opts.server,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
spinner?.stop();
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
spinner?.fail('Falha ao criar deployment.');
|
|
37
|
+
handleApiError(error, opts.json);
|
|
38
|
+
}
|
|
39
|
+
if (opts.json) {
|
|
40
|
+
console.log(JSON.stringify(res));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
log.success(`Deployment criado: ${res.id}`);
|
|
44
|
+
if (res.canary)
|
|
45
|
+
log.dim('Canary habilitado — propague via UI após o soak.');
|
|
46
|
+
}
|
|
47
|
+
export async function runDeploymentsRollback(id, opts) {
|
|
48
|
+
if (!id) {
|
|
49
|
+
log.error('Uso: neetru deployments rollback <deploymentId>');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const token = await requireToken(opts.json);
|
|
53
|
+
await confirmDestructive(`Rollback do deployment ${id}? Isso dispara um novo deploy da versão anterior em produção.`, opts);
|
|
54
|
+
const { headers } = await resolveStepUp(opts);
|
|
55
|
+
const spinner = opts.json
|
|
56
|
+
? null
|
|
57
|
+
: ora({ text: `Rollback do deployment ${id}…`, color: 'blue' }).start();
|
|
58
|
+
let res;
|
|
59
|
+
try {
|
|
60
|
+
res = await apiRequest(`/api/cli/v1/deployments/${encodeURIComponent(id)}/rollback${opts.dryRun ? '?dryRun=true' : ''}`, { method: 'POST', token, headers });
|
|
61
|
+
spinner?.stop();
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
spinner?.fail('Falha ao fazer rollback.');
|
|
65
|
+
handleApiError(error, opts.json);
|
|
66
|
+
}
|
|
67
|
+
printWriteResult(res.dryRun ? res : { id: res.id }, `Rollback disparado — novo deployment: ${res.id}`, opts.json);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=deployments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/commands/deployments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type StepUpOptions } from '../lib/cli-write.js';
|
|
2
|
+
export declare function runDrExportsList(opts: {
|
|
3
|
+
json?: boolean;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export interface DrRestoreOptions extends StepUpOptions {
|
|
6
|
+
/** gcsPath do export — vem do output de `dr exports list`. */
|
|
7
|
+
gcsPath: string;
|
|
8
|
+
/** Projeto GCP de DESTINO (staging — nunca o LIVE). */
|
|
9
|
+
targetProject: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function runDrRestore(opts: DrRestoreOptions): Promise<void>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `neetru dr exports list` + `neetru dr restore` — DR drill assistido
|
|
3
|
+
* (`PROJ_GRANDE_ATUALIZACAO §5.1` / `RUNBOOK_DR_DRILL.md §4`).
|
|
4
|
+
*
|
|
5
|
+
* Endpoints:
|
|
6
|
+
* GET /api/cli/v1/dr/exports (admin only)
|
|
7
|
+
* POST /api/cli/v1/dr/restore (admin + step-up MFA — destrutivo top-tier)
|
|
8
|
+
*/
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import { apiRequest } from '../lib/api-client.js';
|
|
11
|
+
import { requireToken, handleApiError, confirmDestructive, printWriteResult, resolveStepUp, } from '../lib/cli-write.js';
|
|
12
|
+
import { renderTable, fmtTimestamp } from '../lib/render.js';
|
|
13
|
+
import { log } from '../utils/logger.js';
|
|
14
|
+
export async function runDrExportsList(opts) {
|
|
15
|
+
const token = await requireToken(opts.json);
|
|
16
|
+
const spinner = opts.json
|
|
17
|
+
? null
|
|
18
|
+
: ora({ text: 'Buscando exports de DR…', color: 'blue' }).start();
|
|
19
|
+
let res;
|
|
20
|
+
try {
|
|
21
|
+
res = await apiRequest('/api/cli/v1/dr/exports', { token });
|
|
22
|
+
spinner?.stop();
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
spinner?.fail('Falha ao listar exports.');
|
|
26
|
+
handleApiError(error, opts.json);
|
|
27
|
+
}
|
|
28
|
+
if (opts.json) {
|
|
29
|
+
console.log(JSON.stringify(res));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
log.heading(`Exports DR (${res.count})`);
|
|
33
|
+
if (res.count === 0) {
|
|
34
|
+
log.dim('Nenhum export encontrado em gs://neetru-backups/firestore-exports/.');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
renderTable([
|
|
38
|
+
{ header: 'STAMP', value: (e) => e.stamp, maxWidth: 30 },
|
|
39
|
+
{
|
|
40
|
+
header: 'TAMANHO',
|
|
41
|
+
value: (e) => e.sizeBytes > 0 ? `${(e.sizeBytes / 1024 / 1024).toFixed(1)} MB` : '—',
|
|
42
|
+
},
|
|
43
|
+
{ header: 'ATUALIZADO', value: (e) => fmtTimestamp(e.updatedAt) },
|
|
44
|
+
{ header: 'GCS', value: (e) => e.gcsPath, maxWidth: 50 },
|
|
45
|
+
], res.exports);
|
|
46
|
+
console.log();
|
|
47
|
+
}
|
|
48
|
+
export async function runDrRestore(opts) {
|
|
49
|
+
if (!opts.gcsPath || !opts.targetProject) {
|
|
50
|
+
log.error('Uso: neetru dr restore --gcs-path <path> --target-project <project>');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const token = await requireToken(opts.json);
|
|
54
|
+
await confirmDestructive(`Restaurar Firestore de ${opts.gcsPath} para o projeto ${opts.targetProject}? ` +
|
|
55
|
+
`Esta operação é IRREVERSÍVEL no projeto destino. Use SEMPRE um projeto de staging.`, opts);
|
|
56
|
+
const { headers } = await resolveStepUp(opts);
|
|
57
|
+
const spinner = opts.json
|
|
58
|
+
? null
|
|
59
|
+
: ora({ text: 'Disparando restore…', color: 'blue' }).start();
|
|
60
|
+
let res;
|
|
61
|
+
try {
|
|
62
|
+
res = await apiRequest(`/api/cli/v1/dr/restore${opts.dryRun ? '?dryRun=true' : ''}`, {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
token,
|
|
65
|
+
headers,
|
|
66
|
+
body: { gcsPath: opts.gcsPath, targetProject: opts.targetProject },
|
|
67
|
+
});
|
|
68
|
+
spinner?.stop();
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
spinner?.fail('Falha ao disparar restore.');
|
|
72
|
+
handleApiError(error, opts.json);
|
|
73
|
+
}
|
|
74
|
+
printWriteResult(res.dryRun
|
|
75
|
+
? res
|
|
76
|
+
: { operationName: res.operationName, targetProject: res.targetProject }, `Restore disparado — operationName: ${res.operationName}. ` +
|
|
77
|
+
`Acompanhe via gcloud firestore operations describe.`, opts.json);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=dr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dr.js","sourceRoot":"","sources":["../../src/commands/dr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comandos read-only de infraestrutura: `neetru dns zones list`,
|
|
3
|
+
* `neetru hosting list`, `neetru builds list` (F5 scope matrix §4.2.0
|
|
4
|
+
* — bucket "✅ DEVE entrar", read-only).
|
|
5
|
+
*
|
|
6
|
+
* Todos batem em `/api/cli/v1/{dns,hosting,builds}/*` com `requireCliAuth`
|
|
7
|
+
* + gate de role.
|
|
8
|
+
*/
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import { apiRequest } from '../lib/api-client.js';
|
|
11
|
+
import { requireToken, handleApiError } from '../lib/cli-read.js';
|
|
12
|
+
import { renderTable, fmtTimestamp } from '../lib/render.js';
|
|
13
|
+
import { log } from '../utils/logger.js';
|
|
14
|
+
export async function runDnsZonesList(opts) {
|
|
15
|
+
const token = await requireToken(opts.json);
|
|
16
|
+
const spinner = opts.json ? null : ora({ text: 'Buscando managed zones…', color: 'blue' }).start();
|
|
17
|
+
let res;
|
|
18
|
+
try {
|
|
19
|
+
res = await apiRequest('/api/cli/v1/dns/zones', { token });
|
|
20
|
+
spinner?.stop();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
spinner?.fail('Falha ao listar zones.');
|
|
24
|
+
handleApiError(error, opts.json);
|
|
25
|
+
}
|
|
26
|
+
if (opts.json) {
|
|
27
|
+
console.log(JSON.stringify(res));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (res.error) {
|
|
31
|
+
log.warn(`${res.error} (${res.errorCode ?? '—'})`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
log.heading(`Cloud DNS zones (${res.zones.length}) · projeto ${res.projectId ?? '—'}`);
|
|
35
|
+
if (res.zones.length === 0) {
|
|
36
|
+
log.dim('Nenhuma managed zone encontrada.');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
renderTable([
|
|
40
|
+
{ header: 'NOME', value: (z) => z.name, maxWidth: 24 },
|
|
41
|
+
{ header: 'DNS NAME', value: (z) => z.dnsName, maxWidth: 32 },
|
|
42
|
+
{ header: 'VISIBILITY', value: (z) => z.visibility },
|
|
43
|
+
{ header: 'RECORDS', value: (z) => z.recordCount?.toString() ?? '—' },
|
|
44
|
+
{ header: 'CRIADO', value: (z) => fmtTimestamp(z.createdAt) },
|
|
45
|
+
], res.zones);
|
|
46
|
+
console.log();
|
|
47
|
+
}
|
|
48
|
+
export async function runHostingList(opts) {
|
|
49
|
+
const token = await requireToken(opts.json);
|
|
50
|
+
const spinner = opts.json ? null : ora({ text: 'Buscando customer domains…', color: 'blue' }).start();
|
|
51
|
+
let res;
|
|
52
|
+
try {
|
|
53
|
+
res = await apiRequest('/api/cli/v1/hosting', { token });
|
|
54
|
+
spinner?.stop();
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
spinner?.fail('Falha ao listar domains.');
|
|
58
|
+
handleApiError(error, opts.json);
|
|
59
|
+
}
|
|
60
|
+
if (opts.json) {
|
|
61
|
+
console.log(JSON.stringify(res));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
log.heading(`Customer domains (${res.count})`);
|
|
65
|
+
if (res.count === 0) {
|
|
66
|
+
log.dim('Nenhum customer domain registrado.');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
renderTable([
|
|
70
|
+
{ header: 'HOST', value: (d) => d.host ?? '—', maxWidth: 32 },
|
|
71
|
+
{ header: 'TENANT', value: (d) => d.tenantId ?? '—', maxWidth: 22 },
|
|
72
|
+
{ header: 'STATUS', value: (d) => d.status ?? '—' },
|
|
73
|
+
{ header: 'CERT', value: (d) => d.certStatus ?? '—' },
|
|
74
|
+
{ header: 'TARGET', value: (d) => d.targetService ?? '—', maxWidth: 24 },
|
|
75
|
+
], res.domains);
|
|
76
|
+
console.log();
|
|
77
|
+
}
|
|
78
|
+
export async function runBuildsList(opts) {
|
|
79
|
+
const token = await requireToken(opts.json);
|
|
80
|
+
const spinner = opts.json ? null : ora({ text: 'Buscando Cloud Builds…', color: 'blue' }).start();
|
|
81
|
+
let res;
|
|
82
|
+
try {
|
|
83
|
+
res = await apiRequest('/api/cli/v1/builds', { token });
|
|
84
|
+
spinner?.stop();
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
spinner?.fail('Falha ao listar builds.');
|
|
88
|
+
handleApiError(error, opts.json);
|
|
89
|
+
}
|
|
90
|
+
if (opts.json) {
|
|
91
|
+
console.log(JSON.stringify(res));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (res.error) {
|
|
95
|
+
log.warn(`${res.error} (${res.errorCode ?? '—'}) ${res.hint ?? ''}`);
|
|
96
|
+
if (res.builds.length === 0)
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
log.heading(`Cloud Builds (${res.builds.length})`);
|
|
100
|
+
renderTable([
|
|
101
|
+
{ header: 'ID', value: (b) => b.id, maxWidth: 36 },
|
|
102
|
+
{ header: 'STATUS', value: (b) => b.status },
|
|
103
|
+
{ header: 'REGIÃO', value: (b) => b.region ?? 'global' },
|
|
104
|
+
{ header: 'SOURCE', value: (b) => b.source ?? '—', maxWidth: 28 },
|
|
105
|
+
{ header: 'INICIADO', value: (b) => fmtTimestamp(b.createTime) },
|
|
106
|
+
{
|
|
107
|
+
header: 'DURAÇÃO',
|
|
108
|
+
value: (b) => (b.durationSeconds != null ? `${b.durationSeconds}s` : '—'),
|
|
109
|
+
},
|
|
110
|
+
], res.builds);
|
|
111
|
+
console.log();
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=infra-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-read.js","sourceRoot":"","sources":["../../src/commands/infra-read.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -114,32 +114,76 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
|
114
114
|
);
|
|
115
115
|
}
|
|
116
116
|
`);
|
|
117
|
-
// Página inicial com
|
|
117
|
+
// Página inicial com auth gate via SDK 1.1
|
|
118
|
+
// Padrão @neetru/sdk@1.1 — namespaces auth/catalog/entitlements (sem subpath /server).
|
|
118
119
|
await fs.writeFile(path.join(src, 'page.tsx'), `// Produto Neetru — gerado por neetru init
|
|
119
|
-
// Auth via
|
|
120
|
+
// Auth via @neetru/sdk client (createNeetruClient + auth namespace)
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
import { redirect } from 'next/navigation';
|
|
122
|
+
'use client';
|
|
123
123
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
import { createNeetruClient } from '@neetru/sdk';
|
|
125
|
+
import { useEffect, useState } from 'react';
|
|
126
|
+
import type { NeetruUser } from '@neetru/sdk';
|
|
127
127
|
|
|
128
|
+
const neetru = createNeetruClient({
|
|
129
|
+
apiKey: process.env.NEXT_PUBLIC_NEETRU_API_KEY,
|
|
130
|
+
env: (process.env.NEXT_PUBLIC_NEETRU_ENV as 'dev' | 'prod') ?? 'dev',
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
export default function HomePage() {
|
|
134
|
+
const [user, setUser] = useState<NeetruUser | null>(null);
|
|
135
|
+
const [loading, setLoading] = useState(true);
|
|
136
|
+
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
let unsub: (() => void) | undefined;
|
|
139
|
+
neetru.auth.getUser().then((u) => {
|
|
140
|
+
setUser(u);
|
|
141
|
+
setLoading(false);
|
|
142
|
+
});
|
|
143
|
+
unsub = neetru.auth.onAuthStateChanged((u) => setUser(u));
|
|
144
|
+
return () => unsub?.();
|
|
145
|
+
}, []);
|
|
146
|
+
|
|
147
|
+
if (loading) return <main><p>Carregando...</p></main>;
|
|
148
|
+
if (!user) {
|
|
149
|
+
return (
|
|
150
|
+
<main>
|
|
151
|
+
<h1>${name}</h1>
|
|
152
|
+
<button onClick={() => neetru.auth.signIn()}>Entrar com Neetru</button>
|
|
153
|
+
</main>
|
|
154
|
+
);
|
|
155
|
+
}
|
|
128
156
|
return (
|
|
129
157
|
<main>
|
|
130
|
-
<h1>Bem-vindo, {
|
|
131
|
-
<p>
|
|
158
|
+
<h1>Bem-vindo, {user.email}</h1>
|
|
159
|
+
<p>UID: {user.uid}</p>
|
|
160
|
+
<button onClick={() => neetru.auth.signOut()}>Sair</button>
|
|
132
161
|
</main>
|
|
133
162
|
);
|
|
134
163
|
}
|
|
135
164
|
`);
|
|
136
|
-
// Middleware
|
|
137
|
-
|
|
165
|
+
// Middleware Next.js — gate de cookie de sessão em rotas privadas.
|
|
166
|
+
// Padrão simples sem dependência de subpath SDK que ainda não existe.
|
|
167
|
+
await fs.writeFile(path.join(dir, 'src', 'middleware.ts'), `import { NextRequest, NextResponse } from 'next/server';
|
|
138
168
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
169
|
+
const PUBLIC_PATHS = ['/login', '/api/auth', '/_next', '/favicon.ico'];
|
|
170
|
+
|
|
171
|
+
export function middleware(request: NextRequest) {
|
|
172
|
+
const { pathname } = request.nextUrl;
|
|
173
|
+
if (PUBLIC_PATHS.some((p) => pathname.startsWith(p))) {
|
|
174
|
+
return NextResponse.next();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Cookie '__session' setado pelo OIDC callback do auth.neetru.com.
|
|
178
|
+
const hasSession = request.cookies.has('__session');
|
|
179
|
+
if (!hasSession) {
|
|
180
|
+
const url = request.nextUrl.clone();
|
|
181
|
+
url.pathname = '/login';
|
|
182
|
+
return NextResponse.redirect(url);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return NextResponse.next();
|
|
186
|
+
}
|
|
143
187
|
|
|
144
188
|
export const config = {
|
|
145
189
|
matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
|
|
@@ -192,25 +236,45 @@ async function scaffoldNodeApi(dir, name) {
|
|
|
192
236
|
},
|
|
193
237
|
}, null, 2));
|
|
194
238
|
await fs.writeFile(path.join(dir, 'src', 'index.ts'), `import Fastify from 'fastify';
|
|
195
|
-
import {
|
|
239
|
+
import { createNeetruClient } from '@neetru/sdk';
|
|
196
240
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
//
|
|
200
|
-
|
|
241
|
+
// Padrão @neetru/sdk@1.1 — namespaces server-side: entitlements/usage/telemetry.
|
|
242
|
+
// O SDK NÃO publica subpath /fastify; o gate é um preHandler fino que reusa
|
|
243
|
+
// o cliente. \`createNeetruClient\` é seguro em Node com apiKey de produto.
|
|
244
|
+
const neetru = createNeetruClient({
|
|
201
245
|
apiKey: process.env.NEETRU_API_KEY,
|
|
246
|
+
env: (process.env.NEETRU_ENV as 'dev' | 'prod') ?? 'dev',
|
|
202
247
|
});
|
|
203
248
|
|
|
249
|
+
const PRODUCT_SLUG = process.env.NEETRU_PRODUCT_SLUG ?? '${name}';
|
|
250
|
+
|
|
251
|
+
const app = Fastify({ logger: true });
|
|
252
|
+
|
|
253
|
+
// preHandler de entitlement: bloqueia a rota se o portador não tem a feature.
|
|
254
|
+
function requireEntitlement(feature: string) {
|
|
255
|
+
return async (
|
|
256
|
+
_request: import('fastify').FastifyRequest,
|
|
257
|
+
reply: import('fastify').FastifyReply,
|
|
258
|
+
) => {
|
|
259
|
+
const allowed = await neetru.entitlements.check(PRODUCT_SLUG, feature);
|
|
260
|
+
if (!allowed) {
|
|
261
|
+
return reply.code(403).send({ error: 'entitlement_denied', feature });
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
|
|
204
266
|
app.get('/health', async () => ({ status: 'ok' }));
|
|
205
267
|
|
|
206
|
-
// Rota protegida
|
|
207
|
-
app.get(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
268
|
+
// Rota protegida — só responde se o produto tem a feature 'api-access'.
|
|
269
|
+
app.get(
|
|
270
|
+
'/api/data',
|
|
271
|
+
{ preHandler: requireEntitlement('api-access') },
|
|
272
|
+
async () => {
|
|
273
|
+
// Registra uso pra billing metered (acumula no mock em NEETRU_ENV=dev).
|
|
274
|
+
await neetru.usage.report('api_call', 1, { productId: PRODUCT_SLUG });
|
|
275
|
+
return { data: [] };
|
|
212
276
|
},
|
|
213
|
-
|
|
277
|
+
);
|
|
214
278
|
|
|
215
279
|
await app.listen({ port: 3000, host: '0.0.0.0' });
|
|
216
280
|
`);
|
|
@@ -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>;
|