@panguard-ai/panguard 1.4.15 → 1.4.17

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 (109) hide show
  1. package/dist/cli/commands/audit.d.ts.map +1 -1
  2. package/dist/cli/commands/audit.js +5 -6
  3. package/dist/cli/commands/audit.js.map +1 -1
  4. package/dist/cli/commands/chat.d.ts.map +1 -1
  5. package/dist/cli/commands/chat.js +11 -11
  6. package/dist/cli/commands/chat.js.map +1 -1
  7. package/dist/cli/commands/config.d.ts +4 -4
  8. package/dist/cli/commands/config.d.ts.map +1 -1
  9. package/dist/cli/commands/config.js +32 -21
  10. package/dist/cli/commands/config.js.map +1 -1
  11. package/dist/cli/commands/demo.js +5 -5
  12. package/dist/cli/commands/demo.js.map +1 -1
  13. package/dist/cli/commands/deploy.js +10 -10
  14. package/dist/cli/commands/deploy.js.map +1 -1
  15. package/dist/cli/commands/doctor.d.ts.map +1 -1
  16. package/dist/cli/commands/doctor.js +30 -65
  17. package/dist/cli/commands/doctor.js.map +1 -1
  18. package/dist/cli/commands/guard.d.ts.map +1 -1
  19. package/dist/cli/commands/guard.js +42 -45
  20. package/dist/cli/commands/guard.js.map +1 -1
  21. package/dist/cli/commands/hacktivity.d.ts +2 -2
  22. package/dist/cli/commands/hacktivity.d.ts.map +1 -1
  23. package/dist/cli/commands/hacktivity.js +10 -10
  24. package/dist/cli/commands/hacktivity.js.map +1 -1
  25. package/dist/cli/commands/hardening.js +6 -6
  26. package/dist/cli/commands/hardening.js.map +1 -1
  27. package/dist/cli/commands/init.d.ts.map +1 -1
  28. package/dist/cli/commands/init.js +2 -2
  29. package/dist/cli/commands/init.js.map +1 -1
  30. package/dist/cli/commands/login.js +1 -1
  31. package/dist/cli/commands/login.js.map +1 -1
  32. package/dist/cli/commands/logout.js +1 -1
  33. package/dist/cli/commands/logout.js.map +1 -1
  34. package/dist/cli/commands/report.js +6 -6
  35. package/dist/cli/commands/report.js.map +1 -1
  36. package/dist/cli/commands/scan.d.ts.map +1 -1
  37. package/dist/cli/commands/scan.js +146 -10
  38. package/dist/cli/commands/scan.js.map +1 -1
  39. package/dist/cli/commands/setup.d.ts.map +1 -1
  40. package/dist/cli/commands/setup.js +16 -15
  41. package/dist/cli/commands/setup.js.map +1 -1
  42. package/dist/cli/commands/skills.d.ts.map +1 -1
  43. package/dist/cli/commands/skills.js +4 -4
  44. package/dist/cli/commands/skills.js.map +1 -1
  45. package/dist/cli/commands/status.d.ts.map +1 -1
  46. package/dist/cli/commands/status.js +4 -4
  47. package/dist/cli/commands/status.js.map +1 -1
  48. package/dist/cli/commands/threat.d.ts.map +1 -1
  49. package/dist/cli/commands/threat.js +15 -15
  50. package/dist/cli/commands/threat.js.map +1 -1
  51. package/dist/cli/commands/trap.js +7 -7
  52. package/dist/cli/commands/trap.js.map +1 -1
  53. package/dist/cli/commands/up.d.ts.map +1 -1
  54. package/dist/cli/commands/up.js +249 -40
  55. package/dist/cli/commands/up.js.map +1 -1
  56. package/dist/cli/commands/upgrade.js +1 -1
  57. package/dist/cli/commands/upgrade.js.map +1 -1
  58. package/dist/cli/commands/whoami.js +1 -1
  59. package/dist/cli/commands/whoami.js.map +1 -1
  60. package/dist/cli/consent.js +1 -1
  61. package/dist/cli/consent.js.map +1 -1
  62. package/dist/cli/index.js +1 -1
  63. package/dist/cli/index.js.map +1 -1
  64. package/dist/cli/interactive/actions/audit.js +2 -2
  65. package/dist/cli/interactive/actions/audit.js.map +1 -1
  66. package/dist/cli/interactive/actions/scan.js +2 -2
  67. package/dist/cli/interactive/actions/scan.js.map +1 -1
  68. package/dist/cli/interactive.js +2 -2
  69. package/dist/cli/interactive.js.map +1 -1
  70. package/dist/init/config-writer.d.ts.map +1 -1
  71. package/dist/init/config-writer.js +2 -1
  72. package/dist/init/config-writer.js.map +1 -1
  73. package/dist/init/steps.js +2 -2
  74. package/dist/init/steps.js.map +1 -1
  75. package/dist/init/wizard-runner.js +18 -18
  76. package/dist/init/wizard-runner.js.map +1 -1
  77. package/package.json +12 -12
  78. package/dist/cli/commands/admin.d.ts +0 -9
  79. package/dist/cli/commands/admin.d.ts.map +0 -1
  80. package/dist/cli/commands/admin.js +0 -130
  81. package/dist/cli/commands/admin.js.map +0 -1
  82. package/dist/cli/commands/manager.d.ts +0 -7
  83. package/dist/cli/commands/manager.d.ts.map +0 -1
  84. package/dist/cli/commands/manager.js +0 -113
  85. package/dist/cli/commands/manager.js.map +0 -1
  86. package/dist/cli/commands/serve-admin.d.ts +0 -11
  87. package/dist/cli/commands/serve-admin.d.ts.map +0 -1
  88. package/dist/cli/commands/serve-admin.js +0 -302
  89. package/dist/cli/commands/serve-admin.js.map +0 -1
  90. package/dist/cli/commands/serve-auth.d.ts +0 -11
  91. package/dist/cli/commands/serve-auth.d.ts.map +0 -1
  92. package/dist/cli/commands/serve-auth.js +0 -119
  93. package/dist/cli/commands/serve-auth.js.map +0 -1
  94. package/dist/cli/commands/serve-core.d.ts +0 -25
  95. package/dist/cli/commands/serve-core.d.ts.map +0 -1
  96. package/dist/cli/commands/serve-core.js +0 -215
  97. package/dist/cli/commands/serve-core.js.map +0 -1
  98. package/dist/cli/commands/serve-tc.d.ts +0 -12
  99. package/dist/cli/commands/serve-tc.d.ts.map +0 -1
  100. package/dist/cli/commands/serve-tc.js +0 -287
  101. package/dist/cli/commands/serve-tc.js.map +0 -1
  102. package/dist/cli/commands/serve-types.d.ts +0 -38
  103. package/dist/cli/commands/serve-types.d.ts.map +0 -1
  104. package/dist/cli/commands/serve-types.js +0 -108
  105. package/dist/cli/commands/serve-types.js.map +0 -1
  106. package/dist/cli/commands/serve.d.ts +0 -14
  107. package/dist/cli/commands/serve.d.ts.map +0 -1
  108. package/dist/cli/commands/serve.js +0 -383
  109. package/dist/cli/commands/serve.js.map +0 -1
@@ -1,119 +0,0 @@
1
- /**
2
- * Auth, waitlist, and usage route handlers for panguard serve.
3
- */
4
- /**
5
- * Handle auth API routes (/api/auth/*, /api/waitlist/*, /api/usage/*).
6
- * Returns true if the route was handled, false otherwise.
7
- */
8
- export async function handleAuthRoutes(req, res, url, pathname, ctx) {
9
- const { handlers } = ctx;
10
- // ── Auth API routes ──────────────────────────────────────────
11
- if (pathname === '/api/auth/register') {
12
- await handlers.handleRegister(req, res);
13
- return true;
14
- }
15
- if (pathname === '/api/auth/login') {
16
- await handlers.handleLogin(req, res);
17
- return true;
18
- }
19
- if (pathname === '/api/auth/logout') {
20
- handlers.handleLogout(req, res);
21
- return true;
22
- }
23
- if (pathname === '/api/auth/me') {
24
- handlers.handleMe(req, res);
25
- return true;
26
- }
27
- if (pathname === '/api/auth/delete-account') {
28
- await handlers.handleDeleteAccount(req, res);
29
- return true;
30
- }
31
- if (pathname === '/api/auth/export-data') {
32
- handlers.handleExportData(req, res);
33
- return true;
34
- }
35
- if (pathname === '/api/auth/totp/setup') {
36
- handlers.handleTotpSetup(req, res);
37
- return true;
38
- }
39
- if (pathname === '/api/auth/totp/verify') {
40
- await handlers.handleTotpVerify(req, res);
41
- return true;
42
- }
43
- if (pathname === '/api/auth/totp/disable') {
44
- await handlers.handleTotpDisable(req, res);
45
- return true;
46
- }
47
- if (pathname === '/api/auth/totp/status') {
48
- handlers.handleTotpStatus(req, res);
49
- return true;
50
- }
51
- if (pathname === '/api/auth/forgot-password') {
52
- await handlers.handleForgotPassword(req, res);
53
- return true;
54
- }
55
- if (pathname === '/api/auth/reset-password') {
56
- await handlers.handleResetPassword(req, res);
57
- return true;
58
- }
59
- if (pathname === '/api/auth/google') {
60
- handlers.handleGoogleAuth(req, res);
61
- return true;
62
- }
63
- if (pathname.startsWith('/api/auth/google/callback')) {
64
- const urlObj = new URL(url, `http://${req.headers.host ?? 'localhost'}`);
65
- const code = urlObj.searchParams.get('code') ?? '';
66
- const state = urlObj.searchParams.get('state');
67
- await handlers.handleGoogleCallback(req, res, code, state);
68
- return true;
69
- }
70
- if (pathname === '/api/auth/oauth/exchange') {
71
- await handlers.handleOAuthExchange(req, res);
72
- return true;
73
- }
74
- if (pathname === '/api/auth/cli') {
75
- handlers.handleCliAuth(req, res);
76
- return true;
77
- }
78
- if (pathname === '/api/auth/cli/exchange') {
79
- await handlers.handleCliExchange(req, res);
80
- return true;
81
- }
82
- // ── Waitlist API routes ──────────────────────────────────────
83
- if (pathname === '/api/waitlist/join') {
84
- await handlers.handleWaitlistJoin(req, res);
85
- return true;
86
- }
87
- if (pathname.startsWith('/api/waitlist/verify/')) {
88
- const token = pathname.split('/api/waitlist/verify/')[1];
89
- handlers.handleWaitlistVerify(req, res, token ?? '');
90
- return true;
91
- }
92
- if (pathname === '/api/waitlist/stats') {
93
- handlers.handleWaitlistStats(req, res);
94
- return true;
95
- }
96
- if (pathname === '/api/waitlist/list') {
97
- handlers.handleWaitlistList(req, res);
98
- return true;
99
- }
100
- // ── Usage / Quota API routes ─────────────────────────────────
101
- if (pathname === '/api/usage') {
102
- handlers.handleUsageSummary(req, res);
103
- return true;
104
- }
105
- if (pathname === '/api/usage/limits') {
106
- handlers.handleUsageLimits(req, res);
107
- return true;
108
- }
109
- if (pathname === '/api/usage/check') {
110
- await handlers.handleUsageCheck(req, res);
111
- return true;
112
- }
113
- if (pathname === '/api/usage/record') {
114
- await handlers.handleUsageRecord(req, res);
115
- return true;
116
- }
117
- return false;
118
- }
119
- //# sourceMappingURL=serve-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-auth.js","sourceRoot":"","sources":["../../../src/cli/commands/serve-auth.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Core middleware, health check, static file serving, and rule seeding
3
- * for panguard serve.
4
- */
5
- import type { IncomingMessage, ServerResponse } from 'node:http';
6
- import type { ThreatCloudDBInstance } from './serve-types.js';
7
- /**
8
- * Apply security headers and CORS to every response.
9
- * Returns true if the request was fully handled (OPTIONS preflight).
10
- */
11
- export declare function applyMiddleware(req: IncomingMessage, res: ServerResponse): boolean;
12
- /**
13
- * Handle core routes: /health, /openapi.json, /docs/api, /admin/*.
14
- * Returns true if the route was handled, false otherwise.
15
- */
16
- export declare function handleCoreRoutes(req: IncomingMessage, res: ServerResponse, pathname: string, db: {
17
- healthCheck(): void;
18
- }, threatDb: ThreatCloudDBInstance, adminDir: string | undefined): boolean;
19
- /**
20
- * Seed rules from bundled config/ directory into Threat Cloud DB.
21
- * Reads ATR YAML files.
22
- * Returns count of rules seeded.
23
- */
24
- export declare function seedRulesFromBundled(threatDb: ThreatCloudDBInstance): Promise<number>;
25
- //# sourceMappingURL=serve-core.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-core.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve-core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAK9D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CA8BlF;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE;IAAE,WAAW,IAAI,IAAI,CAAA;CAAE,EAC3B,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAgDT;AA2DD;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF3F"}
@@ -1,215 +0,0 @@
1
- /**
2
- * Core middleware, health check, static file serving, and rule seeding
3
- * for panguard serve.
4
- */
5
- import { join, dirname, resolve, relative } from 'node:path';
6
- import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
7
- import { fileURLToPath } from 'node:url';
8
- import { c } from '@panguard-ai/core';
9
- import { generateOpenApiSpec, generateSwaggerHtml } from '@panguard-ai/panguard-auth';
10
- import { sendJson } from './serve-types.js';
11
- // ── Security Headers & CORS Middleware ─────────────────────────
12
- /**
13
- * Apply security headers and CORS to every response.
14
- * Returns true if the request was fully handled (OPTIONS preflight).
15
- */
16
- export function applyMiddleware(req, res) {
17
- // Security headers
18
- res.setHeader('X-Content-Type-Options', 'nosniff');
19
- res.setHeader('X-Frame-Options', 'SAMEORIGIN');
20
- res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
21
- res.setHeader('Permissions-Policy', 'camera=(), microphone=(), geolocation=()');
22
- res.setHeader('X-XSS-Protection', '0');
23
- if (process.env['NODE_ENV'] === 'production') {
24
- res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload');
25
- }
26
- // CORS -- default to same-origin only; set CORS_ALLOWED_ORIGINS to allow cross-origin
27
- const corsEnv = process.env['CORS_ALLOWED_ORIGINS'] ?? '';
28
- const allowedOrigins = corsEnv ? corsEnv.split(',').map((o) => o.trim()) : [];
29
- const origin = req.headers.origin ?? '';
30
- if (allowedOrigins.includes('*') && process.env['NODE_ENV'] !== 'production') {
31
- res.setHeader('Access-Control-Allow-Origin', origin || '*');
32
- }
33
- else if (origin && allowedOrigins.includes(origin)) {
34
- res.setHeader('Access-Control-Allow-Origin', origin);
35
- }
36
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, DELETE, OPTIONS');
37
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
38
- if (req.method === 'OPTIONS') {
39
- res.writeHead(204);
40
- res.end();
41
- return true;
42
- }
43
- return false;
44
- }
45
- // ── Core Routes (health, OpenAPI, static) ──────────────────────
46
- /**
47
- * Handle core routes: /health, /openapi.json, /docs/api, /admin/*.
48
- * Returns true if the route was handled, false otherwise.
49
- */
50
- export function handleCoreRoutes(req, res, pathname, db, threatDb, adminDir) {
51
- // OpenAPI spec (JSON)
52
- if (pathname === '/openapi.json') {
53
- const spec = generateOpenApiSpec(process.env['PANGUARD_BASE_URL'] ?? `http://${req.headers.host ?? 'localhost'}`);
54
- sendJson(res, 200, spec);
55
- return true;
56
- }
57
- // Swagger UI
58
- if (pathname === '/docs/api' || pathname === '/docs/api/') {
59
- const specUrl = '/openapi.json';
60
- const html = generateSwaggerHtml(specUrl);
61
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
62
- res.end(html);
63
- return true;
64
- }
65
- // Health check (minimal public response -- detailed status behind /api/admin/health)
66
- if (pathname === '/health') {
67
- try {
68
- db.healthCheck();
69
- sendJson(res, 200, {
70
- ok: true,
71
- data: {
72
- status: 'healthy',
73
- uptime: Math.round(process.uptime()),
74
- db: 'connected',
75
- threatCloud: threatDb ? 'connected' : 'unavailable',
76
- },
77
- });
78
- }
79
- catch {
80
- sendJson(res, 503, {
81
- ok: false,
82
- data: { status: 'unhealthy', db: 'disconnected' },
83
- });
84
- }
85
- return true;
86
- }
87
- // Admin static files
88
- if (adminDir && pathname.startsWith('/admin')) {
89
- serveStaticFile(req, res, adminDir, pathname);
90
- return true;
91
- }
92
- return false;
93
- }
94
- // ── Static File Serving ────────────────────────────────────────
95
- function serveStaticFile(_req, res, adminDir, pathname) {
96
- // Map /admin -> /admin/index.html
97
- const resolvedAdminDir = resolve(adminDir);
98
- let filePath;
99
- if (pathname === '/admin' || pathname === '/admin/') {
100
- filePath = join(resolvedAdminDir, 'index.html');
101
- }
102
- else {
103
- // Strip /admin prefix and leading slash
104
- const relativePath = pathname.slice('/admin'.length).replace(/^\//, '');
105
- filePath = join(resolvedAdminDir, relativePath);
106
- // If no extension, try .html
107
- if (!relativePath.includes('.')) {
108
- filePath = join(resolvedAdminDir, relativePath + '.html');
109
- if (!existsSync(filePath)) {
110
- filePath = join(resolvedAdminDir, relativePath, 'index.html');
111
- }
112
- }
113
- }
114
- // Prevent path traversal: resolved path must be within admin directory
115
- if (!filePath.startsWith(resolvedAdminDir)) {
116
- sendJson(res, 403, { ok: false, error: 'Forbidden' });
117
- return;
118
- }
119
- if (!existsSync(filePath)) {
120
- sendJson(res, 404, { ok: false, error: 'Not found' });
121
- return;
122
- }
123
- const ext = filePath.split('.').pop() ?? '';
124
- const mimeTypes = {
125
- html: 'text/html',
126
- css: 'text/css',
127
- js: 'application/javascript',
128
- json: 'application/json',
129
- png: 'image/png',
130
- svg: 'image/svg+xml',
131
- ico: 'image/x-icon',
132
- };
133
- const contentType = mimeTypes[ext] ?? 'application/octet-stream';
134
- const content = readFileSync(filePath);
135
- res.writeHead(200, { 'Content-Type': contentType });
136
- res.end(content);
137
- }
138
- // ── Rule Seeding ───────────────────────────────────────────────
139
- /**
140
- * Seed rules from bundled config/ directory into Threat Cloud DB.
141
- * Reads ATR YAML files.
142
- * Returns count of rules seeded.
143
- */
144
- export async function seedRulesFromBundled(threatDb) {
145
- let seeded = 0;
146
- const now = new Date().toISOString();
147
- // Resolve config directory (Docker: /app/config, monorepo: ../../config)
148
- const configDirs = [
149
- join(process.cwd(), 'config'),
150
- join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', '..', '..', 'config'),
151
- ];
152
- const configDir = configDirs.find((d) => {
153
- try {
154
- return statSync(d).isDirectory();
155
- }
156
- catch {
157
- return false;
158
- }
159
- });
160
- if (!configDir) {
161
- console.log(` ${c.dim(' No config/ directory found -- skipping rule seeding')}`);
162
- console.log(` ${c.dim(` Searched: ${configDirs.join(', ')}`)}`);
163
- return 0;
164
- }
165
- console.log(` ${c.dim(` Using config directory: ${configDir}`)}`);
166
- /** Recursively collect files matching extensions */
167
- function collectFiles(dir, extensions) {
168
- const results = [];
169
- try {
170
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
171
- const fullPath = join(dir, entry.name);
172
- if (entry.isDirectory()) {
173
- results.push(...collectFiles(fullPath, extensions));
174
- }
175
- else if (extensions.some((ext) => entry.name.endsWith(ext))) {
176
- results.push(fullPath);
177
- }
178
- }
179
- }
180
- catch (err) {
181
- console.error(` [WARN] Cannot read directory ${dir}: ${err instanceof Error ? err.message : String(err)}`);
182
- }
183
- return results;
184
- }
185
- // ATR rules (.yaml, .yml) from atr package
186
- const atrDirs = [
187
- join(process.cwd(), 'node_modules', 'agent-threat-rules', 'rules'),
188
- join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', '..', '..', 'packages', 'atr', 'rules'),
189
- ];
190
- const atrDir = atrDirs.find((d) => {
191
- try {
192
- return statSync(d).isDirectory();
193
- }
194
- catch {
195
- return false;
196
- }
197
- });
198
- if (atrDir) {
199
- try {
200
- const atrFiles = collectFiles(atrDir, ['.yaml', '.yml']);
201
- for (const file of atrFiles) {
202
- const content = readFileSync(file, 'utf-8');
203
- const ruleId = `atr:${relative(atrDir, file).replace(/\//g, ':')}`;
204
- threatDb.upsertRule({ ruleId, ruleContent: content, publishedAt: now, source: 'atr' });
205
- seeded++;
206
- }
207
- console.log(` ${c.dim(` ATR: ${atrFiles.length} files processed`)}`);
208
- }
209
- catch (err) {
210
- console.error(` [WARN] ATR rule seeding failed: ${err instanceof Error ? err.message : String(err)}`);
211
- }
212
- }
213
- return seeded;
214
- }
215
- //# sourceMappingURL=serve-core.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-core.js","sourceRoot":"","sources":["../../../src/cli/commands/serve-core.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Threat Cloud route handlers for panguard serve.
3
- * Uses centralized Zod schemas from @panguard-ai/core for input validation.
4
- */
5
- import type { IncomingMessage, ServerResponse } from 'node:http';
6
- import type { RouteContext } from './serve-types.js';
7
- /**
8
- * Handle Threat Cloud API routes (/api/threats, /api/rules, /api/stats, etc.).
9
- * Returns true if the route was handled, false otherwise.
10
- */
11
- export declare function handleTCRoutes(req: IncomingMessage, res: ServerResponse, url: string, pathname: string, ctx: RouteContext): Promise<boolean>;
12
- //# sourceMappingURL=serve-tc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-tc.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve-tc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgFrD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,OAAO,CAAC,CAoOlB"}