@neetru/cli 1.0.0 → 2.0.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.
Files changed (135) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +109 -152
  3. package/dist/commands/add.d.ts +8 -3
  4. package/dist/commands/add.js +70 -143
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/ai.d.ts +4 -0
  7. package/dist/commands/ai.js +88 -0
  8. package/dist/commands/ai.js.map +1 -0
  9. package/dist/commands/autocomplete.d.ts +7 -0
  10. package/dist/commands/autocomplete.js +107 -0
  11. package/dist/commands/autocomplete.js.map +1 -0
  12. package/dist/commands/build.d.ts +18 -0
  13. package/dist/commands/build.js +288 -0
  14. package/dist/commands/build.js.map +1 -0
  15. package/dist/commands/config.d.ts +3 -0
  16. package/dist/commands/config.js +70 -0
  17. package/dist/commands/config.js.map +1 -0
  18. package/dist/commands/db.d.ts +14 -0
  19. package/dist/commands/db.js +187 -0
  20. package/dist/commands/db.js.map +1 -0
  21. package/dist/commands/deploy.d.ts +16 -3
  22. package/dist/commands/deploy.js +400 -180
  23. package/dist/commands/deploy.js.map +1 -1
  24. package/dist/commands/doctor.d.ts +27 -0
  25. package/dist/commands/doctor.js +211 -0
  26. package/dist/commands/doctor.js.map +1 -0
  27. package/dist/commands/env.d.ts +15 -0
  28. package/dist/commands/env.js +56 -0
  29. package/dist/commands/env.js.map +1 -0
  30. package/dist/commands/fn.d.ts +6 -0
  31. package/dist/commands/fn.js +87 -0
  32. package/dist/commands/fn.js.map +1 -0
  33. package/dist/commands/init.d.ts +10 -3
  34. package/dist/commands/init.js +212 -143
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/login.d.ts +6 -3
  37. package/dist/commands/login.js +222 -92
  38. package/dist/commands/login.js.map +1 -1
  39. package/dist/commands/logout.d.ts +1 -0
  40. package/dist/commands/logout.js +28 -0
  41. package/dist/commands/logout.js.map +1 -0
  42. package/dist/commands/logs.d.ts +14 -3
  43. package/dist/commands/logs.js +132 -106
  44. package/dist/commands/logs.js.map +1 -1
  45. package/dist/commands/mocks.d.ts +5 -0
  46. package/dist/commands/mocks.js +23 -0
  47. package/dist/commands/mocks.js.map +1 -0
  48. package/dist/commands/open.d.ts +4 -3
  49. package/dist/commands/open.js +53 -85
  50. package/dist/commands/open.js.map +1 -1
  51. package/dist/commands/promote.d.ts +9 -0
  52. package/dist/commands/promote.js +114 -0
  53. package/dist/commands/promote.js.map +1 -0
  54. package/dist/commands/publish.d.ts +14 -0
  55. package/dist/commands/publish.js +180 -0
  56. package/dist/commands/publish.js.map +1 -0
  57. package/dist/commands/status.d.ts +5 -3
  58. package/dist/commands/status.js +91 -93
  59. package/dist/commands/status.js.map +1 -1
  60. package/dist/commands/upgrade.d.ts +12 -0
  61. package/dist/commands/upgrade.js +77 -0
  62. package/dist/commands/upgrade.js.map +1 -0
  63. package/dist/commands/validate.d.ts +1 -3
  64. package/dist/commands/validate.js +83 -91
  65. package/dist/commands/validate.js.map +1 -1
  66. package/dist/commands/whoami.d.ts +5 -3
  67. package/dist/commands/whoami.js +76 -28
  68. package/dist/commands/whoami.js.map +1 -1
  69. package/dist/index.d.ts +0 -1
  70. package/dist/index.js +337 -36
  71. package/dist/index.js.map +1 -1
  72. package/dist/lib/ai/context.d.ts +11 -0
  73. package/dist/lib/ai/context.js +112 -0
  74. package/dist/lib/ai/context.js.map +1 -0
  75. package/dist/lib/ai/orchestrator.d.ts +10 -0
  76. package/dist/lib/ai/orchestrator.js +92 -0
  77. package/dist/lib/ai/orchestrator.js.map +1 -0
  78. package/dist/lib/api-client.d.ts +21 -0
  79. package/dist/lib/api-client.js +65 -0
  80. package/dist/lib/api-client.js.map +1 -0
  81. package/dist/lib/auth.d.ts +15 -0
  82. package/dist/lib/auth.js +98 -0
  83. package/dist/lib/auth.js.map +1 -0
  84. package/dist/lib/config-schema.d.ts +165 -0
  85. package/dist/lib/config-schema.js +57 -0
  86. package/dist/lib/config-schema.js.map +1 -0
  87. package/dist/lib/config.d.ts +15 -0
  88. package/dist/lib/config.js +33 -0
  89. package/dist/lib/config.js.map +1 -0
  90. package/dist/utils/logger.d.ts +13 -0
  91. package/dist/utils/logger.js +27 -0
  92. package/dist/utils/logger.js.map +1 -0
  93. package/package.json +35 -33
  94. package/templates/auth/callback.ts +22 -0
  95. package/templates/auth/sign-in.tsx +41 -0
  96. package/templates/billing/checkout.ts +22 -0
  97. package/templates/billing/page.tsx +43 -0
  98. package/templates/support/ticket-form.tsx +68 -0
  99. package/templates/usage/track.ts +30 -0
  100. package/templates/users/profile.tsx +43 -0
  101. package/LICENSE +0 -21
  102. package/dist/commands/add.d.ts.map +0 -1
  103. package/dist/commands/deploy.d.ts.map +0 -1
  104. package/dist/commands/generate-types.d.ts +0 -3
  105. package/dist/commands/generate-types.d.ts.map +0 -1
  106. package/dist/commands/generate-types.js +0 -150
  107. package/dist/commands/generate-types.js.map +0 -1
  108. package/dist/commands/init.d.ts.map +0 -1
  109. package/dist/commands/login.d.ts.map +0 -1
  110. package/dist/commands/logs.d.ts.map +0 -1
  111. package/dist/commands/open.d.ts.map +0 -1
  112. package/dist/commands/status.d.ts.map +0 -1
  113. package/dist/commands/validate.d.ts.map +0 -1
  114. package/dist/commands/whoami.d.ts.map +0 -1
  115. package/dist/config.d.ts +0 -14
  116. package/dist/config.d.ts.map +0 -1
  117. package/dist/config.js +0 -83
  118. package/dist/config.js.map +0 -1
  119. package/dist/index.d.ts.map +0 -1
  120. package/dist/scaffold/auth.d.ts +0 -3
  121. package/dist/scaffold/auth.d.ts.map +0 -1
  122. package/dist/scaffold/auth.js +0 -228
  123. package/dist/scaffold/auth.js.map +0 -1
  124. package/dist/scaffold/billing.d.ts +0 -3
  125. package/dist/scaffold/billing.d.ts.map +0 -1
  126. package/dist/scaffold/billing.js +0 -184
  127. package/dist/scaffold/billing.js.map +0 -1
  128. package/dist/scaffold/usage.d.ts +0 -3
  129. package/dist/scaffold/usage.d.ts.map +0 -1
  130. package/dist/scaffold/usage.js +0 -173
  131. package/dist/scaffold/usage.js.map +0 -1
  132. package/dist/scaffold/users.d.ts +0 -3
  133. package/dist/scaffold/users.d.ts.map +0 -1
  134. package/dist/scaffold/users.js +0 -135
  135. package/dist/scaffold/users.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Template — `src/lib/neetru/auth/sign-in.tsx` (gerado por `neetru add auth`).
3
+ *
4
+ * Botão Google → redireciona pra auth.neetru.com via SDK (`client.auth.signIn`).
5
+ *
6
+ * Customização: ajuste `redirectUri` se hospedar fora do domínio default.
7
+ */
8
+ 'use client';
9
+
10
+ import { useState } from 'react';
11
+ import { createNeetruClient } from '@neetru/sdk';
12
+
13
+ const client = createNeetruClient({
14
+ apiKey: process.env.NEXT_PUBLIC_NEETRU_API_KEY,
15
+ productId: process.env.NEXT_PUBLIC_NEETRU_PRODUCT_ID,
16
+ });
17
+
18
+ export function SignInButton() {
19
+ const [loading, setLoading] = useState(false);
20
+
21
+ async function handleSignIn() {
22
+ setLoading(true);
23
+ try {
24
+ await client.auth.signIn();
25
+ } catch (err) {
26
+ console.error('signIn failed', err);
27
+ setLoading(false);
28
+ }
29
+ }
30
+
31
+ return (
32
+ <button
33
+ type="button"
34
+ onClick={handleSignIn}
35
+ disabled={loading}
36
+ className="inline-flex items-center justify-center px-4 py-2 border bg-white hover:bg-zinc-50 text-zinc-900 font-medium"
37
+ >
38
+ {loading ? 'Redirecionando...' : 'Entrar com Neetru'}
39
+ </button>
40
+ );
41
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Template — `src/lib/neetru/billing/checkout.ts` (gerado por `neetru add billing`).
3
+ *
4
+ * Inicia checkout Stripe via Core. Server route handler.
5
+ */
6
+ import { NextRequest, NextResponse } from 'next/server';
7
+
8
+ export const runtime = 'nodejs';
9
+
10
+ export async function POST(request: NextRequest) {
11
+ const body = await request.json();
12
+ const slug = body?.slug as string | undefined;
13
+ if (!slug) {
14
+ return NextResponse.json({ error: 'slug required' }, { status: 400 });
15
+ }
16
+
17
+ // Hit Core REST: POST /api/v1/billing/checkout
18
+ // (Sprint 9 expõe via SDK direto)
19
+ return NextResponse.json({
20
+ redirectUrl: `https://minhaconta.neetru.com/checkout?slug=${slug}`,
21
+ });
22
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Template — `src/lib/neetru/billing/page.tsx` (gerado por `neetru add billing`).
3
+ *
4
+ * Página simples: lista planos + botão checkout via SDK.
5
+ */
6
+ 'use client';
7
+
8
+ import { useEffect, useState } from 'react';
9
+ import { createNeetruClient, type Product } from '@neetru/sdk';
10
+
11
+ const client = createNeetruClient({
12
+ apiKey: process.env.NEXT_PUBLIC_NEETRU_API_KEY,
13
+ });
14
+
15
+ export default function BillingPage() {
16
+ const [products, setProducts] = useState<Product[]>([]);
17
+ useEffect(() => {
18
+ client.catalog
19
+ .list()
20
+ .then(({ products }) => setProducts(products))
21
+ .catch((err) => console.error(err));
22
+ }, []);
23
+
24
+ return (
25
+ <main className="p-8">
26
+ <h1 className="text-3xl font-bold mb-6">Planos</h1>
27
+ <div className="grid gap-4 md:grid-cols-3">
28
+ {products.map((p) => (
29
+ <article key={p.slug} className="border p-6">
30
+ <h2 className="text-xl font-semibold">{p.name}</h2>
31
+ <p className="text-sm text-zinc-600 mt-1">{p.tagline}</p>
32
+ <a
33
+ href={`/checkout?slug=${p.slug}`}
34
+ className="inline-block mt-4 px-4 py-2 bg-zinc-900 text-white"
35
+ >
36
+ Assinar
37
+ </a>
38
+ </article>
39
+ ))}
40
+ </div>
41
+ </main>
42
+ );
43
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Template — `src/lib/neetru/support/ticket-form.tsx` (gerado por `neetru add support`).
3
+ *
4
+ * Form de suporte: cria ticket via SDK.
5
+ */
6
+ 'use client';
7
+
8
+ import { useState } from 'react';
9
+ import { createNeetruClient } from '@neetru/sdk';
10
+
11
+ const client = createNeetruClient({
12
+ apiKey: process.env.NEXT_PUBLIC_NEETRU_API_KEY,
13
+ });
14
+
15
+ export function SupportTicketForm() {
16
+ const [subject, setSubject] = useState('');
17
+ const [message, setMessage] = useState('');
18
+ const [submitting, setSubmitting] = useState(false);
19
+ const [result, setResult] = useState<string | null>(null);
20
+
21
+ async function handleSubmit(e: React.FormEvent) {
22
+ e.preventDefault();
23
+ setSubmitting(true);
24
+ try {
25
+ const ticket = await client.support.createTicket({ subject, message });
26
+ setResult(`Ticket criado: ${ticket.id}`);
27
+ setSubject('');
28
+ setMessage('');
29
+ } catch (err) {
30
+ setResult('Falha ao criar ticket.');
31
+ console.error(err);
32
+ } finally {
33
+ setSubmitting(false);
34
+ }
35
+ }
36
+
37
+ return (
38
+ <form onSubmit={handleSubmit} className="grid gap-3 max-w-md">
39
+ <label className="grid gap-1">
40
+ <span className="text-sm font-medium">Assunto</span>
41
+ <input
42
+ required
43
+ value={subject}
44
+ onChange={(e) => setSubject(e.target.value)}
45
+ className="border px-3 py-2"
46
+ />
47
+ </label>
48
+ <label className="grid gap-1">
49
+ <span className="text-sm font-medium">Mensagem</span>
50
+ <textarea
51
+ required
52
+ rows={5}
53
+ value={message}
54
+ onChange={(e) => setMessage(e.target.value)}
55
+ className="border px-3 py-2"
56
+ />
57
+ </label>
58
+ <button
59
+ type="submit"
60
+ disabled={submitting}
61
+ className="px-4 py-2 bg-zinc-900 text-white"
62
+ >
63
+ {submitting ? 'Enviando...' : 'Enviar'}
64
+ </button>
65
+ {result && <p className="text-sm">{result}</p>}
66
+ </form>
67
+ );
68
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Template — `src/lib/neetru/usage/track.ts` (gerado por `neetru add usage`).
3
+ *
4
+ * Helper para reportar uso de resources metered ao Core.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { reportApiCall } from '@/lib/neetru/usage/track';
9
+ * await reportApiCall();
10
+ * ```
11
+ */
12
+ import { createNeetruClient } from '@neetru/sdk';
13
+
14
+ const client = createNeetruClient({
15
+ apiKey: process.env.NEETRU_API_KEY,
16
+ productId: process.env.NEETRU_PRODUCT_ID,
17
+ tenantId: process.env.NEETRU_TENANT_ID,
18
+ });
19
+
20
+ export async function reportApiCall(qty = 1): Promise<void> {
21
+ try {
22
+ await client.usage.report('api_calls', qty);
23
+ } catch (err) {
24
+ console.warn('usage.report failed', err);
25
+ }
26
+ }
27
+
28
+ export async function checkApiCallLimit() {
29
+ return client.usage.check('api_calls');
30
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Template — `src/lib/neetru/users/profile.tsx` (gerado por `neetru add users`).
3
+ *
4
+ * Componente de perfil mostra dados do user via SDK.
5
+ */
6
+ 'use client';
7
+
8
+ import { useEffect, useState } from 'react';
9
+ import { createNeetruClient, type NeetruUser } from '@neetru/sdk';
10
+
11
+ const client = createNeetruClient({
12
+ apiKey: process.env.NEXT_PUBLIC_NEETRU_API_KEY,
13
+ });
14
+
15
+ export function UserProfile() {
16
+ const [user, setUser] = useState<NeetruUser | null>(null);
17
+ useEffect(() => {
18
+ return client.auth.onAuthStateChanged(setUser);
19
+ }, []);
20
+
21
+ if (!user) return <p>Não autenticado.</p>;
22
+
23
+ return (
24
+ <div className="border p-4">
25
+ <p>
26
+ <strong>Nome:</strong> {user.displayName ?? '—'}
27
+ </p>
28
+ <p>
29
+ <strong>Email:</strong> {user.email}
30
+ </p>
31
+ <p>
32
+ <strong>UID:</strong> {user.uid}
33
+ </p>
34
+ <button
35
+ type="button"
36
+ onClick={() => client.auth.signOut()}
37
+ className="mt-4 px-3 py-1 border"
38
+ >
39
+ Sair
40
+ </button>
41
+ </div>
42
+ );
43
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Neetru
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1 +0,0 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,UAAU,IAAI,OAAO,CA4DpC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,aAAa,IAAI,OAAO,CA8JvC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function generateTypesCommand(): Command;
3
- //# sourceMappingURL=generate-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-types.d.ts","sourceRoot":"","sources":["../../src/commands/generate-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,oBAAoB,IAAI,OAAO,CAwD9C"}
@@ -1,150 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.generateTypesCommand = generateTypesCommand;
40
- const commander_1 = require("commander");
41
- const chalk_1 = __importDefault(require("chalk"));
42
- const ora_1 = __importDefault(require("ora"));
43
- const fs = __importStar(require("fs-extra"));
44
- const path = __importStar(require("path"));
45
- const config_1 = require("../config");
46
- function generateTypesCommand() {
47
- const cmd = new commander_1.Command('generate-types');
48
- cmd
49
- .alias('gen')
50
- .description('Sincroniza tipos TypeScript do Neetru Core (planos, features, entitlements)')
51
- .option('--out <file>', 'Arquivo de saída', 'src/lib/neetru/neetru-types.generated.ts')
52
- .action(async (options) => {
53
- let config;
54
- try {
55
- config = (0, config_1.requireConfig)();
56
- }
57
- catch (e) {
58
- console.error(chalk_1.default.red(e.message));
59
- process.exit(1);
60
- }
61
- const spinner = (0, ora_1.default)('Buscando schema do Core...').start();
62
- try {
63
- // Try to fetch plan/feature definitions from Core
64
- const res = await fetch(`${config.coreUrl}/api/v1/schema?clientId=${encodeURIComponent(config.clientId)}`, { signal: AbortSignal.timeout(8000) });
65
- let planIds = ['starter', 'pro', 'enterprise'];
66
- let featureKeys = ['api_calls', 'users', 'storage_gb', 'custom_domain'];
67
- if (res.ok) {
68
- const schema = await res.json();
69
- if (schema.plans)
70
- planIds = schema.plans.map((p) => p.id);
71
- if (schema.features)
72
- featureKeys = schema.features;
73
- spinner.succeed('Schema obtido do Core');
74
- }
75
- else {
76
- spinner.warn('Core offline — gerando tipos com defaults');
77
- }
78
- // Generate TypeScript types
79
- const content = generateTypeFile(config.coreUrl, config.clientId, planIds, featureKeys);
80
- const outPath = path.resolve(options.out);
81
- fs.ensureDirSync(path.dirname(outPath));
82
- fs.writeFileSync(outPath, content, 'utf-8');
83
- console.log(chalk_1.default.green(`\n✓ Tipos gerados: ${options.out}`));
84
- console.log(chalk_1.default.dim(` Planos: ${planIds.join(', ')}`));
85
- console.log(chalk_1.default.dim(` Features: ${featureKeys.join(', ')}`));
86
- console.log('');
87
- }
88
- catch (err) {
89
- spinner.fail(`Erro: ${err.message}`);
90
- process.exit(1);
91
- }
92
- });
93
- return cmd;
94
- }
95
- function generateTypeFile(coreUrl, clientId, planIds, featureKeys) {
96
- const now = new Date().toISOString();
97
- const planUnion = planIds.map((p) => `'${p}'`).join(' | ');
98
- const featureUnion = featureKeys.map((f) => `'${f}'`).join(' | ');
99
- return `/**
100
- * Tipos Neetru gerados automaticamente por \`neetru generate-types\`
101
- * Gerado em: ${now}
102
- * Core: ${coreUrl}
103
- * Client: ${clientId}
104
- *
105
- * NÃO editar manualmente — re-gere com \`neetru gen\`
106
- */
107
-
108
- // ─── Planos ────────────────────────────────────────────────────────────────
109
-
110
- export type NeetruPlanId = ${planUnion};
111
-
112
- export const NEETRU_PLAN_IDS = [${planIds.map((p) => `'${p}'`).join(', ')}] as const satisfies NeetruPlanId[];
113
-
114
- // ─── Features / Entitlements ───────────────────────────────────────────────
115
-
116
- export type NeetruFeatureKey = ${featureUnion};
117
-
118
- export const NEETRU_FEATURE_KEYS = [${featureKeys.map((f) => `'${f}'`).join(', ')}] as const satisfies NeetruFeatureKey[];
119
-
120
- // ─── Tipos base ────────────────────────────────────────────────────────────
121
-
122
- export interface NeetruSubscription {
123
- id: string;
124
- status: 'active' | 'cancelled' | 'past_due' | 'trialing';
125
- planId: NeetruPlanId;
126
- planName: string;
127
- priceMonthly: number;
128
- currentPeriodEnd: string;
129
- autoRenew: boolean;
130
- }
131
-
132
- export interface NeetruEntitlement {
133
- featureKey: NeetruFeatureKey;
134
- allowed: boolean;
135
- limit?: number;
136
- used?: number;
137
- remaining?: number;
138
- }
139
-
140
- export type NeetruEntitlements = {
141
- [K in NeetruFeatureKey]?: NeetruEntitlement;
142
- };
143
-
144
- // ─── Helper types ──────────────────────────────────────────────────────────
145
-
146
- export type HasPlan<P extends NeetruPlanId> = { planId: P };
147
- export type HasFeature<F extends NeetruFeatureKey> = { [K in F]: NeetruEntitlement & { allowed: true } };
148
- `;
149
- }
150
- //# sourceMappingURL=generate-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../../src/commands/generate-types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,oDAwDC;AA/DD,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,6CAA+B;AAC/B,2CAA6B;AAC7B,sCAA0C;AAE1C,SAAgB,oBAAoB;IAClC,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,gBAAgB,CAAC,CAAC;IAE1C,GAAG;SACA,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,6EAA6E,CAAC;SAC1F,MAAM,CAAC,cAAc,EAAE,kBAAkB,EAAE,0CAA0C,CAAC;SACtF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,MAAwC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,sBAAa,GAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE1D,IAAI,CAAC;YACH,kDAAkD;YAClD,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,MAAM,CAAC,OAAO,2BAA2B,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EACjF,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACtC,CAAC;YAEF,IAAI,OAAO,GAAa,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACzD,IAAI,WAAW,GAAa,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;YAElF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0D,CAAC;gBACxF,IAAI,MAAM,CAAC,KAAK;oBAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1D,IAAI,MAAM,CAAC,QAAQ;oBAAE,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACnD,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC5D,CAAC;YAED,4BAA4B;YAC5B,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAExF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAE5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAe,EACf,QAAgB,EAChB,OAAiB,EACjB,WAAqB;IAErB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAElE,OAAO;;gBAEO,GAAG;WACR,OAAO;aACL,QAAQ;;;;;;;6BAOQ,SAAS;;kCAEJ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;iCAIxC,YAAY;;sCAEP,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BhF,CAAC;AACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,WAAW,IAAI,OAAO,CA0GrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,YAAY,IAAI,OAAO,CAgEtC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,WAAW,IAAI,OAAO,CAqGrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,WAAW,IAAI,OAAO,CAuCrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,aAAa,IAAI,OAAO,CA2FvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,eAAe,IAAI,OAAO,CA2FzC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,aAAa,IAAI,OAAO,CA0BvC"}
package/dist/config.d.ts DELETED
@@ -1,14 +0,0 @@
1
- export interface NeetruConfig {
2
- coreUrl: string;
3
- clientId: string;
4
- clientSecret?: string;
5
- projectName?: string;
6
- features: string[];
7
- createdAt: string;
8
- }
9
- export declare function readLocalConfig(): NeetruConfig | null;
10
- export declare function writeLocalConfig(config: NeetruConfig): void;
11
- export declare function readGlobalConfig(): Partial<NeetruConfig>;
12
- export declare function writeGlobalConfig(config: Partial<NeetruConfig>): void;
13
- export declare function requireConfig(): NeetruConfig;
14
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAOrD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE3D;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAOxD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAGrE;AAED,wBAAgB,aAAa,IAAI,YAAY,CAU5C"}
package/dist/config.js DELETED
@@ -1,83 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.readLocalConfig = readLocalConfig;
37
- exports.writeLocalConfig = writeLocalConfig;
38
- exports.readGlobalConfig = readGlobalConfig;
39
- exports.writeGlobalConfig = writeGlobalConfig;
40
- exports.requireConfig = requireConfig;
41
- const fs = __importStar(require("fs-extra"));
42
- const path = __importStar(require("path"));
43
- const os = __importStar(require("os"));
44
- const CONFIG_DIR = path.join(os.homedir(), '.neetru');
45
- const GLOBAL_CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
46
- const LOCAL_CONFIG_FILE = path.join(process.cwd(), 'neetru.json');
47
- function readLocalConfig() {
48
- try {
49
- if (!fs.existsSync(LOCAL_CONFIG_FILE))
50
- return null;
51
- return fs.readJsonSync(LOCAL_CONFIG_FILE);
52
- }
53
- catch {
54
- return null;
55
- }
56
- }
57
- function writeLocalConfig(config) {
58
- fs.writeJsonSync(LOCAL_CONFIG_FILE, config, { spaces: 2 });
59
- }
60
- function readGlobalConfig() {
61
- try {
62
- if (!fs.existsSync(GLOBAL_CONFIG_FILE))
63
- return {};
64
- return fs.readJsonSync(GLOBAL_CONFIG_FILE);
65
- }
66
- catch {
67
- return {};
68
- }
69
- }
70
- function writeGlobalConfig(config) {
71
- fs.ensureDirSync(CONFIG_DIR);
72
- fs.writeJsonSync(GLOBAL_CONFIG_FILE, config, { spaces: 2 });
73
- }
74
- function requireConfig() {
75
- const config = readLocalConfig();
76
- if (!config) {
77
- throw new Error('neetru.json não encontrado. Execute ' +
78
- '\x1b[1mneetru init\x1b[0m' +
79
- ' no diretório do seu projeto.');
80
- }
81
- return config;
82
- }
83
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,0CAOC;AAED,4CAEC;AAED,4CAOC;AAED,8CAGC;AAED,sCAUC;AAtDD,6CAA+B;AAC/B,2CAA6B;AAC7B,uCAAyB;AAWzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAChE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;AAElE,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,OAAO,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAiB,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAoB;IACnD,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,gBAAgB;IAC9B,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,OAAO,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAA0B,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAA6B;IAC7D,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7B,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,sCAAsC;YACtC,2BAA2B;YAC3B,+BAA+B,CAChC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- import type { NeetruConfig } from '../config';
2
- export declare function scaffoldAuth(config: NeetruConfig, outDir: string): Promise<string[]>;
3
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/scaffold/auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6L1F"}