@aopslab/aops-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +6 -0
  3. package/README.md +21 -0
  4. package/aops-server-runtime.json +11 -0
  5. package/build/client/_app/immutable/chunks/2_TffmqH.js +1 -0
  6. package/build/client/_app/immutable/chunks/3DOfIKW0.js +1 -0
  7. package/build/client/_app/immutable/chunks/B2EkC-sy.js +1 -0
  8. package/build/client/_app/immutable/chunks/CMkIcmi1.js +2 -0
  9. package/build/client/_app/immutable/chunks/rqnVXeyB.js +1 -0
  10. package/build/client/_app/immutable/chunks/sZYZbj9W.js +1 -0
  11. package/build/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
  12. package/build/client/_app/immutable/entry/app.C7STLTX8.js +2 -0
  13. package/build/client/_app/immutable/entry/start.BC94hOaC.js +1 -0
  14. package/build/client/_app/immutable/nodes/0.BYBfjxZ5.js +1 -0
  15. package/build/client/_app/immutable/nodes/1.BNXFXajG.js +1 -0
  16. package/build/client/_app/version.json +1 -0
  17. package/build/env.js +70 -0
  18. package/build/env.js.map +1 -0
  19. package/build/handler.js +16 -0
  20. package/build/handler.js.map +1 -0
  21. package/build/index.js +139 -0
  22. package/build/index.js.map +1 -0
  23. package/build/server/chunks/0-RfB6m2nq.js +7 -0
  24. package/build/server/chunks/0-RfB6m2nq.js.map +1 -0
  25. package/build/server/chunks/1-_gg8Q0UT.js +9 -0
  26. package/build/server/chunks/1-_gg8Q0UT.js.map +1 -0
  27. package/build/server/chunks/_server.ts-6276EQIF.js +44 -0
  28. package/build/server/chunks/_server.ts-6276EQIF.js.map +1 -0
  29. package/build/server/chunks/_server.ts-B59WFQzX.js +174 -0
  30. package/build/server/chunks/_server.ts-B59WFQzX.js.map +1 -0
  31. package/build/server/chunks/_server.ts-BauJsLZI.js +40 -0
  32. package/build/server/chunks/_server.ts-BauJsLZI.js.map +1 -0
  33. package/build/server/chunks/_server.ts-BnGzJw2-.js +81 -0
  34. package/build/server/chunks/_server.ts-BnGzJw2-.js.map +1 -0
  35. package/build/server/chunks/_server.ts-CP7qM24V.js +34 -0
  36. package/build/server/chunks/_server.ts-CP7qM24V.js.map +1 -0
  37. package/build/server/chunks/_server.ts-Cbq_u99d.js +9 -0
  38. package/build/server/chunks/_server.ts-Cbq_u99d.js.map +1 -0
  39. package/build/server/chunks/_server.ts-Ch8fPT-o.js +92 -0
  40. package/build/server/chunks/_server.ts-Ch8fPT-o.js.map +1 -0
  41. package/build/server/chunks/_server.ts-Cv-yaXZI.js +7 -0
  42. package/build/server/chunks/_server.ts-Cv-yaXZI.js.map +1 -0
  43. package/build/server/chunks/_server.ts-D6lBwOON.js +34 -0
  44. package/build/server/chunks/_server.ts-D6lBwOON.js.map +1 -0
  45. package/build/server/chunks/_server.ts-D84K3pp9.js +11 -0
  46. package/build/server/chunks/_server.ts-D84K3pp9.js.map +1 -0
  47. package/build/server/chunks/_server.ts-DNzU1ToA.js +277 -0
  48. package/build/server/chunks/_server.ts-DNzU1ToA.js.map +1 -0
  49. package/build/server/chunks/_server.ts-DQQnw77t.js +17 -0
  50. package/build/server/chunks/_server.ts-DQQnw77t.js.map +1 -0
  51. package/build/server/chunks/_server.ts-DSxr5l15.js +18 -0
  52. package/build/server/chunks/_server.ts-DSxr5l15.js.map +1 -0
  53. package/build/server/chunks/_server.ts-DZYokvuR.js +80 -0
  54. package/build/server/chunks/_server.ts-DZYokvuR.js.map +1 -0
  55. package/build/server/chunks/_server.ts-Dcqwpz2t.js +144 -0
  56. package/build/server/chunks/_server.ts-Dcqwpz2t.js.map +1 -0
  57. package/build/server/chunks/_server.ts-Di9VJnF4.js +81 -0
  58. package/build/server/chunks/_server.ts-Di9VJnF4.js.map +1 -0
  59. package/build/server/chunks/_server.ts-FBEHFT8b.js +33 -0
  60. package/build/server/chunks/_server.ts-FBEHFT8b.js.map +1 -0
  61. package/build/server/chunks/_server.ts-gZytCuiJ.js +10 -0
  62. package/build/server/chunks/_server.ts-gZytCuiJ.js.map +1 -0
  63. package/build/server/chunks/_server.ts-tNULLyEO.js +261 -0
  64. package/build/server/chunks/_server.ts-tNULLyEO.js.map +1 -0
  65. package/build/server/chunks/agent-gateway-runtime-DTZ4SxaC.js +2598 -0
  66. package/build/server/chunks/agent-gateway-runtime-DTZ4SxaC.js.map +1 -0
  67. package/build/server/chunks/aops-runtime-config-wpVmg7T-.js +179 -0
  68. package/build/server/chunks/aops-runtime-config-wpVmg7T-.js.map +1 -0
  69. package/build/server/chunks/discovery-D9JnSgfu.js +894 -0
  70. package/build/server/chunks/discovery-D9JnSgfu.js.map +1 -0
  71. package/build/server/chunks/error.svelte-DgUOqi-L.js +45 -0
  72. package/build/server/chunks/error.svelte-DgUOqi-L.js.map +1 -0
  73. package/build/server/chunks/handler-BN3-p5rP.js +1733 -0
  74. package/build/server/chunks/handler-BN3-p5rP.js.map +1 -0
  75. package/build/server/chunks/hooks.server-C4wxiH5m.js +52 -0
  76. package/build/server/chunks/hooks.server-C4wxiH5m.js.map +1 -0
  77. package/build/server/chunks/index.js-nbqdVuWC.js +10698 -0
  78. package/build/server/chunks/index.js-nbqdVuWC.js.map +1 -0
  79. package/build/server/chunks/manifest.js-_Re-Wj-y.js +167 -0
  80. package/build/server/chunks/manifest.js-_Re-Wj-y.js.map +1 -0
  81. package/build/server/chunks/plugin-error-normalize-Bq14Qbz3.js +297 -0
  82. package/build/server/chunks/plugin-error-normalize-Bq14Qbz3.js.map +1 -0
  83. package/build/server/chunks/project-alias-DqE2v58Q.js +29 -0
  84. package/build/server/chunks/project-alias-DqE2v58Q.js.map +1 -0
  85. package/build/server/chunks/registry-5amIZito.js +289 -0
  86. package/build/server/chunks/registry-5amIZito.js.map +1 -0
  87. package/build/server/chunks/request-base-url-BDdrsaga.js +24 -0
  88. package/build/server/chunks/request-base-url-BDdrsaga.js.map +1 -0
  89. package/build/server/chunks/request-context-tNeFQjgb.js +422 -0
  90. package/build/server/chunks/request-context-tNeFQjgb.js.map +1 -0
  91. package/build/server/chunks/xf-result-BRDjvftr.js +17 -0
  92. package/build/server/chunks/xf-result-BRDjvftr.js.map +1 -0
  93. package/build/shims.js +33 -0
  94. package/build/shims.js.map +1 -0
  95. package/cockpit/.vite/manifest.json +198 -0
  96. package/cockpit/assets/dm-sans-latin-400-normal-BwCSEQnW.woff +0 -0
  97. package/cockpit/assets/dm-sans-latin-400-normal-CW0RaeGs.woff2 +0 -0
  98. package/cockpit/assets/dm-sans-latin-500-normal-B9HHJjqV.woff2 +0 -0
  99. package/cockpit/assets/dm-sans-latin-500-normal-Dr3UlScf.woff +0 -0
  100. package/cockpit/assets/dm-sans-latin-700-normal-CUSSCpQX.woff +0 -0
  101. package/cockpit/assets/dm-sans-latin-700-normal-DvUfVpUG.woff2 +0 -0
  102. package/cockpit/assets/dm-sans-latin-ext-400-normal-BjWJ59Pq.woff +0 -0
  103. package/cockpit/assets/dm-sans-latin-ext-400-normal-BtiwyxMk.woff2 +0 -0
  104. package/cockpit/assets/dm-sans-latin-ext-500-normal-BJfUCQsA.woff2 +0 -0
  105. package/cockpit/assets/dm-sans-latin-ext-500-normal-DR84L5F-.woff +0 -0
  106. package/cockpit/assets/dm-sans-latin-ext-700-normal-BLI3TTWz.woff +0 -0
  107. package/cockpit/assets/dm-sans-latin-ext-700-normal-CJIcxD6K.woff2 +0 -0
  108. package/cockpit/assets/index-DDswO4B1.css +1 -0
  109. package/cockpit/assets/index-bovtnZ98.js +18 -0
  110. package/cockpit/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  111. package/cockpit/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  112. package/cockpit/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  113. package/cockpit/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  114. package/cockpit/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  115. package/cockpit/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  116. package/cockpit/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  117. package/cockpit/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  118. package/cockpit/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  119. package/cockpit/assets/outfit-latin-400-normal-BGsTXAXT.woff2 +0 -0
  120. package/cockpit/assets/outfit-latin-400-normal-DMwTpYkH.woff +0 -0
  121. package/cockpit/assets/outfit-latin-600-normal-B7SfZ07L.woff2 +0 -0
  122. package/cockpit/assets/outfit-latin-600-normal-BEfTtDA7.woff +0 -0
  123. package/cockpit/assets/outfit-latin-ext-400-normal-5tcqmc2S.woff2 +0 -0
  124. package/cockpit/assets/outfit-latin-ext-400-normal-DHm7mdGe.woff +0 -0
  125. package/cockpit/assets/outfit-latin-ext-600-normal-B85nYjL1.woff2 +0 -0
  126. package/cockpit/assets/outfit-latin-ext-600-normal-CWJcPgd7.woff +0 -0
  127. package/cockpit/assets/unbounded-cyrillic-600-normal-B-s5c2Kn.woff +0 -0
  128. package/cockpit/assets/unbounded-cyrillic-600-normal-DW6uzIMB.woff2 +0 -0
  129. package/cockpit/assets/unbounded-latin-600-normal-BPdB_PEv.woff +0 -0
  130. package/cockpit/assets/unbounded-latin-600-normal-oRSANpZr.woff2 +0 -0
  131. package/cockpit/assets/unbounded-latin-ext-600-normal-0iZLtTDV.woff2 +0 -0
  132. package/cockpit/assets/unbounded-latin-ext-600-normal-ClMPf-bu.woff +0 -0
  133. package/cockpit/assets/unbounded-vietnamese-600-normal-BzfrgZ_C.woff +0 -0
  134. package/cockpit/assets/unbounded-vietnamese-600-normal-Cx2bTSHN.woff2 +0 -0
  135. package/cockpit/community.module-inventory.json +2389 -0
  136. package/cockpit/index.html +14 -0
  137. package/community-postgres.json +13 -0
  138. package/migrations/agentspace/0000_thin_carlie_cooper.sql +764 -0
  139. package/migrations/agentspace/meta/0000_snapshot.json +6885 -0
  140. package/migrations/agentspace/meta/_journal.json +13 -0
  141. package/migrations/chatv3/0000_dry_ego.sql +218 -0
  142. package/migrations/chatv3/0001_nosy_obadiah_stane.sql +35 -0
  143. package/migrations/chatv3/0002_narrow_darkhawk.sql +4 -0
  144. package/migrations/chatv3/0003_damp_zarek.sql +2 -0
  145. package/migrations/chatv3/0004_nervous_martin_li.sql +60 -0
  146. package/migrations/chatv3/0005_chatv3_server_encrypted_mode.sql +1 -0
  147. package/migrations/chatv3/meta/0000_snapshot.json +1887 -0
  148. package/migrations/chatv3/meta/0001_snapshot.json +2175 -0
  149. package/migrations/chatv3/meta/0002_snapshot.json +2229 -0
  150. package/migrations/chatv3/meta/0003_snapshot.json +2241 -0
  151. package/migrations/chatv3/meta/0004_snapshot.json +2746 -0
  152. package/migrations/chatv3/meta/_journal.json +48 -0
  153. package/migrations/docman/0000_curvy_valeria_richards.sql +257 -0
  154. package/migrations/docman/0001_massive_risque.sql +2 -0
  155. package/migrations/docman/0002_simple_logan.sql +50 -0
  156. package/migrations/docman/0003_quick_index.sql +45 -0
  157. package/migrations/docman/0004_known_summary.sql +9 -0
  158. package/migrations/docman/0005_vector_signal.sql +9 -0
  159. package/migrations/docman/0006_document_version_current_invariant.sql +15 -0
  160. package/migrations/docman/meta/_journal.json +55 -0
  161. package/migrations/projectman/0000_smooth_klaw.sql +257 -0
  162. package/migrations/projectman/0001_worthless_zodiak.sql +9 -0
  163. package/migrations/projectman/0002_board_rename.sql +108 -0
  164. package/migrations/projectman/0003_review_request.sql +62 -0
  165. package/migrations/projectman/0004_review_request_idempotency.sql +3 -0
  166. package/migrations/projectman/0005_allow_multi_sprint_per_task.sql +1 -0
  167. package/migrations/projectman/meta/_journal.json +48 -0
  168. package/migrations/sys/0000_loose_praxagora.sql +31 -0
  169. package/migrations/sys/0001_awesome_ronan.sql +2 -0
  170. package/migrations/sys/0002_steady_maximus.sql +2 -0
  171. package/migrations/sys/0003_escalating_rate_limiter.sql +2 -0
  172. package/migrations/sys/0004_rate_limiter_timestamptz.sql +22 -0
  173. package/migrations/sys/0005_sys_counters.sql +21 -0
  174. package/migrations/sys/meta/_journal.json +48 -0
  175. package/npm-shrinkwrap.json +4375 -0
  176. package/package.json +62 -0
  177. package/runtime/agentspace-host-adapter.mjs +64 -0
  178. package/runtime/agentspace-tooling.mjs +389 -0
  179. package/runtime/docman-host-adapter.mjs +177 -0
  180. package/runtime/docman-policy.mjs +450 -0
  181. package/runtime/docman-tooling.mjs +20 -0
  182. package/runtime/projectman-host-adapter.mjs +597 -0
  183. package/runtime/scope-context.mjs +99 -0
  184. package/scripts/community-host.mjs +626 -0
  185. package/scripts/community-migration-policy-v1.json +296 -0
@@ -0,0 +1,179 @@
1
+ import { lstatSync, realpathSync, readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { Pool } from 'pg';
4
+
5
+ const COMMUNITY_PG_ENV_KEY = "AOPS_PG_URL";
6
+ const COMMUNITY_PG_SCHEMA_TABLES = ["projects", "docman_documents", "projectman_kanban_boards", "chatv3-rooms", "sys_event_stores"];
7
+ const codepointCompare = (left, right) => left < right ? -1 : left > right ? 1 : 0;
8
+ function nonEmpty(value) {
9
+ return typeof value === "string" ? value.trim() : "";
10
+ }
11
+ function assertNoAmbientPgEnv(processEnv) {
12
+ const forbidden = Object.keys(processEnv).filter((key) => /^PG[A-Z0-9_]+$/i.test(key) && nonEmpty(processEnv[key])).sort();
13
+ if (forbidden.length > 0) {
14
+ throw new Error(`community_pg_ambient_env_forbidden:${forbidden.join(",")}`);
15
+ }
16
+ }
17
+ function decodeUrlComponent(value) {
18
+ try {
19
+ return decodeURIComponent(value);
20
+ } catch {
21
+ throw new Error("community_pg_url_invalid");
22
+ }
23
+ }
24
+ function isLoopbackPgHost(value) {
25
+ const host = value.trim().toLowerCase();
26
+ if (host === "localhost" || host === "::1") return true;
27
+ const match = /^127\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
28
+ return Boolean(match && match.slice(1).every((octet) => Number(octet) <= 255));
29
+ }
30
+ function parsePgTarget(value) {
31
+ const normalized = typeof value === "string" ? value.trim() : "";
32
+ if (!normalized) throw new Error("aops_pg_url_required");
33
+ let parsed;
34
+ try {
35
+ parsed = new URL(normalized);
36
+ } catch {
37
+ throw new Error("community_pg_url_invalid");
38
+ }
39
+ if (parsed.protocol !== "postgres:" && parsed.protocol !== "postgresql:" || parsed.hash) {
40
+ throw new Error("community_pg_url_invalid");
41
+ }
42
+ const host = parsed.hostname.startsWith("[") && parsed.hostname.endsWith("]") ? parsed.hostname.slice(1, -1) : parsed.hostname;
43
+ const port = parsed.port ? Number(parsed.port) : 5432;
44
+ const user = decodeUrlComponent(parsed.username);
45
+ const password = decodeUrlComponent(parsed.password);
46
+ const database = decodeUrlComponent(parsed.pathname.startsWith("/") ? parsed.pathname.slice(1) : parsed.pathname);
47
+ const entries = [...parsed.searchParams.entries()];
48
+ const uniqueQueryKeys = new Set(entries.map(([key]) => key));
49
+ const exactQuery = (expected) => entries.length === Object.keys(expected).length && uniqueQueryKeys.size === entries.length && entries.every(([key, entryValue]) => expected[key] === entryValue);
50
+ const loopback = isLoopbackPgHost(host);
51
+ let ssl;
52
+ if (entries.length === 0 && loopback) {
53
+ ssl = false;
54
+ } else if (loopback && exactQuery({ sslmode: "disable" })) {
55
+ ssl = false;
56
+ } else if (exactQuery({ sslmode: "require", uselibpqcompat: "true" })) {
57
+ ssl = { rejectUnauthorized: false };
58
+ } else if (exactQuery({ sslmode: "verify-full" })) {
59
+ ssl = { rejectUnauthorized: true };
60
+ } else if (entries.length === 2 && uniqueQueryKeys.size === entries.length && parsed.searchParams.get("sslmode") === "verify-full" && entries.every(([key]) => key === "sslmode" || key === "sslrootcert")) {
61
+ const rootCertInput = nonEmpty(parsed.searchParams.get("sslrootcert"));
62
+ if (!path.isAbsolute(rootCertInput)) throw new Error("community_pg_url_invalid");
63
+ let rootCertStats;
64
+ try {
65
+ rootCertStats = lstatSync(rootCertInput);
66
+ } catch {
67
+ throw new Error("community_pg_url_invalid");
68
+ }
69
+ if (!rootCertStats.isFile() || rootCertStats.isSymbolicLink() || rootCertStats.size < 1 || rootCertStats.size > 262144) {
70
+ throw new Error("community_pg_url_invalid");
71
+ }
72
+ const canonicalRootCert = realpathSync(rootCertInput);
73
+ if (path.resolve(canonicalRootCert) !== path.resolve(rootCertInput)) throw new Error("community_pg_url_invalid");
74
+ ssl = { rejectUnauthorized: true, ca: readFileSync(canonicalRootCert, "utf8") };
75
+ } else {
76
+ throw new Error("community_pg_url_invalid");
77
+ }
78
+ if (!host || !user || !password || !database || !Number.isInteger(port) || port < 1 || port > 65535 || /[\/\u0000-\u001f\u007f]/.test(database) || /[\u0000-\u001f\u007f]/.test(host + user + password)) {
79
+ throw new Error("community_pg_url_invalid");
80
+ }
81
+ return { host, port, user, password, database, ssl };
82
+ }
83
+ function redactPgTarget(target) {
84
+ const host = target.host.includes(":") ? `[${target.host}]` : target.host;
85
+ return `postgresql://${encodeURIComponent(target.user)}:***@${host}:${target.port}/${encodeURIComponent(target.database)}`;
86
+ }
87
+ function createPoolConfig(target) {
88
+ return {
89
+ host: target.host,
90
+ port: target.port,
91
+ user: target.user,
92
+ password: target.password,
93
+ database: target.database,
94
+ ssl: target.ssl,
95
+ application_name: "aops-community-probe",
96
+ options: "-c search_path=public",
97
+ connectionTimeoutMillis: 8e3,
98
+ query_timeout: 8e3,
99
+ statement_timeout: 8e3,
100
+ lock_timeout: 8e3,
101
+ idle_in_transaction_session_timeout: 8e3,
102
+ max: 1
103
+ };
104
+ }
105
+ function resolveRuntime(processEnv = process.env) {
106
+ assertNoAmbientPgEnv(processEnv);
107
+ const repoUrl = nonEmpty(processEnv[COMMUNITY_PG_ENV_KEY]);
108
+ if (repoUrl) parsePgTarget(repoUrl);
109
+ return {
110
+ repoUrl,
111
+ repoDialect: repoUrl ? "pg" : null,
112
+ repoUrlSource: repoUrl ? "env" : "missing",
113
+ envPath: null,
114
+ envExists: false,
115
+ hostSettings: { logLevel: "info" },
116
+ logLevelSource: "default"
117
+ };
118
+ }
119
+ let resolvedRuntimeConfig = resolveRuntime();
120
+ function getResolvedAopsServerRuntimeConfig() {
121
+ return resolvedRuntimeConfig;
122
+ }
123
+ function readRuntimeConfigAdmin() {
124
+ const runtime = getResolvedAopsServerRuntimeConfig();
125
+ const target = runtime.repoUrl ? parsePgTarget(runtime.repoUrl) : null;
126
+ return {
127
+ policy: { owner: "host", surface: "host-admin", writeMode: "process-env-read-only", dialectsAllowed: ["pg"], secretsMode: "redacted" },
128
+ locks: { repoUrl: runtime.repoUrl ? { source: "env", envKey: COMMUNITY_PG_ENV_KEY } : null },
129
+ effective: {
130
+ repoDialect: runtime.repoDialect,
131
+ repoUrlSource: runtime.repoUrlSource,
132
+ redactedRepoUrl: target ? redactPgTarget(target) : null,
133
+ editableRepoUrl: null
134
+ },
135
+ status: { ok: Boolean(runtime.repoUrl), issues: runtime.repoUrl ? [] : ["AOPS_PG_URL is required."], warnings: [] }
136
+ };
137
+ }
138
+ async function runRuntimeConfigAdminTargetProbe(processEnv = process.env) {
139
+ assertNoAmbientPgEnv(processEnv);
140
+ const target = parsePgTarget(processEnv[COMMUNITY_PG_ENV_KEY]);
141
+ const pool = new Pool(createPoolConfig(target));
142
+ try {
143
+ const database = await pool.query("select current_database() as name");
144
+ const tables = await pool.query(
145
+ `select candidate.name
146
+ from unnest($1::text[]) as candidate(name)
147
+ join pg_catalog.pg_class c on c.relname = candidate.name and c.relkind in ('r', 'p')
148
+ join pg_catalog.pg_namespace n on n.oid = c.relnamespace and n.nspname = 'public'
149
+ where has_table_privilege(c.oid, 'SELECT')`,
150
+ [COMMUNITY_PG_SCHEMA_TABLES]
151
+ );
152
+ const existingRelations = tables.rows.map((row) => row.name).sort(codepointCompare);
153
+ const missingRelations = COMMUNITY_PG_SCHEMA_TABLES.filter((name) => !existingRelations.includes(name));
154
+ return {
155
+ target: { repoDialect: "pg", redactedRepoUrl: redactPgTarget(target) },
156
+ connection: { ok: true, databaseName: String(database.rows[0]?.name ?? "") || null, message: "Connected to configured PostgreSQL target." },
157
+ schema: { verificationLevel: "sentinel-relations-only", ready: false, sentinelsPresent: missingRelations.length === 0, configuredRelationCount: COMMUNITY_PG_SCHEMA_TABLES.length, existingRelationCount: existingRelations.length, existingRelations, missingRelations },
158
+ warnings: [
159
+ "Full domain migration readiness requires packaged bootstrap and runtime catalog smoke.",
160
+ ...missingRelations.length === 0 ? [] : [`Configured target is missing ${missingRelations.length} Community schema sentinel relation(s).`]
161
+ ]
162
+ };
163
+ } finally {
164
+ await pool.end().catch(() => void 0);
165
+ }
166
+ }
167
+ let activeProbe = null;
168
+ async function testRuntimeConfigAdminTarget(processEnv = process.env) {
169
+ if (activeProbe) return activeProbe;
170
+ activeProbe = runRuntimeConfigAdminTargetProbe(processEnv);
171
+ try {
172
+ return await activeProbe;
173
+ } finally {
174
+ activeProbe = null;
175
+ }
176
+ }
177
+
178
+ export { getResolvedAopsServerRuntimeConfig as g, readRuntimeConfigAdmin as r, testRuntimeConfigAdminTarget as t };
179
+ //# sourceMappingURL=aops-runtime-config-wpVmg7T-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aops-runtime-config-wpVmg7T-.js","sources":["../../../.svelte-kit/output/server/chunks/aops-runtime-config.js"],"sourcesContent":["import { lstatSync, realpathSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Pool } from \"pg\";\nconst COMMUNITY_PG_ENV_KEY = \"AOPS_PG_URL\";\nconst COMMUNITY_PG_SCHEMA_TABLES = [\"projects\", \"docman_documents\", \"projectman_kanban_boards\", \"chatv3-rooms\", \"sys_event_stores\"];\nconst codepointCompare = (left, right) => left < right ? -1 : left > right ? 1 : 0;\nfunction nonEmpty(value) {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\nfunction assertNoAmbientPgEnv(processEnv) {\n const forbidden = Object.keys(processEnv).filter((key) => /^PG[A-Z0-9_]+$/i.test(key) && nonEmpty(processEnv[key])).sort();\n if (forbidden.length > 0) {\n throw new Error(`community_pg_ambient_env_forbidden:${forbidden.join(\",\")}`);\n }\n}\nfunction decodeUrlComponent(value) {\n try {\n return decodeURIComponent(value);\n } catch {\n throw new Error(\"community_pg_url_invalid\");\n }\n}\nfunction isLoopbackPgHost(value) {\n const host = value.trim().toLowerCase();\n if (host === \"localhost\" || host === \"::1\") return true;\n const match = /^127\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/.exec(host);\n return Boolean(match && match.slice(1).every((octet) => Number(octet) <= 255));\n}\nfunction parsePgTarget(value) {\n const normalized = typeof value === \"string\" ? value.trim() : \"\";\n if (!normalized) throw new Error(\"aops_pg_url_required\");\n let parsed;\n try {\n parsed = new URL(normalized);\n } catch {\n throw new Error(\"community_pg_url_invalid\");\n }\n if (parsed.protocol !== \"postgres:\" && parsed.protocol !== \"postgresql:\" || parsed.hash) {\n throw new Error(\"community_pg_url_invalid\");\n }\n const host = parsed.hostname.startsWith(\"[\") && parsed.hostname.endsWith(\"]\") ? parsed.hostname.slice(1, -1) : parsed.hostname;\n const port = parsed.port ? Number(parsed.port) : 5432;\n const user = decodeUrlComponent(parsed.username);\n const password = decodeUrlComponent(parsed.password);\n const database = decodeUrlComponent(parsed.pathname.startsWith(\"/\") ? parsed.pathname.slice(1) : parsed.pathname);\n const entries = [...parsed.searchParams.entries()];\n const uniqueQueryKeys = new Set(entries.map(([key]) => key));\n const exactQuery = (expected) => entries.length === Object.keys(expected).length && uniqueQueryKeys.size === entries.length && entries.every(([key, entryValue]) => expected[key] === entryValue);\n const loopback = isLoopbackPgHost(host);\n let ssl;\n if (entries.length === 0 && loopback) {\n ssl = false;\n } else if (loopback && exactQuery({ sslmode: \"disable\" })) {\n ssl = false;\n } else if (exactQuery({ sslmode: \"require\", uselibpqcompat: \"true\" })) {\n ssl = { rejectUnauthorized: false };\n } else if (exactQuery({ sslmode: \"verify-full\" })) {\n ssl = { rejectUnauthorized: true };\n } else if (entries.length === 2 && uniqueQueryKeys.size === entries.length && parsed.searchParams.get(\"sslmode\") === \"verify-full\" && entries.every(([key]) => key === \"sslmode\" || key === \"sslrootcert\")) {\n const rootCertInput = nonEmpty(parsed.searchParams.get(\"sslrootcert\"));\n if (!path.isAbsolute(rootCertInput)) throw new Error(\"community_pg_url_invalid\");\n let rootCertStats;\n try {\n rootCertStats = lstatSync(rootCertInput);\n } catch {\n throw new Error(\"community_pg_url_invalid\");\n }\n if (!rootCertStats.isFile() || rootCertStats.isSymbolicLink() || rootCertStats.size < 1 || rootCertStats.size > 262144) {\n throw new Error(\"community_pg_url_invalid\");\n }\n const canonicalRootCert = realpathSync(rootCertInput);\n if (path.resolve(canonicalRootCert) !== path.resolve(rootCertInput)) throw new Error(\"community_pg_url_invalid\");\n ssl = { rejectUnauthorized: true, ca: readFileSync(canonicalRootCert, \"utf8\") };\n } else {\n throw new Error(\"community_pg_url_invalid\");\n }\n if (!host || !user || !password || !database || !Number.isInteger(port) || port < 1 || port > 65535 || /[\\/\\u0000-\\u001f\\u007f]/.test(database) || /[\\u0000-\\u001f\\u007f]/.test(host + user + password)) {\n throw new Error(\"community_pg_url_invalid\");\n }\n return { host, port, user, password, database, ssl };\n}\nfunction redactPgTarget(target) {\n const host = target.host.includes(\":\") ? `[${target.host}]` : target.host;\n return `postgresql://${encodeURIComponent(target.user)}:***@${host}:${target.port}/${encodeURIComponent(target.database)}`;\n}\nfunction createPoolConfig(target) {\n return {\n host: target.host,\n port: target.port,\n user: target.user,\n password: target.password,\n database: target.database,\n ssl: target.ssl,\n application_name: \"aops-community-probe\",\n options: \"-c search_path=public\",\n connectionTimeoutMillis: 8e3,\n query_timeout: 8e3,\n statement_timeout: 8e3,\n lock_timeout: 8e3,\n idle_in_transaction_session_timeout: 8e3,\n max: 1\n };\n}\nfunction resolveRuntime(processEnv = process.env) {\n assertNoAmbientPgEnv(processEnv);\n const repoUrl = nonEmpty(processEnv[COMMUNITY_PG_ENV_KEY]);\n if (repoUrl) parsePgTarget(repoUrl);\n return {\n repoUrl,\n repoDialect: repoUrl ? \"pg\" : null,\n repoUrlSource: repoUrl ? \"env\" : \"missing\",\n envPath: null,\n envExists: false,\n hostSettings: { logLevel: \"info\" },\n logLevelSource: \"default\"\n };\n}\nlet resolvedRuntimeConfig = resolveRuntime();\nfunction getResolvedAopsServerRuntimeConfig() {\n return resolvedRuntimeConfig;\n}\nfunction readRuntimeConfigAdmin() {\n const runtime = getResolvedAopsServerRuntimeConfig();\n const target = runtime.repoUrl ? parsePgTarget(runtime.repoUrl) : null;\n return {\n policy: { owner: \"host\", surface: \"host-admin\", writeMode: \"process-env-read-only\", dialectsAllowed: [\"pg\"], secretsMode: \"redacted\" },\n locks: { repoUrl: runtime.repoUrl ? { source: \"env\", envKey: COMMUNITY_PG_ENV_KEY } : null },\n effective: {\n repoDialect: runtime.repoDialect,\n repoUrlSource: runtime.repoUrlSource,\n redactedRepoUrl: target ? redactPgTarget(target) : null,\n editableRepoUrl: null\n },\n status: { ok: Boolean(runtime.repoUrl), issues: runtime.repoUrl ? [] : [\"AOPS_PG_URL is required.\"], warnings: [] }\n };\n}\nasync function runRuntimeConfigAdminTargetProbe(processEnv = process.env) {\n assertNoAmbientPgEnv(processEnv);\n const target = parsePgTarget(processEnv[COMMUNITY_PG_ENV_KEY]);\n const pool = new Pool(createPoolConfig(target));\n try {\n const database = await pool.query(\"select current_database() as name\");\n const tables = await pool.query(\n `select candidate.name\n from unnest($1::text[]) as candidate(name)\n join pg_catalog.pg_class c on c.relname = candidate.name and c.relkind in ('r', 'p')\n join pg_catalog.pg_namespace n on n.oid = c.relnamespace and n.nspname = 'public'\n where has_table_privilege(c.oid, 'SELECT')`,\n [COMMUNITY_PG_SCHEMA_TABLES]\n );\n const existingRelations = tables.rows.map((row) => row.name).sort(codepointCompare);\n const missingRelations = COMMUNITY_PG_SCHEMA_TABLES.filter((name) => !existingRelations.includes(name));\n return {\n target: { repoDialect: \"pg\", redactedRepoUrl: redactPgTarget(target) },\n connection: { ok: true, databaseName: String(database.rows[0]?.name ?? \"\") || null, message: \"Connected to configured PostgreSQL target.\" },\n schema: { verificationLevel: \"sentinel-relations-only\", ready: false, sentinelsPresent: missingRelations.length === 0, configuredRelationCount: COMMUNITY_PG_SCHEMA_TABLES.length, existingRelationCount: existingRelations.length, existingRelations, missingRelations },\n warnings: [\n \"Full domain migration readiness requires packaged bootstrap and runtime catalog smoke.\",\n ...missingRelations.length === 0 ? [] : [`Configured target is missing ${missingRelations.length} Community schema sentinel relation(s).`]\n ]\n };\n } finally {\n await pool.end().catch(() => void 0);\n }\n}\nlet activeProbe = null;\nasync function testRuntimeConfigAdminTarget(processEnv = process.env) {\n if (activeProbe) return activeProbe;\n activeProbe = runRuntimeConfigAdminTargetProbe(processEnv);\n try {\n return await activeProbe;\n } finally {\n activeProbe = null;\n }\n}\nexport {\n getResolvedAopsServerRuntimeConfig as g,\n readRuntimeConfigAdmin as r,\n testRuntimeConfigAdminTarget as t\n};\n"],"names":[],"mappings":"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"}