@harperfast/harper 5.1.0-beta.3 → 5.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 (52) hide show
  1. package/bin/copyDb.ts +16 -3
  2. package/dist/bin/copyDb.js +16 -3
  3. package/dist/bin/copyDb.js.map +1 -1
  4. package/dist/resources/Table.js +43 -4
  5. package/dist/resources/Table.js.map +1 -1
  6. package/dist/resources/databases.js +135 -41
  7. package/dist/resources/databases.js.map +1 -1
  8. package/dist/resources/graphql.js +3 -0
  9. package/dist/resources/graphql.js.map +1 -1
  10. package/dist/resources/replayLogs.d.ts +1 -0
  11. package/dist/resources/replayLogs.js +100 -40
  12. package/dist/resources/replayLogs.js.map +1 -1
  13. package/dist/resources/replayLogsGuards.d.ts +25 -8
  14. package/dist/resources/replayLogsGuards.js +50 -10
  15. package/dist/resources/replayLogsGuards.js.map +1 -1
  16. package/dist/server/nodeName.js +9 -3
  17. package/dist/server/nodeName.js.map +1 -1
  18. package/dist/server/operationsServer.js +20 -0
  19. package/dist/server/operationsServer.js.map +1 -1
  20. package/dist/utility/install/installer.js +12 -6
  21. package/dist/utility/install/installer.js.map +1 -1
  22. package/package.json +3 -3
  23. package/resources/Table.ts +41 -4
  24. package/resources/databases.ts +134 -42
  25. package/resources/graphql.ts +3 -0
  26. package/resources/replayLogs.ts +114 -42
  27. package/resources/replayLogsGuards.ts +58 -9
  28. package/server/nodeName.ts +9 -3
  29. package/server/operationsServer.ts +17 -0
  30. package/studio/web/assets/{Chat-BdFickL8.js → Chat-DMBW4pI2.js} +2 -2
  31. package/studio/web/assets/{Chat-BdFickL8.js.map → Chat-DMBW4pI2.js.map} +1 -1
  32. package/studio/web/assets/{FloatingChat-CaAoco8I.js → FloatingChat-DTmhPsrm.js} +4 -4
  33. package/studio/web/assets/{FloatingChat-CaAoco8I.js.map → FloatingChat-DTmhPsrm.js.map} +1 -1
  34. package/studio/web/assets/{applications-C3y3xwyG.js → applications-CigxJarn.js} +2 -2
  35. package/studio/web/assets/{applications-C3y3xwyG.js.map → applications-CigxJarn.js.map} +1 -1
  36. package/studio/web/assets/{index-Cd3Zh3nK.js → index-oRZw5GW3.js} +6 -6
  37. package/studio/web/assets/index-oRZw5GW3.js.map +1 -0
  38. package/studio/web/assets/{index.lazy-0hLbh5Fo.js → index.lazy-DY3VcR86.js} +4 -4
  39. package/studio/web/assets/{index.lazy-0hLbh5Fo.js.map → index.lazy-DY3VcR86.js.map} +1 -1
  40. package/studio/web/assets/{profile-CwBWGuVt.js → profile-DiV60L50.js} +2 -2
  41. package/studio/web/assets/{profile-CwBWGuVt.js.map → profile-DiV60L50.js.map} +1 -1
  42. package/studio/web/assets/{setComponentFile-Dhrmd8eR.js → setComponentFile-Bz6WI4jy.js} +2 -2
  43. package/studio/web/assets/{setComponentFile-Dhrmd8eR.js.map → setComponentFile-Bz6WI4jy.js.map} +1 -1
  44. package/studio/web/assets/{status-Bykq6QcD.js → status-fW6PBpPM.js} +2 -2
  45. package/studio/web/assets/{status-Bykq6QcD.js.map → status-fW6PBpPM.js.map} +1 -1
  46. package/studio/web/assets/{swagger-ui-react-CF94s29D.js → swagger-ui-react-DRYf7G3J.js} +2 -2
  47. package/studio/web/assets/{swagger-ui-react-CF94s29D.js.map → swagger-ui-react-DRYf7G3J.js.map} +1 -1
  48. package/studio/web/assets/{useEntityRestURL-D7vuaG2W.js → useEntityRestURL-14jWKu9J.js} +2 -2
  49. package/studio/web/assets/{useEntityRestURL-D7vuaG2W.js.map → useEntityRestURL-14jWKu9J.js.map} +1 -1
  50. package/studio/web/index.html +1 -1
  51. package/utility/install/installer.ts +12 -5
  52. package/studio/web/assets/index-Cd3Zh3nK.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{i as e}from"./button-kCMf1ZBL.js";import{C as t,M as n}from"./vendor-tanstack-DmFvmRiZ.js";import{Nt as r,_t as i}from"./index-Cd3Zh3nK.js";function a(e){return new URL(e.match(/^https?:\/\//i)?e:`https://${e}`).toString()}function o(e){if(e?.domains){for(let t of e.domains)if(t.domain)return a(t.domain)}return e?.fqdn?a(e.fqdn):null}function s(){let{clusterId:a,instanceId:s}=t({strict:!1}),c=r(),{data:l}=n(i(a));return a&&e.checkForFabricConnect(a)||s&&e.checkForFabricConnect(s)||l&&!s?o(l):c.defaults.baseURL?c.defaults.baseURL.replace(/:9925\/?/,``):null}export{s as t};
2
- //# sourceMappingURL=useEntityRestURL-D7vuaG2W.js.map
1
+ import{i as e}from"./button-kCMf1ZBL.js";import{C as t,M as n}from"./vendor-tanstack-DmFvmRiZ.js";import{Nt as r,_t as i}from"./index-oRZw5GW3.js";function a(e){return new URL(e.match(/^https?:\/\//i)?e:`https://${e}`).toString()}function o(e){if(e?.domains){for(let t of e.domains)if(t.domain)return a(t.domain)}return e?.fqdn?a(e.fqdn):null}function s(){let{clusterId:a,instanceId:s}=t({strict:!1}),c=r(),{data:l}=n(i(a));return a&&e.checkForFabricConnect(a)||s&&e.checkForFabricConnect(s)||l&&!s?o(l):c.defaults.baseURL?c.defaults.baseURL.replace(/:9925\/?/,``):null}export{s as t};
2
+ //# sourceMappingURL=useEntityRestURL-14jWKu9J.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityRestURL-D7vuaG2W.js","names":[],"sources":["../../src/lib/urls/linkify.ts","../../src/lib/urls/getRestUrlForCluster.ts","../../src/config/useEntityRestURL.ts"],"sourcesContent":["export function linkify(fqdn: string): string {\n\treturn new URL(\n\t\t!fqdn.match(/^https?:\\/\\//i)\n\t\t\t? `https://${fqdn}`\n\t\t\t: fqdn,\n\t).toString();\n}\n","import { Cluster } from '@/integrations/api/api.patch';\nimport { linkify } from '@/lib/urls/linkify';\n\nexport function getRestUrlForCluster(cluster: undefined | Pick<Cluster, 'fqdn' | 'domains'>): string | null {\n\tif (cluster?.domains) {\n\t\tfor (const domain of cluster.domains) {\n\t\t\tif (domain.domain) {\n\t\t\t\treturn linkify(domain.domain);\n\t\t\t}\n\t\t}\n\t}\n\tif (!cluster?.fqdn) {\n\t\treturn null;\n\t}\n\treturn linkify(cluster.fqdn);\n}\n","import { useInstanceClient } from '@/config/useInstanceClient';\nimport { authStore } from '@/features/auth/store/authStore';\nimport { getClusterInfoQueryOptions } from '@/features/cluster/queries/getClusterInfoQuery';\nimport { getRestUrlForCluster } from '@/lib/urls/getRestUrlForCluster';\nimport { useQuery } from '@tanstack/react-query';\nimport { useParams } from '@tanstack/react-router';\n\nexport function useEntityRestURL(): string | null {\n\tconst { clusterId, instanceId }: { clusterId?: string; instanceId?: string } = useParams({ strict: false });\n\tconst instanceClient = useInstanceClient();\n\tconst { data: cluster } = useQuery(\n\t\tgetClusterInfoQueryOptions(clusterId),\n\t);\n\n\tconst isFabricConnect = (!!clusterId && authStore.checkForFabricConnect(clusterId))\n\t\t|| !!instanceId && authStore.checkForFabricConnect(instanceId);\n\tif (isFabricConnect || (cluster && !instanceId)) {\n\t\treturn getRestUrlForCluster(cluster);\n\t} else if (instanceClient.defaults.baseURL) {\n\t\treturn instanceClient.defaults.baseURL.replace(/:9925\\/?/, '');\n\t}\n\treturn null;\n}\n"],"mappings":"mJAAA,SAAgB,EAAQ,EAAsB,CAC7C,OAAO,IAAI,IACT,EAAK,MAAM,eAAe,EAExB,EADA,WAAW,GAEf,EAAE,SAAS,CACZ,CCHA,SAAgB,EAAqB,EAAuE,CAC3G,GAAI,GAAS,aACP,IAAM,KAAU,EAAQ,QAC5B,GAAI,EAAO,OACV,OAAO,EAAQ,EAAO,MAAM,CAAA,CAO/B,OAHK,GAAS,KAGP,EAAQ,EAAQ,IAAI,EAFnB,IAGT,CCRA,SAAgB,GAAkC,CACjD,GAAM,CAAE,YAAW,cAA4D,EAAU,CAAE,OAAQ,EAAM,CAAC,EACpG,EAAiB,EAAkB,EACnC,CAAE,KAAM,GAAY,EACzB,EAA2B,CAAS,CACrC,EASA,OAP2B,GAAa,EAAU,sBAAsB,CAAS,GAC3E,GAAc,EAAU,sBAAsB,CAAU,GACtC,GAAW,CAAC,EAC5B,EAAqB,CAAO,EACzB,EAAe,SAAS,QAC3B,EAAe,SAAS,QAAQ,QAAQ,WAAY,EAAE,EAEvD,IACR"}
1
+ {"version":3,"file":"useEntityRestURL-14jWKu9J.js","names":[],"sources":["../../src/lib/urls/linkify.ts","../../src/lib/urls/getRestUrlForCluster.ts","../../src/config/useEntityRestURL.ts"],"sourcesContent":["export function linkify(fqdn: string): string {\n\treturn new URL(\n\t\t!fqdn.match(/^https?:\\/\\//i)\n\t\t\t? `https://${fqdn}`\n\t\t\t: fqdn,\n\t).toString();\n}\n","import { Cluster } from '@/integrations/api/api.patch';\nimport { linkify } from '@/lib/urls/linkify';\n\nexport function getRestUrlForCluster(cluster: undefined | Pick<Cluster, 'fqdn' | 'domains'>): string | null {\n\tif (cluster?.domains) {\n\t\tfor (const domain of cluster.domains) {\n\t\t\tif (domain.domain) {\n\t\t\t\treturn linkify(domain.domain);\n\t\t\t}\n\t\t}\n\t}\n\tif (!cluster?.fqdn) {\n\t\treturn null;\n\t}\n\treturn linkify(cluster.fqdn);\n}\n","import { useInstanceClient } from '@/config/useInstanceClient';\nimport { authStore } from '@/features/auth/store/authStore';\nimport { getClusterInfoQueryOptions } from '@/features/cluster/queries/getClusterInfoQuery';\nimport { getRestUrlForCluster } from '@/lib/urls/getRestUrlForCluster';\nimport { useQuery } from '@tanstack/react-query';\nimport { useParams } from '@tanstack/react-router';\n\nexport function useEntityRestURL(): string | null {\n\tconst { clusterId, instanceId }: { clusterId?: string; instanceId?: string } = useParams({ strict: false });\n\tconst instanceClient = useInstanceClient();\n\tconst { data: cluster } = useQuery(\n\t\tgetClusterInfoQueryOptions(clusterId),\n\t);\n\n\tconst isFabricConnect = (!!clusterId && authStore.checkForFabricConnect(clusterId))\n\t\t|| !!instanceId && authStore.checkForFabricConnect(instanceId);\n\tif (isFabricConnect || (cluster && !instanceId)) {\n\t\treturn getRestUrlForCluster(cluster);\n\t} else if (instanceClient.defaults.baseURL) {\n\t\treturn instanceClient.defaults.baseURL.replace(/:9925\\/?/, '');\n\t}\n\treturn null;\n}\n"],"mappings":"mJAAA,SAAgB,EAAQ,EAAsB,CAC7C,OAAO,IAAI,IACT,EAAK,MAAM,eAAe,EAExB,EADA,WAAW,GAEf,EAAE,SAAS,CACZ,CCHA,SAAgB,EAAqB,EAAuE,CAC3G,GAAI,GAAS,aACP,IAAM,KAAU,EAAQ,QAC5B,GAAI,EAAO,OACV,OAAO,EAAQ,EAAO,MAAM,CAAA,CAO/B,OAHK,GAAS,KAGP,EAAQ,EAAQ,IAAI,EAFnB,IAGT,CCRA,SAAgB,GAAkC,CACjD,GAAM,CAAE,YAAW,cAA4D,EAAU,CAAE,OAAQ,EAAM,CAAC,EACpG,EAAiB,EAAkB,EACnC,CAAE,KAAM,GAAY,EACzB,EAA2B,CAAS,CACrC,EASA,OAP2B,GAAa,EAAU,sBAAsB,CAAS,GAC3E,GAAc,EAAU,sBAAsB,CAAU,GACtC,GAAW,CAAC,EAC5B,EAAqB,CAAO,EACzB,EAAe,SAAS,QAC3B,EAAe,SAAS,QAAQ,QAAQ,WAAY,EAAE,EAEvD,IACR"}
@@ -21,7 +21,7 @@
21
21
  } catch (e) {}
22
22
  })();
23
23
  </script>
24
- <script type="module" crossorigin src="/assets/index-Cd3Zh3nK.js"></script>
24
+ <script type="module" crossorigin src="/assets/index-oRZw5GW3.js"></script>
25
25
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Cyuzqnbw.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/vendor-datadog-Bq_0f1ke.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/vendor-core-BIhSIGPv.js">
@@ -41,7 +41,13 @@ const ABORT_MSG = 'Aborting install';
41
41
  const PROCESS_HOME = os.homedir();
42
42
  const DEFAULT_HDB_ROOT = path.join(PROCESS_HOME, hdbTerms.HDB_ROOT_DIR_NAME);
43
43
  const DEFAULT_ADMIN_USERNAME = 'admin';
44
- const DEFAULT_NODE_HOSTNAME = 'localhost';
44
+ // Intentionally null (not 'localhost'). Persisting a concrete node.hostname here cements a
45
+ // wrong identity: getThisNodeName() prefers node.hostname over replication.hostname, so a
46
+ // planted 'localhost' makes the node fail to find its own hdb_nodes self-row and silently
47
+ // disable user-DB replication (harper-pro#351 — exposed by in-place v4->v5 upgrades, where
48
+ // the install/migration boot would otherwise default this to 'localhost'). Leaving it unset
49
+ // preserves the working fallback chain (replication.hostname -> cert CN -> listening port).
50
+ const DEFAULT_NODE_HOSTNAME = null;
45
51
  const DEFAULT_CONFIG_MODE = 'dev';
46
52
 
47
53
  const DEV_MODE_CONFIG = {
@@ -270,10 +276,11 @@ async function installPrompts(promptOverride) {
270
276
  name: hdbTerms.INSTALL_PROMPTS.NODE_HOSTNAME,
271
277
  prefix: PROMPT_PREFIX,
272
278
  default: DEFAULT_NODE_HOSTNAME,
273
- validate: (value) => {
274
- if (checkForEmptyValue(value)) return checkForEmptyValue(value);
275
- return true;
276
- },
279
+ // node.hostname is OPTIONAL — an unset value is valid and preferred when the operator
280
+ // hasn't got a stable name to pin (it falls back to replication.hostname / cert CN /
281
+ // listening port). Accept empty/unset rather than forcing a value, which is what used
282
+ // to cement 'localhost' (harper-pro#351).
283
+ validate: () => true,
277
284
  message: HDB_PROMPT_MSG(INSTALL_PROMPTS.NODE_HOSTNAME),
278
285
  },
279
286
  {