@neetru/cli 1.0.1 → 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/CHANGELOG.md +136 -0
- package/README.md +109 -152
- package/dist/commands/add.d.ts +8 -3
- package/dist/commands/add.js +70 -143
- package/dist/commands/add.js.map +1 -1
- 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/ai.d.ts +4 -0
- package/dist/commands/ai.js +88 -0
- package/dist/commands/ai.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/autocomplete.d.ts +7 -0
- package/dist/commands/autocomplete.js +107 -0
- package/dist/commands/autocomplete.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.d.ts +18 -0
- package/dist/commands/build.js +295 -0
- package/dist/commands/build.js.map +1 -0
- 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/config.d.ts +3 -0
- package/dist/commands/config.js +70 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/db.d.ts +14 -0
- package/dist/commands/db.js +187 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/deploy.d.ts +23 -3
- package/dist/commands/deploy.js +530 -177
- 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/doctor.d.ts +27 -0
- package/dist/commands/doctor.js +211 -0
- package/dist/commands/doctor.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/env.d.ts +15 -0
- package/dist/commands/env.js +56 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/fn.d.ts +6 -0
- package/dist/commands/fn.js +87 -0
- package/dist/commands/fn.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 +10 -3
- package/dist/commands/init.js +275 -142
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +6 -3
- package/dist/commands/login.js +222 -92
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +1 -0
- package/dist/commands/logout.js +28 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/logs.d.ts +14 -3
- package/dist/commands/logs.js +132 -106
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/mocks.d.ts +5 -0
- package/dist/commands/mocks.js +23 -0
- package/dist/commands/mocks.js.map +1 -0
- package/dist/commands/open.d.ts +4 -3
- package/dist/commands/open.js +53 -85
- package/dist/commands/open.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/promote.d.ts +9 -0
- package/dist/commands/promote.js +114 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/publish.d.ts +14 -0
- package/dist/commands/publish.js +180 -0
- package/dist/commands/publish.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/status.d.ts +5 -3
- package/dist/commands/status.js +91 -93
- package/dist/commands/status.js.map +1 -1
- 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/upgrade.d.ts +12 -0
- package/dist/commands/upgrade.js +77 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/validate.d.ts +1 -3
- package/dist/commands/validate.js +83 -91
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/whoami.d.ts +5 -3
- package/dist/commands/whoami.js +76 -28
- package/dist/commands/whoami.js.map +1 -1
- 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.d.ts +0 -1
- package/dist/index.js +1094 -36
- package/dist/index.js.map +1 -1
- package/dist/lib/ai/context.d.ts +11 -0
- package/dist/lib/ai/context.js +112 -0
- package/dist/lib/ai/context.js.map +1 -0
- package/dist/lib/ai/orchestrator.d.ts +10 -0
- package/dist/lib/ai/orchestrator.js +92 -0
- package/dist/lib/ai/orchestrator.js.map +1 -0
- package/dist/lib/api-client.d.ts +39 -0
- package/dist/lib/api-client.js +185 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +15 -0
- package/dist/lib/auth.js +98 -0
- package/dist/lib/auth.js.map +1 -0
- 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 +165 -0
- package/dist/lib/config-schema.js +57 -0
- package/dist/lib/config-schema.js.map +1 -0
- package/dist/lib/config.d.ts +15 -0
- package/dist/lib/config.js +33 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/render.d.ts +16 -0
- package/dist/lib/render.js +74 -0
- package/dist/lib/render.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.js +27 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +35 -33
- package/templates/auth/callback.ts +22 -0
- package/templates/auth/sign-in.tsx +41 -0
- package/templates/billing/checkout.ts +22 -0
- package/templates/billing/page.tsx +43 -0
- package/templates/support/ticket-form.tsx +68 -0
- package/templates/usage/track.ts +30 -0
- package/templates/users/profile.tsx +43 -0
- package/LICENSE +0 -21
- package/dist/commands/add.d.ts.map +0 -1
- package/dist/commands/deploy.d.ts.map +0 -1
- package/dist/commands/generate-types.d.ts +0 -3
- package/dist/commands/generate-types.d.ts.map +0 -1
- package/dist/commands/generate-types.js +0 -150
- package/dist/commands/generate-types.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/open.d.ts.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/config.d.ts +0 -14
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -83
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/scaffold/auth.d.ts +0 -3
- package/dist/scaffold/auth.d.ts.map +0 -1
- package/dist/scaffold/auth.js +0 -228
- package/dist/scaffold/auth.js.map +0 -1
- package/dist/scaffold/billing.d.ts +0 -3
- package/dist/scaffold/billing.d.ts.map +0 -1
- package/dist/scaffold/billing.js +0 -184
- package/dist/scaffold/billing.js.map +0 -1
- package/dist/scaffold/usage.d.ts +0 -3
- package/dist/scaffold/usage.d.ts.map +0 -1
- package/dist/scaffold/usage.js +0 -173
- package/dist/scaffold/usage.js.map +0 -1
- package/dist/scaffold/users.d.ts +0 -3
- package/dist/scaffold/users.d.ts.map +0 -1
- package/dist/scaffold/users.js +0 -135
- package/dist/scaffold/users.js.map +0 -1
|
@@ -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":"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"}
|
|
@@ -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
|
package/dist/config.d.ts.map
DELETED
|
@@ -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
|
package/dist/config.js.map
DELETED
|
@@ -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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/scaffold/auth.d.ts
DELETED
|
@@ -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"}
|
package/dist/scaffold/auth.js
DELETED
|
@@ -1,228 +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.scaffoldAuth = scaffoldAuth;
|
|
37
|
-
const fs = __importStar(require("fs-extra"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
async function scaffoldAuth(config, outDir) {
|
|
40
|
-
const files = [
|
|
41
|
-
{
|
|
42
|
-
name: 'auth.ts',
|
|
43
|
-
content: `/**
|
|
44
|
-
* Neetru Auth — gerado por neetru add auth
|
|
45
|
-
* Fluxo OAuth 2.0 / OIDC via Neetru Core
|
|
46
|
-
*/
|
|
47
|
-
|
|
48
|
-
const NEETRU_CORE_URL = process.env.NEETRU_CORE_URL ?? '${config.coreUrl}';
|
|
49
|
-
const CLIENT_ID = process.env.NEETRU_CLIENT_ID ?? '${config.clientId}';
|
|
50
|
-
const CLIENT_SECRET = process.env.NEETRU_CLIENT_SECRET ?? '';
|
|
51
|
-
|
|
52
|
-
export interface NeetruTokens {
|
|
53
|
-
access_token: string;
|
|
54
|
-
refresh_token: string;
|
|
55
|
-
token_type: string;
|
|
56
|
-
expires_in: number;
|
|
57
|
-
scope: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface NeetruUser {
|
|
61
|
-
uid: string;
|
|
62
|
-
email: string;
|
|
63
|
-
displayName?: string;
|
|
64
|
-
photoURL?: string;
|
|
65
|
-
tenantId?: string;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Gera a URL de autorização OAuth para redirecionar o usuário ao Neetru Core.
|
|
70
|
-
*/
|
|
71
|
-
export function getAuthorizationUrl(redirectUri: string, state?: string): string {
|
|
72
|
-
const params = new URLSearchParams({
|
|
73
|
-
client_id: CLIENT_ID,
|
|
74
|
-
redirect_uri: redirectUri,
|
|
75
|
-
response_type: 'code',
|
|
76
|
-
scope: 'openid profile email',
|
|
77
|
-
...(state ? { state } : {}),
|
|
78
|
-
});
|
|
79
|
-
return \`\${NEETRU_CORE_URL}/api/oauth/authorize?\${params.toString()}\`;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Troca o authorization code por tokens de acesso.
|
|
84
|
-
* Chamar no callback route após o redirect do Neetru Core.
|
|
85
|
-
*/
|
|
86
|
-
export async function exchangeCodeForTokens(
|
|
87
|
-
code: string,
|
|
88
|
-
redirectUri: string
|
|
89
|
-
): Promise<NeetruTokens> {
|
|
90
|
-
const res = await fetch(\`\${NEETRU_CORE_URL}/api/oauth/token\`, {
|
|
91
|
-
method: 'POST',
|
|
92
|
-
headers: { 'Content-Type': 'application/json' },
|
|
93
|
-
body: JSON.stringify({
|
|
94
|
-
code,
|
|
95
|
-
client_id: CLIENT_ID,
|
|
96
|
-
client_secret: CLIENT_SECRET,
|
|
97
|
-
redirect_uri: redirectUri,
|
|
98
|
-
grant_type: 'authorization_code',
|
|
99
|
-
}),
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
if (!res.ok) {
|
|
103
|
-
const err = await res.text();
|
|
104
|
-
throw new Error(\`Token exchange failed: \${res.status} — \${err}\`);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return res.json() as Promise<NeetruTokens>;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Renova o access token usando o refresh token.
|
|
112
|
-
*/
|
|
113
|
-
export async function refreshAccessToken(refreshToken: string): Promise<NeetruTokens> {
|
|
114
|
-
const res = await fetch(\`\${NEETRU_CORE_URL}/api/oauth/token\`, {
|
|
115
|
-
method: 'POST',
|
|
116
|
-
headers: { 'Content-Type': 'application/json' },
|
|
117
|
-
body: JSON.stringify({
|
|
118
|
-
grant_type: 'refresh_token',
|
|
119
|
-
refresh_token: refreshToken,
|
|
120
|
-
client_id: CLIENT_ID,
|
|
121
|
-
client_secret: CLIENT_SECRET,
|
|
122
|
-
}),
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
if (!res.ok) {
|
|
126
|
-
throw new Error(\`Token refresh failed: \${res.status}\`);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return res.json() as Promise<NeetruTokens>;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Revoga um refresh token (logout).
|
|
134
|
-
*/
|
|
135
|
-
export async function revokeToken(refreshToken: string): Promise<void> {
|
|
136
|
-
await fetch(\`\${NEETRU_CORE_URL}/api/oauth/revoke\`, {
|
|
137
|
-
method: 'POST',
|
|
138
|
-
headers: { 'Content-Type': 'application/json' },
|
|
139
|
-
body: JSON.stringify({ token: refreshToken, client_id: CLIENT_ID }),
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Busca o perfil do usuário autenticado.
|
|
145
|
-
*/
|
|
146
|
-
export async function getUserProfile(accessToken: string): Promise<NeetruUser> {
|
|
147
|
-
const res = await fetch(\`\${NEETRU_CORE_URL}/api/userinfo\`, {
|
|
148
|
-
headers: { Authorization: \`Bearer \${accessToken}\` },
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
if (!res.ok) {
|
|
152
|
-
throw new Error(\`Failed to fetch user profile: \${res.status}\`);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return res.json() as Promise<NeetruUser>;
|
|
156
|
-
}
|
|
157
|
-
`,
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
name: 'auth-middleware.ts',
|
|
161
|
-
content: `/**
|
|
162
|
-
* Neetru Auth Middleware — Next.js App Router
|
|
163
|
-
* Protege rotas que requerem autenticação Neetru.
|
|
164
|
-
*/
|
|
165
|
-
|
|
166
|
-
import { cookies } from 'next/headers';
|
|
167
|
-
import { getUserProfile, refreshAccessToken, type NeetruUser } from './auth';
|
|
168
|
-
|
|
169
|
-
export interface NeetruSession {
|
|
170
|
-
user: NeetruUser;
|
|
171
|
-
accessToken: string;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Obtém a sessão Neetru do cookie httpOnly.
|
|
176
|
-
* Retorna null se não autenticado ou sessão expirada.
|
|
177
|
-
*/
|
|
178
|
-
export async function getNeetruSession(): Promise<NeetruSession | null> {
|
|
179
|
-
const cookieStore = await cookies();
|
|
180
|
-
const accessToken = cookieStore.get('neetru_access_token')?.value;
|
|
181
|
-
const refreshToken = cookieStore.get('neetru_refresh_token')?.value;
|
|
182
|
-
|
|
183
|
-
if (!accessToken && !refreshToken) return null;
|
|
184
|
-
|
|
185
|
-
try {
|
|
186
|
-
const user = await getUserProfile(accessToken ?? '');
|
|
187
|
-
return { user, accessToken: accessToken ?? '' };
|
|
188
|
-
} catch {
|
|
189
|
-
// Try refreshing
|
|
190
|
-
if (!refreshToken) return null;
|
|
191
|
-
|
|
192
|
-
try {
|
|
193
|
-
const tokens = await refreshAccessToken(refreshToken);
|
|
194
|
-
const user = await getUserProfile(tokens.access_token);
|
|
195
|
-
// Note: caller should update cookies with new tokens
|
|
196
|
-
return { user, accessToken: tokens.access_token };
|
|
197
|
-
} catch {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* HOF para Server Actions — exige sessão Neetru válida.
|
|
205
|
-
*/
|
|
206
|
-
export function requireNeetruSession<TInput, TOutput>(
|
|
207
|
-
fn: (session: NeetruSession, input: TInput) => Promise<TOutput>
|
|
208
|
-
) {
|
|
209
|
-
return async (input: TInput): Promise<TOutput> => {
|
|
210
|
-
const session = await getNeetruSession();
|
|
211
|
-
if (!session) {
|
|
212
|
-
throw new Error('Não autenticado. Faça login com Neetru.');
|
|
213
|
-
}
|
|
214
|
-
return fn(session, input);
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
`,
|
|
218
|
-
},
|
|
219
|
-
];
|
|
220
|
-
const created = [];
|
|
221
|
-
for (const file of files) {
|
|
222
|
-
const filePath = path.join(outDir, file.name);
|
|
223
|
-
await fs.writeFile(filePath, file.content, 'utf-8');
|
|
224
|
-
created.push(path.relative(process.cwd(), filePath));
|
|
225
|
-
}
|
|
226
|
-
return created;
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/scaffold/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oCA6LC;AAjMD,6CAA+B;AAC/B,2CAA6B;AAGtB,KAAK,UAAU,YAAY,CAAC,MAAoB,EAAE,MAAc;IACrE,MAAM,KAAK,GAA6C;QACtD;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE;;;;;0DAK2C,MAAM,CAAC,OAAO;qDACnB,MAAM,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GnE;SACI;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDd;SACI;KACF,CAAC;IAEF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/scaffold/billing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAsB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiJ7F"}
|