diff --git a/package-lock.json b/package-lock.json index a2476d53e9f..5624eb8abd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,6 +63,7 @@ "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/babel": "3.9.2", "@docusaurus/bundler": "3.9.2", @@ -130,6 +131,7 @@ "version": "3.1.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -269,6 +271,7 @@ "version": "1.88.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -495,6 +498,7 @@ "integrity": "sha512-G9I2atg1ShtFp0t7zwleP6aPS4DcZvsV4uoQOripp16aR6VJzbEnKFPLW4OFXzX7avgZSpYeBAS+Zx4FOgmpPw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@algolia/client-common": "5.41.0", "@algolia/requester-browser-xhr": "5.41.0", @@ -710,6 +714,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -837,6 +842,7 @@ "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -2763,7 +2769,8 @@ "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.1.tgz", "integrity": "sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==", "dev": true, - "license": "(Apache-2.0 AND BSD-3-Clause)" + "license": "(Apache-2.0 AND BSD-3-Clause)", + "peer": true }, "node_modules/@chevrotain/cst-dts-gen": { "version": "11.0.3", @@ -2967,6 +2974,7 @@ "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -2982,6 +2990,7 @@ "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.35.0", @@ -3020,6 +3029,7 @@ "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } @@ -3030,6 +3040,7 @@ "integrity": "sha512-yoRo4f+FdnD01fFt4XpfpMCcCAo9QvZOtbrXExn4SqzH32YC6LgzqxfLZw/r6Ge65xyY03mK/UfUqrVw1gFiFg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "style-mod": "^4.1.0", @@ -3053,6 +3064,7 @@ "integrity": "sha512-KchMDNtU4CDTdkyf0qG7ugJ6qHTOR/aI7XebYn3OTCNagaDYWiZUVKgRgwH79yeMkpNgvEUaXSK7wKjaBK9b/Q==", "dev": true, "license": "Apache-2.0", + "peer": true, "peerDependencies": { "@bufbuild/protobuf": "^1.10.0" } @@ -3180,6 +3192,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -3203,6 +3216,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -3317,6 +3331,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3724,6 +3739,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -4463,6 +4479,7 @@ "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -5114,6 +5131,7 @@ "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -7555,6 +7573,7 @@ "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -7702,6 +7721,7 @@ "integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/mdx-loader": "3.9.2", "@docusaurus/module-type-aliases": "3.9.2", @@ -8264,6 +8284,7 @@ "integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/logger": "3.9.2", "@docusaurus/types": "3.9.2", @@ -9944,7 +9965,8 @@ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@lezer/css": { "version": "1.2.0", @@ -11095,7 +11117,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11117,7 +11138,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11139,7 +11159,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11161,7 +11180,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11183,7 +11201,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11205,7 +11222,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11227,7 +11243,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11249,7 +11264,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11271,7 +11285,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11293,7 +11306,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11315,7 +11327,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11337,7 +11348,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -11359,7 +11369,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -12561,8 +12570,7 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.40.2", @@ -12576,8 +12584,7 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.40.2", @@ -12591,8 +12598,7 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.40.2", @@ -12606,8 +12612,7 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.40.2", @@ -12621,8 +12626,7 @@ "optional": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.40.2", @@ -12636,8 +12640,7 @@ "optional": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.40.2", @@ -12651,8 +12654,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.40.2", @@ -12666,8 +12668,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.40.2", @@ -12681,8 +12682,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.40.2", @@ -12696,8 +12696,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { "version": "4.40.2", @@ -12711,8 +12710,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "version": "4.40.2", @@ -12726,8 +12724,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.40.2", @@ -12741,8 +12738,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.40.2", @@ -12756,8 +12752,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.40.2", @@ -12771,8 +12766,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.40.2", @@ -12786,8 +12780,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.40.2", @@ -12801,8 +12794,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.40.2", @@ -12816,8 +12808,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.40.2", @@ -12831,8 +12822,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.40.2", @@ -12846,8 +12836,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@sagold/json-pointer": { "version": "5.1.2", @@ -13181,6 +13170,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -13295,6 +13285,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -13435,6 +13426,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -14635,6 +14627,7 @@ "integrity": "sha512-ZDVMlzgqHuYnY6I2xpgPhlv/5Ndj9MiDQSj52y4DBCqNJI3kiU4ZDYLNeorbuCJKYLJ4Fe1nFyut3zDvEl5BlQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@storybook/client-logger": "7.6.20", "@storybook/core-client": "7.6.20", @@ -14893,6 +14886,7 @@ "integrity": "sha512-kvu4h9qXduiPk1Q1oqFKDLFGu/7mslEYbVaqpbBcBxjlRJnvNCFwEvEwKt0Mx9TtSi8J77xRelvJobrGlst4nQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", @@ -14925,6 +14919,7 @@ "integrity": "sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", "debug": "^4.3.4", @@ -15129,6 +15124,7 @@ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -15350,6 +15346,7 @@ "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -15482,6 +15479,7 @@ "integrity": "sha512-kmS7ZVpHm1EMnW1Wmft9H5ZLM7E0G0NGBx+aGEHGDcNxZBXD2ZUa76CuWjIhOGpwsPbELp684ZdpF2JWoNi4Dg==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -15569,6 +15567,7 @@ "integrity": "sha512-plCQDLCZIOc92cizB8NNhBRN0szvYR3cx9i5IXo6v9Xsgcun8KHNcJkesc2AyeqdIs0BtOJZaqQ9adHThz8UDw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", @@ -16468,6 +16467,7 @@ "integrity": "sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -16773,6 +16773,7 @@ "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/types": "8.32.1", @@ -16894,6 +16895,7 @@ "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.32.1", @@ -17523,6 +17525,7 @@ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -17593,6 +17596,7 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -17662,6 +17666,7 @@ "integrity": "sha512-9E4b3rJmYbBkn7e3aAPt1as+VVnRhsR4qwRRgOzpeyz4PAOuwKh0HI4AN6mTrqK0S0M9fCCSTOUnuJ8gPY/tvA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@algolia/abtesting": "1.7.0", "@algolia/client-abtesting": "5.41.0", @@ -18894,6 +18899,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -19391,6 +19397,7 @@ "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", @@ -19491,19 +19498,6 @@ "consola": "^3.2.3" } }, - "node_modules/class-validator": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.2.tgz", - "integrity": "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.11.1", - "validator": "^13.9.0" - } - }, "node_modules/classcat": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", @@ -20455,6 +20449,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -20797,6 +20792,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -21179,6 +21175,7 @@ "integrity": "sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10" } @@ -21511,7 +21508,6 @@ "integrity": "sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "commander": "7", "d3-array": "1 - 3", @@ -21534,7 +21530,6 @@ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 10" } @@ -21691,6 +21686,7 @@ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -23399,6 +23395,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -23525,6 +23522,7 @@ "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -24483,8 +24481,7 @@ "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -28090,6 +28087,7 @@ "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 10.16.0" } @@ -28493,14 +28491,6 @@ "@lezer/lr": "^1.0.0" } }, - "node_modules/libphonenumber-js": { - "version": "1.12.8", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.8.tgz", - "integrity": "sha512-f1KakiQJa9tdc7w1phC2ST+DyxWimy9c3g3yeF+84QtEanJr2K77wAmBPP22riU05xldniHsvXuflnLZ4oysqA==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -32002,6 +31992,7 @@ "integrity": "sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -33816,6 +33807,7 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8.6" }, @@ -34019,6 +34011,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -34683,6 +34676,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "lilconfig": "^3.1.1" }, @@ -35090,6 +35084,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -35787,6 +35782,7 @@ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -36161,6 +36157,7 @@ "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "orderedmap": "^2.0.0" } @@ -36193,6 +36190,7 @@ "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", @@ -36245,6 +36243,7 @@ "integrity": "sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", @@ -36700,6 +36699,7 @@ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -36724,6 +36724,7 @@ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -36785,6 +36786,7 @@ "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/react": "*" }, @@ -36864,6 +36866,7 @@ "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -38578,29 +38581,6 @@ "rimraf": "bin.js" } }, - "node_modules/sass": { - "version": "1.91.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.91.0.tgz", - "integrity": "sha512-aFOZHGf+ur+bp1bCHZ+u8otKGh77ZtmFyXDo4tlYvT7PWql41Kwd8wdkPqhhT+h2879IVblcHFglIMofsFd1EA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, "node_modules/sass-loader": { "version": "16.0.5", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", @@ -38642,40 +38622,6 @@ } } }, - "node_modules/sass/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/sass/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", @@ -38739,6 +38685,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -39862,6 +39809,7 @@ "integrity": "sha512-Wt04pPTO71pwmRmsgkyZhNo4Bvdb/1pBAMsIFb9nQLykEdzzpXjvingxFFvdOG4nIowzwgxD+CLlyRqVJqnATw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@storybook/cli": "7.6.20" }, @@ -40216,6 +40164,7 @@ "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@emotion/is-prop-valid": "1.2.2", "@emotion/unitless": "0.8.1", @@ -40401,6 +40350,7 @@ "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -41480,6 +41430,7 @@ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -42237,6 +42188,7 @@ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -42347,7 +42299,6 @@ "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "commander": "2" }, @@ -42362,8 +42313,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/toposort": { "version": "2.0.2", @@ -42664,7 +42614,8 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsx": { "version": "4.19.4", @@ -42672,6 +42623,7 @@ "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -43266,6 +43218,7 @@ "integrity": "sha512-xKvKpIywE1rnqqLgjkoq0F3wOqYaKO9nV6YkkSat6IxOWacUCc/7Es0hR3OPmkIqkPoEn7U3x+sYdG72rstZQA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@gerrit0/mini-shiki": "^3.2.2", "lunr": "^2.3.9", @@ -43303,6 +43256,7 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -44106,8 +44060,7 @@ "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.7.tgz", "integrity": "sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/vega-crossfilter": { "version": "4.1.3", @@ -44115,7 +44068,6 @@ "integrity": "sha512-nyPJAXAUABc3EocUXvAL1J/IWotZVsApIcvOeZaUdEQEtZ7bt8VtP2nj3CLbHBA8FZZVV+K6SmdwvCOaAD4wFQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "vega-dataflow": "^5.7.7", @@ -44128,7 +44080,6 @@ "integrity": "sha512-R2NX2HvgXL+u4E6u+L5lKvvRiCtnE6N6l+umgojfi53suhhkFP+zB+2UAQo4syxuZ4763H1csfkKc4xpqLzKnw==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-format": "^1.1.3", "vega-loader": "^4.5.3", @@ -44141,7 +44092,6 @@ "integrity": "sha512-ZHQPWSs9mUTGJPZ5yQVhHV+OLDCoTIjR//De93vG6igZX1MQCVo03ePWlfWCUAnPV1IsKfeJLqA3K/Qd11bAFQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "fast-json-patch": "^3.1.1", "json-stringify-pretty-compact": "^4.0.0", @@ -44166,7 +44116,6 @@ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -44180,7 +44129,6 @@ "integrity": "sha512-fsjEY1VaBAmqwt7Jlpz0dpPtfQFiBdP9igEefvumSpy7XUxOJmDQcRDnT3Qh9ctkv3itfPfI9g8FSnGcv2b4jQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "d3-interpolate": "^3.0.1", @@ -44213,7 +44161,6 @@ "integrity": "sha512-cHZVaY2VNNIG2RyihhSiWniPd2W9R9kJq0znxzV602CgUVgxEfTKtx/lxnVCn8nNrdKAYrGiqIsBzIeKG1GWHw==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-force": "^3.0.0", "vega-dataflow": "^5.7.7", @@ -44226,7 +44173,6 @@ "integrity": "sha512-wQhw7KR46wKJAip28FF/CicW+oiJaPAwMKdrxlnTA0Nv8Bf7bloRlc+O3kON4b4H1iALLr9KgRcYTOeXNs2MOA==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "d3-format": "^3.1.0", @@ -44241,7 +44187,6 @@ "integrity": "sha512-+D+ey4bDAhZA2CChh7bRZrcqRUDevv05kd2z8xH+il7PbYQLrhi6g1zwvf8z3KpgGInFf5O13WuFK5DQGkz5lQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "d3-color": "^3.1.0", @@ -44262,7 +44207,6 @@ "integrity": "sha512-+WnnzEPKIU1/xTFUK3EMu2htN35gp9usNZcC0ZFg2up1/Vqu6JyZsX0PIO51oXSIeXn9bwk6VgzlOmJUcx92tA==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "d3-color": "^3.1.0", @@ -44280,7 +44224,6 @@ "integrity": "sha512-0Z+TYKRgOEo8XYXnJc2HWg1EGpcbNAhJ9Wpi9ubIbEyEHqIgjCIyFVN8d4nSfsJOcWDzsSmRqohBztxAhOCSaw==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-hierarchy": "^3.1.2", "vega-dataflow": "^5.7.7", @@ -44310,7 +44253,6 @@ "integrity": "sha512-Emx4b5s7pvuRj3fBkAJ/E2snCoZACfKAwxVId7f/4kYVlAYLb5Swq6W8KZHrH4M9Qds1XJRUYW9/Y3cceqzEFA==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-canvas": "^1.2.7", "vega-dataflow": "^5.7.7", @@ -44324,6 +44266,7 @@ "integrity": "sha512-l4J6+AWE3DIjvovEoHl2LdtCUkfm4zs8Xxx7INwZEAv+XVb6kR6vIN1gt3t2gN2gs/y4DYTs/RPoTeYAuEg6mA==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "json-stringify-pretty-compact": "~4.0.0", "tslib": "~2.8.1", @@ -44362,7 +44305,6 @@ "integrity": "sha512-dUfIpxTLF2magoMaur+jXGvwMxjtdlDZaIS8lFj6N7IhUST6nIvBzuUlRM+zLYepI5GHtCLOnqdKU4XV0NggCA==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-dsv": "^3.0.1", "node-fetch": "^2.6.7", @@ -44377,7 +44319,6 @@ "integrity": "sha512-jltyrwCTtWeidi/6VotLCybhIl+ehwnzvFWYOdWNUP0z/EskdB64YmawNwjCjzTBMemeiQtY6sJPPbewYqe3Vg==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-dataflow": "^5.7.7", "vega-event-selector": "^3.0.1", @@ -44392,7 +44333,6 @@ "integrity": "sha512-3pcVaQL9R3Zfk6PzopLX6awzrQUeYOXJzlfLGP2Xd93mqUepBa6m/reVrTUoSFXA3v9lfK4W/PS2AcVzD/MIcQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-geo": "^3.1.0", "d3-geo-projection": "^4.0.0", @@ -44405,7 +44345,6 @@ "integrity": "sha512-AmccF++Z9uw4HNZC/gmkQGe6JsRxTG/R4QpbcSepyMvQN1Rj5KtVqMcmVFP1r3ivM4dYGFuPlzMWvuqp0iKMkQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "vega-dataflow": "^5.7.7", @@ -44419,7 +44358,6 @@ "integrity": "sha512-b4eot3tWKCk++INWqot+6sLn3wDTj/HE+tRSbiaf8aecuniPMlwJEK7wWuhVGeW2Ae5n8fI/8TeTViaC94bNHA==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-dataflow": "^5.7.7", "vega-util": "^1.17.3" @@ -44431,7 +44369,6 @@ "integrity": "sha512-o6Hl76aU1jlCK7Q8DPYZ8OGsp4PtzLdzI6nGpLt8rxoE78QuB3GBGEwGAQJitp4IF7Lb2rL5oAXEl3ZP6xf9jg==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "d3-interpolate": "^3.0.1", @@ -44447,7 +44384,6 @@ "integrity": "sha512-LFY9+sLIxRfdDI9ZTKjLoijMkIAzPLBWHpPkwv4NPYgdyx+0qFmv+puBpAUGUY9VZqAZ736Uj5NJY9zw+/M3yQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-path": "^3.1.0", "d3-shape": "^3.2.0", @@ -44462,8 +44398,7 @@ "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-3.0.2.tgz", "integrity": "sha512-xAnR7KAvNPYewI3O0l5QGdT8Tv0+GCZQjqfP39cW/hbe/b3aYMAQ39vm8O2wfXUHzm04xTe7nolcsx8WQNVLRQ==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/vega-selections": { "version": "5.6.0", @@ -44471,7 +44406,6 @@ "integrity": "sha512-UE2w78rUUbaV3Ph+vQbQDwh8eywIJYRxBiZdxEG/Tr/KtFMLdy2BDgNZuuDO1Nv8jImPJwONmqjNhNDYwM0VJQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "3.2.4", "vega-expression": "^5.2.0", @@ -44484,7 +44418,6 @@ "integrity": "sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2" } @@ -44495,7 +44428,6 @@ "integrity": "sha512-1iFiI3BNmW9FrsLnDLx0ZKEddsCitRY3XmUAwp6qmp+p+IXyJYc9pfjlVj9E6KXBPfm4cQyU++s0smKNiWzO4g==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "funding": { "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" }, @@ -44510,7 +44442,6 @@ "integrity": "sha512-hFcWPdTV844IiY0m97+WUoMLADCp+8yUQR1NStWhzBzwDDA7QEGGwYGxALhdMOaDTwkyoNj3V/nox2rQAJD/vQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "d3-time": "^3.1.0", @@ -44523,7 +44454,6 @@ "integrity": "sha512-P1R0JP29v0qnTuwzCQ0SPJlkjAzr6qeyj+H4VgUFSykHmHc1OBxda//XBaFDl/bZgIscEMvjKSjZpXd84x3aZQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-util": "^2.0.0" }, @@ -44536,8 +44466,7 @@ "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-2.0.0.tgz", "integrity": "sha512-/ayLYX3VVqfkKJB1mG+xkOKiBVlfFZ9BfUB5vf7eVyIRork24sABXdeH4x+XeWuqDKnLBTDedotA+1a5MxlV2Q==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/vega-transforms": { "version": "4.12.1", @@ -44545,7 +44474,6 @@ "integrity": "sha512-Qxo+xeEEftY1jYyKgzOGc9NuW4/MqGm1YPZ5WrL9eXg2G0410Ne+xL/MFIjHF4hRX+3mgFF4Io2hPpfy/thjLg==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "vega-dataflow": "^5.7.7", @@ -44587,7 +44515,6 @@ "integrity": "sha512-Nxp1MEAY+8bphIm+7BeGFzWPoJnX9+hgvze6wqCAPoM69YiyVR0o0VK8M2EESIL+22+Owr0Fdy94hWHnmon5tQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "^3.2.2", "d3-timer": "^3.0.1", @@ -44605,7 +44532,6 @@ "integrity": "sha512-RYlyMJu5kZV4XXjmyTQKADJWDB25SMHsiF+B1rbE1p+pmdQPlp5tGdPl9r5dUJOp3p8mSt/NGI8GPGucmPMxtw==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-dataflow": "^5.7.7", "vega-scenegraph": "^4.13.1", @@ -44618,7 +44544,6 @@ "integrity": "sha512-lWNimgJAXGeRFu2Pz8axOUqVf1moYhD+5yhBzDSmckE9I5jLOyZc/XvgFTXwFnsVkMd1QW1vxJa+y9yfUblzYw==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-delaunay": "^6.0.2", "vega-dataflow": "^5.7.7", @@ -44631,7 +44556,6 @@ "integrity": "sha512-lFmF3u9/ozU0P+WqPjeThQfZm0PigdbXDwpIUCxczrCXKYJLYFmZuZLZR7cxtmpZ0/yuvRvAJ4g123LXbSZF8A==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-canvas": "^1.2.7", "vega-dataflow": "^5.7.7", @@ -44691,6 +44615,7 @@ "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -44788,7 +44713,6 @@ "os": [ "aix" ], - "peer": true, "engines": { "node": ">=12" } @@ -44806,7 +44730,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } @@ -44824,7 +44747,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } @@ -44842,7 +44764,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } @@ -44860,7 +44781,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=12" } @@ -44878,7 +44798,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=12" } @@ -44896,7 +44815,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=12" } @@ -44914,7 +44832,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=12" } @@ -44932,7 +44849,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -44950,7 +44866,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -44968,7 +44883,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -44986,7 +44900,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -45004,7 +44917,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -45022,7 +44934,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -45040,7 +44951,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -45058,7 +44968,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -45076,7 +44985,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } @@ -45094,7 +45002,6 @@ "os": [ "netbsd" ], - "peer": true, "engines": { "node": ">=12" } @@ -45112,7 +45019,6 @@ "os": [ "openbsd" ], - "peer": true, "engines": { "node": ">=12" } @@ -45130,7 +45036,6 @@ "os": [ "sunos" ], - "peer": true, "engines": { "node": ">=12" } @@ -45148,7 +45053,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } @@ -45166,7 +45070,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } @@ -45184,7 +45087,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } @@ -45644,6 +45546,7 @@ "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -46793,6 +46696,7 @@ "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/web-admin/src/client/gen/default/default.ts b/web-admin/src/client/gen/default/default.ts index 7b0516e954b..8834a510b85 100644 --- a/web-admin/src/client/gen/default/default.ts +++ b/web-admin/src/client/gen/default/default.ts @@ -278,7 +278,7 @@ import type { V1UpdateUserPreferencesResponse, } from "../index.schemas"; -import { httpClient } from "../../http-client"; +import httpClient from "../../http-client"; type AwaitedInput = PromiseLike | T; diff --git a/web-admin/src/features/alerts/CreateAlert.svelte b/web-admin/src/features/alerts/CreateAlert.svelte index acbfde64eea..8ee3d972f63 100644 --- a/web-admin/src/features/alerts/CreateAlert.svelte +++ b/web-admin/src/features/alerts/CreateAlert.svelte @@ -10,10 +10,10 @@ import AlertForm from "@rilldata/web-common/features/alerts/AlertForm.svelte"; import { useMetricsViewValidSpec } from "@rilldata/web-common/features/dashboards/selectors"; import { getStateManagers } from "@rilldata/web-common/features/dashboards/state-managers/state-managers"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { BellPlusIcon } from "lucide-svelte"; const { + instanceId, selectors: { timeRangeSelectors: { isCustomTimeRange }, }, @@ -22,8 +22,6 @@ dashboardStore, } = getStateManagers(); - $: ({ instanceId } = $runtime); - $: metricsView = useMetricsViewValidSpec(instanceId, $metricsViewName); $: hasTimeDimension = !!$metricsView?.data?.timeDimension; diff --git a/web-admin/src/features/alerts/history/AlertHistoryTable.svelte b/web-admin/src/features/alerts/history/AlertHistoryTable.svelte index 9261ba5d91a..5a357e0c22e 100644 --- a/web-admin/src/features/alerts/history/AlertHistoryTable.svelte +++ b/web-admin/src/features/alerts/history/AlertHistoryTable.svelte @@ -4,13 +4,13 @@ import { useAlert } from "@rilldata/web-admin/features/alerts/selectors"; import ResourceList from "@rilldata/web-admin/features/resources/ResourceList.svelte"; import type { V1AlertExecution } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { ColumnDef } from "@tanstack/svelte-table"; import { flexRender } from "@tanstack/svelte-table"; export let alert: string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: alertQuery = useAlert(instanceId, alert); diff --git a/web-admin/src/features/alerts/metadata/AlertFilters.svelte b/web-admin/src/features/alerts/metadata/AlertFilters.svelte index 996d4e10d31..1707da7cdb7 100644 --- a/web-admin/src/features/alerts/metadata/AlertFilters.svelte +++ b/web-admin/src/features/alerts/metadata/AlertFilters.svelte @@ -13,10 +13,12 @@ V1Expression, V1TimeRange, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { flip } from "svelte/animate"; import { fly } from "svelte/transition"; + const instanceId = httpClient.getInstanceId(); + export let metricsViewName: string; export let filters: V1Expression | undefined; export let dimensionsWithInlistFilter: string[]; @@ -36,7 +38,6 @@ whereFilter = dimensionFilters; havingFilter = dimensionThresholdFilters; } - $: ({ instanceId } = $runtime); $: metricsView = useMetricsView(instanceId, metricsViewName); $: dimensionIdMap = getMapFromArray( diff --git a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte index 5a331123638..9d0328256e5 100644 --- a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte +++ b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte @@ -31,14 +31,14 @@ getRuntimeServiceListResourcesQueryKey, type V1MetricsViewAggregationRequest, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { useQueryClient } from "@tanstack/svelte-query"; export let organization: string; export let project: string; export let alert: string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: alertQuery = useAlert(instanceId, alert); $: isAlertCreatedByCode = useIsAlertCreatedByCode(instanceId, alert); diff --git a/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte b/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte index e26a10d631c..9fd63ad8f9a 100644 --- a/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte +++ b/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte @@ -36,7 +36,7 @@ import { createForm } from "svelte-forms-lib"; import * as yup from "yup"; import type { Interval } from "luxon"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { getCanvasStore } from "@rilldata/web-common/features/canvas/state-managers/state-managers"; import CanvasFilterChipsReadOnly from "@rilldata/web-common/features/dashboards/filters/CanvasFilterChipsReadOnly.svelte"; @@ -53,7 +53,7 @@ let filterState: undefined | Awaited> = undefined; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ name: resourceName, kind: resourceKind } = resource); diff --git a/web-admin/src/features/bookmarks/CanvasBookmarks.svelte b/web-admin/src/features/bookmarks/CanvasBookmarks.svelte index 30cfa28afcb..41fe03f67a6 100644 --- a/web-admin/src/features/bookmarks/CanvasBookmarks.svelte +++ b/web-admin/src/features/bookmarks/CanvasBookmarks.svelte @@ -3,14 +3,14 @@ import { getCanvasCategorisedBookmarks } from "@rilldata/web-admin/features/bookmarks/selectors.ts"; import { useCanvas } from "@rilldata/web-common/features/canvas/selector"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.ts"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { writable } from "svelte/store"; export let organization: string; export let project: string; export let canvasName: string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); const orgAndProjectNameStore = writable({ organization, project }); $: orgAndProjectNameStore.set({ organization, project }); diff --git a/web-admin/src/features/dashboards/listing/DashboardsTable.svelte b/web-admin/src/features/dashboards/listing/DashboardsTable.svelte index fd0813f7803..e91ed9f6998 100644 --- a/web-admin/src/features/dashboards/listing/DashboardsTable.svelte +++ b/web-admin/src/features/dashboards/listing/DashboardsTable.svelte @@ -8,7 +8,7 @@ import { resourceColorMapping } from "@rilldata/web-common/features/entity-management/resource-icon-mapping"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors"; import type { V1Resource } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { flexRender } from "@tanstack/svelte-table"; import DashboardsTableCompositeCell from "./DashboardsTableCompositeCell.svelte"; import { useDashboards } from "./selectors"; @@ -19,7 +19,7 @@ const exploreColor = resourceColorMapping[ResourceKind.Explore]; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ params: { organization, project }, } = $page); diff --git a/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte b/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte index ab49176f914..2cdff33ea07 100644 --- a/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte +++ b/web-admin/src/features/dashboards/listing/LastRefreshedDate.svelte @@ -2,12 +2,12 @@ import Tooltip from "@rilldata/web-common/components/tooltip/Tooltip.svelte"; import TooltipContent from "@rilldata/web-common/components/tooltip/TooltipContent.svelte"; import { createRuntimeServiceGetExplore } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { timeAgo } from "./utils"; export let dashboard: string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: lastRefreshedQuery = createRuntimeServiceGetExplore( instanceId, diff --git a/web-admin/src/features/dashboards/listing/selectors.ts b/web-admin/src/features/dashboards/listing/selectors.ts index 7f28a786b57..3a546c84320 100644 --- a/web-admin/src/features/dashboards/listing/selectors.ts +++ b/web-admin/src/features/dashboards/listing/selectors.ts @@ -42,6 +42,7 @@ export function useDashboards( select: (data) => { return data.resources.filter((res) => res.canvas || res.explore); }, + enabled: !!instanceId, refetchInterval: createSmartRefetchInterval, }, }); diff --git a/web-admin/src/features/navigation/TopNavigationBar.svelte b/web-admin/src/features/navigation/TopNavigationBar.svelte index 16474fe49d2..7aeb730b5cf 100644 --- a/web-admin/src/features/navigation/TopNavigationBar.svelte +++ b/web-admin/src/features/navigation/TopNavigationBar.svelte @@ -12,7 +12,7 @@ import StateManagersProvider from "@rilldata/web-common/features/dashboards/state-managers/StateManagersProvider.svelte"; import { useExplore } from "@rilldata/web-common/features/explores/selectors"; import { featureFlags } from "@rilldata/web-common/features/feature-flags"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { createAdminServiceGetCurrentUser, createAdminServiceListOrganizations as listOrgs, @@ -49,7 +49,7 @@ const user = createAdminServiceGetCurrentUser(); const { alerts: alertsFlag, dimensionSearch, dashboardChat } = featureFlags; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); // These can be undefined $: ({ diff --git a/web-admin/src/features/organizations/selectors.ts b/web-admin/src/features/organizations/selectors.ts index 896d3a25a0d..4a4d72b0025 100644 --- a/web-admin/src/features/organizations/selectors.ts +++ b/web-admin/src/features/organizations/selectors.ts @@ -12,7 +12,9 @@ import type { FetchQueryOptions } from "@tanstack/query-core"; export function areAllProjectsHibernating(organization: string) { return createAdminServiceListProjectsForOrganization( organization, - undefined, + { + pageSize: 100, + }, { query: { enabled: !!organization, @@ -26,8 +28,14 @@ export function areAllProjectsHibernating(organization: string) { export async function fetchAllProjectsHibernating(organization: string) { const projectsResp = await queryClient.fetchQuery({ - queryKey: getAdminServiceListProjectsForOrganizationQueryKey(organization), - queryFn: () => adminServiceListProjectsForOrganization(organization), + queryKey: getAdminServiceListProjectsForOrganizationQueryKey(organization, { + pageSize: 100, + }), + queryFn: () => + adminServiceListProjectsForOrganization(organization, { + pageSize: 100, + }), + staleTime: Infinity, }); return projectsResp.projects?.every((p) => !p.primaryDeploymentId) ?? false; diff --git a/web-admin/src/features/projects/download-report.ts b/web-admin/src/features/projects/download-report.ts index 6e8c38fed67..dc2e9fcc5a6 100644 --- a/web-admin/src/features/projects/download-report.ts +++ b/web-admin/src/features/projects/download-report.ts @@ -4,13 +4,13 @@ import { createQueryServiceExportReport, type RpcStatus, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { createMutation, type CreateMutationOptions, } from "@tanstack/svelte-query"; import type { MutationFunction } from "@tanstack/svelte-query"; import { get } from "svelte/store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; export type DownloadReportRequest = { instanceId: string; @@ -48,7 +48,7 @@ export function createDownloadReportMutation< originBaseUrl: data.originBaseUrl, }, }); - const downloadUrl = `${get(runtime).host}${exportResp.downloadUrlPath}`; + const downloadUrl = `${httpClient.getHost()}${exportResp.downloadUrlPath}`; window.open(downloadUrl, "_self"); }; diff --git a/web-admin/src/features/projects/github/ProjectGithubConnection.svelte b/web-admin/src/features/projects/github/ProjectGithubConnection.svelte index da0d80c3d33..d9c5a5f996e 100644 --- a/web-admin/src/features/projects/github/ProjectGithubConnection.svelte +++ b/web-admin/src/features/projects/github/ProjectGithubConnection.svelte @@ -8,12 +8,12 @@ getRepoNameFromGitRemote, getGitUrlFromRemote, } from "@rilldata/web-common/features/project/deploy/github-utils"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; export let organization: string; export let project: string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: proj = createAdminServiceGetProject(organization, project); $: ({ diff --git a/web-admin/src/features/projects/selectors.ts b/web-admin/src/features/projects/selectors.ts index 92b04790a2c..3c431a78f5a 100644 --- a/web-admin/src/features/projects/selectors.ts +++ b/web-admin/src/features/projects/selectors.ts @@ -20,7 +20,6 @@ import { useResourceV2, } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { derived, type Readable } from "svelte/store"; export function getProjectPermissions(orgName: string, projName: string) { @@ -134,18 +133,7 @@ export async function fetchProjectDeploymentDetails( queryFn, }); - return { - projectPermissions: projResp.projectPermissions, - project: projResp.project, - runtime: { - host: projResp.prodDeployment?.runtimeHost, - instanceId: projResp.prodDeployment?.runtimeInstanceId, - jwt: { - token: projResp.jwt, - authContext: token ? "magic" : "user", - }, - }, - }; + return projResp; } export function useGithubLastSynced(instanceId: string) { diff --git a/web-admin/src/features/projects/status/ProjectGlobalStatusIndicator.svelte b/web-admin/src/features/projects/status/ProjectGlobalStatusIndicator.svelte index ebc1d7bbeca..eeb87ede920 100644 --- a/web-admin/src/features/projects/status/ProjectGlobalStatusIndicator.svelte +++ b/web-admin/src/features/projects/status/ProjectGlobalStatusIndicator.svelte @@ -5,16 +5,14 @@ import LoadingSpinner from "@rilldata/web-common/components/icons/LoadingSpinner.svelte"; import { useProjectParser } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { createRuntimeServiceListResources } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; - import { useQueryClient } from "@tanstack/svelte-query"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; + import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import { useProjectDeployment } from "./selectors"; - const queryClient = useQueryClient(); - export let organization: string; export let project: string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: projectDeployment = useProjectDeployment(organization, project); $: ({ data: deployment } = $projectDeployment); @@ -34,6 +32,7 @@ }, refetchOnMount: true, refetchOnWindowFocus: true, + enabled: !!instanceId, }, }, ); diff --git a/web-admin/src/features/projects/status/ProjectParseErrors.svelte b/web-admin/src/features/projects/status/ProjectParseErrors.svelte index ad3e75e8ea4..663ad6c0b65 100644 --- a/web-admin/src/features/projects/status/ProjectParseErrors.svelte +++ b/web-admin/src/features/projects/status/ProjectParseErrors.svelte @@ -6,9 +6,9 @@ } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { EntityStatus } from "@rilldata/web-common/features/entity-management/types"; import { createRuntimeServiceGetResource } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: projectParserQuery = createRuntimeServiceGetResource( instanceId, diff --git a/web-admin/src/features/projects/status/ProjectResources.svelte b/web-admin/src/features/projects/status/ProjectResources.svelte index 0c2bab74206..ba3b1828670 100644 --- a/web-admin/src/features/projects/status/ProjectResources.svelte +++ b/web-admin/src/features/projects/status/ProjectResources.svelte @@ -4,7 +4,7 @@ createRuntimeServiceCreateTrigger, getRuntimeServiceListResourcesQueryKey, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { useQueryClient } from "@tanstack/svelte-query"; import Button from "web-common/src/components/button/Button.svelte"; import ProjectResourcesTable from "./ProjectResourcesTable.svelte"; @@ -17,7 +17,7 @@ let isConfirmDialogOpen = false; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: resources = useResources(instanceId); diff --git a/web-admin/src/features/projects/status/ProjectResourcesTable.svelte b/web-admin/src/features/projects/status/ProjectResourcesTable.svelte index 4b2517a74a2..d1de50f8744 100644 --- a/web-admin/src/features/projects/status/ProjectResourcesTable.svelte +++ b/web-admin/src/features/projects/status/ProjectResourcesTable.svelte @@ -8,7 +8,7 @@ V1ReconcileStatus, type V1Resource, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { useQueryClient } from "@tanstack/svelte-query"; import type { ColumnDef } from "@tanstack/svelte-table"; import { flexRender } from "@tanstack/svelte-table"; @@ -25,6 +25,8 @@ let dialogResourceKind = ""; let dialogRefreshType: "full" | "incremental" = "full"; + const instanceId = httpClient.getInstanceId(); + let openDropdownResourceKey = ""; const createTrigger = createRuntimeServiceCreateTrigger(); @@ -56,7 +58,7 @@ const handleRefresh = async () => { if (dialogResourceKind === ResourceKind.Model) { await $createTrigger.mutateAsync({ - instanceId: $runtime.instanceId, + instanceId: instanceId, data: { models: [ { @@ -68,7 +70,7 @@ }); } else { await $createTrigger.mutateAsync({ - instanceId: $runtime.instanceId, + instanceId: instanceId, data: { resources: [{ kind: dialogResourceKind, name: dialogResourceName }], }, @@ -76,10 +78,7 @@ } await queryClient.invalidateQueries({ - queryKey: getRuntimeServiceListResourcesQueryKey( - $runtime.instanceId, - undefined, - ), + queryKey: getRuntimeServiceListResourcesQueryKey(instanceId, undefined), }); closeRefreshDialog(); diff --git a/web-admin/src/features/scheduled-reports/history/ReportHistoryTable.svelte b/web-admin/src/features/scheduled-reports/history/ReportHistoryTable.svelte index e0334eed435..bfcfd2044df 100644 --- a/web-admin/src/features/scheduled-reports/history/ReportHistoryTable.svelte +++ b/web-admin/src/features/scheduled-reports/history/ReportHistoryTable.svelte @@ -1,7 +1,7 @@ @@ -127,36 +132,42 @@ -
- - {#if !hideBillingManager} - - {/if} - {#if !isEmbed && !hideTopBar} - - - {#if withinOnlyOrg} - + {#key instanceId} +
+ + {#if !hideBillingManager} + + {/if} + {#if !isEmbed && !hideTopBar} + + + {#if withinOnlyOrg} + + {/if} {/if} - {/if} - - - -
+ + + +
+ {/key}
diff --git a/web-admin/src/routes/+layout.ts b/web-admin/src/routes/+layout.ts index 539ea2d20a7..79fe9595e17 100644 --- a/web-admin/src/routes/+layout.ts +++ b/web-admin/src/routes/+layout.ts @@ -23,10 +23,11 @@ import { fetchProjectDeploymentDetails } from "@rilldata/web-admin/features/proj import { getOrgWithBearerToken } from "@rilldata/web-admin/features/public-urls/get-org-with-bearer-token"; import { initPosthog } from "@rilldata/web-common/lib/analytics/posthog"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { error, redirect, type Page } from "@sveltejs/kit"; import { isAxiosError } from "axios"; import { Settings } from "luxon"; +import { type AuthContext } from "@rilldata/web-common/runtime-client/runtime-store.js"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; Settings.defaultLocale = "en"; @@ -123,26 +124,25 @@ export const load = async ({ params, url, route, depends }) => { organizationFaviconUrl, organizationThumbnailUrl, planDisplayName, - projectPermissions: {}, token, organization, }; } try { - const { - projectPermissions, - project: proj, - runtime: runtimeData, - } = await fetchProjectDeploymentDetails(organization, project, token); - - await runtime.setRuntime( - queryClient, - runtimeData.host ?? "", - runtimeData.instanceId, - runtimeData.jwt?.token, - runtimeData.jwt?.authContext, + const resp = await fetchProjectDeploymentDetails( + organization, + project, + token, ); + const instanceId = resp.prodDeployment?.runtimeInstanceId; + + await httpClient.updateQuerySettings({ + instanceId, + host: resp.prodDeployment?.runtimeHost, + token: resp.jwt, + authContext: token ? ("magic" as AuthContext) : ("user" as AuthContext), + }); return { user, @@ -151,11 +151,10 @@ export const load = async ({ params, url, route, depends }) => { organizationFaviconUrl, organizationThumbnailUrl, planDisplayName, - projectPermissions, token, - project: proj, - runtime: runtimeData, + project: resp, organization, + authContext: token ? ("magic" as AuthContext) : ("user" as AuthContext), }; } catch (e) { if (!isAxiosError(e) || !e.response) { diff --git a/web-admin/src/routes/-/embed/+layout.svelte b/web-admin/src/routes/-/embed/+layout.svelte index 86636872ca7..175730ff12e 100644 --- a/web-admin/src/routes/-/embed/+layout.svelte +++ b/web-admin/src/routes/-/embed/+layout.svelte @@ -21,12 +21,8 @@ import type { PageData } from "./$types"; export let data: PageData; - const { - instanceId, - missingRequireParams, - navigationEnabled, - } = data; + const { instanceId, missingRequireParams, navigationEnabled } = data; const { dashboardChat } = featureFlags; diff --git a/web-admin/src/routes/-/embed/+layout.ts b/web-admin/src/routes/-/embed/+layout.ts index 58f66473381..096bd6c19c4 100644 --- a/web-admin/src/routes/-/embed/+layout.ts +++ b/web-admin/src/routes/-/embed/+layout.ts @@ -2,8 +2,7 @@ import { EmbedStore } from "@rilldata/web-common/features/embeds/embed-store.ts" import { removeEmbedParams } from "@rilldata/web-admin/features/embeds/init-embed-public-api.ts"; import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.ts"; import { redirect } from "@sveltejs/kit"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; -import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; +import httpClient from "@rilldata/web-common/runtime-client/http-client.js"; export const load = async ({ url }) => { const embedStore = EmbedStore.getInstance(); @@ -36,13 +35,12 @@ export const load = async ({ url }) => { visibleExplores, } = embedStore; - await runtime.setRuntime( - queryClient, - runtimeHost, + await httpClient.updateQuerySettings({ instanceId, - accessToken, - "embed", - ); + host: runtimeHost, + token: accessToken, + authContext: "embed", + }); return { instanceId, diff --git a/web-admin/src/routes/[organization]/[project]/+layout.svelte b/web-admin/src/routes/[organization]/[project]/+layout.svelte index 60e24a38124..80418ee66a1 100644 --- a/web-admin/src/routes/[organization]/[project]/+layout.svelte +++ b/web-admin/src/routes/[organization]/[project]/+layout.svelte @@ -32,74 +32,33 @@ V1DeploymentStatus, createAdminServiceGetCurrentUser, createAdminServiceGetDeploymentCredentials, - createAdminServiceGetProject, type RpcStatus, type V1GetProjectResponse, } from "@rilldata/web-admin/client"; - import { - isProjectPage, - isPublicAlertPage, - isPublicReportPage, - isPublicURLPage, - } from "@rilldata/web-admin/features/navigation/nav-utils"; + import { isProjectPage } from "@rilldata/web-admin/features/navigation/nav-utils"; import ProjectBuilding from "@rilldata/web-admin/features/projects/ProjectBuilding.svelte"; import ProjectTabs from "@rilldata/web-admin/features/projects/ProjectTabs.svelte"; import RedeployProjectCta from "@rilldata/web-admin/features/projects/RedeployProjectCTA.svelte"; - import { createAdminServiceGetProjectWithBearerToken } from "@rilldata/web-admin/features/public-urls/get-project-with-bearer-token"; import { cloudVersion } from "@rilldata/web-admin/features/telemetry/initCloudMetrics"; import { viewAsUserStore } from "@rilldata/web-admin/features/view-as-user/viewAsUserStore"; import ErrorPage from "@rilldata/web-common/components/ErrorPage.svelte"; import { metricsService } from "@rilldata/web-common/metrics/initMetrics"; - import RuntimeProvider from "@rilldata/web-common/runtime-client/RuntimeProvider.svelte"; import { RUNTIME_ACCESS_TOKEN_DEFAULT_TTL } from "@rilldata/web-common/runtime-client/constants"; import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; - import type { AuthContext } from "@rilldata/web-common/runtime-client/runtime-store"; - import type { CreateQueryOptions } from "@tanstack/svelte-query"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; + + import { type CreateQueryOptions } from "@tanstack/svelte-query"; const user = createAdminServiceGetCurrentUser(); + export let data; + $: ({ url: { pathname }, - params: { organization, project, token }, + params: { organization, project }, } = $page); $: onProjectPage = isProjectPage($page); - $: onPublicURLPage = isPublicURLPage($page); - $: onPublicReportOrAlertPage = - isPublicReportPage($page) || isPublicAlertPage($page); - $: if (onPublicReportOrAlertPage) { - token = $page.url.searchParams.get("token"); - } - - /** - * `GetProject` with default cookie-based auth. - * This returns the deployment credentials for the current logged-in user. - */ - $: cookieProjectQuery = createAdminServiceGetProject( - organization, - project, - undefined, - { - query: baseGetProjectQueryOptions, - }, - ); - - /** - * `GetProject` with token-based auth. - * This returns the deployment credentials for anonymous users who visit a Public URL. - * The token is provided via the `[organization]/[project]/-/share/[token]` URL. - */ - $: tokenProjectQuery = createAdminServiceGetProjectWithBearerToken( - organization, - project, - token, - undefined, - { - query: baseGetProjectQueryOptions, - }, - ); - - $: projectQuery = onPublicURLPage ? tokenProjectQuery : cookieProjectQuery; /** * `GetDeploymentCredentials` @@ -120,7 +79,10 @@ $: ({ data: mockedUserDeploymentCredentials } = $mockedUserDeploymentCredentialsQuery); - $: ({ data: projectData, error: projectError } = $projectQuery); + // $: ({ data: projectData, error: projectError } = $projectQuery); + + $: projectData = data.project; + // A re-deploy triggers `DEPLOYMENT_STATUS_UPDATING` status. But we can still show the project UI. $: isProjectAvailable = projectData?.prodDeployment?.status === @@ -128,15 +90,24 @@ projectData?.prodDeployment?.status === V1DeploymentStatus.DEPLOYMENT_STATUS_UPDATING; - $: error = projectError as HTTPError; + let error: HTTPError | null = null; + + // $: authContext = ( + // mockedUserId && mockedUserDeploymentCredentials + // ? "mock" + // : onPublicURLPage + // ? "magic" + // : "user" + // ) as AuthContext; - $: authContext = ( - mockedUserId && mockedUserDeploymentCredentials - ? "mock" - : onPublicURLPage - ? "magic" - : "user" - ) as AuthContext; + $: if (mockedUserId && mockedUserDeploymentCredentials) { + void httpClient.updateQuerySettings({ + instanceId: mockedUserDeploymentCredentials.instanceId, + host: mockedUserDeploymentCredentials.runtimeHost, + token: mockedUserDeploymentCredentials.accessToken, + authContext: "mock", + }); + } // Load telemetry client with relevant context $: if (project && $user.data?.user?.id) { @@ -180,19 +151,6 @@ : "There was an error deploying your project. Please contact support."} /> {:else if isProjectAvailable} - - - + {/if} {/if} diff --git a/web-admin/src/routes/[organization]/[project]/+page.svelte b/web-admin/src/routes/[organization]/[project]/+page.svelte index b0099e83afb..6ad0e20c69d 100644 --- a/web-admin/src/routes/[organization]/[project]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/+page.svelte @@ -6,7 +6,7 @@ import DelayedContent from "@rilldata/web-common/features/entity-management/DelayedContent.svelte"; import { featureFlags } from "@rilldata/web-common/features/feature-flags"; import { createRuntimeServiceGetInstance } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; const { chat } = featureFlags; @@ -14,7 +14,7 @@ params: { project }, } = $page); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); // Query the instance to get the project display name $: instanceQuery = createRuntimeServiceGetInstance(instanceId); diff --git a/web-admin/src/routes/[organization]/[project]/-/alerts/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/alerts/+page.svelte index 7e5414a813f..4ca3157729c 100644 --- a/web-admin/src/routes/[organization]/[project]/-/alerts/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/alerts/+page.svelte @@ -3,9 +3,9 @@ import AlertsTable from "@rilldata/web-admin/features/alerts/listing/AlertsTable.svelte"; import { useAlerts } from "@rilldata/web-admin/features/alerts/selectors"; import ProjectPage from "@rilldata/web-admin/features/projects/ProjectPage.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ params: { organization, project }, diff --git a/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts b/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts index e5b659c85e5..e6ea5572214 100644 --- a/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts +++ b/web-admin/src/routes/[organization]/[project]/-/alerts/[alert]/+layout.ts @@ -1,18 +1,21 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.js"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; import { isHTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper.js"; -import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client/query-options"; import { error } from "@sveltejs/kit"; +import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client"; export async function load({ params, parent }) { - const { runtime } = await parent(); + const { project } = await parent(); const alertData = await queryClient .fetchQuery( - getRuntimeServiceGetResourceQueryOptions(runtime.instanceId, { - "name.kind": ResourceKind.Alert, - "name.name": params.alert, - }), + getRuntimeServiceGetResourceQueryOptions( + project.prodDeployment?.runtimeInstanceId, + { + "name.kind": ResourceKind.Alert, + "name.name": params.alert, + }, + ), ) .catch((e) => { if (!isHTTPError(e)) { diff --git a/web-admin/src/routes/[organization]/[project]/-/dashboards/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/dashboards/+page.svelte index 5b1ecb27568..64701b555db 100644 --- a/web-admin/src/routes/[organization]/[project]/-/dashboards/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/dashboards/+page.svelte @@ -6,7 +6,7 @@ import DashboardErrored from "@rilldata/web-admin/features/dashboards/DashboardErrored.svelte"; import DashboardsTable from "@rilldata/web-admin/features/dashboards/listing/DashboardsTable.svelte"; import { useDeployingDashboards } from "@rilldata/web-admin/features/dashboards/listing/deploying-dashboards.ts"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { PageData } from "./$types"; export let data: PageData; @@ -15,7 +15,7 @@ $: ({ params: { organization, project }, } = $page); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: deployingDashboards = useDeployingDashboards( instanceId, diff --git a/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts b/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts index e686e560d6c..f07610ec7fd 100644 --- a/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts +++ b/web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts @@ -3,12 +3,13 @@ import type { PageLoad } from "./$types"; export const load: PageLoad = async ({ params, url, parent }) => { // Only proceed once the runtime in parent is ready - await parent(); + const parentData = await parent(); // Get the organization and project from the URL const organization = params.organization; const project = params.project; + const instanceId = parentData.runtime.instanceId; // Open the query (this'll redirect to the relevant Explore page) - await openQuery({ url, organization, project }); + await openQuery({ url, organization, project, instanceId }); }; diff --git a/web-admin/src/routes/[organization]/[project]/-/reports/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/reports/+page.svelte index 8486c399e3f..e2529e2d11f 100644 --- a/web-admin/src/routes/[organization]/[project]/-/reports/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/reports/+page.svelte @@ -3,9 +3,9 @@ import ProjectPage from "@rilldata/web-admin/features/projects/ProjectPage.svelte"; import ReportsTable from "@rilldata/web-admin/features/scheduled-reports/listing/ReportsTable.svelte"; import { useReports } from "@rilldata/web-admin/features/scheduled-reports/selectors"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ params: { organization, project }, diff --git a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts index 84239f1d323..b1ead01689e 100644 --- a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts +++ b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/+layout.ts @@ -1,18 +1,21 @@ import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors.js"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; import { isHTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper.js"; -import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client/query-options"; +import { getRuntimeServiceGetResourceQueryOptions } from "@rilldata/web-common/runtime-client"; import { error } from "@sveltejs/kit"; export async function load({ params, parent }) { - const { runtime } = await parent(); + const { project } = await parent(); const reportData = await queryClient .fetchQuery( - getRuntimeServiceGetResourceQueryOptions(runtime.instanceId, { - "name.kind": ResourceKind.Report, - "name.name": params.report, - }), + getRuntimeServiceGetResourceQueryOptions( + project?.prodDeployment?.runtimeInstanceId, + { + "name.kind": ResourceKind.Report, + "name.name": params.report, + }, + ), ) .catch((e) => { if (!isHTTPError(e)) { diff --git a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte index e65a6c005d6..663cc334702 100644 --- a/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/reports/[report]/export/+page.svelte @@ -5,9 +5,9 @@ import CtaContentContainer from "@rilldata/web-common/components/calls-to-action/CTAContentContainer.svelte"; import CtaLayoutContainer from "@rilldata/web-common/components/calls-to-action/CTALayoutContainer.svelte"; import CtaMessage from "@rilldata/web-common/components/calls-to-action/CTAMessage.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: organization = $page.params.organization; $: project = $page.params.project; $: reportId = $page.params.report; @@ -30,7 +30,7 @@ }); } - $: if (reportId && $runtime) { + $: if (reportId && instanceId) { triggerDownload(); } diff --git a/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte index 6c64749fd82..bf7b2ea17f9 100644 --- a/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/settings/public-urls/+page.svelte @@ -11,10 +11,10 @@ import DelayedSpinner from "@rilldata/web-common/features/entity-management/DelayedSpinner.svelte"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import type { V1Resource } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { useQueryClient } from "@tanstack/svelte-query"; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: organization = $page.params.organization; $: project = $page.params.project; diff --git a/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte b/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte index b7bdee3fa8d..af6c914aacd 100644 --- a/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/-/share/[token]/explore/[dashboard]/+page.svelte @@ -11,9 +11,9 @@ import DashboardStateManager from "@rilldata/web-common/features/dashboards/state-managers/loaders/DashboardStateManager.svelte"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { createRuntimeServiceGetExplore } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ organization, project, dashboard: exploreName } = $page.params); diff --git a/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte b/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte index 0d51586e43a..d93f6646be9 100644 --- a/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/canvas/[dashboard]/+page.svelte @@ -1,16 +1,17 @@ diff --git a/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte b/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte index 07538000e80..00d517da450 100644 --- a/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/explore/[dashboard]/+page.svelte @@ -16,7 +16,7 @@ import { useExplore } from "@rilldata/web-common/features/explores/selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import type { V1GetExploreResponse } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { PageData } from "./$types"; const PollIntervalWhenDashboardFirstReconciling = 1000; @@ -25,7 +25,7 @@ export let data: PageData; $: ({ project } = data); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ organization: orgName, project: projectName, diff --git a/web-admin/tests/README.md b/web-admin/tests/README.md index 43058531dbf..555554d68d0 100644 --- a/web-admin/tests/README.md +++ b/web-admin/tests/README.md @@ -11,7 +11,7 @@ Playwright recommends that global setup takes place in a dedicated Playwright "p 1. Starts a fresh instance of Rill Cloud 2. Logs-in via the e2e-admin@rilldata.com user (which has been pre-populated in our Auth0 staging database) 3. Creates an organization named `e2e` -4. Deploys the OpenRTB project +4. Deploys the OpenRTB and AdBids projects 5. Waits for data ingestion and asserts when the primary dashboard is ready-to-go ```bash diff --git a/web-admin/tests/canvas.spec.ts b/web-admin/tests/canvas.spec.ts index fae68017dc5..63c50d1c6ca 100644 --- a/web-admin/tests/canvas.spec.ts +++ b/web-admin/tests/canvas.spec.ts @@ -15,4 +15,23 @@ test.describe("Canvases", () => { page.getByText("Advertising Spend Overall $3,900"), ).toBeVisible(); }); + + test("can switch projects from canvas", async ({ page }) => { + // Navigate to canvas + await page.goto("/e2e/openrtb/-/dashboards"); + await page + .getByRole("link", { name: "Bids Canvas Dashboard" }) + .first() + .click(); + + // navigate via breadcrumbs to another project + await page + .getByRole("button", { name: "Breadcrumb dropdown" }) + .first() + .click(); + + await page.getByRole("link", { name: "AdBids" }).click(); + + await expect(page.getByText("Adbids Canvas Dashboard")).toBeVisible(); + }); }); diff --git a/web-admin/tests/setup/setup.ts b/web-admin/tests/setup/setup.ts index 09f68cbdb7f..ce2ddd7dd07 100644 --- a/web-admin/tests/setup/setup.ts +++ b/web-admin/tests/setup/setup.ts @@ -261,4 +261,68 @@ setup.describe("global setup", () => { }), ).toContainText("Last refreshed", { timeout: 15_000 }); }); + + setup("should deploy the AdBids project", async ({ adminPage }) => { + // increase project quota for the organization + const { stdout: quotaUpdateStdout } = await execAsync( + `rill sudo quota set --org ${RILL_ORG_NAME} --projects 10`, + ); + expect(quotaUpdateStdout).toContain(`Projects: 10`); + + // Deploy the AdBids project + const { match } = await spawnAndMatch( + "rill", + [ + "deploy", + "--path", + "../web-common/tests/projects/AdBids", + "--project", + "AdBids", + "--archive", + "--interactive=false", + ], + /https?:\/\/[^\s]+/, + ); + + // Navigate to the project URL and expect to see the successful deployment + const url = match[0]; + await adminPage.goto(url); + await expect( + adminPage.getByRole("link", { name: RILL_ORG_NAME }), + ).toBeVisible(); // Organization breadcrumb + await expect( + adminPage.getByRole("link", { name: "AdBids", exact: true }), + ).toBeVisible(); // Project breadcrumb + + // Expect to land on the project home page + await adminPage.waitForURL(`/${RILL_ORG_NAME}/AdBids`); + // Temporary fix to wait for the project to be ready. + // TODO: add a refetch to the project API + await expect + .poll( + async () => { + await adminPage.reload(); + return adminPage.getByLabel("Project title").textContent(); + }, + { intervals: Array(4).fill(30_000), timeout: 120_000 }, + ) + .toContain(`Welcome to Untitled Rill Project`); + + // Navigate to the dashboards page to validate the deployment + await adminPage.getByRole("link", { name: "Dashboards" }).click(); + await adminPage.waitForURL("**/-/dashboards"); + + // Wait for the project to be ready + await expect(adminPage.getByLabel("Container title")).toHaveText( + "Project dashboards", + ); + + // Check that the dashboards are listed + await expect( + adminPage.getByRole("link", { name: "Adbids Canvas Dashboard" }).first(), + ).toBeVisible(); + await expect( + adminPage.getByRole("link", { name: "Adbids dashboard" }), + ).toBeVisible(); + }); }); diff --git a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte index cff98a5f205..4a8b302cde1 100644 --- a/web-common/src/components/preview-table/ConnectedPreviewTable.svelte +++ b/web-common/src/components/preview-table/ConnectedPreviewTable.svelte @@ -5,7 +5,7 @@ createQueryServiceTableColumns, createQueryServiceTableRows, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "../../runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import WorkspaceError from "../WorkspaceError.svelte"; import type { VirtualizedTableColumns } from "../virtualized-table/types"; import PreviewTable from "./PreviewTable.svelte"; @@ -19,7 +19,7 @@ let columns: VirtualizedTableColumns[] | undefined; let rows: V1TableRowsResponseDataItem[] | undefined; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: columnsQuery = createQueryServiceTableColumns(instanceId, table, { connector, diff --git a/web-common/src/components/vega/vega-embed-options.ts b/web-common/src/components/vega/vega-embed-options.ts index a948d5a0caf..0b13e9fa6fb 100644 --- a/web-common/src/components/vega/vega-embed-options.ts +++ b/web-common/src/components/vega/vega-embed-options.ts @@ -1,12 +1,11 @@ import type { ColorMapping } from "@rilldata/web-common/features/components/charts/types"; import { ComparisonDeltaPreviousSuffix } from "@rilldata/web-common/features/dashboards/filters/measure-filters/measure-filter-entry"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import type { EmbedOptions } from "svelte-vega"; -import { get } from "svelte/store"; import { expressionInterpreter } from "vega-interpreter"; import type { Config } from "vega-lite"; import type { ExpressionFunction } from "./types"; import { getRillTheme } from "./vega-config"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; export interface CreateEmbedOptionsParams { canvasDashboard: boolean; @@ -33,7 +32,7 @@ export function createEmbedOptions({ colorMapping, hasComparison, }: CreateEmbedOptionsParams): EmbedOptions { - const jwt = get(runtime).jwt; + const jwt = httpClient.getJwt(); return { config: config || getRillTheme(canvasDashboard, themeMode === "dark"), @@ -55,7 +54,7 @@ export function createEmbedOptions({ }), expressionFunctions, loader: { - baseURL: `${get(runtime).host}/v1/instances/${get(runtime).instanceId}/assets/`, + baseURL: `${httpClient.getHost()}/v1/instances/${httpClient.getInstanceId()}/assets/`, ...(jwt && jwt.token && { http: { diff --git a/web-common/src/features/alerts/AlertForm.svelte b/web-common/src/features/alerts/AlertForm.svelte index c5f0661b34e..23086fea314 100644 --- a/web-common/src/features/alerts/AlertForm.svelte +++ b/web-common/src/features/alerts/AlertForm.svelte @@ -59,7 +59,7 @@ getRuntimeServiceGetResourceQueryKey, getRuntimeServiceListResourcesQueryKey, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { X } from "lucide-svelte"; import { defaults, superForm } from "sveltekit-superforms"; import Button from "web-common/src/components/button/Button.svelte"; @@ -71,7 +71,7 @@ const user = createAdminServiceGetCurrentUser(); $: ({ organization, project, alert: alertName } = $page.params); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); // Convenience variable to be used when other fields from props are not needed. // Typescript won't parse the object switch if this is used in conditionals, so some statements below don't use this. diff --git a/web-common/src/features/alerts/alert-preview-data.ts b/web-common/src/features/alerts/alert-preview-data.ts index 9e82f535a17..1732dfbb97b 100644 --- a/web-common/src/features/alerts/alert-preview-data.ts +++ b/web-common/src/features/alerts/alert-preview-data.ts @@ -29,13 +29,12 @@ import { type V1MetricsViewAggregationResponseDataItem, type V1MetricsViewSpec, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import type { QueryClient } from "@tanstack/query-core"; import type { CreateQueryOptions, CreateQueryResult, } from "@tanstack/svelte-query"; -import { derived, get } from "svelte/store"; +import { derived } from "svelte/store"; export type AlertPreviewResponse = { rows: V1MetricsViewAggregationResponseDataItem[]; @@ -47,16 +46,17 @@ export function getAlertPreviewData( formValues: AlertFormValues, filters: Filters, timeControls: TimeControls, + instanceId: string, ): CreateQueryResult { return derived( [ - useExploreValidSpec(get(runtime).instanceId, formValues.exploreName), + useExploreValidSpec(instanceId, formValues.exploreName), filters.getStore(), timeControls.getStore(), ], ([validExploreSpec, filtersState, timeControlsState], set) => createQueryServiceMetricsViewAggregation( - get(runtime).instanceId, + instanceId, formValues.metricsViewName, getAlertPreviewQueryRequest( formValues, diff --git a/web-common/src/features/alerts/criteria-tab/AlertPreview.svelte b/web-common/src/features/alerts/criteria-tab/AlertPreview.svelte index 4ad4864533c..19e70536e39 100644 --- a/web-common/src/features/alerts/criteria-tab/AlertPreview.svelte +++ b/web-common/src/features/alerts/criteria-tab/AlertPreview.svelte @@ -10,16 +10,20 @@ import PreviewEmpty from "../PreviewEmpty.svelte"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import type { DimensionTableRow } from "../../dashboards/dimension-table/dimension-table-types"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; export let formValues: AlertFormValues; export let filters: Filters; export let timeControls: TimeControls; + const instanceId = httpClient.getInstanceId(); + $: alertPreviewQuery = getAlertPreviewData( queryClient, formValues, filters, timeControls, + instanceId, ); $: isCriteriaEmpty = diff --git a/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte b/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte index 2518a9d7c52..c2ced901e7f 100644 --- a/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte +++ b/web-common/src/features/alerts/criteria-tab/CriteriaForm.svelte @@ -11,7 +11,7 @@ import { onMount } from "svelte"; import { slide } from "svelte/transition"; import type { SuperForm } from "sveltekit-superforms/client"; - import { runtime } from "../../../runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; export let superFormInstance: SuperForm; export let timeControls: TimeControls; @@ -20,7 +20,7 @@ $: ({ form, errors, validate } = superFormInstance); $: ({ selectedComparisonTimeRange } = timeControls); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: metricsView = useMetricsViewValidSpec( instanceId, diff --git a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte index 8e7e72e1ff3..f699a436d72 100644 --- a/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte +++ b/web-common/src/features/alerts/data-tab/AlertDialogDataTab.svelte @@ -8,7 +8,7 @@ import type { SuperForm } from "sveltekit-superforms/client"; import FormSection from "../../../components/forms/FormSection.svelte"; import Select from "../../../components/forms/Select.svelte"; - import { runtime } from "../../../runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { useMetricsViewValidSpec } from "../../dashboards/selectors"; export let superFormInstance: SuperForm; @@ -17,7 +17,7 @@ $: ({ form } = superFormInstance); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: metricsViewName = $form["metricsViewName"]; // memoise to avoid rerenders $: metricsView = useMetricsViewValidSpec(instanceId, metricsViewName); diff --git a/web-common/src/features/alerts/data-tab/DataPreview.svelte b/web-common/src/features/alerts/data-tab/DataPreview.svelte index 0397aaa09fd..98b2c287de2 100644 --- a/web-common/src/features/alerts/data-tab/DataPreview.svelte +++ b/web-common/src/features/alerts/data-tab/DataPreview.svelte @@ -9,11 +9,14 @@ import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import PreviewEmpty from "../PreviewEmpty.svelte"; import type { DimensionTableRow } from "../../dashboards/dimension-table/dimension-table-types"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; export let formValues: AlertFormValues; export let filters: Filters; export let timeControls: TimeControls; + const instanceId = httpClient.getInstanceId(); + $: alertPreviewQuery = getAlertPreviewData( queryClient, { @@ -22,6 +25,7 @@ }, filters, timeControls, + instanceId, ); $: queryResult = $alertPreviewQuery; diff --git a/web-common/src/features/alerts/delivery-tab/AlertDialogDeliveryTab.svelte b/web-common/src/features/alerts/delivery-tab/AlertDialogDeliveryTab.svelte index 39b54b48494..07de57bf08b 100644 --- a/web-common/src/features/alerts/delivery-tab/AlertDialogDeliveryTab.svelte +++ b/web-common/src/features/alerts/delivery-tab/AlertDialogDeliveryTab.svelte @@ -8,7 +8,7 @@ import { SnoozeOptions } from "@rilldata/web-common/features/alerts/delivery-tab/snooze"; import type { AlertFormValues } from "@rilldata/web-common/features/alerts/form-utils"; import ScheduleForm from "@rilldata/web-common/features/scheduled-reports/ScheduleForm.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { SuperForm } from "sveltekit-superforms/client"; export let superFormInstance: SuperForm; @@ -16,7 +16,7 @@ $: ({ form, errors } = superFormInstance); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: hasSlackNotifier = getHasSlackConnection(instanceId); diff --git a/web-common/src/features/canvas/CanvasBuilder.svelte b/web-common/src/features/canvas/CanvasBuilder.svelte index 5cc64b62e12..9a82909f81e 100644 --- a/web-common/src/features/canvas/CanvasBuilder.svelte +++ b/web-common/src/features/canvas/CanvasBuilder.svelte @@ -6,7 +6,7 @@ type V1CanvasRow, type V1Resource, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { onDestroy } from "svelte"; import { get, writable } from "svelte/store"; import { parseDocument } from "yaml"; @@ -66,7 +66,7 @@ $: layoutRows = $_rows; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: components = $componentsStore; diff --git a/web-common/src/features/canvas/CanvasDashboardEmbed.svelte b/web-common/src/features/canvas/CanvasDashboardEmbed.svelte index e2996ac8203..82c190e5d60 100644 --- a/web-common/src/features/canvas/CanvasDashboardEmbed.svelte +++ b/web-common/src/features/canvas/CanvasDashboardEmbed.svelte @@ -2,7 +2,7 @@ import CanvasDashboardWrapper from "./CanvasDashboardWrapper.svelte"; import { getCanvasStore } from "./state-managers/state-managers"; import StaticCanvasRow from "./StaticCanvasRow.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import Spinner from "../entity-management/Spinner.svelte"; import { EntityStatus } from "../entity-management/types"; import { derived } from "svelte/store"; @@ -14,7 +14,7 @@ export let canvasName: string; export let navigationEnabled: boolean = true; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ canvasEntity: { diff --git a/web-common/src/features/canvas/CanvasDashboardWrapper.svelte b/web-common/src/features/canvas/CanvasDashboardWrapper.svelte index 30e01d45cdd..6d338d04eef 100644 --- a/web-common/src/features/canvas/CanvasDashboardWrapper.svelte +++ b/web-common/src/features/canvas/CanvasDashboardWrapper.svelte @@ -1,6 +1,6 @@ diff --git a/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte b/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte index f4e48219be1..ab5147456b0 100644 --- a/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte +++ b/web-common/src/features/canvas/inspector/fields/MultiPositionalFieldsInput.svelte @@ -1,7 +1,7 @@ diff --git a/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte b/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte index a07e4856cf6..7d00005ad59 100644 --- a/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte +++ b/web-common/src/features/canvas/inspector/fields/SingleFieldInput.svelte @@ -4,7 +4,7 @@ import InputLabel from "@rilldata/web-common/components/forms/InputLabel.svelte"; import Search from "@rilldata/web-common/components/search/Search.svelte"; import { getCanvasStore } from "@rilldata/web-common/features/canvas/state-managers/state-managers"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { useMetricFieldData } from "../selectors"; export let metricName: string; @@ -21,7 +21,7 @@ let open = false; let searchValue = ""; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ctx = getCanvasStore(canvasName, instanceId); $: ({ getTimeDimensionForMetricView } = ctx.canvasEntity.metricsView); diff --git a/web-common/src/features/canvas/inspector/filters/DimensionFiltersInput.svelte b/web-common/src/features/canvas/inspector/filters/DimensionFiltersInput.svelte index e3a5a890239..3a119711927 100644 --- a/web-common/src/features/canvas/inspector/filters/DimensionFiltersInput.svelte +++ b/web-common/src/features/canvas/inspector/filters/DimensionFiltersInput.svelte @@ -4,7 +4,7 @@ import { getCanvasStore } from "@rilldata/web-common/features/canvas/state-managers/state-managers"; import DimensionFilter from "@rilldata/web-common/features/dashboards/filters/dimension-filters/DimensionFilter.svelte"; import MeasureFilter from "@rilldata/web-common/features/dashboards/filters/measure-filters/MeasureFilter.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import CanvasFilterButton from "@rilldata/web-common/features/dashboards/filters/CanvasFilterButton.svelte"; import type { FilterState } from "../../stores/filter-state"; import Button from "@rilldata/web-common/components/button/Button.svelte"; @@ -19,7 +19,7 @@ let localFiltersEnabledOverride = false; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ canvasEntity: { diff --git a/web-common/src/features/canvas/inspector/filters/TimeFiltersInput.svelte b/web-common/src/features/canvas/inspector/filters/TimeFiltersInput.svelte index 20f441fb3ab..3aea7bb8743 100644 --- a/web-common/src/features/canvas/inspector/filters/TimeFiltersInput.svelte +++ b/web-common/src/features/canvas/inspector/filters/TimeFiltersInput.svelte @@ -4,7 +4,7 @@ import CanvasComparisonPill from "@rilldata/web-common/features/canvas/filters/CanvasComparisonPill.svelte"; import { getCanvasStore } from "@rilldata/web-common/features/canvas/state-managers/state-managers"; import SuperPill from "@rilldata/web-common/features/dashboards/time-controls/super-pill/SuperPill.svelte"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { TimeState } from "../../stores/time-state"; import { ALL_TIME_RANGE_ALIAS } from "@rilldata/web-common/features/dashboards/time-controls/new-time-controls"; @@ -15,7 +15,7 @@ export let canvasName: string; export let metricsView: string | null; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ canvasEntity: { diff --git a/web-common/src/features/canvas/selector.ts b/web-common/src/features/canvas/selector.ts index ca581c5d792..13a7663243c 100644 --- a/web-common/src/features/canvas/selector.ts +++ b/web-common/src/features/canvas/selector.ts @@ -4,7 +4,6 @@ import { } from "@rilldata/web-common/features/entity-management/resource-selectors"; import { createQueryServiceResolveCanvas, - getQueryServiceResolveCanvasQueryOptions, type RpcStatus, type V1CanvasSpec, type V1MetricsView, @@ -12,13 +11,11 @@ import { type V1ResolveCanvasResponseResolvedComponents, } from "@rilldata/web-common/runtime-client"; import type { ErrorType } from "@rilldata/web-common/runtime-client/http-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; import type { CreateQueryOptions, CreateQueryResult, QueryClient, } from "@tanstack/svelte-query"; -import { derived, type Readable } from "svelte/store"; /** * Returns the default metrics view for a given instance, prioritizing in order: @@ -125,42 +122,10 @@ export function useCanvas( }; }, - enabled: !!canvasName, + enabled: !!canvasName && !!instanceId, ...queryOptions, }, }, queryClient, ); } - -export function getCanvasQueryOptions(canvasNameStore: Readable) { - return derived([runtime, canvasNameStore], ([{ instanceId }, canvasName]) => - getQueryServiceResolveCanvasQueryOptions( - instanceId, - canvasName, - {}, - { - query: { - select: (data) => { - const metricsViews: Record = {}; - const refMetricsViews = data?.referencedMetricsViews; - if (refMetricsViews) { - Object.keys(refMetricsViews).forEach((key) => { - metricsViews[key] = refMetricsViews?.[key]?.metricsView; - }); - } - - return { - canvas: data.canvas?.canvas?.state?.validSpec, - components: data.resolvedComponents, - metricsViews, - filePath: data.canvas?.meta?.filePaths?.[0], - }; - }, - - enabled: !!canvasName, - }, - }, - ), - ); -} diff --git a/web-common/src/features/canvas/state-managers/state-managers.ts b/web-common/src/features/canvas/state-managers/state-managers.ts index f2035f05a6c..1989dc1309f 100644 --- a/web-common/src/features/canvas/state-managers/state-managers.ts +++ b/web-common/src/features/canvas/state-managers/state-managers.ts @@ -1,13 +1,9 @@ -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import type { QueryClient } from "@tanstack/svelte-query"; -import { type Writable } from "svelte/store"; import { CanvasEntity } from "../stores/canvas-entity"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; import type { CanvasResponse } from "../selector"; export type CanvasStore = { - runtime: Writable; canvasEntity: CanvasEntity; queryClient: QueryClient; }; @@ -70,7 +66,6 @@ export function setCanvasStore( const canvasEntity = new CanvasEntity(canvasName, instanceId, response); const store: CanvasStore = { - runtime: runtime, canvasEntity, queryClient, }; diff --git a/web-common/src/features/chat/core/context/get-last-used-metrics-view.ts b/web-common/src/features/chat/core/context/get-last-used-metrics-view.ts index a31bb92ded3..8b0acf2d7eb 100644 --- a/web-common/src/features/chat/core/context/get-last-used-metrics-view.ts +++ b/web-common/src/features/chat/core/context/get-last-used-metrics-view.ts @@ -7,7 +7,7 @@ import { } from "@rilldata/web-common/runtime-client"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.ts"; import { MessageType } from "@rilldata/web-common/features/chat/core/types.ts"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; /** * Looks at the last conversation and returns the metrics view used in the last message or tool call. @@ -34,12 +34,12 @@ export function getLastUsedMetricsViewNameStore() { * Returns the last updated conversation ID. */ function getLatestConversationQueryOptions() { - const listConversationsQueryOptions = derived(runtime, ({ instanceId }) => + const instanceId = httpClient.getInstanceId(); + const listConversationsQueryOptions = getRuntimeServiceListConversationsQueryOptions(instanceId, { // Filter to only show Rill client conversations, excluding MCP conversations userAgentPattern: "rill%", - }), - ); + }); const lastConversationId = derived( createQuery(listConversationsQueryOptions, queryClient), (conversationsResp) => { @@ -47,20 +47,17 @@ function getLatestConversationQueryOptions() { }, ); - return derived( - [lastConversationId, runtime], - ([lastConversationId, { instanceId }]) => { - return getRuntimeServiceGetConversationQueryOptions( - instanceId, - lastConversationId ?? "", - { - query: { - enabled: !!lastConversationId, - }, + return derived([lastConversationId], ([lastConversationId]) => { + return getRuntimeServiceGetConversationQueryOptions( + instanceId, + lastConversationId ?? "", + { + query: { + enabled: !!lastConversationId, }, - ); - }, - ); + }, + ); + }); } function getMetricsViewInMessage(message: V1Message) { diff --git a/web-common/src/features/chat/core/conversation.ts b/web-common/src/features/chat/core/conversation.ts index 388a36611c1..fb0369df474 100644 --- a/web-common/src/features/chat/core/conversation.ts +++ b/web-common/src/features/chat/core/conversation.ts @@ -8,7 +8,6 @@ import { type V1GetConversationResponse, type V1Message, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { SSEFetchClient, SSEHttpError, @@ -24,6 +23,7 @@ import { invalidateConversationsList, NEW_CONVERSATION_ID, } from "./utils"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; /** * Individual conversation state management. @@ -266,7 +266,7 @@ export class Conversation { this.sseClient.stop(); // Build URL with stream parameter (like other streaming endpoints) - const baseUrl = `${get(runtime).host}/v1/instances/${this.instanceId}/ai/complete/stream?stream=messages`; + const baseUrl = `${httpClient.getHost()}/v1/instances/${this.instanceId}/ai/complete/stream?stream=messages`; // Prepare request body for POST request const requestBody = { diff --git a/web-common/src/features/chat/core/messages/Messages.svelte b/web-common/src/features/chat/core/messages/Messages.svelte index d8f711b9c43..85c9f94c8dd 100644 --- a/web-common/src/features/chat/core/messages/Messages.svelte +++ b/web-common/src/features/chat/core/messages/Messages.svelte @@ -1,9 +1,8 @@ diff --git a/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts b/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts index da058a6a9a4..bcf87e02918 100644 --- a/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts +++ b/web-common/src/features/dashboards/granular-access-policies/updateDevJWT.ts @@ -4,10 +4,9 @@ import { } from "@rilldata/web-common/features/dashboards/granular-access-policies/stores"; import type { MockUser } from "@rilldata/web-common/features/dashboards/granular-access-policies/useMockUsers"; import { runtimeServiceIssueDevJWT } from "@rilldata/web-common/runtime-client"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { invalidateAllMetricsViews } from "@rilldata/web-common/runtime-client/invalidation"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import type { QueryClient } from "@tanstack/svelte-query"; -import { get } from "svelte/store"; export async function updateDevJWT( queryClient: QueryClient, @@ -17,10 +16,8 @@ export async function updateDevJWT( if (mockUser === null) { selectedMockUserJWT.set(null); - runtime.update((runtimeState) => { - runtimeState.jwt = undefined; - return runtimeState; - }); + + await httpClient.updateJWT(undefined, undefined); } else { try { const { name, email, groups, admin, ...customAttributes } = mockUser; @@ -37,18 +34,11 @@ export async function updateDevJWT( selectedMockUserJWT.set(jwt); - runtime.update((runtimeState) => { - runtimeState.jwt = { - token: jwt, - receivedAt: Date.now(), - authContext: "mock", - }; - return runtimeState; - }); + await httpClient.updateJWT(jwt, "mock"); } catch { // no-op } } - return invalidateAllMetricsViews(queryClient, get(runtime).instanceId); + return invalidateAllMetricsViews(queryClient, httpClient.getInstanceId()); } diff --git a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte index 488c2bc9685..7a5c2ff0c53 100644 --- a/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte +++ b/web-common/src/features/dashboards/leaderboard/LeaderboardDisplay.svelte @@ -5,7 +5,6 @@ V1Expression, V1TimeRange, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import type { DimensionThresholdFilter } from "web-common/src/features/dashboards/stores/explore-state"; import Leaderboard from "./Leaderboard.svelte"; import LeaderboardControls from "./LeaderboardControls.svelte"; @@ -20,6 +19,7 @@ const StateManagers = getStateManagers(); const { + instanceId, selectors: { numberFormat: { measureFormatters, activeMeasureFormatter }, dimensionFilters: { isFilterExcludeMode }, @@ -45,8 +45,6 @@ let parentElement: HTMLDivElement; - $: ({ instanceId } = $runtime); - // Reset column widths when the measure changes $: if ($leaderboardSortByMeasureName) { valueColumn.reset(); @@ -98,7 +96,7 @@ {parentElement} {timeControlsReady} selectedValues={selectedDimensionValues( - $runtime.instanceId, + instanceId, [metricsViewName], $dashboardStore.whereFilter, dimension.name, diff --git a/web-common/src/features/dashboards/pivot/pivot-export.ts b/web-common/src/features/dashboards/pivot/pivot-export.ts index c8c5506eafd..22d9d746cf0 100644 --- a/web-common/src/features/dashboards/pivot/pivot-export.ts +++ b/web-common/src/features/dashboards/pivot/pivot-export.ts @@ -12,7 +12,7 @@ import { type V1TimeRange, } from "@rilldata/web-common/runtime-client"; import { get } from "svelte/store"; -import { runtime } from "../../../runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { StateManagers } from "../state-managers/state-managers"; import { getPivotConfig } from "./pivot-data-config"; import { prepareMeasureForComparison } from "./pivot-utils"; @@ -176,7 +176,7 @@ export function getPivotAggregationRequest({ } return { - instanceId: get(runtime).instanceId, + instanceId: httpClient.getInstanceId(), metricsView: metricsViewName, timeRange, comparisonTimeRange: comparisonTime, diff --git a/web-common/src/features/dashboards/pivot/pivot-queries.ts b/web-common/src/features/dashboards/pivot/pivot-queries.ts index 976bb225863..1ebaacfb877 100644 --- a/web-common/src/features/dashboards/pivot/pivot-queries.ts +++ b/web-common/src/features/dashboards/pivot/pivot-queries.ts @@ -14,7 +14,7 @@ import { createQueryServiceMetricsViewAggregation, } from "@rilldata/web-common/runtime-client"; import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { type CreateQueryResult, keepPreviousData, @@ -72,39 +72,37 @@ export function createPivotAggregationRowQuery( hasComparison = true; } - return derived( - [runtime, ctx.metricsViewName], - ([$runtime, metricsViewName], set) => - createQueryServiceMetricsViewAggregation( - $runtime.instanceId, - metricsViewName, - { - measures: prepareMeasureForComparison(measures), - dimensions, - where: sanitiseExpression(whereFilter, undefined), - timeRange: { - start: timeRange?.start ? timeRange.start : config.time.timeStart, - end: timeRange?.end ? timeRange.end : config.time.timeEnd, - }, - comparisonTimeRange: - hasComparison && comparisonTime - ? { - start: comparisonTime.start, - end: comparisonTime.end, - } - : undefined, - sort, - limit, - offset, + return derived([ctx.metricsViewName], ([metricsViewName], set) => + createQueryServiceMetricsViewAggregation( + httpClient.getInstanceId(), + metricsViewName, + { + measures: prepareMeasureForComparison(measures), + dimensions, + where: sanitiseExpression(whereFilter, undefined), + timeRange: { + start: timeRange?.start ? timeRange.start : config.time.timeStart, + end: timeRange?.end ? timeRange.end : config.time.timeEnd, }, - { - query: { - enabled: ctx.enabled, - placeholderData: keepPreviousData, - }, + comparisonTimeRange: + hasComparison && comparisonTime + ? { + start: comparisonTime.start, + end: comparisonTime.end, + } + : undefined, + sort, + limit, + offset, + }, + { + query: { + enabled: ctx.enabled, + placeholderData: keepPreviousData, }, - ctx.queryClient, - ).subscribe(set), + }, + ctx.queryClient, + ).subscribe(set), ); } diff --git a/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte b/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte index 2032e3357ca..5e161545902 100644 --- a/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte +++ b/web-common/src/features/dashboards/rows-viewer/RowsViewer.svelte @@ -7,7 +7,7 @@ createQueryServiceMetricsViewRows, type V1Expression, } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { writable } from "svelte/store"; import { useExploreState } from "web-common/src/features/dashboards/stores/dashboard-stores"; import { PreviewTable } from "../../../components/preview-table"; @@ -19,7 +19,7 @@ export let filters: V1Expression | undefined; export let timeRange: TimeRangeString; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); const SAMPLE_SIZE = 10000; const FALLBACK_SAMPLE_SIZE = 1000; diff --git a/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte b/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte index b48f46c5e0c..5b23b7178bc 100644 --- a/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte +++ b/web-common/src/features/dashboards/rows-viewer/RowsViewerAccordion.svelte @@ -7,8 +7,6 @@ import Resizer from "@rilldata/web-common/layout/Resizer.svelte"; import { formatCompactInteger } from "@rilldata/web-common/lib/formatters"; import { createQueryServiceMetricsViewAggregation } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; - import { get } from "svelte/store"; import { useExploreState } from "web-common/src/features/dashboards/stores/dashboard-stores"; import ExportMenu from "../../exports/ExportMenu.svelte"; import { featureFlags } from "../../feature-flags"; @@ -37,13 +35,12 @@ const stateManagers = getStateManagers(); const { + instanceId, selectors: { pivot: { showPivot: showPivotStore }, }, } = stateManagers; - $: ({ instanceId } = $runtime); - $: exploreState = useExploreState(exploreName); $: ({ whereFilter, dimensionThresholdFilters } = $exploreState); $: pivotDataStore = usePivotForExplore(stateManagers); @@ -132,7 +129,7 @@ function getExportQuery() { return { metricsViewRowsRequest: { - instanceId: get(runtime).instanceId, + instanceId, metricsViewName, timeStart: timeRange.start, timeEnd: timeRange.end, diff --git a/web-common/src/features/dashboards/selectors.ts b/web-common/src/features/dashboards/selectors.ts index df41c6c2489..5252c2fdb0e 100644 --- a/web-common/src/features/dashboards/selectors.ts +++ b/web-common/src/features/dashboards/selectors.ts @@ -25,7 +25,7 @@ import { type V1MetricsViewTimeRangeResponse, type V1Resource, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { createQuery, type CreateQueryOptions, @@ -54,22 +54,18 @@ export function useMetricsView( } export function getValidMetricsViewsQueryOptions() { - return derived(runtime, ({ instanceId }) => { - return getRuntimeServiceListResourcesQueryOptions( - instanceId, - { - kind: ResourceKind.MetricsView, - }, - { - query: { - select: (data) => - data?.resources?.filter( - (res) => !!res.metricsView?.state?.validSpec, - ), - }, + return getRuntimeServiceListResourcesQueryOptions( + httpClient.getInstanceId(), + { + kind: ResourceKind.MetricsView, + }, + { + query: { + select: (data) => + data?.resources?.filter((res) => !!res.metricsView?.state?.validSpec), }, - ); - }); + }, + ); } export function useValidExplores(instanceId: string) { @@ -79,23 +75,6 @@ export function useValidExplores(instanceId: string) { ); } -export function getValidDashboardsQueryOptions() { - return derived(runtime, ({ instanceId }) => { - return getRuntimeServiceListResourcesQueryOptions( - instanceId, - { - kind: ResourceKind.Explore, - }, - { - query: { - select: (data) => - data?.resources?.filter((res) => !!res.explore?.state?.validSpec), - }, - }, - ); - }); -} - export function useValidCanvases(instanceId: string) { return useFilteredResources(instanceId, ResourceKind.Canvas, (data) => data?.resources?.filter((res) => !!res.canvas?.state?.validSpec), @@ -177,25 +156,22 @@ export function getMetricsViewTimeRangeFromExploreQueryOptions( queryClient, ); - return derived( - [runtime, validSpecQuery], - ([{ instanceId }, validSpecResp]) => { - const metricsViewSpec = validSpecResp.data?.metricsViewSpec ?? {}; - const exploreSpec = validSpecResp.data?.exploreSpec ?? {}; - const metricsViewName = exploreSpec.metricsView ?? ""; + return derived([validSpecQuery], ([validSpecResp]) => { + const metricsViewSpec = validSpecResp.data?.metricsViewSpec ?? {}; + const exploreSpec = validSpecResp.data?.exploreSpec ?? {}; + const metricsViewName = exploreSpec.metricsView ?? ""; - return getQueryServiceMetricsViewTimeRangeQueryOptions( - instanceId, - metricsViewName, - {}, - { - query: { - enabled: !!metricsViewSpec.timeDimension, - }, + return getQueryServiceMetricsViewTimeRangeQueryOptions( + httpClient.getInstanceId(), + metricsViewName, + {}, + { + query: { + enabled: !!metricsViewSpec.timeDimension, }, - ); - }, - ); + }, + ); + }); } export function hasValidMetricsViewTimeRange( @@ -239,24 +215,21 @@ export function getMetricsViewSchemaOptions( getExploreValidSpecQueryOptions(exploreNameStore), ); - return derived( - [runtime, validSpecQuery], - ([{ instanceId }, validSpecResp]) => { - const exploreSpec = validSpecResp.data?.exploreSpec ?? {}; - const metricsViewName = exploreSpec.metricsView ?? ""; + return derived([validSpecQuery], ([validSpecResp]) => { + const exploreSpec = validSpecResp.data?.exploreSpec ?? {}; + const metricsViewName = exploreSpec.metricsView ?? ""; - return getQueryServiceMetricsViewSchemaQueryOptions( - instanceId, - metricsViewName, - {}, - { - query: { - enabled: Boolean(metricsViewName), - }, + return getQueryServiceMetricsViewSchemaQueryOptions( + httpClient.getInstanceId(), + metricsViewName, + {}, + { + query: { + enabled: Boolean(metricsViewName), }, - ); - }, - ); + }, + ); + }); } export function getFiltersForOtherDimensions( diff --git a/web-common/src/features/dashboards/selectors/index.ts b/web-common/src/features/dashboards/selectors/index.ts index dc434615b70..512ea7f2715 100644 --- a/web-common/src/features/dashboards/selectors/index.ts +++ b/web-common/src/features/dashboards/selectors/index.ts @@ -11,10 +11,10 @@ export function createTimeRangeSummary( ctx: StateManagers, ): CreateQueryResult { return derived( - [ctx.runtime, ctx.metricsViewName, ctx.validSpecStore], - ([runtime, metricsViewName, validSpec], set) => + [ctx.metricsViewName, ctx.validSpecStore], + ([metricsViewName, validSpec], set) => createQueryServiceMetricsViewTimeRange( - runtime.instanceId, + ctx.instanceId, metricsViewName, {}, { diff --git a/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte b/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte index 7a1dc12e41a..16041067230 100644 --- a/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte +++ b/web-common/src/features/dashboards/state-managers/StateManagersProvider.svelte @@ -2,6 +2,7 @@ import { setContext } from "svelte"; import { useQueryClient } from "@tanstack/svelte-query"; import { createStateManagers, DEFAULT_STORE_KEY } from "./state-managers"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; export let metricsViewName: string; export let exploreName: string; @@ -12,6 +13,7 @@ queryClient, metricsViewName, exploreName, + instanceId: httpClient.getInstanceId(), }); setContext(DEFAULT_STORE_KEY, stateManagers); diff --git a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte index eb8a1daf600..04b3e2093ad 100644 --- a/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte +++ b/web-common/src/features/dashboards/state-managers/loaders/DashboardStateManager.svelte @@ -16,7 +16,7 @@ import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import type { HTTPError } from "@rilldata/web-common/runtime-client/fetchWrapper"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { onDestroy } from "svelte"; export let exploreName: string; @@ -26,7 +26,7 @@ | undefined = undefined; export let disableMostRecentDashboardState: boolean = false; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: exploreSpecQuery = useExploreValidSpec(instanceId, exploreName); $: exploreSpec = $exploreSpecQuery.data?.explore ?? {}; $: metricsViewName = exploreSpec?.metricsView ?? ""; diff --git a/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts b/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts index be2072fa79a..2a7d50bc59c 100644 --- a/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts +++ b/web-common/src/features/dashboards/state-managers/selectors/dimension-filters.ts @@ -85,10 +85,10 @@ export const selectedDimensionValues = ( export const useSelectedValuesForCompareDimension = (ctx: StateManagers) => { return derived( - [ctx.runtime, ctx.metricsViewName, ctx.dashboardStore], - ([runtime, metricsViewName, exploreState], set) => + [ctx.metricsViewName, ctx.dashboardStore], + ([metricsViewName, exploreState], set) => selectedDimensionValues( - runtime.instanceId, + ctx.instanceId, [metricsViewName], exploreState.whereFilter, exploreState.selectedComparisonDimension ?? "", diff --git a/web-common/src/features/dashboards/state-managers/state-managers.ts b/web-common/src/features/dashboards/state-managers/state-managers.ts index 47785786603..af3c96fd494 100644 --- a/web-common/src/features/dashboards/state-managers/state-managers.ts +++ b/web-common/src/features/dashboards/state-managers/state-managers.ts @@ -10,8 +10,7 @@ import { type V1MetricsViewTimeRangeResponse, createQueryServiceMetricsViewTimeRange, } from "@rilldata/web-common/runtime-client"; -import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import type { QueryClient, QueryObserverResult } from "@tanstack/svelte-query"; import { getContext } from "svelte"; import { @@ -39,7 +38,7 @@ import { } from "../leaderboard-context-column"; export type StateManagers = { - runtime: Writable; + instanceId: string; metricsViewName: Writable; exploreName: Writable; metricsStore: Readable; @@ -80,10 +79,12 @@ export function createStateManagers({ queryClient, metricsViewName, exploreName, + instanceId, }: { queryClient: QueryClient; metricsViewName: string; exploreName: string; + instanceId: string; }): StateManagers { const metricsViewNameStore = writable(metricsViewName); const exploreNameStore = writable(exploreName); @@ -98,9 +99,9 @@ export function createStateManagers({ const validSpecStore: Readable< QueryObserverResult - > = derived([runtime, exploreNameStore], ([r, exploreName], set) => + > = derived([exploreNameStore], ([exploreName], set) => useExploreValidSpec( - r.instanceId, + instanceId, exploreName, undefined, queryClient, @@ -110,10 +111,10 @@ export function createStateManagers({ const timeRangeSummaryStore: Readable< QueryObserverResult > = derived( - [runtime, metricsViewNameStore, validSpecStore], - ([runtime, mvName, validSpec], set) => + [metricsViewNameStore, validSpecStore], + ([mvName, validSpec], set) => createQueryServiceMetricsViewTimeRange( - runtime.instanceId, + instanceId, mvName, {}, { @@ -153,7 +154,7 @@ export function createStateManagers({ ); return { - runtime: runtime, + instanceId, metricsViewName: metricsViewNameStore, exploreName: exploreNameStore, metricsStore: metricsExplorerStore, diff --git a/web-common/src/features/dashboards/stores/test-data/helpers.ts b/web-common/src/features/dashboards/stores/test-data/helpers.ts index c1587dbf3fa..89f34ec4d6e 100644 --- a/web-common/src/features/dashboards/stores/test-data/helpers.ts +++ b/web-common/src/features/dashboards/stores/test-data/helpers.ts @@ -124,6 +124,7 @@ export function initStateManagers(metricsViewName?: string) { queryClient, metricsViewName, exploreName, + instanceId: "default", }); return { stateManagers, queryClient }; diff --git a/web-common/src/features/dashboards/time-controls/new-time-controls.ts b/web-common/src/features/dashboards/time-controls/new-time-controls.ts index ade9b82bf3b..766d5bb605a 100644 --- a/web-common/src/features/dashboards/time-controls/new-time-controls.ts +++ b/web-common/src/features/dashboards/time-controls/new-time-controls.ts @@ -312,7 +312,7 @@ export function isRillPeriodToDate(value: string): value is RillPeriodToDate { return RILL_PERIOD_TO_DATE.includes(value as RillPeriodToDate); } -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { getAllowedGrains, GrainAliasToV1TimeGrain, @@ -351,7 +351,7 @@ export async function deriveInterval( const parsed = parseRillTime(name); // We have a RillTime string - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); const cacheBust = name.includes("now"); const response = await fetchTimeRanges({ diff --git a/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts b/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts index 7aecf1a518c..d817e4a1d2d 100644 --- a/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts +++ b/web-common/src/features/dashboards/time-controls/rill-time-ranges.ts @@ -1,7 +1,6 @@ import { validateRillTime } from "@rilldata/web-common/features/dashboards/url-state/time-ranges/parser"; import type { DashboardTimeControls } from "@rilldata/web-common/lib/time/types"; -import { get } from "svelte/store"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { getQueryServiceMetricsViewTimeRangesQueryKey, queryServiceMetricsViewTimeRanges, @@ -39,7 +38,7 @@ export async function resolveTimeRanges( if (rillTimes.length === 0) return timeRangesToReturn; - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); const metricsViewName = exploreSpec.metricsView!; try { diff --git a/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts b/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts index 0c733891dda..a0e2347debf 100644 --- a/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts +++ b/web-common/src/features/dashboards/time-dimension-details/tdd-export.ts @@ -14,7 +14,7 @@ import type { V1Query, V1TimeRange, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { get } from "svelte/store"; import { buildWhereParamForDimensionTableAndTDDExports } from "../../exports/export-filters"; import { dimensionSearchText as dimensionSearchTextStore } from "../stores/dashboard-stores"; @@ -93,7 +93,7 @@ export function getTDDAggregationRequest({ const timeDimension = metricsViewSpec.timeDimension ?? ""; return { - instanceId: get(runtime).instanceId, + instanceId: httpClient.getInstanceId(), metricsView: metricsViewName, dimensions: [ { name: dimensionName }, diff --git a/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte b/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte index 4df0a0c3c32..2ddc29cdc9d 100644 --- a/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte +++ b/web-common/src/features/dashboards/time-series/MetricsTimeSeriesCharts.svelte @@ -37,7 +37,7 @@ type AvailableTimeGrain, } from "@rilldata/web-common/lib/time/types"; import type { MetricsViewSpecMeasure } from "@rilldata/web-common/runtime-client"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { Button } from "../../../components/button"; import Pivot from "../../../components/icons/Pivot.svelte"; import { TIME_GRAIN } from "../../../lib/time/config"; @@ -94,7 +94,7 @@ ready: timeControlsReady, } = $timeControlsStore); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); let scrubStart; let scrubEnd; diff --git a/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts b/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts index 33e42658042..20ad9ab85e0 100644 --- a/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts +++ b/web-common/src/features/dashboards/time-series/multiple-dimension-queries.ts @@ -8,7 +8,6 @@ import { } from "@rilldata/web-common/features/dashboards/stores/filter-utils"; import { createBatches } from "@rilldata/web-common/lib/arrayUtils"; import { type Readable, derived } from "svelte/store"; - import { COMPARIONS_COLORS } from "@rilldata/web-common/features/dashboards/config"; import { getDimensionFilterWithSearch } from "@rilldata/web-common/features/dashboards/dimension-table/dimension-table-utils"; import { @@ -78,13 +77,12 @@ export function getDimensionValuesForComparison( ): Readable { return derived( [ - ctx.runtime, ctx.metricsViewName, ctx.dashboardStore, useTimeControlStore(ctx), dimensionSearchText, ], - ([runtime, name, dashboardStore, timeControls, searchText], set) => { + ([name, dashboardStore, timeControls, searchText], set) => { const isValidMeasureList = measures?.length > 0 && measures?.every((m) => m !== undefined); @@ -124,7 +122,7 @@ export function getDimensionValuesForComparison( return derived( createQueryServiceMetricsViewAggregation( - runtime.instanceId, + ctx.instanceId, name, { measures: measures.map((measure) => ({ name: measure })), @@ -231,13 +229,8 @@ function getAggregationQueryForTopList( isTimeComparison: boolean = false, ): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - ctx.dashboardStore, - useTimeControlStore(ctx), - ], - ([runtime, metricsViewName, dashboardStore, timeStore], set) => { + [ctx.metricsViewName, ctx.dashboardStore, useTimeControlStore(ctx)], + ([metricsViewName, dashboardStore, timeStore], set) => { const dimensionName = dashboardStore?.selectedComparisonDimension; const timeGrain = timeStore?.selectedTimeRange?.interval || V1TimeGrain.TIME_GRAIN_DAY; @@ -255,7 +248,7 @@ function getAggregationQueryForTopList( ); return createQueryServiceMetricsViewAggregation( - runtime.instanceId, + ctx.instanceId, metricsViewName, { measures: measures.map((measure) => ({ name: measure })), diff --git a/web-common/src/features/dashboards/time-series/timeseries-data-store.ts b/web-common/src/features/dashboards/time-series/timeseries-data-store.ts index 4b62eee0632..024d21c310b 100644 --- a/web-common/src/features/dashboards/time-series/timeseries-data-store.ts +++ b/web-common/src/features/dashboards/time-series/timeseries-data-store.ts @@ -58,15 +58,10 @@ export function createMetricsViewTimeSeries( isComparison = false, ): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - ctx.dashboardStore, - useTimeControlStore(ctx), - ], - ([runtime, metricsViewName, dashboardStore, timeControls], set) => { + [ctx.metricsViewName, ctx.dashboardStore, useTimeControlStore(ctx)], + ([metricsViewName, dashboardStore, timeControls], set) => { return createQueryServiceMetricsViewTimeSeries( - runtime.instanceId, + ctx.instanceId, metricsViewName, { measureNames: measures, diff --git a/web-common/src/features/dashboards/time-series/totals-data-store.ts b/web-common/src/features/dashboards/time-series/totals-data-store.ts index 7483ec75fd0..4b59d1b9694 100644 --- a/web-common/src/features/dashboards/time-series/totals-data-store.ts +++ b/web-common/src/features/dashboards/time-series/totals-data-store.ts @@ -21,15 +21,10 @@ export function createTotalsForMeasure( isComparison = false, ): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - useTimeControlStore(ctx), - ctx.dashboardStore, - ], - ([runtime, metricsViewName, timeControls, dashboard], set) => + [ctx.metricsViewName, useTimeControlStore(ctx), ctx.dashboardStore], + ([metricsViewName, timeControls, dashboard], set) => createQueryServiceMetricsViewAggregation( - runtime.instanceId, + ctx.instanceId, metricsViewName, { measures: measures.map((measure) => ({ name: measure })), @@ -66,13 +61,8 @@ export function createUnfilteredTotalsForMeasure( dimensionName: string, ): CreateQueryResult { return derived( - [ - ctx.runtime, - ctx.metricsViewName, - useTimeControlStore(ctx), - ctx.dashboardStore, - ], - ([runtime, metricsViewName, timeControls, dashboard], set) => { + [ctx.metricsViewName, useTimeControlStore(ctx), ctx.dashboardStore], + ([metricsViewName, timeControls, dashboard], set) => { const filter = sanitiseExpression( mergeDimensionAndMeasureFilters( dashboard.whereFilter, @@ -87,7 +77,7 @@ export function createUnfilteredTotalsForMeasure( ); createQueryServiceMetricsViewAggregation( - runtime.instanceId, + ctx.instanceId, metricsViewName, { measures: measures.map((measure) => ({ name: measure })), diff --git a/web-common/src/features/dashboards/workspace/Dashboard.svelte b/web-common/src/features/dashboards/workspace/Dashboard.svelte index 0f415396b47..b0d1aae43b5 100644 --- a/web-common/src/features/dashboards/workspace/Dashboard.svelte +++ b/web-common/src/features/dashboards/workspace/Dashboard.svelte @@ -10,7 +10,7 @@ import Resizer from "@rilldata/web-common/layout/Resizer.svelte"; import { useExploreState } from "web-common/src/features/dashboards/stores/dashboard-stores"; import { DashboardState_ActivePage } from "../../../proto/gen/rill/ui/v1/dashboard_pb"; - import { runtime } from "../../../runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import MeasuresContainer from "../big-number/MeasuresContainer.svelte"; import DimensionDisplay from "../dimension-table/DimensionDisplay.svelte"; import Filters from "../filters/Filters.svelte"; @@ -50,7 +50,7 @@ let metricsWidth = DEFAULT_TIMESERIES_WIDTH; let resizing = false; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ whereFilter, dimensionThresholdFilters } = $dashboardStore); diff --git a/web-common/src/features/editor/FileWorkspaceHeader.svelte b/web-common/src/features/editor/FileWorkspaceHeader.svelte index 74544c99511..67c72f03af8 100644 --- a/web-common/src/features/editor/FileWorkspaceHeader.svelte +++ b/web-common/src/features/editor/FileWorkspaceHeader.svelte @@ -2,7 +2,7 @@ import { goto } from "$app/navigation"; import { splitFolderAndFileName } from "@rilldata/web-common/features/entity-management/file-path-utils"; import { handleEntityRename } from "@rilldata/web-common/features/entity-management/ui-actions"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { WorkspaceHeader } from "../../layout/workspace"; import type { ResourceKind } from "../entity-management/resource-selectors"; import { PROTECTED_FILES } from "../file-explorer/protected-paths"; @@ -18,7 +18,7 @@ $: [, fileName] = splitFolderAndFileName(filePath); $: isProtectedFile = PROTECTED_FILES.includes(filePath); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); const onChangeCallback = async (newTitle: string) => { const route = await handleEntityRename( diff --git a/web-common/src/features/entity-management/AddAssetButton.svelte b/web-common/src/features/entity-management/AddAssetButton.svelte index de5ed2bf512..fb338f5f6ee 100644 --- a/web-common/src/features/entity-management/AddAssetButton.svelte +++ b/web-common/src/features/entity-management/AddAssetButton.svelte @@ -17,7 +17,7 @@ createRuntimeServiceCreateDirectory, createRuntimeServicePutFile, } from "../../runtime-client"; - import { runtime } from "../../runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { useIsModelingSupportedForDefaultOlapDriverOLAP as useIsModelingSupportedForDefaultOlapDriver } from "../connectors/selectors"; import { directoryState } from "../file-explorer/directory-store"; import { createResourceFile } from "../file-explorer/new-files"; @@ -44,7 +44,7 @@ const createFile = createRuntimeServicePutFile(); const createFolder = createRuntimeServiceCreateDirectory(); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: currentFile = $page.params.file; $: currentDirectory = currentFile diff --git a/web-common/src/features/entity-management/RenameAssetModal.svelte b/web-common/src/features/entity-management/RenameAssetModal.svelte index 115877dcc1c..6313ef256a0 100644 --- a/web-common/src/features/entity-management/RenameAssetModal.svelte +++ b/web-common/src/features/entity-management/RenameAssetModal.svelte @@ -13,7 +13,7 @@ import { defaults, setError, superForm } from "sveltekit-superforms"; import { yup } from "sveltekit-superforms/adapters"; import { object, string } from "yup"; - import { runtime } from "../../runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { renameFileArtifact } from "./actions"; import { removeLeadingSlash } from "./entity-mappers"; import { @@ -26,7 +26,7 @@ export let filePath: string; export let isDir: boolean; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); let error: string; diff --git a/web-common/src/features/entity-management/file-and-resource-watcher.ts b/web-common/src/features/entity-management/file-and-resource-watcher.ts index 3b175d6acc2..c6fc7dc2c24 100644 --- a/web-common/src/features/entity-management/file-and-resource-watcher.ts +++ b/web-common/src/features/entity-management/file-and-resource-watcher.ts @@ -25,8 +25,7 @@ import { invalidateMetricsViewData, invalidateProfilingQueries, } from "@rilldata/web-common/runtime-client/invalidation"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { get } from "svelte/store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { connectorExplorerStore } from "../connectors/explorer/connector-explorer-store"; import { sourceImportedPath } from "../sources/sources-store"; import { isLeafResource } from "./dag-utils"; @@ -135,7 +134,7 @@ export class FileAndResourceWatcher { } private get instanceId() { - return get(runtime).instanceId; + return httpClient.getInstanceId(); } private invalidateAll() { diff --git a/web-common/src/features/entity-management/file-artifact.ts b/web-common/src/features/entity-management/file-artifact.ts index d447a133155..2d0a915dfce 100644 --- a/web-common/src/features/entity-management/file-artifact.ts +++ b/web-common/src/features/entity-management/file-artifact.ts @@ -18,7 +18,7 @@ import { type V1Resource, type V1ResourceName, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { QueryClient, QueryFunction } from "@tanstack/svelte-query"; import { derived, @@ -122,7 +122,7 @@ export class FileArtifact { } fetchContent = async (invalidate = false) => { - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); const queryParams = { path: this.path, }; @@ -225,7 +225,7 @@ export class FileArtifact { }; private saveContent = async (blob: string) => { - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); // Optimistically update the query queryClient.setQueryData( diff --git a/web-common/src/features/entity-management/resource-selectors.ts b/web-common/src/features/entity-management/resource-selectors.ts index 0a16b6b3ffa..a05c3550b86 100644 --- a/web-common/src/features/entity-management/resource-selectors.ts +++ b/web-common/src/features/entity-management/resource-selectors.ts @@ -17,8 +17,7 @@ import { import type { CreateQueryOptions, QueryClient } from "@tanstack/svelte-query"; import type { ErrorType } from "../../runtime-client/http-client"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; -import { derived } from "svelte/store"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; export enum ResourceKind { ProjectParser = "rill.runtime.v1.ProjectParser", @@ -269,36 +268,35 @@ export async function fetchResources( } export function getMetricsViewAndExploreSpecsQueryOptions() { - return derived(runtime, ({ instanceId }) => - getRuntimeServiceListResourcesQueryOptions(instanceId, undefined, { - query: { - select: (data) => { - const metricsViewSpecsMap = new Map(); - const exploreSpecsMap = new Map(); - const exploreForMetricViewsMap = new Map(); + const instanceId = httpClient.getInstanceId(); + return getRuntimeServiceListResourcesQueryOptions(instanceId, undefined, { + query: { + select: (data) => { + const metricsViewSpecsMap = new Map(); + const exploreSpecsMap = new Map(); + const exploreForMetricViewsMap = new Map(); - data.resources?.forEach((res) => { - if (res.metricsView?.state?.validSpec) { - metricsViewSpecsMap.set( - res.meta?.name?.name ?? "", - res.metricsView.state.validSpec, - ); - } else if (res.explore?.state?.validSpec) { - const metricsViewName = - res.explore.state.validSpec.metricsView ?? ""; - const exploreName = res.meta?.name?.name ?? ""; - exploreForMetricViewsMap.set(metricsViewName, exploreName); - exploreSpecsMap.set(exploreName, res.explore.state.validSpec); - } - }); + data.resources?.forEach((res) => { + if (res.metricsView?.state?.validSpec) { + metricsViewSpecsMap.set( + res.meta?.name?.name ?? "", + res.metricsView.state.validSpec, + ); + } else if (res.explore?.state?.validSpec) { + const metricsViewName = + res.explore.state.validSpec.metricsView ?? ""; + const exploreName = res.meta?.name?.name ?? ""; + exploreForMetricViewsMap.set(metricsViewName, exploreName); + exploreSpecsMap.set(exploreName, res.explore.state.validSpec); + } + }); - return { - metricsViewSpecsMap, - exploreSpecsMap, - exploreForMetricViewsMap, - }; - }, + return { + metricsViewSpecsMap, + exploreSpecsMap, + exploreForMetricViewsMap, + }; }, - }), - ); + }, + }); } diff --git a/web-common/src/features/explore-mappers/map-to-explore.ts b/web-common/src/features/explore-mappers/map-to-explore.ts index 4b6959d0e30..e0827ca00bb 100644 --- a/web-common/src/features/explore-mappers/map-to-explore.ts +++ b/web-common/src/features/explore-mappers/map-to-explore.ts @@ -16,8 +16,8 @@ import { type V1MetricsViewAggregationRequest, type V1MetricsViewComparisonRequest, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { derived, get, readable, type Readable } from "svelte/store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; +import { derived, readable, type Readable } from "svelte/store"; export type MapQueryRequest = { exploreName: string; @@ -103,14 +103,14 @@ export function mapQueryToDashboard( // backwards compatibility for older alerts created on metrics explore directly if (!exploreName) exploreName = metricsViewName; - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); return derived( [ useExploreValidSpec(instanceId, exploreName, undefined, queryClient), // TODO: handle non-timestamp dashboards createQueryServiceMetricsViewTimeRange( - get(runtime).instanceId, + instanceId, metricsViewName, {}, undefined, diff --git a/web-common/src/features/explore-mappers/open-query.ts b/web-common/src/features/explore-mappers/open-query.ts index 5818e5eccf8..44900ff85ce 100644 --- a/web-common/src/features/explore-mappers/open-query.ts +++ b/web-common/src/features/explore-mappers/open-query.ts @@ -10,16 +10,16 @@ import { runtimeServiceListResources, } from "@rilldata/web-common/runtime-client"; import type { Schema as MetricsResolverQuery } from "@rilldata/web-common/runtime-client/gen/resolvers/metrics/schema.ts"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { error, redirect } from "@sveltejs/kit"; -import { get } from "svelte/store"; export async function openQuery({ url, organization, project, + instanceId, }: { url: URL; + instanceId: string; organization?: string; project?: string; }) { @@ -49,10 +49,17 @@ export async function openQuery({ } // Find an explore dashboard that uses this metrics view - const exploreName = await findExploreForMetricsView(metricsViewName); + const exploreName = await findExploreForMetricsView( + metricsViewName, + instanceId, + ); // Convert query to ExploreState - const exploreState = await convertQueryToExploreState(query, exploreName); + const exploreState = await convertQueryToExploreState( + query, + exploreName, + instanceId, + ); // Generate the final explore URL exploreURL = await generateExploreLink( @@ -82,9 +89,8 @@ export async function openQuery({ */ async function findExploreForMetricsView( metricsViewName: string, + instanceId: string, ): Promise { - const instanceId = get(runtime).instanceId; - // List all explore resources const exploreResources = await queryClient.fetchQuery({ queryKey: getRuntimeServiceListResourcesQueryKey(instanceId, { @@ -119,9 +125,8 @@ async function findExploreForMetricsView( async function convertQueryToExploreState( query: MetricsResolverQuery, exploreName: string, + instanceId: string, ): Promise> { - const instanceId = get(runtime).instanceId; - // Get explore and metrics view specs const getExploreResponse = await queryClient.fetchQuery({ queryKey: getRuntimeServiceGetExploreQueryKey(instanceId, { diff --git a/web-common/src/features/explore-mappers/utils.ts b/web-common/src/features/explore-mappers/utils.ts index 3c54d93324c..e4205955d29 100644 --- a/web-common/src/features/explore-mappers/utils.ts +++ b/web-common/src/features/explore-mappers/utils.ts @@ -32,8 +32,7 @@ import { type V1TimeRange, type V1TimeRangeSummary, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { get } from "svelte/store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; // We are manually sending in duration, offset and round to grain for previous complete ranges. // This is to map back that split @@ -150,7 +149,7 @@ export async function getExplorePageUrlSearchParams( exploreName: string, exploreState: Partial, ): Promise { - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); const { explore, metricsView } = await queryClient.fetchQuery({ queryFn: ({ signal }) => runtimeServiceGetExplore( @@ -219,7 +218,7 @@ export function maybeGetExplorePageUrlSearchParams( metricsViewSpec: V1MetricsViewSpec, exploreSpec: V1ExploreSpec, ) { - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); const metricsViewName = exploreSpec.metricsView ?? ""; const metricsViewTimeRangeQueryKey = diff --git a/web-common/src/features/explores/ExploreMenuItems.svelte b/web-common/src/features/explores/ExploreMenuItems.svelte index 525fff6efe3..b8331bcde7a 100644 --- a/web-common/src/features/explores/ExploreMenuItems.svelte +++ b/web-common/src/features/explores/ExploreMenuItems.svelte @@ -1,7 +1,7 @@ diff --git a/web-common/src/features/scheduled-reports/ScheduleForm.svelte b/web-common/src/features/scheduled-reports/ScheduleForm.svelte index 7932243cf7f..f77515a4b70 100644 --- a/web-common/src/features/scheduled-reports/ScheduleForm.svelte +++ b/web-common/src/features/scheduled-reports/ScheduleForm.svelte @@ -7,13 +7,13 @@ makeTimeZoneOptions, ReportFrequency, } from "@rilldata/web-common/features/scheduled-reports/time-utils.ts"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { Readable } from "svelte/store"; export let data: Readable>; export let exploreName: string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); // Pull the time zone options from the dashboard's spec $: exploreSpec = useExploreValidSpec(instanceId, exploreName); diff --git a/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte b/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte index 3c091293287..c471f2c7a6d 100644 --- a/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte +++ b/web-common/src/features/scheduled-reports/ScheduledReportDialog.svelte @@ -52,7 +52,7 @@ type V1ReportSpec, type V1ReportSpecAnnotations, } from "../../runtime-client"; - import { runtime } from "../../runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { getStateManagers } from "../dashboards/state-managers/state-managers"; import { ResourceKind } from "../entity-management/resource-selectors"; import BaseScheduledReportForm from "./BaseScheduledReportForm.svelte"; @@ -65,7 +65,7 @@ const FORM_ID = "scheduled-report-form"; $: ({ organization, project, report: reportName } = $page.params); - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: listProjectMemberUsersQuery = createAdminServiceListProjectMemberUsers( organization, diff --git a/web-common/src/features/sources/errors/ErrorPane.svelte b/web-common/src/features/sources/errors/ErrorPane.svelte index 7a03ed4aa4b..4ae0733f1c2 100644 --- a/web-common/src/features/sources/errors/ErrorPane.svelte +++ b/web-common/src/features/sources/errors/ErrorPane.svelte @@ -1,13 +1,13 @@ - -{#if _host && _instanceId} - -{/if} diff --git a/web-common/src/runtime-client/StreamingQueryBatch.ts b/web-common/src/runtime-client/StreamingQueryBatch.ts index 8fdfd822475..a4fd0ee0597 100644 --- a/web-common/src/runtime-client/StreamingQueryBatch.ts +++ b/web-common/src/runtime-client/StreamingQueryBatch.ts @@ -5,8 +5,7 @@ import type { V1QueryBatchResponse, V1QueryResult, } from "@rilldata/web-common/runtime-client/gen/index.schemas"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { get } from "svelte/store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; type BatchQueryEntry = { query: V1Query; @@ -54,12 +53,11 @@ export class StreamingQueryBatch { } private async runBatch() { - const runtimeState = get(runtime); const queries = this.queryEntries; this.queryEntries = []; const headers = { "Content-Type": "application/json" }; - const jwt = runtimeState.jwt; + const jwt = httpClient.getJwt(); if (jwt) { headers["Authorization"] = `Bearer ${jwt.token}`; } @@ -77,7 +75,7 @@ export class StreamingQueryBatch { }); const stream = streamingFetchWrapper<{ result: V1QueryBatchResponse }>( - `${runtimeState.host}/v1/instances/${runtimeState.instanceId}/query/batch`, + `${httpClient.getHost()}/v1/instances/${httpClient.getInstanceId()}/query/batch`, "POST", body, headers, diff --git a/web-common/src/runtime-client/gen/connector-service/connector-service.ts b/web-common/src/runtime-client/gen/connector-service/connector-service.ts index ffa1c17a93e..6ef74b1d0cb 100644 --- a/web-common/src/runtime-client/gen/connector-service/connector-service.ts +++ b/web-common/src/runtime-client/gen/connector-service/connector-service.ts @@ -32,7 +32,7 @@ import type { V1OLAPListTablesResponse, } from "../index.schemas"; -import { httpClient } from "../../http-client"; +import httpClient from "../../http-client"; import type { ErrorType } from "../../http-client"; type AwaitedInput = PromiseLike | T; diff --git a/web-common/src/runtime-client/gen/query-service/query-service.ts b/web-common/src/runtime-client/gen/query-service/query-service.ts index 9abed0ec007..d6c2ca67efe 100644 --- a/web-common/src/runtime-client/gen/query-service/query-service.ts +++ b/web-common/src/runtime-client/gen/query-service/query-service.ts @@ -85,7 +85,7 @@ import type { V1TableRowsResponse, } from "../index.schemas"; -import { httpClient } from "../../http-client"; +import httpClient from "../../http-client"; import type { ErrorType } from "../../http-client"; type AwaitedInput = PromiseLike | T; diff --git a/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts b/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts index 2be7fc3bfab..a638f0e8a1f 100644 --- a/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts +++ b/web-common/src/runtime-client/gen/runtime-service/runtime-service.ts @@ -100,7 +100,7 @@ import type { V1UnpackExampleResponse, } from "../index.schemas"; -import { httpClient } from "../../http-client"; +import httpClient from "../../http-client"; import type { ErrorType } from "../../http-client"; type AwaitedInput = PromiseLike | T; diff --git a/web-common/src/runtime-client/http-client.ts b/web-common/src/runtime-client/http-client.ts index b51c75331ea..d7117ae2e8d 100644 --- a/web-common/src/runtime-client/http-client.ts +++ b/web-common/src/runtime-client/http-client.ts @@ -2,10 +2,12 @@ import type { FetchWrapperOptions, HTTPError, } from "@rilldata/web-common/runtime-client/fetchWrapper"; -import { get } from "svelte/store"; import { RUNTIME_ACCESS_TOKEN_DEFAULT_TTL } from "./constants"; import { HttpRequestQueue } from "./http-request-queue/HttpRequestQueue"; -import { type JWT, runtime } from "./runtime-store"; +import { type AuthContext, type JWT } from "./runtime-store"; +import { invalidateRuntimeQueries } from "./invalidation"; +import { queryClient } from "../lib/svelte-query/globalQueryClient"; +import { featureFlags } from "../features/feature-flags"; /** * Runtime base URL @@ -18,28 +20,102 @@ import { type JWT, runtime } from "./runtime-store"; export const httpRequestQueue = new HttpRequestQueue(); -export const httpClient = async ( - config: FetchWrapperOptions, -): Promise => { - // Naive request interceptors - - // Set host - const host = get(runtime).host; - const interceptedConfig = { ...config, baseUrl: host }; - - // Set JWT - let jwt = get(runtime).jwt; - if (jwt && jwt.token) { - jwt = await maybeWaitForFreshJWT(jwt); - interceptedConfig.headers = { - ...interceptedConfig.headers, - Authorization: `Bearer ${jwt.token}`, - }; - } +export class HTTPClient {} + +export const createHttpClient = ( + initialHost: string = "", + initialJwt?: JWT, +) => { + let _host = initialHost; + let _jwt = initialJwt; + let _instanceId = ""; + + const client = async (config: FetchWrapperOptions): Promise => { + // Naive request interceptors + + // Set host + const interceptedConfig = { ...config, baseUrl: _host }; + + // Set JWT + if (_jwt && _jwt.token) { + _jwt = await maybeWaitForFreshJWT(_jwt); + interceptedConfig.headers = { + ...interceptedConfig.headers, + Authorization: `Bearer ${_jwt.token}`, + }; + } + + return (await httpRequestQueue.add(interceptedConfig)) as Promise; + }; + + client.setDefaultsForMocks = () => { + _host = "http://localhost"; + _instanceId = "default"; + }; + + client.updateQuerySettings = async ({ + host, + token, + authContext, + instanceId, + }: { + host: string; + token: string | undefined; + authContext: AuthContext; + instanceId: string; + }) => { + let invalidate = false; + // Don't update the store if the values have not changed + // (especially, don't update the JWT `receivedAt`) + if ( + host === _host && + token === _jwt?.token && + authContext === _jwt?.authContext && + instanceId === _instanceId + ) { + return; + } - return (await httpRequestQueue.add(interceptedConfig)) as Promise; + // Mark the runtime queries for invalidation if the auth context has changed + // E.g. when switching from a normal user to a mocked user + const authContextChanged = + !!_jwt?.authContext && authContext !== _jwt.authContext; + if (authContextChanged) invalidate = true; + + _instanceId = instanceId; + + _host = host; + _jwt = + token && authContext + ? { token: token, receivedAt: Date.now(), authContext } + : undefined; + + void featureFlags.setInstanceId(instanceId); + + if (invalidate) await invalidateRuntimeQueries(queryClient, _instanceId); + }; + + client.getHost = () => _host; + client.getJwt = () => _jwt; + client.getInstanceId = () => _instanceId; + + client.updateJWT = async ( + token: string | undefined, + authContext: AuthContext | undefined, + ) => { + await client.updateQuerySettings({ + host: _host, + token: token, + authContext: authContext || "user", + instanceId: _instanceId, + }); + }; + + return client; }; +const httpClient = createHttpClient(); + const JWT_EXPIRY_WARNING_WINDOW = 2 * 1000; // Extra time to ensure that the JWT is not expired when it ultimately reaches the server const CHECK_RUNTIME_STORE_FOR_JWT_INTERVAL = 50; // Interval to recheck JWT freshness in milliseconds @@ -57,7 +133,7 @@ async function maybeWaitForFreshJWT(jwt: JWT): Promise { await new Promise((resolve) => setTimeout(resolve, CHECK_RUNTIME_STORE_FOR_JWT_INTERVAL), ); - jwt = get(runtime).jwt as JWT; + // jwt = get(runtime).jwt as JWT; jwtExpiresAt = jwt.receivedAt + RUNTIME_ACCESS_TOKEN_DEFAULT_TTL; } diff --git a/web-common/src/runtime-client/http-request-queue/HttpRequestQueue.ts b/web-common/src/runtime-client/http-request-queue/HttpRequestQueue.ts index 8b2a9fe4850..5158ecb3ab8 100644 --- a/web-common/src/runtime-client/http-request-queue/HttpRequestQueue.ts +++ b/web-common/src/runtime-client/http-request-queue/HttpRequestQueue.ts @@ -51,7 +51,7 @@ export class HttpRequestQueue { public add(requestOptions: FetchWrapperOptions) { // prepend after parsing to make parsing faster - requestOptions.url = `${requestOptions?.baseUrl}${requestOptions.url}`; + requestOptions.url = `${requestOptions?.baseUrl ?? ""}${requestOptions.url}`; const urlMatch = UrlExtractorRegex.exec(requestOptions.url); diff --git a/web-common/src/runtime-client/local-service.ts b/web-common/src/runtime-client/local-service.ts index 186ece960ca..9e3480ac045 100644 --- a/web-common/src/runtime-client/local-service.ts +++ b/web-common/src/runtime-client/local-service.ts @@ -20,7 +20,6 @@ import { GitPushRequest, GithubRepoStatusRequest, } from "@rilldata/web-common/proto/gen/rill/local/v1/api_pb"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; import { createMutation, createQuery, @@ -30,7 +29,7 @@ import { type DataTag, type QueryKey, } from "@tanstack/svelte-query"; -import { get } from "svelte/store"; +import httpClient from "./http-client"; /** * Handwritten wrapper on LocalService. @@ -43,7 +42,7 @@ const clients = new Map< ReturnType> >(); function getClient() { - const host = get(runtime).host; + const host = httpClient.getHost(); if (clients.has(host)) return clients.get(host)!; const transport = createConnectTransport({ diff --git a/web-common/src/runtime-client/query-options.ts b/web-common/src/runtime-client/query-options.ts index baab2c7e692..74ce925c853 100644 --- a/web-common/src/runtime-client/query-options.ts +++ b/web-common/src/runtime-client/query-options.ts @@ -1,18 +1,31 @@ -import type { FetchQueryOptions } from "@tanstack/svelte-query"; -import type { RuntimeServiceGetResourceParams } from "./gen/index.schemas"; -import type { RuntimeServiceGetResourceQueryResult } from "./gen/runtime-service/runtime-service"; -import { - getRuntimeServiceGetResourceQueryKey, - runtimeServiceGetResource, -} from "./gen/runtime-service/runtime-service"; +// import type { FetchQueryOptions } from "@tanstack/svelte-query"; +// import type { +// RuntimeServiceGetResourceParams, +// V1GetResourceResponse, +// } from "./gen/index.schemas"; +// import type { RuntimeServiceGetResourceQueryResult } from "./gen/runtime-service/runtime-service"; +// import { getRuntimeServiceGetResourceQueryKey } from "./gen/runtime-service/runtime-service"; +// import httpClient from "@rilldata/web-common/runtime-client/http-client.ts"; +// import type { Runtime } from "@rilldata/web-common/runtime-client/runtime-store.ts"; -export function getRuntimeServiceGetResourceQueryOptions( - instanceId: string, - params: RuntimeServiceGetResourceParams, -) { - return >{ - queryKey: getRuntimeServiceGetResourceQueryKey(instanceId, params), - queryFn: () => runtimeServiceGetResource(instanceId, params), - staleTime: Infinity, - }; -} +// export function getRuntimeServiceGetResourceQueryOptions( +// runtime: Runtime, +// params: RuntimeServiceGetResourceParams, +// ) { +// return >{ +// queryKey: getRuntimeServiceGetResourceQueryKey(runtime.instanceId, params), +// queryFn: () => +// httpClient({ +// url: `/v1/instances/${runtime.instanceId}/resource`, +// method: "GET", +// params, +// baseUrl: runtime.host, +// headers: runtime.jwt +// ? { +// Authorization: `Bearer ${runtime.jwt?.token}`, +// } +// : undefined, +// }), +// staleTime: Infinity, +// }; +// } diff --git a/web-common/src/runtime-client/runtime-store.ts b/web-common/src/runtime-client/runtime-store.ts index ea2ddce7de5..aeded3fe66f 100644 --- a/web-common/src/runtime-client/runtime-store.ts +++ b/web-common/src/runtime-client/runtime-store.ts @@ -1,7 +1,3 @@ -import { QueryClient } from "@tanstack/svelte-query"; -import { writable } from "svelte/store"; -import { invalidateRuntimeQueries } from "./invalidation"; - export type AuthContext = "user" | "mock" | "magic" | "embed"; export interface JWT { @@ -11,67 +7,3 @@ export interface JWT { receivedAt: number; authContext: AuthContext; } - -export interface Runtime { - host: string; - instanceId: string; - jwt?: JWT; -} - -const createRuntimeStore = () => { - const { subscribe, set, update } = writable({ - host: "", - instanceId: "", - }); - - return { - subscribe, - update, - set, // backwards-compatibility for web-local (where there's no JWT) - setRuntime: async ( - queryClient: QueryClient, - host: string, - instanceId: string, - jwt?: string, - authContext?: AuthContext, - ) => { - if (jwt && !authContext) { - throw new Error("authContext is required if jwt is provided"); - } - - let invalidate = false; - - update((current) => { - // Don't update the store if the values have not changed - // (especially, don't update the JWT `receivedAt`) - if ( - host === current.host && - instanceId === current.instanceId && - jwt === current.jwt?.token && - authContext === current.jwt?.authContext - ) { - return current; - } - - // Mark the runtime queries for invalidation if the auth context has changed - // E.g. when switching from a normal user to a mocked user - const authContextChanged = - !!current.jwt?.authContext && authContext !== current.jwt.authContext; - if (authContextChanged) invalidate = true; - - return { - host, - instanceId, - jwt: - jwt && authContext - ? { token: jwt, receivedAt: Date.now(), authContext } - : undefined, - }; - }); - - if (invalidate) await invalidateRuntimeQueries(queryClient, instanceId); - }, - }; -}; - -export const runtime = createRuntimeStore(); diff --git a/web-common/src/runtime-client/sse-fetch-client.ts b/web-common/src/runtime-client/sse-fetch-client.ts index 785bc87fba5..77cd4dd4ddc 100644 --- a/web-common/src/runtime-client/sse-fetch-client.ts +++ b/web-common/src/runtime-client/sse-fetch-client.ts @@ -1,5 +1,4 @@ -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { get } from "svelte/store"; +import httpClient from "./http-client"; /** * Represents a Server-Sent Event message @@ -156,7 +155,7 @@ export class SSEFetchClient { ...customHeaders, }; - const jwt = get(runtime).jwt; + const jwt = httpClient.getJwt(); if (jwt) { headers["Authorization"] = `Bearer ${jwt.token}`; } diff --git a/web-local/src/hooks.client.ts b/web-local/src/hooks.client.ts index 6282936bdaa..8b38cf32373 100644 --- a/web-local/src/hooks.client.ts +++ b/web-local/src/hooks.client.ts @@ -1,14 +1,14 @@ import { dev } from "$app/environment"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; /** INITIALIZE RUNTIME STORE **/ // When testing, we need to use the relative path to the server const HOST = dev ? "http://localhost:9009" : ""; const INSTANCE_ID = "default"; -const runtimeInit = { - host: HOST, +void httpClient.updateQuerySettings({ instanceId: INSTANCE_ID, -}; - -runtime.set(runtimeInit); + host: HOST, + token: undefined, + authContext: "user", +}); diff --git a/web-local/src/lib/time-ranges-test.ts b/web-local/src/lib/time-ranges-test.ts index c5570800aac..d3ddfbd9d3b 100644 --- a/web-local/src/lib/time-ranges-test.ts +++ b/web-local/src/lib/time-ranges-test.ts @@ -2,10 +2,9 @@ import { queryServiceMetricsViewTimeRanges, queryServiceMetricsViewTimeRange, } from "@rilldata/web-common/runtime-client"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { get } from "svelte/store"; import { Interval, DateTime, type DateTimeUnit } from "luxon"; import { GrainAliasToOrder } from "@rilldata/web-common/lib/time/new-grains"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; const GRAINS = ["Y", "Q", "M", "W", "D", "H", "m", "s"] as const; @@ -336,7 +335,7 @@ function generateFirstNPeriodTests(metadata: TimeMetadata, n: number = 3) { } export async function runTests(metricsViewName: string) { - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); let failures = 1; diff --git a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte index 7965f3f3022..42b83f5f1f1 100644 --- a/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte +++ b/web-local/src/routes/(application)/(workspace)/files/[...file]/+page.svelte @@ -16,7 +16,7 @@ import WorkspaceContainer from "@rilldata/web-common/layout/workspace/WorkspaceContainer.svelte"; import WorkspaceEditorContainer from "@rilldata/web-common/layout/workspace/WorkspaceEditorContainer.svelte"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { onMount } from "svelte"; import type { PageData } from "./$types"; @@ -34,7 +34,7 @@ let editor: EditorView; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ fileArtifact } = data); $: ({ diff --git a/web-local/src/routes/(viz)/-/open-query/+page.ts b/web-local/src/routes/(viz)/-/open-query/+page.ts index 7b927a008af..19172ece3b1 100644 --- a/web-local/src/routes/(viz)/-/open-query/+page.ts +++ b/web-local/src/routes/(viz)/-/open-query/+page.ts @@ -1,6 +1,7 @@ import { openQuery } from "@rilldata/web-common/features/explore-mappers/open-query"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; export async function load({ url }) { // Open the query (this'll redirect to the relevant Explore page) - await openQuery({ url }); + await openQuery({ url, instanceId: httpClient.getInstanceId() }); } diff --git a/web-local/src/routes/(viz)/canvas/[name]/+page.svelte b/web-local/src/routes/(viz)/canvas/[name]/+page.svelte index ea60dfe8220..0ee629b0e9e 100644 --- a/web-local/src/routes/(viz)/canvas/[name]/+page.svelte +++ b/web-local/src/routes/(viz)/canvas/[name]/+page.svelte @@ -1,12 +1,12 @@ diff --git a/web-local/src/routes/(viz)/explore/[name]/+page.svelte b/web-local/src/routes/(viz)/explore/[name]/+page.svelte index 55a6d4e20ac..cf774db8844 100644 --- a/web-local/src/routes/(viz)/explore/[name]/+page.svelte +++ b/web-local/src/routes/(viz)/explore/[name]/+page.svelte @@ -15,7 +15,7 @@ import { useExploreValidSpec } from "@rilldata/web-common/features/explores/selectors"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { PageData } from "./$types"; export let data: PageData; @@ -25,7 +25,7 @@ $: metricsViewName = metricsView?.meta?.name?.name as string; - $: ({ instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: filePaths = [ ...(explore.meta?.filePaths ?? []), diff --git a/web-local/src/routes/(viz)/explore/[name]/+page.ts b/web-local/src/routes/(viz)/explore/[name]/+page.ts index 65190eb9a1a..c595f6864ca 100644 --- a/web-local/src/routes/(viz)/explore/[name]/+page.ts +++ b/web-local/src/routes/(viz)/explore/[name]/+page.ts @@ -1,10 +1,9 @@ import { fetchExploreSpec } from "@rilldata/web-common/features/explores/selectors"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { error } from "@sveltejs/kit"; -import { get } from "svelte/store"; export const load = async ({ params, depends }) => { - const { instanceId } = get(runtime); + const instanceId = httpClient.getInstanceId(); const exploreName = params.name; diff --git a/web-local/src/routes/+layout.svelte b/web-local/src/routes/+layout.svelte index 5550cf3a293..90258705e8e 100644 --- a/web-local/src/routes/+layout.svelte +++ b/web-local/src/routes/+layout.svelte @@ -21,7 +21,7 @@ initMetrics, } from "@rilldata/web-common/metrics/initMetrics"; import { localServiceGetMetadata } from "@rilldata/web-common/runtime-client/local-service"; - import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; + import httpClient from "@rilldata/web-common/runtime-client/http-client"; import type { Query } from "@tanstack/query-core"; import { QueryClientProvider } from "@tanstack/svelte-query"; import type { AxiosError } from "axios"; @@ -69,7 +69,7 @@ return () => removeJavascriptListeners?.(); }); - $: ({ host, instanceId } = $runtime); + const instanceId = httpClient.getInstanceId(); $: ({ route } = $page); @@ -77,7 +77,7 @@ - +
{#if data.initialized} diff --git a/web-local/src/routes/+layout.ts b/web-local/src/routes/+layout.ts index 8b41f444f3e..cc3950a24fd 100644 --- a/web-local/src/routes/+layout.ts +++ b/web-local/src/routes/+layout.ts @@ -1,8 +1,7 @@ export const ssr = false; import { redirect } from "@sveltejs/kit"; -import { runtime } from "@rilldata/web-common/runtime-client/runtime-store"; -import { get } from "svelte/store"; +import httpClient from "@rilldata/web-common/runtime-client/http-client"; import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient.js"; import { getRuntimeServiceListFilesQueryKey, @@ -17,7 +16,7 @@ Settings.defaultLocale = "en"; export async function load({ url, depends, untrack }) { depends("init"); - const instanceId = get(runtime).instanceId; + const instanceId = httpClient.getInstanceId(); const files = await queryClient.fetchQuery({ queryKey: getRuntimeServiceListFilesQueryKey(instanceId, undefined),