aicodeman 1.4.1 → 1.5.1
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/README.md +30 -8
- package/README.zh-CN.md +289 -92
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +168 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/multiuser.d.ts +38 -0
- package/dist/config/multiuser.d.ts.map +1 -0
- package/dist/config/multiuser.js +58 -0
- package/dist/config/multiuser.js.map +1 -0
- package/dist/cron/cron-service.d.ts +1 -1
- package/dist/cron/cron-service.d.ts.map +1 -1
- package/dist/cron/cron-service.js +31 -4
- package/dist/cron/cron-service.js.map +1 -1
- package/dist/docker-export.d.ts +13 -0
- package/dist/docker-export.d.ts.map +1 -1
- package/dist/docker-export.js +55 -8
- package/dist/docker-export.js.map +1 -1
- package/dist/docker-hosts.d.ts +36 -5
- package/dist/docker-hosts.d.ts.map +1 -1
- package/dist/docker-hosts.js +90 -16
- package/dist/docker-hosts.js.map +1 -1
- package/dist/mux-interface.d.ts +6 -0
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/plan-orchestrator.d.ts +8 -1
- package/dist/plan-orchestrator.d.ts.map +1 -1
- package/dist/plan-orchestrator.js +20 -1
- package/dist/plan-orchestrator.js.map +1 -1
- package/dist/push-store.d.ts +17 -5
- package/dist/push-store.d.ts.map +1 -1
- package/dist/push-store.js +3 -1
- package/dist/push-store.js.map +1 -1
- package/dist/session-cli-builder.d.ts +1 -1
- package/dist/session-cli-builder.d.ts.map +1 -1
- package/dist/session-cli-builder.js +7 -2
- package/dist/session-cli-builder.js.map +1 -1
- package/dist/session.d.ts +9 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +19 -2
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts +15 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +55 -12
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tunnel-manager.d.ts +17 -0
- package/dist/tunnel-manager.d.ts.map +1 -1
- package/dist/tunnel-manager.js +48 -8
- package/dist/tunnel-manager.js.map +1 -1
- package/dist/types/api.d.ts +10 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js +20 -0
- package/dist/types/api.js.map +1 -1
- package/dist/types/cron.d.ts +2 -0
- package/dist/types/cron.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/session.d.ts +9 -2
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/types/user.d.ts +59 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +12 -0
- package/dist/types/user.js.map +1 -0
- package/dist/user-store.d.ts +139 -0
- package/dist/user-store.d.ts.map +1 -0
- package/dist/user-store.js +433 -0
- package/dist/user-store.js.map +1 -0
- package/dist/web/admin-audit.d.ts +17 -0
- package/dist/web/admin-audit.d.ts.map +1 -0
- package/dist/web/admin-audit.js +19 -0
- package/dist/web/admin-audit.js.map +1 -0
- package/dist/web/middleware/auth.d.ts +8 -0
- package/dist/web/middleware/auth.d.ts.map +1 -1
- package/dist/web/middleware/auth.js +250 -51
- package/dist/web/middleware/auth.js.map +1 -1
- package/dist/web/ports/auth-port.d.ts +13 -0
- package/dist/web/ports/auth-port.d.ts.map +1 -1
- package/dist/web/ports/config-port.d.ts +4 -1
- package/dist/web/ports/config-port.d.ts.map +1 -1
- package/dist/web/ports/infra-port.d.ts +4 -1
- package/dist/web/ports/infra-port.d.ts.map +1 -1
- package/dist/web/public/admin-ui.js +260 -0
- package/dist/web/public/admin-ui.js.br +0 -0
- package/dist/web/public/admin-ui.js.gz +0 -0
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/{app.6c4b9893.js → app.1ccca158.js} +1 -1
- package/dist/web/public/app.1ccca158.js.br +0 -0
- package/dist/web/public/app.1ccca158.js.gz +0 -0
- package/dist/web/public/{constants.48da7f03.js → constants.ad3a8031.js} +4 -0
- package/dist/web/public/constants.ad3a8031.js.br +0 -0
- package/dist/web/public/{constants.48da7f03.js.gz → constants.ad3a8031.js.gz} +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
- package/dist/web/public/index.html +11 -9
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.63794d0b.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.3f91acef.js.gz +0 -0
- package/dist/web/public/mobile-handlers.b5a667ef.js.gz +0 -0
- package/dist/web/public/mobile.597136a6.css +1 -0
- package/dist/web/public/mobile.597136a6.css.br +0 -0
- package/dist/web/public/mobile.597136a6.css.gz +0 -0
- package/dist/web/public/notification-manager.ca9dc40d.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/panels-ui.3c9b0465.js.gz +0 -0
- package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
- package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
- package/dist/web/public/respawn-ui.2d249da9.js.gz +0 -0
- package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
- package/dist/web/public/session-ui.e5d4f9b5.js +60 -0
- package/dist/web/public/session-ui.e5d4f9b5.js.br +0 -0
- package/dist/web/public/session-ui.e5d4f9b5.js.gz +0 -0
- package/dist/web/public/settings-ui.29214cf1.js.gz +0 -0
- package/dist/web/public/styles.9e6cdb9d.css +1 -0
- package/dist/web/public/styles.9e6cdb9d.css.br +0 -0
- package/dist/web/public/styles.9e6cdb9d.css.gz +0 -0
- package/dist/web/public/subagent-windows.69b60c35.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/terminal-ui.efda6083.js.gz +0 -0
- package/dist/web/public/ultracode-panel.js.gz +0 -0
- package/dist/web/public/ultracode-windows.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
- package/dist/web/public/vendor/marked.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
- package/dist/web/route-helpers.d.ts +78 -1
- package/dist/web/route-helpers.d.ts.map +1 -1
- package/dist/web/route-helpers.js +172 -3
- package/dist/web/route-helpers.js.map +1 -1
- package/dist/web/routes/admin-routes.d.ts +20 -0
- package/dist/web/routes/admin-routes.d.ts.map +1 -0
- package/dist/web/routes/admin-routes.js +193 -0
- package/dist/web/routes/admin-routes.js.map +1 -0
- package/dist/web/routes/case-routes.d.ts +2 -2
- package/dist/web/routes/case-routes.d.ts.map +1 -1
- package/dist/web/routes/case-routes.js +193 -79
- package/dist/web/routes/case-routes.js.map +1 -1
- package/dist/web/routes/clipboard-routes.d.ts +2 -2
- package/dist/web/routes/clipboard-routes.d.ts.map +1 -1
- package/dist/web/routes/clipboard-routes.js +10 -0
- package/dist/web/routes/clipboard-routes.js.map +1 -1
- package/dist/web/routes/cron-routes.d.ts.map +1 -1
- package/dist/web/routes/cron-routes.js +57 -9
- package/dist/web/routes/cron-routes.js.map +1 -1
- package/dist/web/routes/file-routes.d.ts.map +1 -1
- package/dist/web/routes/file-routes.js +26 -20
- package/dist/web/routes/file-routes.js.map +1 -1
- package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
- package/dist/web/routes/hook-event-routes.js +9 -0
- package/dist/web/routes/hook-event-routes.js.map +1 -1
- package/dist/web/routes/index.d.ts +2 -0
- package/dist/web/routes/index.d.ts.map +1 -1
- package/dist/web/routes/index.js +2 -0
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/me-routes.d.ts +16 -0
- package/dist/web/routes/me-routes.d.ts.map +1 -0
- package/dist/web/routes/me-routes.js +73 -0
- package/dist/web/routes/me-routes.js.map +1 -0
- package/dist/web/routes/mux-routes.d.ts.map +1 -1
- package/dist/web/routes/mux-routes.js +23 -5
- package/dist/web/routes/mux-routes.js.map +1 -1
- package/dist/web/routes/orchestrator-routes.d.ts.map +1 -1
- package/dist/web/routes/orchestrator-routes.js +43 -11
- package/dist/web/routes/orchestrator-routes.js.map +1 -1
- package/dist/web/routes/plan-routes.d.ts.map +1 -1
- package/dist/web/routes/plan-routes.js +28 -9
- package/dist/web/routes/plan-routes.js.map +1 -1
- package/dist/web/routes/push-routes.d.ts.map +1 -1
- package/dist/web/routes/push-routes.js +4 -0
- package/dist/web/routes/push-routes.js.map +1 -1
- package/dist/web/routes/ralph-routes.d.ts.map +1 -1
- package/dist/web/routes/ralph-routes.js +21 -17
- package/dist/web/routes/ralph-routes.js.map +1 -1
- package/dist/web/routes/respawn-routes.d.ts.map +1 -1
- package/dist/web/routes/respawn-routes.js +23 -14
- package/dist/web/routes/respawn-routes.js.map +1 -1
- package/dist/web/routes/scheduled-routes.d.ts.map +1 -1
- package/dist/web/routes/scheduled-routes.js +22 -6
- package/dist/web/routes/scheduled-routes.js.map +1 -1
- package/dist/web/routes/search-routes.d.ts.map +1 -1
- package/dist/web/routes/search-routes.js +9 -3
- package/dist/web/routes/search-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +219 -64
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +108 -23
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/routes/ws-routes.d.ts.map +1 -1
- package/dist/web/routes/ws-routes.js +11 -0
- package/dist/web/routes/ws-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +1 -0
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +11 -0
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +12 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +187 -11
- package/dist/web/server.js.map +1 -1
- package/dist/web/sse-events.d.ts +9 -0
- package/dist/web/sse-events.d.ts.map +1 -1
- package/dist/web/sse-events.js +10 -0
- package/dist/web/sse-events.js.map +1 -1
- package/dist/web/sse-stream-manager.d.ts +32 -2
- package/dist/web/sse-stream-manager.d.ts.map +1 -1
- package/dist/web/sse-stream-manager.js +51 -4
- package/dist/web/sse-stream-manager.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/public/app.6c4b9893.js.br +0 -0
- package/dist/web/public/app.6c4b9893.js.gz +0 -0
- package/dist/web/public/constants.48da7f03.js.br +0 -0
- package/dist/web/public/mobile.0644e3ac.css +0 -1
- package/dist/web/public/mobile.0644e3ac.css.br +0 -0
- package/dist/web/public/mobile.0644e3ac.css.gz +0 -0
- package/dist/web/public/session-ui.4851c61a.js +0 -58
- package/dist/web/public/session-ui.4851c61a.js.br +0 -0
- package/dist/web/public/session-ui.4851c61a.js.gz +0 -0
- package/dist/web/public/styles.ff43f80f.css +0 -1
- package/dist/web/public/styles.ff43f80f.css.br +0 -0
- package/dist/web/public/styles.ff43f80f.css.gz +0 -0
|
@@ -12,8 +12,83 @@ import { StaleExpirationMap } from '../../utils/index.js';
|
|
|
12
12
|
import { isAllowedRequestHost, isAllowedRequestOrigin } from '../network-auth-policy.js';
|
|
13
13
|
import { AUTH_SESSION_TTL_MS, MAX_AUTH_SESSIONS, AUTH_FAILURE_MAX, AUTH_FAILURE_WINDOW_MS, } from '../../config/auth-config.js';
|
|
14
14
|
import { getHookSecret, HOOK_SECRET_HEADER } from '../../config/hook-secret.js';
|
|
15
|
+
import { isMultiUserMode } from '../../config/multiuser.js';
|
|
16
|
+
import { findUser, setPassword, touchLastLogin, verifyPassword } from '../../user-store.js';
|
|
17
|
+
import { ApiErrorCode, createErrorResponse } from '../../types.js';
|
|
15
18
|
// Auth session cookie name
|
|
16
19
|
export const AUTH_COOKIE_NAME = 'codeman_session';
|
|
20
|
+
/** Rate-limit response for a client that exceeded the failure cap. */
|
|
21
|
+
function sendAuthRateLimit(reply, failures, key) {
|
|
22
|
+
const remainingMs = failures.getRemainingTtl(key) ?? AUTH_FAILURE_WINDOW_MS;
|
|
23
|
+
const retryAfterSeconds = Math.max(1, Math.ceil(remainingMs / 1000));
|
|
24
|
+
reply.header('Retry-After', String(retryAfterSeconds));
|
|
25
|
+
reply.code(429).send('Too Many Requests — try again later');
|
|
26
|
+
}
|
|
27
|
+
/** Parse a `Basic base64(user:pass)` header into its parts, or null if malformed. */
|
|
28
|
+
function parseBasicAuth(header) {
|
|
29
|
+
if (!header || !header.startsWith('Basic '))
|
|
30
|
+
return null;
|
|
31
|
+
try {
|
|
32
|
+
const decoded = Buffer.from(header.slice(6), 'base64').toString('utf-8');
|
|
33
|
+
const idx = decoded.indexOf(':');
|
|
34
|
+
if (idx < 0)
|
|
35
|
+
return null;
|
|
36
|
+
return { username: decoded.slice(0, idx), password: decoded.slice(idx + 1) };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The `/api/hook-event` + `/api/status-telemetry` localhost bypass, shared by the
|
|
44
|
+
* single-user and multi-user auth hooks so the security-critical logic has ONE
|
|
45
|
+
* source of truth. Returns:
|
|
46
|
+
* - 'bypass' : loopback + valid hook secret; the caller should allow the request
|
|
47
|
+
* - 'rejected' : a reply was already sent (wrong secret rate-limited / 401)
|
|
48
|
+
* - 'continue' : not a hook request (or non-loopback); fall through to normal auth
|
|
49
|
+
*
|
|
50
|
+
* COD-91: the shared hook secret is required UNCONDITIONALLY on the loopback bypass
|
|
51
|
+
* (a user's own loopback reverse proxy is indistinguishable from a real local hook).
|
|
52
|
+
*/
|
|
53
|
+
function checkHookSecretBypass(req, reply, hookSecretFailures) {
|
|
54
|
+
if ((req.url === '/api/hook-event' || req.url === '/api/status-telemetry') && req.method === 'POST') {
|
|
55
|
+
const ip = req.ip;
|
|
56
|
+
const isLoopback = ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1';
|
|
57
|
+
if (isLoopback) {
|
|
58
|
+
const presented = Buffer.from(req.headers[HOOK_SECRET_HEADER.toLowerCase()]?.toString() ?? '');
|
|
59
|
+
const expected = Buffer.from(getHookSecret());
|
|
60
|
+
if (presented.length === expected.length && timingSafeEqual(presented, expected)) {
|
|
61
|
+
return 'bypass';
|
|
62
|
+
}
|
|
63
|
+
const hookIp = req.ip;
|
|
64
|
+
const hookFailures = hookSecretFailures.get(hookIp) ?? 0;
|
|
65
|
+
if (hookFailures >= AUTH_FAILURE_MAX) {
|
|
66
|
+
sendAuthRateLimit(reply, hookSecretFailures, hookIp);
|
|
67
|
+
return 'rejected';
|
|
68
|
+
}
|
|
69
|
+
hookSecretFailures.set(hookIp, hookFailures + 1);
|
|
70
|
+
reply.code(401).send('Unauthorized: hook secret required');
|
|
71
|
+
return 'rejected';
|
|
72
|
+
}
|
|
73
|
+
// Non-localhost hook requests fall through to normal auth
|
|
74
|
+
}
|
|
75
|
+
return 'continue';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Requests that a `mustChangePassword` user may still reach: the identity probe,
|
|
79
|
+
* the password-change endpoint, and any non-API path (static assets / index.html,
|
|
80
|
+
* so the browser can load the app and render the change-password modal).
|
|
81
|
+
*/
|
|
82
|
+
function isPasswordChangeExempt(req) {
|
|
83
|
+
const url = (req.url ?? '').split('?')[0];
|
|
84
|
+
if (url === '/api/me' || url === '/api/me/password')
|
|
85
|
+
return true;
|
|
86
|
+
// Security: the WebSocket terminal (/ws/...) is a functional channel, not a static
|
|
87
|
+
// asset, so it must NOT be exempt, or a locked user keeps a working terminal.
|
|
88
|
+
if (url.startsWith('/ws/'))
|
|
89
|
+
return false;
|
|
90
|
+
return !url.startsWith('/api/');
|
|
91
|
+
}
|
|
17
92
|
/**
|
|
18
93
|
* Register HTTP Basic Auth middleware with session cookies and rate limiting.
|
|
19
94
|
* Only active when CODEMAN_PASSWORD is set.
|
|
@@ -29,12 +104,19 @@ export function registerAuthMiddleware(app, https) {
|
|
|
29
104
|
authFailures: null,
|
|
30
105
|
qrAuthFailures: null,
|
|
31
106
|
hookSecretFailures: null,
|
|
107
|
+
userFailures: null,
|
|
32
108
|
};
|
|
109
|
+
// Always declare req.authUser so downstream reads are safe (single-user leaves it
|
|
110
|
+
// undefined; the ownership helpers then default to a synthetic admin).
|
|
111
|
+
if (!app.hasRequestDecorator('authUser'))
|
|
112
|
+
app.decorateRequest('authUser', undefined);
|
|
113
|
+
const multiUser = isMultiUserMode();
|
|
33
114
|
const authPassword = process.env.CODEMAN_PASSWORD;
|
|
34
|
-
|
|
115
|
+
// No auth at all: single-user with no password (byte-identical to legacy). In
|
|
116
|
+
// multi-user mode auth is ALWAYS active (users authenticate individually), even
|
|
117
|
+
// without CODEMAN_PASSWORD.
|
|
118
|
+
if (!multiUser && !authPassword)
|
|
35
119
|
return state;
|
|
36
|
-
const authUsername = process.env.CODEMAN_USERNAME || 'admin';
|
|
37
|
-
const expectedHeader = 'Basic ' + Buffer.from(`${authUsername}:${authPassword}`).toString('base64');
|
|
38
120
|
// Session token store — active sessions extend TTL on access
|
|
39
121
|
state.authSessions = new StaleExpirationMap({
|
|
40
122
|
ttlMs: AUTH_SESSION_TTL_MS,
|
|
@@ -62,52 +144,27 @@ export function registerAuthMiddleware(app, https) {
|
|
|
62
144
|
const authSessions = state.authSessions;
|
|
63
145
|
const authFailures = state.authFailures;
|
|
64
146
|
const hookSecretFailures = state.hookSecretFailures;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
147
|
+
if (multiUser) {
|
|
148
|
+
// Per-username failure bucket: a botnet can't brute-force one account across
|
|
149
|
+
// many IPs, and one user behind a NAT can't lock out everyone else.
|
|
150
|
+
state.userFailures = new StaleExpirationMap({
|
|
151
|
+
ttlMs: AUTH_FAILURE_WINDOW_MS,
|
|
152
|
+
refreshOnGet: false,
|
|
153
|
+
});
|
|
154
|
+
registerMultiUserAuthHook(app, https, authSessions, authFailures, hookSecretFailures, state.userFailures);
|
|
155
|
+
return state;
|
|
70
156
|
}
|
|
157
|
+
// ── Single-user Basic Auth (unchanged behavior; CODEMAN_PASSWORD required) ──
|
|
158
|
+
const authUsername = process.env.CODEMAN_USERNAME || 'admin';
|
|
159
|
+
const expectedHeader = 'Basic ' + Buffer.from(`${authUsername}:${authPassword}`).toString('base64');
|
|
71
160
|
app.addHook('onRequest', (req, reply, done) => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// COD-54: the bare localhost bypass is unsafe while a tunnel is running, because
|
|
77
|
-
// `cloudflared --url http://127.0.0.1:port` proxies internet traffic INTO the
|
|
78
|
-
// loopback origin, so a tunneled request arrives with req.ip === 127.0.0.1 and
|
|
79
|
-
// would pass. COD-91: require the shared hook secret on the loopback bypass
|
|
80
|
-
// UNCONDITIONALLY (not just while the managed tunnel is up). Codeman can't detect
|
|
81
|
-
// a user's own loopback reverse proxy (their own `cloudflared --url`, `tailscale
|
|
82
|
-
// serve`, nginx → 127.0.0.1), so tunnel-gating left that path with the unsafe plain
|
|
83
|
-
// bypass. Managed-session hooks always present the secret (X-Codeman-Hook-Secret,
|
|
84
|
-
// from $CODEMAN_HOOK_SECRET_FILE — generated for every instance), so requiring it
|
|
85
|
-
// always closes the gap without breaking the legitimate hook channel.
|
|
86
|
-
if ((req.url === '/api/hook-event' || req.url === '/api/status-telemetry') && req.method === 'POST') {
|
|
87
|
-
const ip = req.ip;
|
|
88
|
-
const isLoopback = ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1';
|
|
89
|
-
if (isLoopback) {
|
|
90
|
-
// Always require the shared secret (constant-time compare).
|
|
91
|
-
const presented = Buffer.from(req.headers[HOOK_SECRET_HEADER.toLowerCase()]?.toString() ?? '');
|
|
92
|
-
const expected = Buffer.from(getHookSecret());
|
|
93
|
-
if (presented.length === expected.length && timingSafeEqual(presented, expected)) {
|
|
94
|
-
done();
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
// Wrong/absent secret — rate-limit per IP in the DEDICATED hook bucket
|
|
98
|
-
// (never authFailures, which would lock out the login path).
|
|
99
|
-
const hookIp = req.ip;
|
|
100
|
-
const hookFailures = hookSecretFailures.get(hookIp) ?? 0;
|
|
101
|
-
if (hookFailures >= AUTH_FAILURE_MAX) {
|
|
102
|
-
sendAuthRateLimit(reply, hookIp, hookSecretFailures);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
hookSecretFailures.set(hookIp, hookFailures + 1);
|
|
106
|
-
reply.code(401).send('Unauthorized: hook secret required');
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
// Non-localhost hook requests fall through to normal auth
|
|
161
|
+
const bypass = checkHookSecretBypass(req, reply, hookSecretFailures);
|
|
162
|
+
if (bypass === 'bypass') {
|
|
163
|
+
done();
|
|
164
|
+
return;
|
|
110
165
|
}
|
|
166
|
+
if (bypass === 'rejected')
|
|
167
|
+
return;
|
|
111
168
|
// QR auth path — handled by the route itself (token validation + rate limiting)
|
|
112
169
|
if (req.url?.startsWith('/q/')) {
|
|
113
170
|
done();
|
|
@@ -120,10 +177,6 @@ export function registerAuthMiddleware(app, https) {
|
|
|
120
177
|
if (sessionToken && authSessions.get(sessionToken) !== undefined) {
|
|
121
178
|
// Sliding cookie: re-issue on every authenticated request so the browser
|
|
122
179
|
// cookie lifetime tracks the server-side sliding TTL (refreshOnGet above).
|
|
123
|
-
// Without this the cookie has a fixed lifetime from login; the browser
|
|
124
|
-
// drops it mid-use, the next request arrives cookie-less and falls through
|
|
125
|
-
// to Basic Auth — popping the native username/password dialog, which reads
|
|
126
|
-
// as a random logout while actively working.
|
|
127
180
|
reply.setCookie(AUTH_COOKIE_NAME, sessionToken, {
|
|
128
181
|
httpOnly: true,
|
|
129
182
|
secure: https,
|
|
@@ -168,7 +221,7 @@ export function registerAuthMiddleware(app, https) {
|
|
|
168
221
|
// Rate limit only requests that failed to authenticate on this attempt.
|
|
169
222
|
const failures = authFailures.get(clientIp) ?? 0;
|
|
170
223
|
if (failures >= AUTH_FAILURE_MAX) {
|
|
171
|
-
sendAuthRateLimit(reply, clientIp);
|
|
224
|
+
sendAuthRateLimit(reply, authFailures, clientIp);
|
|
172
225
|
return;
|
|
173
226
|
}
|
|
174
227
|
// Auth failed — track failure count
|
|
@@ -178,6 +231,152 @@ export function registerAuthMiddleware(app, https) {
|
|
|
178
231
|
});
|
|
179
232
|
return state;
|
|
180
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Multi-user auth hook (async, because password verification runs scrypt). Verifies
|
|
236
|
+
* `username:password` against the user store, mints an identity-carrying cookie,
|
|
237
|
+
* decorates `req.authUser`, enforces the per-IP + per-username rate limits, and the
|
|
238
|
+
* `mustChangePassword` lockbox. The single-user hook above is left untouched.
|
|
239
|
+
*/
|
|
240
|
+
function registerMultiUserAuthHook(app, https, authSessions, authFailures, hookSecretFailures, userFailures) {
|
|
241
|
+
const setSessionCookie = (reply, token) => reply.setCookie(AUTH_COOKIE_NAME, token, {
|
|
242
|
+
httpOnly: true,
|
|
243
|
+
secure: https,
|
|
244
|
+
sameSite: 'lax',
|
|
245
|
+
maxAge: AUTH_SESSION_TTL_MS / 1000,
|
|
246
|
+
path: '/',
|
|
247
|
+
});
|
|
248
|
+
// Evict the oldest cookie session of the SAME user first (so one user logging in
|
|
249
|
+
// 100 times cannot flush everyone else's sessions), falling back to global-oldest.
|
|
250
|
+
const evictForCapacity = (username) => {
|
|
251
|
+
let userKey;
|
|
252
|
+
let userTs = Infinity;
|
|
253
|
+
let globalKey;
|
|
254
|
+
let globalTs = Infinity;
|
|
255
|
+
for (const [k, v] of authSessions) {
|
|
256
|
+
if (v.createdAt < globalTs) {
|
|
257
|
+
globalTs = v.createdAt;
|
|
258
|
+
globalKey = k;
|
|
259
|
+
}
|
|
260
|
+
if (v.username === username && v.createdAt < userTs) {
|
|
261
|
+
userTs = v.createdAt;
|
|
262
|
+
userKey = k;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const key = userKey ?? globalKey;
|
|
266
|
+
if (key !== undefined)
|
|
267
|
+
authSessions.delete(key);
|
|
268
|
+
};
|
|
269
|
+
const enforcePasswordChange = (req, reply, mustChange) => {
|
|
270
|
+
if (mustChange && !isPasswordChangeExempt(req)) {
|
|
271
|
+
reply.code(403).send(createErrorResponse(ApiErrorCode.PASSWORD_CHANGE_REQUIRED));
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
return false;
|
|
275
|
+
};
|
|
276
|
+
app.addHook('onRequest', async (req, reply) => {
|
|
277
|
+
const bypass = checkHookSecretBypass(req, reply, hookSecretFailures);
|
|
278
|
+
if (bypass === 'bypass' || bypass === 'rejected')
|
|
279
|
+
return;
|
|
280
|
+
// QR redemption path — handled by the route itself.
|
|
281
|
+
if (req.url?.startsWith('/q/'))
|
|
282
|
+
return;
|
|
283
|
+
const clientIp = req.ip;
|
|
284
|
+
// 1. Cookie session (carries identity + mustChangePassword snapshot).
|
|
285
|
+
const sessionToken = req.cookies[AUTH_COOKIE_NAME];
|
|
286
|
+
const record = sessionToken ? authSessions.get(sessionToken) : undefined;
|
|
287
|
+
if (record && record.username) {
|
|
288
|
+
// Security: re-validate the cookie identity against the store on every request so
|
|
289
|
+
// an out-of-band mutation the in-memory map can't see (the `codeman users` CLI,
|
|
290
|
+
// a separate process, deleting/disabling/demoting a user) takes effect promptly
|
|
291
|
+
// instead of riding the 24h cookie. findUser is cached ~1s, so this is cheap.
|
|
292
|
+
let live;
|
|
293
|
+
try {
|
|
294
|
+
live = await findUser(record.username);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// The store is transiently unreadable/corrupt (readUsers throws on a non-ENOENT
|
|
298
|
+
// read, #23). Fall back to the cookie's snapshot for THIS request rather than
|
|
299
|
+
// 500-ing an already-authenticated client (pre-#24 behaviour); a persistently
|
|
300
|
+
// corrupt store still fails all WRITES loudly at the mutator/bootstrap layer.
|
|
301
|
+
req.authUser = { username: record.username, role: record.role ?? 'user' };
|
|
302
|
+
setSessionCookie(reply, sessionToken);
|
|
303
|
+
enforcePasswordChange(req, reply, !!record.mustChangePassword);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (!live || live.disabled) {
|
|
307
|
+
authSessions.delete(sessionToken);
|
|
308
|
+
reply.clearCookie(AUTH_COOKIE_NAME, { path: '/' });
|
|
309
|
+
reply.code(401).send('Unauthorized');
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
// Trust the LIVE role/mustChangePassword, not the (possibly stale) cookie snapshot
|
|
313
|
+
// (also defends #9/#13: a CLI demotion is reflected without a revoke).
|
|
314
|
+
req.authUser = { username: live.username, role: live.role };
|
|
315
|
+
setSessionCookie(reply, sessionToken); // sliding re-issue
|
|
316
|
+
enforcePasswordChange(req, reply, !!live.mustChangePassword);
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
// 2. Basic Auth against the user store (scrypt verify).
|
|
320
|
+
// Per-IP pre-gate bounds scrypt CPU cost from one source (does NOT gate on the
|
|
321
|
+
// per-username bucket here; see below).
|
|
322
|
+
const ipFail = authFailures.get(clientIp) ?? 0;
|
|
323
|
+
if (ipFail >= AUTH_FAILURE_MAX) {
|
|
324
|
+
sendAuthRateLimit(reply, authFailures, clientIp);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const creds = parseBasicAuth(req.headers.authorization);
|
|
328
|
+
if (creds) {
|
|
329
|
+
const normUser = creds.username.trim().toLowerCase();
|
|
330
|
+
// Security: VERIFY FIRST, then throttle only FAILED attempts. Consulting the
|
|
331
|
+
// per-username bucket before verifying let throwaway IPs lock out a known account
|
|
332
|
+
// (incl. admin) even with the correct password. A correct password must always
|
|
333
|
+
// win and self-heal both buckets, regardless of the username-failure count.
|
|
334
|
+
const result = await verifyPassword(creds.username, creds.password);
|
|
335
|
+
if (result) {
|
|
336
|
+
const { user, needsRehash: rehash } = result;
|
|
337
|
+
if (rehash)
|
|
338
|
+
void setPassword(user.username, creds.password).catch(() => { });
|
|
339
|
+
void touchLastLogin(user.username).catch(() => { });
|
|
340
|
+
authFailures.delete(clientIp);
|
|
341
|
+
userFailures.delete(normUser);
|
|
342
|
+
const token = randomBytes(32).toString('hex');
|
|
343
|
+
if (authSessions.size >= MAX_AUTH_SESSIONS)
|
|
344
|
+
evictForCapacity(user.username);
|
|
345
|
+
authSessions.set(token, {
|
|
346
|
+
ip: clientIp,
|
|
347
|
+
ua: req.headers['user-agent'] ?? '',
|
|
348
|
+
createdAt: Date.now(),
|
|
349
|
+
method: 'basic',
|
|
350
|
+
username: user.username,
|
|
351
|
+
role: user.role,
|
|
352
|
+
mustChangePassword: !!user.mustChangePassword,
|
|
353
|
+
});
|
|
354
|
+
req.authUser = { username: user.username, role: user.role };
|
|
355
|
+
setSessionCookie(reply, token);
|
|
356
|
+
enforcePasswordChange(req, reply, !!user.mustChangePassword);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
// Failed guess: count it against BOTH buckets. Once the per-username bucket
|
|
360
|
+
// reaches the cap, further FAILED attempts get 429 (throttles distributed
|
|
361
|
+
// brute-force), but this path is only reached on a wrong password, so it can
|
|
362
|
+
// never deny a correct one.
|
|
363
|
+
const uFail = (userFailures.get(normUser) ?? 0) + 1;
|
|
364
|
+
userFailures.set(normUser, uFail);
|
|
365
|
+
authFailures.set(clientIp, ipFail + 1);
|
|
366
|
+
if (uFail >= AUTH_FAILURE_MAX) {
|
|
367
|
+
sendAuthRateLimit(reply, userFailures, normUser);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
reply.header('WWW-Authenticate', 'Basic realm="Codeman"');
|
|
371
|
+
reply.code(401).send('Unauthorized');
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
// No credentials presented: count against the per-IP bucket and challenge.
|
|
375
|
+
authFailures.set(clientIp, ipFail + 1);
|
|
376
|
+
reply.header('WWW-Authenticate', 'Basic realm="Codeman"');
|
|
377
|
+
reply.code(401).send('Unauthorized');
|
|
378
|
+
});
|
|
379
|
+
}
|
|
181
380
|
/** Methods that don't change server state and so skip the cross-site Origin check. */
|
|
182
381
|
const SAFE_HTTP_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);
|
|
183
382
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,19 @@ export interface AuthSessionRecord {
|
|
|
9
9
|
ua: string;
|
|
10
10
|
createdAt: number;
|
|
11
11
|
method: 'qr' | 'basic';
|
|
12
|
+
/**
|
|
13
|
+
* Multi-user identity carried by the cookie (single-user leaves these unset).
|
|
14
|
+
* Snapshotted at mint time. Authorization-relevant admin changes (password reset,
|
|
15
|
+
* disable, delete, role change, bypass-grant change) revoke the user's sessions so
|
|
16
|
+
* a stale snapshot can't outlive the change; additionally the cookie fast-path
|
|
17
|
+
* re-reads role/disabled/mustChangePassword live from the store each request, so an
|
|
18
|
+
* out-of-band CLI mutation also takes effect promptly. See docs/multi-user-plan.md
|
|
19
|
+
* section 5.
|
|
20
|
+
*/
|
|
21
|
+
username?: string;
|
|
22
|
+
role?: 'admin' | 'user';
|
|
23
|
+
/** Whether this user must change their password before other actions are allowed. */
|
|
24
|
+
mustChangePassword?: boolean;
|
|
12
25
|
}
|
|
13
26
|
export interface AuthPort {
|
|
14
27
|
readonly authSessions: StaleExpirationMap<string, AuthSessionRecord> | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-port.d.ts","sourceRoot":"","sources":["../../../src/web/ports/auth-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-port.d.ts","sourceRoot":"","sources":["../../../src/web/ports/auth-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC5E,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACnE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB"}
|
|
@@ -22,7 +22,10 @@ export interface ConfigPort {
|
|
|
22
22
|
}>;
|
|
23
23
|
getTerminalHistoryConfig(): Promise<TerminalHistoryConfig>;
|
|
24
24
|
getDefaultClaudeMdPath(): Promise<string | undefined>;
|
|
25
|
-
getLightState(
|
|
25
|
+
getLightState(identity?: {
|
|
26
|
+
username: string;
|
|
27
|
+
role: 'admin' | 'user';
|
|
28
|
+
}): unknown;
|
|
26
29
|
getLightSessionsState(): unknown[];
|
|
27
30
|
startTranscriptWatcher(sessionId: string, transcriptPath: string): void;
|
|
28
31
|
stopTranscriptWatcher(sessionId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-port.d.ts","sourceRoot":"","sources":["../../../src/web/ports/config-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE9E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mBAAmB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IACvD,cAAc,IAAI,OAAO,CAAC;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACzG,mBAAmB,IAAI,OAAO,CAAC;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3D,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtD,aAAa,IAAI,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config-port.d.ts","sourceRoot":"","sources":["../../../src/web/ports/config-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE9E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mBAAmB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IACvD,cAAc,IAAI,OAAO,CAAC;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACzG,mBAAmB,IAAI,OAAO,CAAC;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3D,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtD,aAAa,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;IAChF,qBAAqB,IAAI,OAAO,EAAE,CAAC;IACnC,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACxE,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD"}
|
|
@@ -21,6 +21,9 @@ export interface ScheduledRun {
|
|
|
21
21
|
completedTasks: number;
|
|
22
22
|
totalCost: number;
|
|
23
23
|
logs: string[];
|
|
24
|
+
/** Multi-user owner (username) — undefined in single-user mode. Used to scope
|
|
25
|
+
* list/delete and to downgrade the spawned Session's permission mode. */
|
|
26
|
+
owner?: string;
|
|
24
27
|
}
|
|
25
28
|
export interface InfraPort {
|
|
26
29
|
readonly mux: TerminalMultiplexer;
|
|
@@ -30,7 +33,7 @@ export interface InfraPort {
|
|
|
30
33
|
readonly teamWatcher: TeamWatcher;
|
|
31
34
|
readonly tunnelManager: TunnelManager;
|
|
32
35
|
readonly pushStore: PushSubscriptionStore;
|
|
33
|
-
startScheduledRun(prompt: string, workingDir: string, durationMinutes: number): Promise<ScheduledRun>;
|
|
36
|
+
startScheduledRun(prompt: string, workingDir: string, durationMinutes: number, owner?: string): Promise<ScheduledRun>;
|
|
34
37
|
stopScheduledRun(id: string): Promise<void>;
|
|
35
38
|
}
|
|
36
39
|
//# sourceMappingURL=infra-port.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infra-port.d.ts","sourceRoot":"","sources":["../../../src/web/ports/infra-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChE,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"infra-port.d.ts","sourceRoot":"","sources":["../../../src/web/ports/infra-port.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;6EACyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChE,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C"}
|