happy2 0.0.15 → 0.0.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 (76) hide show
  1. package/Dockerfile +30 -0
  2. package/README.md +170 -0
  3. package/deploy/config.yaml +56 -0
  4. package/deploy/happy2-server.yaml +140 -0
  5. package/deploy/happy2-web.yaml +87 -0
  6. package/package.json +3 -2
  7. package/packages/happy2-server/README.md +70 -15
  8. package/packages/happy2-server/dist/backend.d.ts +12 -0
  9. package/packages/happy2-server/dist/backend.d.ts.map +1 -0
  10. package/packages/happy2-server/dist/backend.js +48 -0
  11. package/packages/happy2-server/dist/backend.js.map +1 -0
  12. package/packages/happy2-server/dist/cli.js +6 -25
  13. package/packages/happy2-server/dist/cli.js.map +1 -1
  14. package/packages/happy2-server/dist/index.d.ts +2 -0
  15. package/packages/happy2-server/dist/index.d.ts.map +1 -1
  16. package/packages/happy2-server/dist/index.js +2 -0
  17. package/packages/happy2-server/dist/index.js.map +1 -1
  18. package/packages/happy2-server/dist/modules/agents/daemon.d.ts +16 -0
  19. package/packages/happy2-server/dist/modules/agents/daemon.d.ts.map +1 -1
  20. package/packages/happy2-server/dist/modules/agents/daemon.js +128 -1
  21. package/packages/happy2-server/dist/modules/agents/daemon.js.map +1 -1
  22. package/packages/happy2-server/dist/modules/agents/index.d.ts +1 -1
  23. package/packages/happy2-server/dist/modules/agents/index.d.ts.map +1 -1
  24. package/packages/happy2-server/dist/modules/agents/index.js +1 -1
  25. package/packages/happy2-server/dist/modules/agents/index.js.map +1 -1
  26. package/packages/happy2-server/dist/modules/agents/service.d.ts +53 -0
  27. package/packages/happy2-server/dist/modules/agents/service.d.ts.map +1 -1
  28. package/packages/happy2-server/dist/modules/agents/service.js +39 -0
  29. package/packages/happy2-server/dist/modules/agents/service.js.map +1 -1
  30. package/packages/happy2-server/dist/modules/config/defaults.d.ts +4 -4
  31. package/packages/happy2-server/dist/modules/config/defaults.d.ts.map +1 -1
  32. package/packages/happy2-server/dist/modules/config/defaults.js +8 -8
  33. package/packages/happy2-server/dist/modules/config/defaults.js.map +1 -1
  34. package/packages/happy2-server/dist/modules/config/loader.d.ts +2 -2
  35. package/packages/happy2-server/dist/modules/config/loader.d.ts.map +1 -1
  36. package/packages/happy2-server/dist/modules/config/loader.js +83 -73
  37. package/packages/happy2-server/dist/modules/config/loader.js.map +1 -1
  38. package/packages/happy2-server/dist/modules/config/loader.test.js +35 -0
  39. package/packages/happy2-server/dist/modules/config/loader.test.js.map +1 -1
  40. package/packages/happy2-server/dist/modules/config/runtime.d.ts +1 -1
  41. package/packages/happy2-server/dist/modules/config/runtime.d.ts.map +1 -1
  42. package/packages/happy2-server/dist/modules/config/runtime.js +17 -4
  43. package/packages/happy2-server/dist/modules/config/runtime.js.map +1 -1
  44. package/packages/happy2-server/dist/modules/config/runtime.test.d.ts +2 -0
  45. package/packages/happy2-server/dist/modules/config/runtime.test.d.ts.map +1 -0
  46. package/packages/happy2-server/dist/modules/config/runtime.test.js +99 -0
  47. package/packages/happy2-server/dist/modules/config/runtime.test.js.map +1 -0
  48. package/packages/happy2-server/dist/routes/agents.d.ts +1 -1
  49. package/packages/happy2-server/dist/routes/agents.d.ts.map +1 -1
  50. package/packages/happy2-server/dist/routes/agents.js +132 -0
  51. package/packages/happy2-server/dist/routes/agents.js.map +1 -1
  52. package/packages/happy2-server/dist/runner.js +29 -12
  53. package/packages/happy2-server/dist/runner.js.map +1 -1
  54. package/packages/happy2-server/dist/runnerCommand.d.ts +21 -0
  55. package/packages/happy2-server/dist/runnerCommand.d.ts.map +1 -0
  56. package/packages/happy2-server/dist/runnerCommand.js +97 -0
  57. package/packages/happy2-server/dist/runnerCommand.js.map +1 -0
  58. package/packages/happy2-server/dist/runnerCommand.test.d.ts +2 -0
  59. package/packages/happy2-server/dist/runnerCommand.test.d.ts.map +1 -0
  60. package/packages/happy2-server/dist/runnerCommand.test.js +59 -0
  61. package/packages/happy2-server/dist/runnerCommand.test.js.map +1 -0
  62. package/packages/happy2-server/dist/standalone.d.ts +2 -5
  63. package/packages/happy2-server/dist/standalone.d.ts.map +1 -1
  64. package/packages/happy2-server/dist/standalone.js +14 -65
  65. package/packages/happy2-server/dist/standalone.js.map +1 -1
  66. package/packages/happy2-server/dist/web/assets/index-B51jYSrY.css +2 -0
  67. package/packages/happy2-server/dist/web/assets/index-szUjvBO1.js +39 -0
  68. package/packages/happy2-server/dist/web/index.html +2 -2
  69. package/packages/happy2-server/dist/web.d.ts +12 -0
  70. package/packages/happy2-server/dist/web.d.ts.map +1 -0
  71. package/packages/happy2-server/dist/web.js +89 -0
  72. package/packages/happy2-server/dist/web.js.map +1 -0
  73. package/packages/happy2-server/happy2.example.toml +3 -5
  74. package/packages/happy2-server/Dockerfile +0 -18
  75. package/packages/happy2-server/dist/web/assets/index-BT_VezYx.js +0 -39
  76. package/packages/happy2-server/dist/web/assets/index-Dys3sWv8.css +0 -2
@@ -1,8 +1,6 @@
1
1
  import { readFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
2
  import { parse } from "smol-toml";
4
- import { bundledRigCommand } from "../agents/command.js";
5
- import { localRuntimePaths } from "./paths.js";
3
+ import { defaultConfig } from "./defaults.js";
6
4
  function table(value, path) {
7
5
  if (!value || typeof value !== "object" || Array.isArray(value))
8
6
  throw new Error(`${path} must be a TOML table`);
@@ -31,82 +29,86 @@ function integer(value, path, fallback) {
31
29
  }
32
30
  function strings(value, path, fallback = []) {
33
31
  if (value === undefined)
34
- return fallback;
32
+ return [...fallback];
35
33
  if (!Array.isArray(value) || !value.every((item) => typeof item === "string"))
36
34
  throw new Error(`${path} must be a string array`);
37
35
  return [...value];
38
36
  }
39
- export function parseConfig(input) {
40
- const paths = localRuntimePaths();
37
+ export function parseConfig(input, defaults = defaultConfig()) {
41
38
  const root = table(parse(input), "config");
42
- const server = table(root.server, "server");
43
- const role = string(server.role, "server.role");
39
+ const server = table(root.server ?? {}, "server");
40
+ const role = (string(server.role, "server.role", true) ?? defaults.server.role);
44
41
  if (!["all", "auth", "api"].includes(role))
45
42
  throw new Error("server.role must be all, auth, or api");
46
- const publicUrl = string(server.public_url, "server.public_url");
43
+ const host = string(server.host, "server.host", true) ?? defaults.server.host;
44
+ const port = integer(server.port, "server.port", defaults.server.port);
45
+ const publicUrl = string(server.public_url, "server.public_url", true) ?? defaults.server.publicUrl;
47
46
  new URL(publicUrl);
48
- const trustedProxyHops = integer(server.trusted_proxy_hops, "server.trusted_proxy_hops", 0);
47
+ const trustedProxyHops = integer(server.trusted_proxy_hops, "server.trusted_proxy_hops", defaults.server.trustedProxyHops);
49
48
  if (trustedProxyHops < 0)
50
49
  throw new Error("server.trusted_proxy_hops cannot be negative");
51
- const database = table(root.database, "database");
50
+ const database = table(root.database ?? {}, "database");
52
51
  const agents = table(root.agents ?? {}, "agents");
53
52
  const files = table(root.files ?? {}, "files");
54
53
  const plugins = table(root.plugins ?? {}, "plugins");
55
- const pluginHostApiPort = boundedPositiveInteger(plugins.host_api_port, "plugins.host_api_port", 3001, 65_535);
56
- if (pluginHostApiPort === integer(server.port, "server.port"))
54
+ const pluginHostApiPort = boundedPositiveInteger(plugins.host_api_port, "plugins.host_api_port", defaults.plugins.hostApiPort, 65_535);
55
+ if (pluginHostApiPort === port)
57
56
  throw new Error("plugins.host_api_port must differ from server.port");
58
- const fileProvider = string(files.provider, "files.provider", true) ?? "local";
57
+ const fileProvider = string(files.provider, "files.provider", true) ?? defaults.files.provider;
59
58
  if (fileProvider !== "local")
60
59
  throw new Error("files.provider must be local in this server build");
61
- const signedUrlExpirySeconds = integer(files.signed_url_expiry_seconds, "files.signed_url_expiry_seconds", 300);
60
+ const signedUrlExpirySeconds = integer(files.signed_url_expiry_seconds, "files.signed_url_expiry_seconds", defaults.files.signedUrlExpirySeconds);
62
61
  if (signedUrlExpirySeconds < 1 || signedUrlExpirySeconds > 3600)
63
62
  throw new Error("files.signed_url_expiry_seconds must be between 1 and 3600");
64
- const maxUploadBytes = integer(files.max_upload_bytes, "files.max_upload_bytes", 512 * 1024 * 1024);
63
+ const maxUploadBytes = integer(files.max_upload_bytes, "files.max_upload_bytes", defaults.files.maxUploadBytes);
65
64
  if (maxUploadBytes < 1024 || maxUploadBytes > 2 * 1024 * 1024 * 1024)
66
65
  throw new Error("files.max_upload_bytes must be between 1 KiB and 2 GiB");
67
- const resumableChunkBytes = integer(files.resumable_chunk_bytes, "files.resumable_chunk_bytes", 8 * 1024 * 1024);
66
+ const resumableChunkBytes = integer(files.resumable_chunk_bytes, "files.resumable_chunk_bytes", defaults.files.resumableChunkBytes);
68
67
  if (resumableChunkBytes < 64 * 1024 || resumableChunkBytes > 64 * 1024 * 1024)
69
68
  throw new Error("files.resumable_chunk_bytes must be between 64 KiB and 64 MiB");
70
- const perUserQuotaBytes = quota(files.per_user_quota_bytes, "files.per_user_quota_bytes");
71
- const serverQuotaBytes = quota(files.server_quota_bytes, "files.server_quota_bytes");
72
- const incompleteUploadExpirySeconds = integer(files.incomplete_upload_expiry_seconds, "files.incomplete_upload_expiry_seconds", 24 * 60 * 60);
69
+ const perUserQuotaBytes = quota(files.per_user_quota_bytes, "files.per_user_quota_bytes", defaults.files.perUserQuotaBytes);
70
+ const serverQuotaBytes = quota(files.server_quota_bytes, "files.server_quota_bytes", defaults.files.serverQuotaBytes);
71
+ const incompleteUploadExpirySeconds = integer(files.incomplete_upload_expiry_seconds, "files.incomplete_upload_expiry_seconds", defaults.files.incompleteUploadExpirySeconds);
73
72
  if (incompleteUploadExpirySeconds < 60 || incompleteUploadExpirySeconds > 30 * 24 * 60 * 60)
74
73
  throw new Error("files.incomplete_upload_expiry_seconds must be between 60 and 2592000");
75
- const quarantineRetentionSeconds = integer(files.quarantine_retention_seconds, "files.quarantine_retention_seconds", 30 * 24 * 60 * 60);
74
+ const quarantineRetentionSeconds = integer(files.quarantine_retention_seconds, "files.quarantine_retention_seconds", defaults.files.quarantineRetentionSeconds);
76
75
  if (quarantineRetentionSeconds < 0 || quarantineRetentionSeconds > 365 * 24 * 60 * 60)
77
76
  throw new Error("files.quarantine_retention_seconds must be between 0 and 31536000");
78
- const malwareScanTimeoutSeconds = integer(files.malware_scan_timeout_seconds, "files.malware_scan_timeout_seconds", 120);
77
+ const malwareScanTimeoutSeconds = integer(files.malware_scan_timeout_seconds, "files.malware_scan_timeout_seconds", defaults.files.malwareScanTimeoutSeconds);
79
78
  if (malwareScanTimeoutSeconds < 1 || malwareScanTimeoutSeconds > 3600)
80
79
  throw new Error("files.malware_scan_timeout_seconds must be between 1 and 3600");
81
- const malwareScanFailureMode = string(files.malware_scan_failure_mode, "files.malware_scan_failure_mode", true) ?? "deny";
80
+ const malwareScanFailureMode = string(files.malware_scan_failure_mode, "files.malware_scan_failure_mode", true) ??
81
+ defaults.files.malwareScanFailureMode;
82
82
  if (malwareScanFailureMode !== "allow" && malwareScanFailureMode !== "deny")
83
83
  throw new Error("files.malware_scan_failure_mode must be allow or deny");
84
84
  const security = table(root.security ?? {}, "security");
85
85
  const rateLimit = table(security.rate_limit ?? {}, "security.rate_limit");
86
86
  const idempotency = table(security.idempotency ?? {}, "security.idempotency");
87
- const readsPerMinute = boundedPositiveInteger(rateLimit.reads_per_minute, "security.rate_limit.reads_per_minute", 1_200, 1_000_000);
88
- const writesPerMinute = boundedPositiveInteger(rateLimit.writes_per_minute, "security.rate_limit.writes_per_minute", 300, 1_000_000);
89
- const authPerMinute = boundedPositiveInteger(rateLimit.auth_per_minute, "security.rate_limit.auth_per_minute", 30, 1_000_000);
90
- const idempotencyLeaseSeconds = boundedPositiveInteger(idempotency.lease_seconds, "security.idempotency.lease_seconds", 30, 3_600);
91
- const idempotencyRetentionSeconds = boundedPositiveInteger(idempotency.retention_seconds, "security.idempotency.retention_seconds", 86_400, 31_536_000);
87
+ const readsPerMinute = boundedPositiveInteger(rateLimit.reads_per_minute, "security.rate_limit.reads_per_minute", defaults.security.rateLimit.readsPerMinute, 1_000_000);
88
+ const writesPerMinute = boundedPositiveInteger(rateLimit.writes_per_minute, "security.rate_limit.writes_per_minute", defaults.security.rateLimit.writesPerMinute, 1_000_000);
89
+ const authPerMinute = boundedPositiveInteger(rateLimit.auth_per_minute, "security.rate_limit.auth_per_minute", defaults.security.rateLimit.authPerMinute, 1_000_000);
90
+ const idempotencyLeaseSeconds = boundedPositiveInteger(idempotency.lease_seconds, "security.idempotency.lease_seconds", defaults.security.idempotency.leaseSeconds, 3_600);
91
+ const idempotencyRetentionSeconds = boundedPositiveInteger(idempotency.retention_seconds, "security.idempotency.retention_seconds", defaults.security.idempotency.retentionSeconds, 31_536_000);
92
92
  if (idempotencyRetentionSeconds < idempotencyLeaseSeconds)
93
93
  throw new Error("security.idempotency.retention_seconds must be at least lease_seconds");
94
- const jwt = table(root.jwt, "jwt");
95
- const expiryDays = integer(jwt.expiry_days, "jwt.expiry_days", 30);
94
+ const jwt = table(root.jwt ?? {}, "jwt");
95
+ const expiryDays = integer(jwt.expiry_days, "jwt.expiry_days", defaults.jwt.expiryDays);
96
96
  if (expiryDays < 1 || expiryDays > 90)
97
97
  throw new Error("jwt.expiry_days must be between 1 and 90");
98
- const privateKeyPath = string(jwt.private_key_path, "jwt.private_key_path", true);
99
- const publicKeyPath = string(jwt.public_key_path, "jwt.public_key_path", true);
98
+ const privateKeyPath = string(jwt.private_key_path, "jwt.private_key_path", true) ?? defaults.jwt.privateKeyPath;
99
+ const publicKeyPath = string(jwt.public_key_path, "jwt.public_key_path", true) ?? defaults.jwt.publicKeyPath;
100
100
  const auth = table(root.auth ?? {}, "auth");
101
101
  const password = table(auth.password ?? {}, "auth.password");
102
102
  const magicLink = table(auth.magic_link ?? {}, "auth.magic_link");
103
103
  const cloudflareAccess = table(auth.cloudflare_access ?? {}, "auth.cloudflare_access");
104
104
  const devTokens = table(auth.dev_tokens ?? {}, "auth.dev_tokens");
105
- const oidc = new Map();
105
+ const oidc = new Map(defaults.auth.oidc);
106
106
  for (const [id, value] of Object.entries(table(auth.oidc ?? {}, "auth.oidc"))) {
107
107
  const provider = table(value, `auth.oidc.${id}`);
108
- if (!boolean(provider.enabled, `auth.oidc.${id}.enabled`))
108
+ if (!boolean(provider.enabled, `auth.oidc.${id}.enabled`)) {
109
+ oidc.delete(id);
109
110
  continue;
111
+ }
110
112
  const scopes = provider.scopes ?? ["openid", "email", "profile"];
111
113
  if (!Array.isArray(scopes) || !scopes.every((scope) => typeof scope === "string"))
112
114
  throw new Error(`auth.oidc.${id}.scopes must be string array`);
@@ -125,13 +127,21 @@ export function parseConfig(input) {
125
127
  if (oidc.size > 1) {
126
128
  throw new Error("only one OIDC provider can be enabled at a time");
127
129
  }
128
- const magicEnabled = boolean(magicLink.enabled, "auth.magic_link.enabled");
129
- const magicRedirectUrl = string(magicLink.redirect_url, "auth.magic_link.redirect_url", true);
130
+ const passwordEnabled = boolean(password.enabled, "auth.password.enabled", defaults.auth.password.enabled);
131
+ const magicEnabled = boolean(magicLink.enabled, "auth.magic_link.enabled", defaults.auth.magicLink.enabled);
132
+ const magicRedirectUrl = string(magicLink.redirect_url, "auth.magic_link.redirect_url", true) ??
133
+ defaults.auth.magicLink.redirectUrl;
130
134
  if (magicEnabled && !magicRedirectUrl)
131
135
  throw new Error("auth.magic_link.redirect_url is required when magic links are enabled");
132
- const cloudflareAccessEnabled = boolean(cloudflareAccess.enabled, "auth.cloudflare_access.enabled");
133
- const cloudflareAccessTeamDomain = string(cloudflareAccess.team_domain, "auth.cloudflare_access.team_domain", !cloudflareAccessEnabled);
134
- const cloudflareAccessAudience = string(cloudflareAccess.audience, "auth.cloudflare_access.audience", !cloudflareAccessEnabled);
136
+ const cloudflareAccessEnabled = boolean(cloudflareAccess.enabled, "auth.cloudflare_access.enabled", defaults.auth.cloudflareAccess.enabled);
137
+ const cloudflareAccessTeamDomain = string(cloudflareAccess.team_domain, "auth.cloudflare_access.team_domain", true) ??
138
+ defaults.auth.cloudflareAccess.teamDomain;
139
+ const cloudflareAccessAudience = string(cloudflareAccess.audience, "auth.cloudflare_access.audience", true) ??
140
+ defaults.auth.cloudflareAccess.audience;
141
+ if (cloudflareAccessEnabled && !cloudflareAccessTeamDomain)
142
+ throw new Error("auth.cloudflare_access.team_domain is required when Cloudflare Access is enabled");
143
+ if (cloudflareAccessEnabled && !cloudflareAccessAudience)
144
+ throw new Error("auth.cloudflare_access.audience is required when Cloudflare Access is enabled");
135
145
  let normalizedCloudflareAccessTeamDomain = cloudflareAccessTeamDomain;
136
146
  if (cloudflareAccessEnabled) {
137
147
  const teamDomain = new URL(cloudflareAccessTeamDomain);
@@ -147,7 +157,7 @@ export function parseConfig(input) {
147
157
  normalizedCloudflareAccessTeamDomain = teamDomain.origin;
148
158
  }
149
159
  const enabledMethods = [
150
- boolean(password.enabled, "auth.password.enabled"),
160
+ passwordEnabled,
151
161
  magicEnabled,
152
162
  oidc.size > 0,
153
163
  cloudflareAccessEnabled,
@@ -158,32 +168,29 @@ export function parseConfig(input) {
158
168
  return {
159
169
  server: {
160
170
  role,
161
- host: string(server.host, "server.host"),
162
- port: integer(server.port, "server.port"),
171
+ host,
172
+ port,
163
173
  publicUrl: publicUrl.replace(/\/$/, ""),
164
174
  trustedProxyHops,
165
175
  },
166
176
  database: {
167
- url: string(database.url, "database.url"),
168
- authTokenEnv: string(database.auth_token_env, "database.auth_token_env", true),
177
+ url: string(database.url, "database.url", true) ?? defaults.database.url,
178
+ authTokenEnv: string(database.auth_token_env, "database.auth_token_env", true) ??
179
+ defaults.database.authTokenEnv,
169
180
  },
170
181
  agents: {
171
- enabled: boolean(agents.enabled, "agents.enabled", true),
172
- directory: paths.rigDirectory,
182
+ enabled: boolean(agents.enabled, "agents.enabled", defaults.agents.enabled),
183
+ directory: defaults.agents.directory,
173
184
  socketPath: string(agents.socket_path, "agents.socket_path", true) ??
174
- process.env.RIG_SERVER_SOCKET_PATH ??
175
- join(paths.rigDirectory, "server.sock"),
176
- tokenPath: string(agents.token_path, "agents.token_path", true) ??
177
- process.env.RIG_SERVER_TOKEN_PATH ??
178
- join(paths.rigDirectory, "token"),
179
- command: string(agents.command, "agents.command", true) ??
180
- process.env.RIG_COMMAND ??
181
- bundledRigCommand(),
182
- defaultCwd: string(agents.default_cwd, "agents.default_cwd", true) ?? paths.workspacesDirectory,
185
+ defaults.agents.socketPath,
186
+ tokenPath: string(agents.token_path, "agents.token_path", true) ?? defaults.agents.tokenPath,
187
+ command: string(agents.command, "agents.command", true) ?? defaults.agents.command,
188
+ defaultCwd: string(agents.default_cwd, "agents.default_cwd", true) ??
189
+ defaults.agents.defaultCwd,
183
190
  },
184
191
  files: {
185
192
  provider: fileProvider,
186
- directory: string(files.directory, "files.directory", true) ?? paths.filesDirectory,
193
+ directory: string(files.directory, "files.directory", true) ?? defaults.files.directory,
187
194
  signedUrlExpirySeconds,
188
195
  maxUploadBytes,
189
196
  resumableChunkBytes,
@@ -191,46 +198,49 @@ export function parseConfig(input) {
191
198
  serverQuotaBytes,
192
199
  incompleteUploadExpirySeconds,
193
200
  quarantineRetentionSeconds,
194
- malwareScannerCommand: string(files.malware_scanner_command, "files.malware_scanner_command", true),
195
- malwareScannerArguments: strings(files.malware_scanner_arguments, "files.malware_scanner_arguments"),
201
+ malwareScannerCommand: string(files.malware_scanner_command, "files.malware_scanner_command", true) ??
202
+ defaults.files.malwareScannerCommand,
203
+ malwareScannerArguments: strings(files.malware_scanner_arguments, "files.malware_scanner_arguments", defaults.files.malwareScannerArguments),
196
204
  malwareScanTimeoutSeconds,
197
205
  malwareScanFailureMode,
198
206
  },
199
207
  plugins: {
200
- directory: string(plugins.directory, "plugins.directory", true) ?? paths.pluginsDirectory,
201
- hostApiHost: string(plugins.host_api_host, "plugins.host_api_host", true) ?? "0.0.0.0",
208
+ directory: string(plugins.directory, "plugins.directory", true) ?? defaults.plugins.directory,
209
+ hostApiHost: string(plugins.host_api_host, "plugins.host_api_host", true) ??
210
+ defaults.plugins.hostApiHost,
202
211
  hostApiPort: pluginHostApiPort,
203
212
  },
204
213
  security: {
205
214
  integrationSecretEnv: string(security.integration_secret_env, "security.integration_secret_env", true) ??
206
- "HAPPY2_INTEGRATION_SECRET",
215
+ defaults.security.integrationSecretEnv,
207
216
  rateLimit: {
208
- enabled: boolean(rateLimit.enabled, "security.rate_limit.enabled", true),
217
+ enabled: boolean(rateLimit.enabled, "security.rate_limit.enabled", defaults.security.rateLimit.enabled),
209
218
  readsPerMinute,
210
219
  writesPerMinute,
211
220
  authPerMinute,
212
221
  },
213
222
  idempotency: {
214
- enabled: boolean(idempotency.enabled, "security.idempotency.enabled", true),
223
+ enabled: boolean(idempotency.enabled, "security.idempotency.enabled", defaults.security.idempotency.enabled),
215
224
  leaseSeconds: idempotencyLeaseSeconds,
216
225
  retentionSeconds: idempotencyRetentionSeconds,
217
226
  },
218
227
  },
219
228
  jwt: {
220
- issuer: string(jwt.issuer, "jwt.issuer"),
221
- audience: string(jwt.audience, "jwt.audience"),
222
- keyId: string(jwt.key_id, "jwt.key_id"),
229
+ issuer: string(jwt.issuer, "jwt.issuer", true) ?? defaults.jwt.issuer,
230
+ audience: string(jwt.audience, "jwt.audience", true) ?? defaults.jwt.audience,
231
+ keyId: string(jwt.key_id, "jwt.key_id", true) ?? defaults.jwt.keyId,
223
232
  privateKeyPath,
224
233
  publicKeyPath,
225
234
  expiryDays,
226
235
  },
227
236
  auth: {
228
237
  password: {
229
- enabled: boolean(password.enabled, "auth.password.enabled"),
238
+ enabled: passwordEnabled,
230
239
  },
231
240
  magicLink: {
232
241
  enabled: magicEnabled,
233
- from: string(magicLink.from, "auth.magic_link.from", true),
242
+ from: string(magicLink.from, "auth.magic_link.from", true) ??
243
+ defaults.auth.magicLink.from,
234
244
  redirectUrl: magicRedirectUrl,
235
245
  },
236
246
  oidc,
@@ -240,13 +250,13 @@ export function parseConfig(input) {
240
250
  audience: cloudflareAccessAudience,
241
251
  },
242
252
  devTokens: {
243
- enabled: boolean(devTokens.enabled, "auth.dev_tokens.enabled"),
253
+ enabled: boolean(devTokens.enabled, "auth.dev_tokens.enabled", defaults.auth.devTokens.enabled),
244
254
  },
245
255
  },
246
256
  };
247
257
  }
248
- function quota(value, path) {
249
- const result = integer(value, path, 0);
258
+ function quota(value, path, fallback) {
259
+ const result = integer(value, path, fallback);
250
260
  if (!Number.isSafeInteger(result) || result < 0)
251
261
  throw new Error(`${path} must be zero or a positive safe integer`);
252
262
  return result;
@@ -257,7 +267,7 @@ function boundedPositiveInteger(value, path, fallback, maximum) {
257
267
  throw new Error(`${path} must be between 1 and ${maximum}`);
258
268
  return result;
259
269
  }
260
- export async function loadConfig(path) {
261
- return parseConfig(await readFile(path, "utf8"));
270
+ export async function loadConfig(path, defaults = defaultConfig()) {
271
+ return parseConfig(await readFile(path, "utf8"), defaults);
262
272
  }
263
273
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../sources/modules/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../sources/modules/config/loader.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { join } from "node:path";
3
+ import { defaultConfig } from "./defaults.js";
3
4
  import { parseConfig } from "./loader.js";
4
5
  const base = `[server]
5
6
  role = "all"
@@ -16,8 +17,36 @@ audience = "happy2"
16
17
  key_id = "test"
17
18
  `;
18
19
  describe("TOML config", () => {
20
+ it("merges a partial config over every nested standalone default", () => {
21
+ const defaults = defaultConfig("/srv/happy");
22
+ const config = parseConfig(`[server]
23
+ host = "0.0.0.0"
24
+ port = 4100
25
+
26
+ [security.rate_limit]
27
+ writes_per_minute = 777
28
+ `, defaults);
29
+ expect(config).toEqual({
30
+ ...defaults,
31
+ server: {
32
+ ...defaults.server,
33
+ host: "0.0.0.0",
34
+ port: 4100,
35
+ },
36
+ security: {
37
+ ...defaults.security,
38
+ rateLimit: {
39
+ ...defaults.security.rateLimit,
40
+ writesPerMinute: 777,
41
+ },
42
+ },
43
+ });
44
+ });
19
45
  it("loads one selected authentication mechanism", () => {
20
46
  const config = parseConfig(`${base}
47
+ [auth.password]
48
+ enabled = false
49
+
21
50
  [auth.oidc.example]
22
51
  enabled = true
23
52
  discovery_url = "https://id.example/.well-known/openid-configuration"
@@ -66,6 +95,9 @@ audience = "cloudflare-access-audience"
66
95
  });
67
96
  it("loads a Cloudflare Access application and rejects unsafe team domains", () => {
68
97
  const config = parseConfig(`${base}
98
+ [auth.password]
99
+ enabled = false
100
+
69
101
  [auth.cloudflare_access]
70
102
  enabled = true
71
103
  team_domain = "https://happy.cloudflareaccess.com"
@@ -77,6 +109,9 @@ audience = "cloudflare-access-audience"
77
109
  audience: "cloudflare-access-audience",
78
110
  });
79
111
  expect(() => parseConfig(`${base}
112
+ [auth.password]
113
+ enabled = false
114
+
80
115
  [auth.cloudflare_access]
81
116
  enabled = true
82
117
  team_domain = "https://cloudflareaccess.com.evil.example"
@@ -1 +1 @@
1
- {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../../sources/modules/config/loader.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../../sources/modules/config/loader.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ServerConfig } from "./type.js";
2
- export declare function loadRuntimeConfig(configPath?: string): Promise<{
2
+ export declare function loadRuntimeConfig(configPath?: string, cwd?: string): Promise<{
3
3
  config: ServerConfig;
4
4
  managedConfigPath: string;
5
5
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../sources/modules/config/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAsB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,YAAY,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC7B,CAAC,CAMD"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../sources/modules/config/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAsB,iBAAiB,CACnC,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,SAAgB,GACpB,OAAO,CAAC;IACP,MAAM,EAAE,YAAY,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC7B,CAAC,CAiBD"}
@@ -3,11 +3,24 @@ import { dirname, join } from "node:path";
3
3
  import { defaultConfig } from "./defaults.js";
4
4
  import { initializeManagedEnvironment } from "./environment.js";
5
5
  import { loadConfig } from "./loader.js";
6
- export async function loadRuntimeConfig(configPath) {
7
- const managedConfigPath = configPath ?? join(process.cwd(), ".happy2", "happy2.toml");
8
- if (!configPath)
6
+ export async function loadRuntimeConfig(configPath, cwd = process.cwd()) {
7
+ const managedConfigPath = configPath ?? join(cwd, ".happy2", "happy2.toml");
8
+ const defaults = defaultConfig(cwd);
9
+ let config;
10
+ if (configPath) {
11
+ config = await loadConfig(configPath, defaults);
12
+ }
13
+ else {
9
14
  await mkdir(dirname(managedConfigPath), { recursive: true, mode: 0o700 });
10
- const config = configPath ? await loadConfig(configPath) : defaultConfig();
15
+ try {
16
+ config = await loadConfig(managedConfigPath, defaults);
17
+ }
18
+ catch (error) {
19
+ if (error.code !== "ENOENT")
20
+ throw error;
21
+ config = defaults;
22
+ }
23
+ }
11
24
  await initializeManagedEnvironment(managedConfigPath, config);
12
25
  return { config, managedConfigPath };
13
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../sources/modules/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAmB;IAIvD,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACtF,IAAI,CAAC,UAAU;QAAE,MAAM,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC3E,MAAM,4BAA4B,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../sources/modules/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,UAAmB,EACnB,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAKnB,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,MAAoB,CAAC;IACzB,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACJ,MAAM,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC;YACD,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;YACpE,MAAM,GAAG,QAAQ,CAAC;QACtB,CAAC;IACL,CAAC;IACD,MAAM,4BAA4B,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runtime.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.test.d.ts","sourceRoot":"","sources":["../../../sources/modules/config/runtime.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ import { mkdtemp, mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+ import { loadRuntimeConfig } from "./runtime.js";
6
+ const managedSecretNames = [
7
+ "HAPPY2_INTEGRATION_SECRET",
8
+ "HAPPY2_JWT_PRIVATE_KEY",
9
+ "HAPPY2_JWT_PRIVATE_KEY_B64",
10
+ "HAPPY2_JWT_PUBLIC_KEY",
11
+ "HAPPY2_JWT_PUBLIC_KEY_B64",
12
+ "HAPPY2_PASSWORD_PEPPER",
13
+ ];
14
+ const originalEnvironment = new Map(managedSecretNames.map((name) => [name, process.env[name]]));
15
+ const temporaryDirectories = [];
16
+ afterEach(async () => {
17
+ for (const name of managedSecretNames) {
18
+ const original = originalEnvironment.get(name);
19
+ if (original === undefined)
20
+ delete process.env[name];
21
+ else
22
+ process.env[name] = original;
23
+ }
24
+ await Promise.all(temporaryDirectories
25
+ .splice(0)
26
+ .map((directory) => rm(directory, { force: true, recursive: true })));
27
+ });
28
+ describe.sequential("runtime configuration", () => {
29
+ it("reads a partial managed TOML and persists generated secrets beside it", async () => {
30
+ const cwd = await temporaryDirectory();
31
+ const runtimeDirectory = join(cwd, ".happy2");
32
+ const configPath = join(runtimeDirectory, "happy2.toml");
33
+ await mkdir(runtimeDirectory, { recursive: true });
34
+ await writeFile(configPath, `[server]
35
+ role = "all"
36
+ host = "0.0.0.0"
37
+ port = 4100
38
+ `);
39
+ clearManagedSecrets();
40
+ const loaded = await loadRuntimeConfig(undefined, cwd);
41
+ expect(loaded.managedConfigPath).toBe(configPath);
42
+ expect(loaded.config.server).toMatchObject({
43
+ role: "all",
44
+ host: "0.0.0.0",
45
+ port: 4100,
46
+ publicUrl: "http://127.0.0.1:3000",
47
+ });
48
+ expect(loaded.config.database.url).toBe(`file:${join(runtimeDirectory, "happy2.db")}`);
49
+ expect(loaded.config.auth.password.enabled).toBe(true);
50
+ await expectManagedSecrets(join(runtimeDirectory, ".env"));
51
+ await expect(stat(join(cwd, ".env"))).rejects.toMatchObject({ code: "ENOENT" });
52
+ });
53
+ it("persists generated secrets beside an explicit partial config", async () => {
54
+ const cwd = await temporaryDirectory();
55
+ const configDirectory = join(cwd, "config");
56
+ const configPath = join(configDirectory, "happy2.toml");
57
+ await mkdir(configDirectory, { recursive: true });
58
+ await writeFile(configPath, `[server]
59
+ host = "0.0.0.0"
60
+ `);
61
+ clearManagedSecrets();
62
+ const loaded = await loadRuntimeConfig(configPath, cwd);
63
+ expect(loaded.config.server.host).toBe("0.0.0.0");
64
+ expect(loaded.config.server.port).toBe(3000);
65
+ await expectManagedSecrets(join(configDirectory, ".env"));
66
+ await expect(stat(join(cwd, ".happy2", ".env"))).rejects.toMatchObject({
67
+ code: "ENOENT",
68
+ });
69
+ });
70
+ it("uses all defaults and the managed secret path when no TOML exists", async () => {
71
+ const cwd = await temporaryDirectory();
72
+ clearManagedSecrets();
73
+ const loaded = await loadRuntimeConfig(undefined, cwd);
74
+ expect(loaded.config.server).toMatchObject({
75
+ role: "all",
76
+ host: "127.0.0.1",
77
+ port: 3000,
78
+ });
79
+ await expectManagedSecrets(join(cwd, ".happy2", ".env"));
80
+ });
81
+ });
82
+ async function temporaryDirectory() {
83
+ const directory = await mkdtemp(join(tmpdir(), "happy2-runtime-config-"));
84
+ temporaryDirectories.push(directory);
85
+ return directory;
86
+ }
87
+ function clearManagedSecrets() {
88
+ for (const name of managedSecretNames)
89
+ delete process.env[name];
90
+ }
91
+ async function expectManagedSecrets(path) {
92
+ const contents = await readFile(path, "utf8");
93
+ expect(contents).toMatch(/^HAPPY2_JWT_PRIVATE_KEY_B64=.+$/m);
94
+ expect(contents).toMatch(/^HAPPY2_JWT_PUBLIC_KEY_B64=.+$/m);
95
+ expect(contents).toMatch(/^HAPPY2_PASSWORD_PEPPER=.+$/m);
96
+ expect(contents).toMatch(/^HAPPY2_INTEGRATION_SECRET=.+$/m);
97
+ expect((await stat(path)).mode & 0o777).toBe(0o600);
98
+ }
99
+ //# sourceMappingURL=runtime.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.test.js","sourceRoot":"","sources":["../../../sources/modules/config/runtime.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,kBAAkB,GAAG;IACvB,2BAA2B;IAC3B,wBAAwB;IACxB,4BAA4B;IAC5B,uBAAuB;IACvB,2BAA2B;IAC3B,wBAAwB;CAClB,CAAC;AAEX,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAC/B,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAU,CAAC,CACvE,CAAC;AACF,MAAM,oBAAoB,GAAa,EAAE,CAAC;AAE1C,SAAS,CAAC,KAAK,IAAI,EAAE;IACjB,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;YAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;IACtC,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CACb,oBAAoB;SACf,MAAM,CAAC,CAAC,CAAC;SACT,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAC3E,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,GAAG,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,CACX,UAAU,EACV;;;;CAIX,CACQ,CAAC;QACF,mBAAmB,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YACvC,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,uBAAuB;SACrC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,GAAG,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACxD,MAAM,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,SAAS,CACX,UAAU,EACV;;CAEX,CACQ,CAAC;QACF,mBAAmB,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YACnE,IAAI,EAAE,QAAQ;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,GAAG,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACvC,mBAAmB,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YACvC,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;QACH,MAAM,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,kBAAkB;IAC7B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAC1E,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,mBAAmB;IACxB,KAAK,MAAM,IAAI,IAAI,kBAAkB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC5D,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { FastifyInstance } from "fastify";
2
- import type { AgentService } from "../modules/agents/index.js";
2
+ import { type AgentService } from "../modules/agents/index.js";
3
3
  import type { AuthService } from "../modules/auth/service.js";
4
4
  export declare function registerAgentRoutes(app: FastifyInstance, auth: AuthService, agents: AgentService): void;
5
5
  //# sourceMappingURL=agents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../sources/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAa9D,wBAAgB,mBAAmB,CAC/B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,YAAY,GACrB,IAAI,CA6KN"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../sources/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAgB9D,wBAAgB,mBAAmB,CAC/B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,YAAY,GACrB,IAAI,CA2SN"}