zeroauth 1.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 (64) hide show
  1. package/dist/api/authorizer.d.ts +12 -0
  2. package/dist/api/authorizer.d.ts.map +1 -0
  3. package/dist/api/authorizer.js +157 -0
  4. package/dist/api/authorizer.js.map +1 -0
  5. package/dist/api/config/intent-config.d.ts +45 -0
  6. package/dist/api/config/intent-config.d.ts.map +1 -0
  7. package/dist/api/config/intent-config.js +95 -0
  8. package/dist/api/config/intent-config.js.map +1 -0
  9. package/dist/api/index.d.ts +4 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api/index.js +722 -0
  12. package/dist/api/index.js.map +1 -0
  13. package/dist/api/routing/intent-router.d.ts +56 -0
  14. package/dist/api/routing/intent-router.d.ts.map +1 -0
  15. package/dist/api/routing/intent-router.js +140 -0
  16. package/dist/api/routing/intent-router.js.map +1 -0
  17. package/dist/api/routing/intent-validator.d.ts +83 -0
  18. package/dist/api/routing/intent-validator.d.ts.map +1 -0
  19. package/dist/api/routing/intent-validator.js +187 -0
  20. package/dist/api/routing/intent-validator.js.map +1 -0
  21. package/dist/api/services/billing.d.ts +9 -0
  22. package/dist/api/services/billing.d.ts.map +1 -0
  23. package/dist/api/services/billing.js +49 -0
  24. package/dist/api/services/billing.js.map +1 -0
  25. package/dist/api/services/stripe.d.ts +17 -0
  26. package/dist/api/services/stripe.d.ts.map +1 -0
  27. package/dist/api/services/stripe.js +69 -0
  28. package/dist/api/services/stripe.js.map +1 -0
  29. package/dist/authorizer.zip +0 -0
  30. package/dist/cli/auth.d.ts +20 -0
  31. package/dist/cli/auth.d.ts.map +1 -0
  32. package/dist/cli/auth.js +264 -0
  33. package/dist/cli/auth.js.map +1 -0
  34. package/dist/cli/config.d.ts +17 -0
  35. package/dist/cli/config.d.ts.map +1 -0
  36. package/dist/cli/config.js +94 -0
  37. package/dist/cli/config.js.map +1 -0
  38. package/dist/cli/index.d.ts +3 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +371 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/cli/proxy.d.ts +2 -0
  43. package/dist/cli/proxy.d.ts.map +1 -0
  44. package/dist/cli/proxy.js +171 -0
  45. package/dist/cli/proxy.js.map +1 -0
  46. package/dist/data/catalog.d.ts +54 -0
  47. package/dist/data/catalog.d.ts.map +1 -0
  48. package/dist/data/catalog.js +108 -0
  49. package/dist/data/catalog.js.map +1 -0
  50. package/dist/db/dal.d.ts +75 -0
  51. package/dist/db/dal.d.ts.map +1 -0
  52. package/dist/db/dal.js +124 -0
  53. package/dist/db/dal.js.map +1 -0
  54. package/dist/index.js +156 -0
  55. package/dist/index.ts +134 -0
  56. package/dist/logger.d.ts +8 -0
  57. package/dist/logger.d.ts.map +1 -0
  58. package/dist/logger.js +19 -0
  59. package/dist/logger.js.map +1 -0
  60. package/dist/test/setup.d.ts +2 -0
  61. package/dist/test/setup.d.ts.map +1 -0
  62. package/dist/test/setup.js +27 -0
  63. package/dist/test/setup.js.map +1 -0
  64. package/package.json +82 -0
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.stripe = void 0;
7
+ exports.createStripeCustomer = createStripeCustomer;
8
+ exports.reportUsage = reportUsage;
9
+ const stripe_1 = __importDefault(require("stripe"));
10
+ const logger_1 = require("../../logger");
11
+ const STRIPE_API_KEY = process.env.STRIPE_API_KEY || "sk_test_123"; // Default for mock
12
+ const STRIPE_API_BASE_URL = process.env.STRIPE_API_BASE_URL; // Used for stripe-mock in dev
13
+ /**
14
+ * Initialize Stripe Client
15
+ *
16
+ * In production: Connects to real Stripe API
17
+ * In development: Connects to stripe-mock container if STRIPE_API_BASE_URL is set
18
+ */
19
+ exports.stripe = new stripe_1.default(STRIPE_API_KEY, {
20
+ apiVersion: "2025-10-29.clover", // Pin to latest version
21
+ typescript: true,
22
+ host: STRIPE_API_BASE_URL ? STRIPE_API_BASE_URL.replace("http://", "").replace("https://", "").split(":")[0] : undefined,
23
+ port: STRIPE_API_BASE_URL ? parseInt(STRIPE_API_BASE_URL.split(":")[2] || "80") : undefined,
24
+ protocol: STRIPE_API_BASE_URL && STRIPE_API_BASE_URL.startsWith("http:") ? "http" : "https",
25
+ maxNetworkRetries: 3,
26
+ });
27
+ logger_1.log.info(`Stripe initialized. Mock Mode: ${!!STRIPE_API_BASE_URL}`);
28
+ /**
29
+ * Creates a Stripe Customer for an Organization
30
+ */
31
+ async function createStripeCustomer(organizationId, email, name) {
32
+ try {
33
+ const customer = await exports.stripe.customers.create({
34
+ email,
35
+ name,
36
+ metadata: {
37
+ organizationId,
38
+ },
39
+ // In a real app we might attach a payment method here
40
+ });
41
+ logger_1.log.info({ customerId: customer.id, organizationId }, "Created Stripe Customer");
42
+ return customer;
43
+ }
44
+ catch (error) {
45
+ logger_1.log.error({ error, organizationId }, "Failed to create Stripe Customer");
46
+ throw error;
47
+ }
48
+ }
49
+ /**
50
+ * Reports usage for Metered Billing using Stripe's modern Metering API
51
+ */
52
+ async function reportUsage(customerId, tokens) {
53
+ try {
54
+ // With Stripe's new Metering API, we send events.
55
+ // Stripe handle the aggregation based on the Meter configuration in the dashboard.
56
+ await exports.stripe.billing.meterEvents.create({
57
+ event_name: "tokens_used",
58
+ payload: {
59
+ stripe_customer_id: customerId,
60
+ value: tokens.toString(),
61
+ },
62
+ });
63
+ logger_1.log.info({ customerId, tokens, event: "tokens_used" }, "Successfully reported usage event to Stripe");
64
+ }
65
+ catch (error) {
66
+ logger_1.log.error({ error, customerId }, "Failed to report usage event to Stripe");
67
+ }
68
+ }
69
+ //# sourceMappingURL=stripe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/api/services/stripe.ts"],"names":[],"mappings":";;;;;;AA0BA,oDAoBC;AAKD,kCAsBC;AAzED,oDAA4B;AAC5B,yCAAmC;AAEnC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,aAAa,CAAC,CAAC,mBAAmB;AACvF,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,8BAA8B;AAE3F;;;;;GAKG;AACU,QAAA,MAAM,GAAG,IAAI,gBAAM,CAAC,cAAc,EAAE;IAC/C,UAAU,EAAE,mBAAmB,EAAE,wBAAwB;IACzD,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACxH,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;IAC3F,QAAQ,EAAE,mBAAmB,IAAI,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;IAC3F,iBAAiB,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,YAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,cAAsB,EACtB,KAAa,EACb,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,cAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAC7C,KAAK;YACL,IAAI;YACJ,QAAQ,EAAE;gBACR,cAAc;aACf;YACD,sDAAsD;SACvD,CAAC,CAAC;QACH,YAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,yBAAyB,CAAC,CAAC;QACjF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,kCAAkC,CAAC,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,MAAc;IAEd,IAAI,CAAC;QACH,kDAAkD;QAClD,mFAAmF;QACnF,MAAM,cAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;YACtC,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE;gBACP,kBAAkB,EAAE,UAAU;gBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;aACzB;SACF,CAAC,CAAC;QAEH,YAAG,CAAC,IAAI,CACN,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAC5C,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,wCAAwC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
Binary file
@@ -0,0 +1,20 @@
1
+ export interface Tokens {
2
+ access_token: string;
3
+ refresh_token: string;
4
+ id_token?: string;
5
+ }
6
+ export declare function getOidcEndpoints(): Promise<{
7
+ authorization_endpoint: string;
8
+ token_endpoint: string;
9
+ logout_endpoint: string;
10
+ }>;
11
+ export declare function saveTokens(tokens: Tokens): void;
12
+ export declare function loadTokens(): Tokens | null;
13
+ export declare function getTokenClaims(token: string): any;
14
+ export declare function isTokenExpired(token: string): boolean;
15
+ export declare function getTokenTimeRemaining(token: string): number;
16
+ export declare function refreshAccessToken(refreshToken: string): Promise<string | null>;
17
+ export declare function getValidAccessToken(): Promise<string | null>;
18
+ export declare function performLogin(): Promise<string | null>;
19
+ export declare function exchangeCodeForToken(code: string): Promise<Tokens>;
20
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAoBD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ/C;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAW1C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAMjD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxB;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBlE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwF3D;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BxE"}
@@ -0,0 +1,264 @@
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.getOidcEndpoints = getOidcEndpoints;
40
+ exports.saveTokens = saveTokens;
41
+ exports.loadTokens = loadTokens;
42
+ exports.getTokenClaims = getTokenClaims;
43
+ exports.isTokenExpired = isTokenExpired;
44
+ exports.getTokenTimeRemaining = getTokenTimeRemaining;
45
+ exports.refreshAccessToken = refreshAccessToken;
46
+ exports.getValidAccessToken = getValidAccessToken;
47
+ exports.performLogin = performLogin;
48
+ exports.exchangeCodeForToken = exchangeCodeForToken;
49
+ const axios_1 = __importDefault(require("axios"));
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const os = __importStar(require("os"));
53
+ const open_1 = __importDefault(require("open"));
54
+ const http_1 = require("http");
55
+ const url_1 = require("url");
56
+ const jwt = __importStar(require("jsonwebtoken"));
57
+ const config_1 = require("./config");
58
+ const crypto_1 = require("crypto");
59
+ function getCredentialsFile() {
60
+ return path.join(os.homedir(), ".zeroauth", "credentials.json");
61
+ }
62
+ let oidcEndpointsCache = null;
63
+ async function getOidcEndpoints() {
64
+ if (oidcEndpointsCache) {
65
+ return oidcEndpointsCache;
66
+ }
67
+ const envConfig = (0, config_1.getActiveEnvConfig)();
68
+ const discoveryUrl = `${envConfig.authIssuerUrl}/.well-known/openid-configuration`;
69
+ try {
70
+ const response = await axios_1.default.get(discoveryUrl);
71
+ oidcEndpointsCache = {
72
+ authorization_endpoint: response.data.authorization_endpoint,
73
+ token_endpoint: response.data.token_endpoint,
74
+ logout_endpoint: response.data.end_session_endpoint || response.data.logout_endpoint,
75
+ };
76
+ return oidcEndpointsCache;
77
+ }
78
+ catch (error) {
79
+ throw new Error(`Failed to fetch OIDC discovery document: ${error}`);
80
+ }
81
+ }
82
+ function saveTokens(tokens) {
83
+ const credentialsFile = getCredentialsFile();
84
+ const dir = path.dirname(credentialsFile);
85
+ if (!fs.existsSync(dir)) {
86
+ fs.mkdirSync(dir, { recursive: true });
87
+ }
88
+ fs.writeFileSync(credentialsFile, JSON.stringify(tokens, null, 2));
89
+ fs.chmodSync(credentialsFile, 0o600);
90
+ }
91
+ function loadTokens() {
92
+ const credentialsFile = getCredentialsFile();
93
+ if (!fs.existsSync(credentialsFile)) {
94
+ return null;
95
+ }
96
+ try {
97
+ const data = fs.readFileSync(credentialsFile, "utf8");
98
+ return JSON.parse(data);
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ function getTokenClaims(token) {
105
+ try {
106
+ return jwt.decode(token);
107
+ }
108
+ catch {
109
+ return {};
110
+ }
111
+ }
112
+ function isTokenExpired(token) {
113
+ const claims = getTokenClaims(token);
114
+ if (!claims || !claims.exp) {
115
+ return true; // Consider invalid tokens as expired
116
+ }
117
+ return claims.exp < Date.now() / 1000 + 10;
118
+ }
119
+ function getTokenTimeRemaining(token) {
120
+ const claims = getTokenClaims(token);
121
+ if (!claims || !claims.exp) {
122
+ return 0;
123
+ }
124
+ const exp = claims.exp;
125
+ const remaining = exp - Date.now() / 1000;
126
+ return Math.max(remaining, 0);
127
+ }
128
+ async function refreshAccessToken(refreshToken) {
129
+ const endpoints = await getOidcEndpoints();
130
+ const envConfig = (0, config_1.getActiveEnvConfig)(); // Use 'any' for secret
131
+ try {
132
+ const params = new URLSearchParams({
133
+ grant_type: "refresh_token",
134
+ client_id: envConfig.authClientId,
135
+ refresh_token: refreshToken,
136
+ });
137
+ if (envConfig.authClientSecret) {
138
+ params.append("client_secret", envConfig.authClientSecret);
139
+ }
140
+ const response = await axios_1.default.post(endpoints.token_endpoint, params, // Use the new params object
141
+ {
142
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
143
+ timeout: 10000,
144
+ });
145
+ const newTokens = response.data;
146
+ saveTokens(newTokens);
147
+ console.log("Access token refreshed.");
148
+ return newTokens.access_token;
149
+ }
150
+ catch (error) {
151
+ // console.error(`❌ Failed to refresh token: ${error}. Please log in again.`);
152
+ return null;
153
+ }
154
+ }
155
+ async function getValidAccessToken() {
156
+ const tokens = loadTokens();
157
+ if (!tokens) {
158
+ return null;
159
+ }
160
+ // Use id_token for API calls since access_token is opaque
161
+ const idToken = tokens.id_token;
162
+ if (idToken && !isTokenExpired(idToken)) {
163
+ return idToken;
164
+ }
165
+ const refreshToken = tokens.refresh_token;
166
+ if (refreshToken) {
167
+ return await refreshAccessToken(refreshToken);
168
+ }
169
+ return null;
170
+ }
171
+ async function performLogin() {
172
+ const endpoints = await getOidcEndpoints();
173
+ const envConfig = (0, config_1.getActiveEnvConfig)();
174
+ // --- ADDED: Generate state ---
175
+ const state = (0, crypto_1.randomBytes)(8).toString("hex"); // 16-char random string
176
+ // --- END ADDED ---
177
+ const authUrl = endpoints.authorization_endpoint;
178
+ const params = new URLSearchParams({
179
+ client_id: envConfig.authClientId,
180
+ redirect_uri: envConfig.authRedirectUri,
181
+ response_type: "code",
182
+ scope: "openid", // Keep this from the previous fix
183
+ state: state, // <-- ADDED state parameter
184
+ });
185
+ const url = `${authUrl}?${params.toString()}`;
186
+ await (0, open_1.default)(url);
187
+ return new Promise((resolve) => {
188
+ const server = (0, http_1.createServer)((req, res) => {
189
+ const parsedUrl = (0, url_1.parse)(req.url, true);
190
+ // console.log("\n[Auth Callback Received]");
191
+ // console.log(" Full URL:", req.url);
192
+ // console.log(
193
+ // " Query parameters:",
194
+ // JSON.stringify(parsedUrl.query, null, 2),
195
+ // );
196
+ // --- ADDED: State validation ---
197
+ const receivedState = parsedUrl.query.state;
198
+ if (receivedState !== state) {
199
+ // console.error(`❌ Authentication failed: Invalid state parameter.`);
200
+ // console.error(` Expected: ${state}`);
201
+ // console.error(` Received: ${receivedState || "null"}`);
202
+ res.writeHead(400, { "Content-Type": "text/html" });
203
+ res.end(`<html><body><h1>Login Failed</h1><p>State mismatch (CSRF protection). Please try again.</p></body></html>`);
204
+ server.close();
205
+ resolve(null);
206
+ return;
207
+ }
208
+ // --- END ADDED ---
209
+ if (parsedUrl.query.error) {
210
+ // console.error(`❌ Authentication failed: ${parsedUrl.query.error}`);
211
+ // console.error(
212
+ // ` Description: ${parsedUrl.query.error_description || "No description provided."}`,
213
+ // );
214
+ res.writeHead(200, { "Content-Type": "text/html" });
215
+ res.end(`
216
+ <html><head><title>Login Failed</title></head>
217
+ <body>
218
+ <h1>Login Failed</h1>
219
+ <p>Error: ${parsedUrl.query.error}</p>
220
+ <p>Description: ${parsedUrl.query.error_description || "N/A"}</p>
221
+ <p>You can close this window.</p>
222
+ </body></html>
223
+ `);
224
+ server.close();
225
+ resolve(null);
226
+ return;
227
+ }
228
+ const code = parsedUrl.query.code;
229
+ res.writeHead(200, { "Content-Type": "text/html" });
230
+ res.end(`
231
+ <html>
232
+ <head><title>Login Successful</title></head>
233
+ <body>Login successful! This window will close automatically in 5 seconds.</body>
234
+ <script>setTimeout(() => window.close(), 5000);</script>
235
+ </html>
236
+ `);
237
+ server.close();
238
+ resolve(code || null);
239
+ });
240
+ server.listen(8085);
241
+ });
242
+ }
243
+ async function exchangeCodeForToken(code) {
244
+ const endpoints = await getOidcEndpoints();
245
+ const envConfig = (0, config_1.getActiveEnvConfig)(); // Use 'any' to access new secret prop
246
+ // --- MODIFIED: Build params and add secret ---
247
+ const params = new URLSearchParams({
248
+ grant_type: "authorization_code",
249
+ client_id: envConfig.authClientId,
250
+ code: code,
251
+ redirect_uri: envConfig.authRedirectUri,
252
+ });
253
+ if (envConfig.authClientSecret) {
254
+ params.append("client_secret", envConfig.authClientSecret);
255
+ }
256
+ // --- END MODIFIED ---
257
+ const response = await axios_1.default.post(endpoints.token_endpoint, params, // Use the new params object
258
+ {
259
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
260
+ timeout: 10000,
261
+ });
262
+ return response.data;
263
+ }
264
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,4CAwBC;AAED,gCAQC;AAED,gCAWC;AAED,wCAMC;AAED,wCAMC;AAED,sDAQC;AAED,gDAkCC;AAED,kDAkBC;AAED,oCAwFC;AAED,oDA2BC;AAnRD,kDAA0B;AAC1B,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,gDAAwB;AACxB,+BAAqE;AACrE,6BAA4B;AAC5B,kDAAoC;AACpC,qCAAsE;AACtE,mCAAqC;AAErC,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAClE,CAAC;AAQD,IAAI,kBAAkB,GAIX,IAAI,CAAC;AAET,KAAK,UAAU,gBAAgB;IAKpC,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,2BAAkB,GAAE,CAAC;IACvC,MAAM,YAAY,GAAG,GAAG,SAAS,CAAC,aAAa,mCAAmC,CAAC;IAEnF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC/C,kBAAkB,GAAG;YACnB,sBAAsB,EAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB;YAC5D,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc;YAC5C,eAAe,EACb,QAAQ,CAAC,IAAI,CAAC,oBAAoB,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe;SACtE,CAAC;QACF,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc;IACvC,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAQ,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,CAAC,qCAAqC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7C,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAa;IACjD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,YAAoB;IAEpB,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAA,2BAAkB,GAAS,CAAC,CAAC,uBAAuB;IAEtE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,UAAU,EAAE,eAAe;YAC3B,SAAS,EAAE,SAAS,CAAC,YAAY;YACjC,aAAa,EAAE,YAAY;SAC5B,CAAC,CAAC;QAEH,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,SAAS,CAAC,cAAc,EACxB,MAAM,EAAE,4BAA4B;QACpC;YACE,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,OAAO,EAAE,KAAK;SACf,CACF,CAAC;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;QAChC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC,YAAY,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,8EAA8E;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,mBAAmB;IACvC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0DAA0D;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC;IAChC,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;IAC1C,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,MAAM,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAA,2BAAkB,GAAE,CAAC;IAEvC,gCAAgC;IAChC,MAAM,KAAK,GAAG,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB;IACtE,oBAAoB;IAEpB,MAAM,OAAO,GAAG,SAAS,CAAC,sBAAsB,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,SAAS,EAAE,SAAS,CAAC,YAAY;QACjC,YAAY,EAAE,SAAS,CAAC,eAAe;QACvC,aAAa,EAAE,MAAM;QACrB,KAAK,EAAE,QAAQ,EAAE,kCAAkC;QACnD,KAAK,EAAE,KAAK,EAAE,4BAA4B;KAC3C,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAE9C,MAAM,IAAA,cAAI,EAAC,GAAG,CAAC,CAAC;IAEhB,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACxE,MAAM,SAAS,GAAG,IAAA,WAAK,EAAC,GAAG,CAAC,GAAI,EAAE,IAAI,CAAC,CAAC;YAExC,6CAA6C;YAC7C,uCAAuC;YACvC,eAAe;YACf,2BAA2B;YAC3B,8CAA8C;YAC9C,KAAK;YAEL,kCAAkC;YAClC,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,KAAe,CAAC;YACtD,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;gBAC5B,sEAAsE;gBACtE,yCAAyC;gBACzC,2DAA2D;gBAE3D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CACL,2GAA2G,CAC5G,CAAC;gBAEF,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,oBAAoB;YAEpB,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1B,sEAAsE;gBACtE,iBAAiB;gBACjB,yFAAyF;gBACzF,KAAK;gBAEL,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC;;;;wBAIQ,SAAS,CAAC,KAAK,CAAC,KAAK;8BACf,SAAS,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK;;;SAG/D,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAc,CAAC;YAE5C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC;;;;;;OAMP,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAA,2BAAkB,GAAS,CAAC,CAAC,sCAAsC;IAErF,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,SAAS,CAAC,YAAY;QACjC,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,SAAS,CAAC,eAAe;KACxC,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC;IACD,uBAAuB;IAEvB,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,SAAS,CAAC,cAAc,EACxB,MAAM,EAAE,4BAA4B;IACpC;QACE,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,OAAO,EAAE,KAAK;KACf,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface EnvConfig {
2
+ apiBaseUrl: string;
3
+ authIssuerUrl: string;
4
+ authClientId: string;
5
+ authRedirectUri: string;
6
+ }
7
+ export interface Config {
8
+ activeEnv: string;
9
+ defaultModel: string;
10
+ envs: {
11
+ [key: string]: EnvConfig;
12
+ };
13
+ }
14
+ export declare function loadConfig(): Config;
15
+ export declare function saveConfig(config: Config): void;
16
+ export declare function getActiveEnvConfig(): EnvConfig;
17
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CACpC;AAqBD,wBAAgB,UAAU,IAAI,MAAM,CAYnC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ/C;AAED,wBAAgB,kBAAkB,IAAI,SAAS,CAS9C"}
@@ -0,0 +1,94 @@
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.loadConfig = loadConfig;
37
+ exports.saveConfig = saveConfig;
38
+ exports.getActiveEnvConfig = getActiveEnvConfig;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ function getConfigFile() {
43
+ return path.join(os.homedir(), ".zeroauth", "config.json");
44
+ }
45
+ const DEFAULT_CONFIG = {
46
+ activeEnv: "local",
47
+ defaultModel: "intent:budget",
48
+ envs: {
49
+ local: {
50
+ apiBaseUrl: "http://localhost:8080/v1",
51
+ authIssuerUrl: "http://localhost:8081/realms/zeroauth",
52
+ authClientId: "zeroauth-cli",
53
+ authRedirectUri: "http://localhost:8085/callback",
54
+ },
55
+ prod: {
56
+ apiBaseUrl: "https://api.zeroauth.ai/v1",
57
+ authIssuerUrl: "https://flexible-doberman-84.clerk.accounts.dev",
58
+ authClientId: "eoLgtLOGjAWdjlFp",
59
+ authRedirectUri: "http://localhost:8085/callback",
60
+ },
61
+ },
62
+ };
63
+ function loadConfig() {
64
+ const configFile = getConfigFile();
65
+ if (!fs.existsSync(configFile)) {
66
+ saveConfig(DEFAULT_CONFIG);
67
+ return DEFAULT_CONFIG;
68
+ }
69
+ try {
70
+ const data = fs.readFileSync(configFile, "utf8");
71
+ return JSON.parse(data);
72
+ }
73
+ catch {
74
+ return DEFAULT_CONFIG;
75
+ }
76
+ }
77
+ function saveConfig(config) {
78
+ const configFile = getConfigFile();
79
+ const dir = path.dirname(configFile);
80
+ if (!fs.existsSync(dir)) {
81
+ fs.mkdirSync(dir, { recursive: true });
82
+ }
83
+ fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
84
+ fs.chmodSync(configFile, 0o600);
85
+ }
86
+ function getActiveEnvConfig() {
87
+ const config = loadConfig();
88
+ const activeEnv = config.envs[config.activeEnv];
89
+ if (!activeEnv) {
90
+ throw new Error(`Active environment '${config.activeEnv}' not found in config`);
91
+ }
92
+ return activeEnv;
93
+ }
94
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,gCAYC;AAED,gCAQC;AAED,gDASC;AAzED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AAC7D,CAAC;AAeD,MAAM,cAAc,GAAW;IAC7B,SAAS,EAAE,OAAO;IAClB,YAAY,EAAE,eAAe;IAC7B,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,UAAU,EAAE,0BAA0B;YACtC,aAAa,EAAE,uCAAuC;YACtD,YAAY,EAAE,cAAc;YAC5B,eAAe,EAAE,gCAAgC;SAClD;QACD,IAAI,EAAE;YACJ,UAAU,EAAE,4BAA4B;YACxC,aAAa,EAAE,iDAAiD;YAChE,YAAY,EAAE,kBAAkB;YAChC,eAAe,EAAE,gCAAgC;SAClD;KACF;CACF,CAAC;AAEF,SAAgB,UAAU;IACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc;IACvC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,uBAAuB,MAAM,CAAC,SAAS,uBAAuB,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}