diff --git a/package.json b/package.json index c642815..6065ace 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "dependencies": { "@libsql/client": "^0.14.0", "@outerbase/sdk": "2.0.0-rc.3", + "hono": "^4.6.14", "jose": "^5.9.6", "mongodb": "^6.11.0", "mysql2": "^3.11.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b248e0d..cd7285a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,614 +1,391 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@libsql/client': - specifier: ^0.14.0 - version: 0.14.0 - '@outerbase/sdk': - specifier: 2.0.0-rc.3 - version: 2.0.0-rc.3 - '@tsndr/cloudflare-worker-jwt': - specifier: ^3.1.3 - version: 3.1.3 - jose: - specifier: ^5.9.6 - version: 5.9.6 - mongodb: - specifier: ^6.11.0 - version: 6.11.0 - mysql2: - specifier: ^3.11.4 - version: 3.11.4 - node-sql-parser: - specifier: ^4.18.0 - version: 4.18.0 - pg: - specifier: ^8.13.1 - version: 8.13.1 - -devDependencies: - '@cloudflare/workers-types': - specifier: ^4.20240925.0 - version: 4.20240925.0 - '@types/pg': - specifier: ^8.11.10 - version: 8.11.10 - typescript: - specifier: ^5.5.2 - version: 5.6.2 - wrangler: - specifier: ^3.60.3 - version: 3.78.12(@cloudflare/workers-types@4.20240925.0) +importers: + + .: + dependencies: + '@libsql/client': + specifier: ^0.14.0 + version: 0.14.0 + '@outerbase/sdk': + specifier: 2.0.0-rc.3 + version: 2.0.0-rc.3 + hono: + specifier: ^4.6.14 + version: 4.6.14 + jose: + specifier: ^5.9.6 + version: 5.9.6 + mongodb: + specifier: ^6.11.0 + version: 6.11.0 + mysql2: + specifier: ^3.11.4 + version: 3.11.4 + node-sql-parser: + specifier: ^4.18.0 + version: 4.18.0 + pg: + specifier: ^8.13.1 + version: 8.13.1 + devDependencies: + '@cloudflare/workers-types': + specifier: ^4.20240925.0 + version: 4.20240925.0 + '@types/pg': + specifier: ^8.11.10 + version: 8.11.10 + typescript: + specifier: ^5.5.2 + version: 5.6.2 + wrangler: + specifier: ^3.60.3 + version: 3.78.12(@cloudflare/workers-types@4.20240925.0) packages: - /@cloudflare/kv-asset-handler@0.3.4: + '@cloudflare/kv-asset-handler@0.3.4': resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} - dependencies: - mime: 3.0.0 - dev: true - /@cloudflare/workerd-darwin-64@1.20240925.0: + '@cloudflare/workerd-darwin-64@1.20240925.0': resolution: {integrity: sha512-KdLnSXuzB65CbqZPm+qYzk+zkQ1tUNPaaRGYVd/jPYAxwwtfTUQdQ+ahDPwVVs2tmQELKy7ZjQjf2apqSWUfjw==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@cloudflare/workerd-darwin-arm64@1.20240925.0: + '@cloudflare/workerd-darwin-arm64@1.20240925.0': resolution: {integrity: sha512-MiQ6uUmCXjsXgWNV+Ock2tp2/tYqNJGzjuaH6jFioeRF+//mz7Tv7J7EczOL4zq+TH8QFOh0/PUsLyazIWVGng==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@cloudflare/workerd-linux-64@1.20240925.0: + '@cloudflare/workerd-linux-64@1.20240925.0': resolution: {integrity: sha512-Rjix8jsJMfsInmq3Hm3fmiRQ+rwzuWRPV1pg/OWhMSfNP7Qp2RCU+RGkhgeR9Z5eNAje0Sn2BMrFq4RvF9/yRA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@cloudflare/workerd-linux-arm64@1.20240925.0: + '@cloudflare/workerd-linux-arm64@1.20240925.0': resolution: {integrity: sha512-VYIPeMHQRtbwQoIjUwS/zULlywPxyDvo46XkTpIW5MScEChfqHvAYviQ7TzYGx6Q+gmZmN+DUB2KOMx+MEpCxA==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@cloudflare/workerd-windows-64@1.20240925.0: + '@cloudflare/workerd-windows-64@1.20240925.0': resolution: {integrity: sha512-C8peGvaU5R51bIySi1VbyfRgwNSSRknqoFSnSbSBI3uTN3THTB3UnmRKy7GXJDmyjgXuT9Pcs1IgaWNubLtNtw==} engines: {node: '>=16'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@cloudflare/workers-shared@0.5.4: + '@cloudflare/workers-shared@0.5.4': resolution: {integrity: sha512-PNL/0TjKRdUHa1kwgVdqUNJVZ9ez4kacsi8omz+gv859EvJmsVuGiMAClY2YfJnC9LVKhKCcjqmFgKNXG9/IXA==} engines: {node: '>=16.7.0'} - dependencies: - mime: 3.0.0 - zod: 3.23.8 - dev: true - /@cloudflare/workers-types@4.20240925.0: + '@cloudflare/workers-types@4.20240925.0': resolution: {integrity: sha512-KpqyRWvanEuXgBTKYFzRp4NsWOEcswxjsPRSre1zYQcODmc8PUrraVHQUmgvkJgv3FzB+vI9xm7J6oE4MmZHCA==} - dev: true - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19): + '@esbuild-plugins/node-globals-polyfill@0.2.3': resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} peerDependencies: esbuild: '*' - dependencies: - esbuild: 0.17.19 - dev: true - /@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19): + '@esbuild-plugins/node-modules-polyfill@0.2.2': resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} peerDependencies: esbuild: '*' - dependencies: - esbuild: 0.17.19 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - dev: true - /@esbuild/android-arm64@0.17.19: + '@esbuild/android-arm64@0.17.19': resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.17.19: + '@esbuild/android-arm@0.17.19': resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.17.19: + '@esbuild/android-x64@0.17.19': resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.17.19: + '@esbuild/darwin-arm64@0.17.19': resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.17.19: + '@esbuild/darwin-x64@0.17.19': resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.17.19: + '@esbuild/freebsd-arm64@0.17.19': resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.17.19: + '@esbuild/freebsd-x64@0.17.19': resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.17.19: + '@esbuild/linux-arm64@0.17.19': resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.17.19: + '@esbuild/linux-arm@0.17.19': resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.17.19: + '@esbuild/linux-ia32@0.17.19': resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.17.19: + '@esbuild/linux-loong64@0.17.19': resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.17.19: + '@esbuild/linux-mips64el@0.17.19': resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.17.19: + '@esbuild/linux-ppc64@0.17.19': resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.17.19: + '@esbuild/linux-riscv64@0.17.19': resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.17.19: + '@esbuild/linux-s390x@0.17.19': resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.17.19: + '@esbuild/linux-x64@0.17.19': resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.17.19: + '@esbuild/netbsd-x64@0.17.19': resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.17.19: + '@esbuild/openbsd-x64@0.17.19': resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.17.19: + '@esbuild/sunos-x64@0.17.19': resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.17.19: + '@esbuild/win32-arm64@0.17.19': resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.17.19: + '@esbuild/win32-ia32@0.17.19': resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.17.19: + '@esbuild/win32-x64@0.17.19': resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@fastify/busboy@2.1.1: + '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - dev: true - /@jridgewell/resolve-uri@3.1.2: + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/sourcemap-codec@1.5.0: + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - dev: true - /@jridgewell/trace-mapping@0.3.9: + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@libsql/client@0.14.0: + '@libsql/client@0.14.0': resolution: {integrity: sha512-/9HEKfn6fwXB5aTEEoMeFh4CtG0ZzbncBb1e++OCdVpgKZ/xyMsIVYXm0w7Pv4RUel803vE6LwniB3PqD72R0Q==} - dependencies: - '@libsql/core': 0.14.0 - '@libsql/hrana-client': 0.7.0 - js-base64: 3.7.7 - libsql: 0.4.7 - promise-limit: 2.7.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@libsql/core@0.14.0: + '@libsql/core@0.14.0': resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==} - dependencies: - js-base64: 3.7.7 - dev: false - /@libsql/darwin-arm64@0.4.7: + '@libsql/darwin-arm64@0.4.7': resolution: {integrity: sha512-yOL742IfWUlUevnI5PdnIT4fryY3LYTdLm56bnY0wXBw7dhFcnjuA7jrH3oSVz2mjZTHujxoITgAE7V6Z+eAbg==} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@libsql/darwin-x64@0.4.7: + '@libsql/darwin-x64@0.4.7': resolution: {integrity: sha512-ezc7V75+eoyyH07BO9tIyJdqXXcRfZMbKcLCeF8+qWK5nP8wWuMcfOVywecsXGRbT99zc5eNra4NEx6z5PkSsA==} cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@libsql/hrana-client@0.7.0: + '@libsql/hrana-client@0.7.0': resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==} - dependencies: - '@libsql/isomorphic-fetch': 0.3.1 - '@libsql/isomorphic-ws': 0.1.5 - js-base64: 3.7.7 - node-fetch: 3.3.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@libsql/isomorphic-fetch@0.3.1: + '@libsql/isomorphic-fetch@0.3.1': resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==} engines: {node: '>=18.0.0'} - dev: false - /@libsql/isomorphic-ws@0.1.5: + '@libsql/isomorphic-ws@0.1.5': resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - dependencies: - '@types/ws': 8.5.13 - ws: 8.18.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@libsql/linux-arm64-gnu@0.4.7: + '@libsql/linux-arm64-gnu@0.4.7': resolution: {integrity: sha512-WlX2VYB5diM4kFfNaYcyhw5y+UJAI3xcMkEUJZPtRDEIu85SsSFrQ+gvoKfcVh76B//ztSeEX2wl9yrjF7BBCA==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/linux-arm64-musl@0.4.7: + '@libsql/linux-arm64-musl@0.4.7': resolution: {integrity: sha512-6kK9xAArVRlTCpWeqnNMCoXW1pe7WITI378n4NpvU5EJ0Ok3aNTIC2nRPRjhro90QcnmLL1jPcrVwO4WD1U0xw==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/linux-x64-gnu@0.4.7: + '@libsql/linux-x64-gnu@0.4.7': resolution: {integrity: sha512-CMnNRCmlWQqqzlTw6NeaZXzLWI8bydaXDke63JTUCvu8R+fj/ENsLrVBtPDlxQ0wGsYdXGlrUCH8Qi9gJep0yQ==} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/linux-x64-musl@0.4.7: + '@libsql/linux-x64-musl@0.4.7': resolution: {integrity: sha512-nI6tpS1t6WzGAt1Kx1n1HsvtBbZ+jHn0m7ogNNT6pQHZQj7AFFTIMeDQw/i/Nt5H38np1GVRNsFe99eSIMs9XA==} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/win32-x64-msvc@0.4.7: + '@libsql/win32-x64-msvc@0.4.7': resolution: {integrity: sha512-7pJzOWzPm6oJUxml+PCDRzYQ4A1hTMHAciTAHfFK4fkbDZX33nWPVG7Y3vqdKtslcwAzwmrNDc6sXy2nwWnbiw==} cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@mongodb-js/saslprep@1.1.9: + '@mongodb-js/saslprep@1.1.9': resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} - dependencies: - sparse-bitfield: 3.0.3 - dev: false - /@neon-rs/load@0.0.4: + '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - dev: false - /@outerbase/sdk@2.0.0-rc.3: + '@outerbase/sdk@2.0.0-rc.3': resolution: {integrity: sha512-bmV4hlzs5sz01IDWNHdJC2ZD4ezM4UEwG1fEQi59yByHRtPOVDjK7Z5iQ8e1MbR0814vdhv9hMcUKP8SJDA7vQ==} hasBin: true - dependencies: - handlebars: 4.7.8 - dev: false - /@tsndr/cloudflare-worker-jwt@3.1.3: - resolution: {integrity: sha512-ohuQzCICeki6wBOtmyqk0JJyJvl4vE1/RgXModJzm2U3xfiFNbkXtpa2HHGiH9BG7Wd/G7mtu2xtJ1R8W6iP5w==} - dev: false - - /@types/node-forge@1.3.11: + '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - dependencies: - '@types/node': 22.7.4 - dev: true - /@types/node@22.7.4: + '@types/node@22.7.4': resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} - dependencies: - undici-types: 6.19.8 - /@types/pg@8.11.10: + '@types/pg@8.11.10': resolution: {integrity: sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==} - dependencies: - '@types/node': 22.7.4 - pg-protocol: 1.7.0 - pg-types: 4.0.2 - dev: true - /@types/webidl-conversions@7.0.3: + '@types/webidl-conversions@7.0.3': resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} - dev: false - /@types/whatwg-url@11.0.5: + '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} - dependencies: - '@types/webidl-conversions': 7.0.3 - dev: false - /@types/ws@8.5.13: + '@types/ws@8.5.13': resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} - dependencies: - '@types/node': 22.7.4 - dev: false - /acorn-walk@8.3.4: + acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - dependencies: - acorn: 8.12.1 - dev: true - /acorn@8.12.1: + acorn@8.12.1: resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true - /anymatch@3.1.3: + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - /as-table@1.0.55: + as-table@1.0.55: resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - dependencies: - printable-characters: 1.0.42 - dev: true - /aws-ssl-profiles@1.1.2: + aws-ssl-profiles@1.1.2: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} engines: {node: '>= 6.0.0'} - dev: false - /big-integer@1.6.52: + big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} - dev: false - /binary-extensions@2.3.0: + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - dev: true - /blake3-wasm@2.1.5: + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - dev: true - /braces@3.0.3: + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - dependencies: - fill-range: 7.1.1 - dev: true - /bson@6.10.0: + bson@6.10.0: resolution: {integrity: sha512-ROchNosXMJD2cbQGm84KoP7vOGPO6/bOAW0veMMbzhXLqoZptcaYRVLitwvuhwhjjpU1qP4YZRWLhgETdgqUQw==} engines: {node: '>=16.20.1'} - dev: false - /capnp-ts@0.7.0: + capnp-ts@0.7.0: resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} - dependencies: - debug: 4.3.7 - tslib: 2.7.0 - transitivePeerDependencies: - - supports-color - dev: true - /chokidar@3.6.0: + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /cookie@0.5.0: + cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - dev: true - /data-uri-to-buffer@2.0.2: + data-uri-to-buffer@2.0.2: resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - dev: true - /data-uri-to-buffer@4.0.1: + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - dev: false - /debug@4.3.7: + debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: @@ -616,278 +393,151 @@ packages: peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.3 - dev: true - /defu@6.1.4: + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - dev: true - /denque@2.1.0: + denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} - dev: false - /detect-libc@2.0.2: + detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} - dev: false - /esbuild@0.17.19: + esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: true - /escape-string-regexp@4.0.0: + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true - /estree-walker@0.6.1: + estree-walker@0.6.1: resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - dev: true - /exit-hook@2.2.1: + exit-hook@2.2.1: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} - dev: true - /fetch-blob@3.2.0: + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - dev: false - /fill-range@7.1.1: + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - /formdata-polyfill@4.0.10: + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: false - /fsevents@2.3.3: + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - requiresBuild: true - dev: true - optional: true - /function-bind@1.1.2: + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - /generate-function@2.3.1: + generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - dependencies: - is-property: 1.0.2 - dev: false - /get-source@2.0.12: + get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - dev: true - /glob-parent@5.1.2: + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true - /handlebars@4.7.8: + handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - dev: false - /hasown@2.0.2: + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: true - /iconv-lite@0.6.3: + hono@4.6.14: + resolution: {integrity: sha512-j4VkyUp2xazGJ8eCCLN1Vm/bxdvm/j5ZuU9AIjLu9vapn2M44p9L3Ktr9Vnb2RN2QtcR/wVjZVMlT5k7GJQgPw==} + engines: {node: '>=16.9.0'} + + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - /is-binary-path@2.1.0: + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - dependencies: - binary-extensions: 2.3.0 - dev: true - /is-core-module@2.15.1: + is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} - dependencies: - hasown: 2.0.2 - dev: true - /is-extglob@2.1.1: + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true - /is-glob@4.0.3: + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true - /is-property@1.0.2: + is-property@1.0.2: resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - dev: false - /jose@5.9.6: + jose@5.9.6: resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} - dev: false - /js-base64@3.7.7: + js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - dev: false - /libsql@0.4.7: + libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} - cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] - dependencies: - '@neon-rs/load': 0.0.4 - detect-libc: 2.0.2 - optionalDependencies: - '@libsql/darwin-arm64': 0.4.7 - '@libsql/darwin-x64': 0.4.7 - '@libsql/linux-arm64-gnu': 0.4.7 - '@libsql/linux-arm64-musl': 0.4.7 - '@libsql/linux-x64-gnu': 0.4.7 - '@libsql/linux-x64-musl': 0.4.7 - '@libsql/win32-x64-msvc': 0.4.7 - dev: false - /long@5.2.3: + long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: false - /lru-cache@7.18.3: + lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - dev: false - /lru.min@1.1.1: + lru.min@1.1.1: resolution: {integrity: sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==} engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} - dev: false - /magic-string@0.25.9: + magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: true - /memory-pager@1.5.0: + memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - dev: false - /mime@3.0.0: + mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} hasBin: true - dev: true - /miniflare@3.20240925.0: + miniflare@3.20240925.0: resolution: {integrity: sha512-2LmQbKHf0n6ertUKhT+Iltixi53giqDH7P71+wCir3OnGyXIODqYwOECx1mSDNhYThpxM2dav8UdPn6SQiMoXw==} engines: {node: '>=16.13'} hasBin: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - acorn: 8.12.1 - acorn-walk: 8.3.4 - capnp-ts: 0.7.0 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - stoppable: 1.1.0 - undici: 5.28.4 - workerd: 1.20240925.0 - ws: 8.18.0 - youch: 3.3.3 - zod: 3.23.8 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /minimist@1.2.8: + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: false - /mongodb-connection-string-url@3.0.1: + mongodb-connection-string-url@3.0.1: resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==} - dependencies: - '@types/whatwg-url': 11.0.5 - whatwg-url: 13.0.0 - dev: false - /mongodb@6.11.0: + mongodb@6.11.0: resolution: {integrity: sha512-yVbPw0qT268YKhG241vAMLaDQAPbRyTgo++odSgGc9kXnzOujQI60Iyj23B9sQQFPSvmNPvMZ3dsFz0aN55KgA==} engines: {node: '>=16.20.1'} peerDependencies: @@ -913,159 +563,96 @@ packages: optional: true socks: optional: true - dependencies: - '@mongodb-js/saslprep': 1.1.9 - bson: 6.10.0 - mongodb-connection-string-url: 3.0.1 - dev: false - /ms@2.1.3: + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - /mustache@4.2.0: + mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true - dev: true - /mysql2@3.11.4: + mysql2@3.11.4: resolution: {integrity: sha512-Z2o3tY4Z8EvSRDwknaC40MdZ3+m0sKbpnXrShQLdxPrAvcNli7jLrD2Zd2IzsRMw4eK9Yle500FDmlkIqp+krg==} engines: {node: '>= 8.0'} - dependencies: - aws-ssl-profiles: 1.1.2 - denque: 2.1.0 - generate-function: 2.3.1 - iconv-lite: 0.6.3 - long: 5.2.3 - lru.min: 1.1.1 - named-placeholders: 1.1.3 - seq-queue: 0.0.5 - sqlstring: 2.3.3 - dev: false - /named-placeholders@1.1.3: + named-placeholders@1.1.3: resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} engines: {node: '>=12.0.0'} - dependencies: - lru-cache: 7.18.3 - dev: false - /nanoid@3.3.7: + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true - /neo-async@2.6.2: + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false - /node-domexception@1.0.0: + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - dev: false - /node-fetch@3.3.2: + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: false - /node-forge@1.3.1: + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - dev: true - /node-sql-parser@4.18.0: + node-sql-parser@4.18.0: resolution: {integrity: sha512-2YEOR5qlI1zUFbGMLKNfsrR5JUvFg9LxIRVE+xJe962pfVLH0rnItqLzv96XVs1Y1UIR8FxsXAuvX/lYAWZ2BQ==} engines: {node: '>=8'} - dependencies: - big-integer: 1.6.52 - dev: false - /normalize-path@3.0.0: + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true - /obuf@1.1.2: + obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: true - /ohash@1.1.4: + ohash@1.1.4: resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} - dev: true - /path-parse@1.0.7: + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - /path-to-regexp@6.3.0: + path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - dev: true - /pathe@1.1.2: + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true - /pg-cloudflare@1.1.1: + pg-cloudflare@1.1.1: resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} - requiresBuild: true - dev: false - optional: true - /pg-connection-string@2.7.0: + pg-connection-string@2.7.0: resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==} - dev: false - /pg-int8@1.0.1: + pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - /pg-numeric@1.0.2: + pg-numeric@1.0.2: resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} engines: {node: '>=4'} - dev: true - /pg-pool@3.7.0(pg@8.13.1): + pg-pool@3.7.0: resolution: {integrity: sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==} peerDependencies: pg: '>=8.0' - dependencies: - pg: 8.13.1 - dev: false - /pg-protocol@1.7.0: + pg-protocol@1.7.0: resolution: {integrity: sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==} - /pg-types@2.2.0: + pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - dependencies: - pg-int8: 1.0.1 - postgres-array: 2.0.0 - postgres-bytea: 1.0.0 - postgres-date: 1.0.7 - postgres-interval: 1.2.0 - dev: false - /pg-types@4.0.2: + pg-types@4.0.2: resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} engines: {node: '>=10'} - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.2 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - dev: true - /pg@8.13.1: + pg@8.13.1: resolution: {integrity: sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -1073,279 +660,176 @@ packages: peerDependenciesMeta: pg-native: optional: true - dependencies: - pg-connection-string: 2.7.0 - pg-pool: 3.7.0(pg@8.13.1) - pg-protocol: 1.7.0 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.1.1 - dev: false - /pgpass@1.0.5: + pgpass@1.0.5: resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} - dependencies: - split2: 4.2.0 - dev: false - /picomatch@2.3.1: + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true - /postgres-array@2.0.0: + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} - dev: false - /postgres-array@3.0.2: + postgres-array@3.0.2: resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} engines: {node: '>=12'} - dev: true - /postgres-bytea@1.0.0: + postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} - dev: false - /postgres-bytea@3.0.0: + postgres-bytea@3.0.0: resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} engines: {node: '>= 6'} - dependencies: - obuf: 1.1.2 - dev: true - /postgres-date@1.0.7: + postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} - dev: false - /postgres-date@2.1.0: + postgres-date@2.1.0: resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} engines: {node: '>=12'} - dev: true - /postgres-interval@1.2.0: + postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - dependencies: - xtend: 4.0.2 - dev: false - /postgres-interval@3.0.0: + postgres-interval@3.0.0: resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} engines: {node: '>=12'} - dev: true - /postgres-range@1.1.4: + postgres-range@1.1.4: resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - dev: true - /printable-characters@1.0.42: + printable-characters@1.0.42: resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - dev: true - /promise-limit@2.7.0: + promise-limit@2.7.0: resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} - dev: false - /punycode@2.3.1: + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - dev: false - /readdirp@3.6.0: + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - /resolve.exports@2.0.2: + resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} - dev: true - /resolve@1.22.8: + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /rollup-plugin-inject@3.0.2: + rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - dev: true - /rollup-plugin-node-polyfills@0.2.1: + rollup-plugin-node-polyfills@0.2.1: resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - dependencies: - rollup-plugin-inject: 3.0.2 - dev: true - /rollup-pluginutils@2.8.2: + rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - dependencies: - estree-walker: 0.6.1 - dev: true - /safer-buffer@2.1.2: + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - /selfsigned@2.4.1: + selfsigned@2.4.1: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - dev: true - /seq-queue@0.0.5: + seq-queue@0.0.5: resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} - dev: false - /source-map@0.6.1: + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - /sourcemap-codec@1.4.8: + sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true - /sparse-bitfield@3.0.3: + sparse-bitfield@3.0.3: resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - dependencies: - memory-pager: 1.5.0 - dev: false - /split2@4.2.0: + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - dev: false - /sqlstring@2.3.3: + sqlstring@2.3.3: resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} engines: {node: '>= 0.6'} - dev: false - /stacktracey@2.1.8: + stacktracey@2.1.8: resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - dev: true - /stoppable@1.1.0: + stoppable@1.1.0: resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} engines: {node: '>=4', npm: '>=6'} - dev: true - /supports-preserve-symlinks-flag@1.0.0: + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true - /to-regex-range@5.0.1: + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - /tr46@4.1.1: + tr46@4.1.1: resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} engines: {node: '>=14'} - dependencies: - punycode: 2.3.1 - dev: false - /tslib@2.7.0: + tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - dev: true - /typescript@5.6.2: + typescript@5.6.2: resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true - dev: true - /ufo@1.5.4: + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - dev: true - /uglify-js@3.19.3: + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true - requiresBuild: true - dev: false - optional: true - /undici-types@6.19.8: + undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - /undici@5.28.4: + undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - dependencies: - '@fastify/busboy': 2.1.1 - dev: true - /unenv-nightly@2.0.0-20240919-125358-9a64854: + unenv-nightly@2.0.0-20240919-125358-9a64854: resolution: {integrity: sha512-XjsgUTrTHR7iw+k/SRTNjh6EQgwpC9voygnoCJo5kh4hKqsSDHUW84MhL9EsHTNfLctvVBHaSw8e2k3R2fKXsQ==} - dependencies: - defu: 6.1.4 - ohash: 1.1.4 - pathe: 1.1.2 - ufo: 1.5.4 - dev: true - /web-streams-polyfill@3.3.3: + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - dev: false - /webidl-conversions@7.0.0: + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - dev: false - /whatwg-url@13.0.0: + whatwg-url@13.0.0: resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} engines: {node: '>=16'} - dependencies: - tr46: 4.1.1 - webidl-conversions: 7.0.0 - dev: false - /wordwrap@1.0.0: + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: false - /workerd@1.20240925.0: + workerd@1.20240925.0: resolution: {integrity: sha512-/Jj6+yLwfieZGEt3Kx4+5MoufuC3g/8iFaIh4MPBNGJOGYmdSKXvgCqz09m2+tVCYnysRfbq2zcbVxJRBfOCqQ==} engines: {node: '>=16'} hasBin: true - requiresBuild: true - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20240925.0 - '@cloudflare/workerd-darwin-arm64': 1.20240925.0 - '@cloudflare/workerd-linux-64': 1.20240925.0 - '@cloudflare/workerd-linux-arm64': 1.20240925.0 - '@cloudflare/workerd-windows-64': 1.20240925.0 - dev: true - /wrangler@3.78.12(@cloudflare/workers-types@4.20240925.0): + wrangler@3.78.12: resolution: {integrity: sha512-a/xk/N04IvOGk9J+BLkiFg42GDyPS+0BiJimbrHsbX+CDr8Iqq3HNMEyQld+6zbmq01u/gmc8S7GKVR9vDx4+g==} engines: {node: '>=16.17.0'} hasBin: true @@ -1354,34 +838,8 @@ packages: peerDependenciesMeta: '@cloudflare/workers-types': optional: true - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/workers-shared': 0.5.4 - '@cloudflare/workers-types': 4.20240925.0 - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) - blake3-wasm: 2.1.5 - chokidar: 3.6.0 - esbuild: 0.17.19 - miniflare: 3.20240925.0 - nanoid: 3.3.7 - path-to-regexp: 6.3.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - selfsigned: 2.4.1 - source-map: 0.6.1 - unenv: /unenv-nightly@2.0.0-20240919-125358-9a64854 - workerd: 1.20240925.0 - xxhash-wasm: 1.0.2 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /ws@8.18.0: + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: @@ -1393,23 +851,725 @@ packages: utf-8-validate: optional: true - /xtend@4.0.2: + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - dev: false - /xxhash-wasm@1.0.2: + xxhash-wasm@1.0.2: resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} - dev: true - /youch@3.3.3: + youch@3.3.3: resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} - dependencies: - cookie: 0.5.0 - mustache: 4.2.0 - stacktracey: 2.1.8 - dev: true - /zod@3.23.8: + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - dev: true + +snapshots: + + '@cloudflare/kv-asset-handler@0.3.4': + dependencies: + mime: 3.0.0 + + '@cloudflare/workerd-darwin-64@1.20240925.0': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20240925.0': + optional: true + + '@cloudflare/workerd-linux-64@1.20240925.0': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20240925.0': + optional: true + + '@cloudflare/workerd-windows-64@1.20240925.0': + optional: true + + '@cloudflare/workers-shared@0.5.4': + dependencies: + mime: 3.0.0 + zod: 3.23.8 + + '@cloudflare/workers-types@4.20240925.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 + + '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 + escape-string-regexp: 4.0.0 + rollup-plugin-node-polyfills: 0.2.1 + + '@esbuild/android-arm64@0.17.19': + optional: true + + '@esbuild/android-arm@0.17.19': + optional: true + + '@esbuild/android-x64@0.17.19': + optional: true + + '@esbuild/darwin-arm64@0.17.19': + optional: true + + '@esbuild/darwin-x64@0.17.19': + optional: true + + '@esbuild/freebsd-arm64@0.17.19': + optional: true + + '@esbuild/freebsd-x64@0.17.19': + optional: true + + '@esbuild/linux-arm64@0.17.19': + optional: true + + '@esbuild/linux-arm@0.17.19': + optional: true + + '@esbuild/linux-ia32@0.17.19': + optional: true + + '@esbuild/linux-loong64@0.17.19': + optional: true + + '@esbuild/linux-mips64el@0.17.19': + optional: true + + '@esbuild/linux-ppc64@0.17.19': + optional: true + + '@esbuild/linux-riscv64@0.17.19': + optional: true + + '@esbuild/linux-s390x@0.17.19': + optional: true + + '@esbuild/linux-x64@0.17.19': + optional: true + + '@esbuild/netbsd-x64@0.17.19': + optional: true + + '@esbuild/openbsd-x64@0.17.19': + optional: true + + '@esbuild/sunos-x64@0.17.19': + optional: true + + '@esbuild/win32-arm64@0.17.19': + optional: true + + '@esbuild/win32-ia32@0.17.19': + optional: true + + '@esbuild/win32-x64@0.17.19': + optional: true + + '@fastify/busboy@2.1.1': {} + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@libsql/client@0.14.0': + dependencies: + '@libsql/core': 0.14.0 + '@libsql/hrana-client': 0.7.0 + js-base64: 3.7.7 + libsql: 0.4.7 + promise-limit: 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/core@0.14.0': + dependencies: + js-base64: 3.7.7 + + '@libsql/darwin-arm64@0.4.7': + optional: true + + '@libsql/darwin-x64@0.4.7': + optional: true + + '@libsql/hrana-client@0.7.0': + dependencies: + '@libsql/isomorphic-fetch': 0.3.1 + '@libsql/isomorphic-ws': 0.1.5 + js-base64: 3.7.7 + node-fetch: 3.3.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/isomorphic-fetch@0.3.1': {} + + '@libsql/isomorphic-ws@0.1.5': + dependencies: + '@types/ws': 8.5.13 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/linux-arm64-gnu@0.4.7': + optional: true + + '@libsql/linux-arm64-musl@0.4.7': + optional: true + + '@libsql/linux-x64-gnu@0.4.7': + optional: true + + '@libsql/linux-x64-musl@0.4.7': + optional: true + + '@libsql/win32-x64-msvc@0.4.7': + optional: true + + '@mongodb-js/saslprep@1.1.9': + dependencies: + sparse-bitfield: 3.0.3 + + '@neon-rs/load@0.0.4': {} + + '@outerbase/sdk@2.0.0-rc.3': + dependencies: + handlebars: 4.7.8 + + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 22.7.4 + + '@types/node@22.7.4': + dependencies: + undici-types: 6.19.8 + + '@types/pg@8.11.10': + dependencies: + '@types/node': 22.7.4 + pg-protocol: 1.7.0 + pg-types: 4.0.2 + + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + + '@types/ws@8.5.13': + dependencies: + '@types/node': 22.7.4 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + as-table@1.0.55: + dependencies: + printable-characters: 1.0.42 + + aws-ssl-profiles@1.1.2: {} + + big-integer@1.6.52: {} + + binary-extensions@2.3.0: {} + + blake3-wasm@2.1.5: {} + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bson@6.10.0: {} + + capnp-ts@0.7.0: + dependencies: + debug: 4.3.7 + tslib: 2.7.0 + transitivePeerDependencies: + - supports-color + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cookie@0.5.0: {} + + data-uri-to-buffer@2.0.2: {} + + data-uri-to-buffer@4.0.1: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + defu@6.1.4: {} + + denque@2.1.0: {} + + detect-libc@2.0.2: {} + + esbuild@0.17.19: + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + + escape-string-regexp@4.0.0: {} + + estree-walker@0.6.1: {} + + exit-hook@2.2.1: {} + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + get-source@2.0.12: + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hono@4.6.14: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-property@1.0.2: {} + + jose@5.9.6: {} + + js-base64@3.7.7: {} + + libsql@0.4.7: + dependencies: + '@neon-rs/load': 0.0.4 + detect-libc: 2.0.2 + optionalDependencies: + '@libsql/darwin-arm64': 0.4.7 + '@libsql/darwin-x64': 0.4.7 + '@libsql/linux-arm64-gnu': 0.4.7 + '@libsql/linux-arm64-musl': 0.4.7 + '@libsql/linux-x64-gnu': 0.4.7 + '@libsql/linux-x64-musl': 0.4.7 + '@libsql/win32-x64-msvc': 0.4.7 + + long@5.2.3: {} + + lru-cache@7.18.3: {} + + lru.min@1.1.1: {} + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + memory-pager@1.5.0: {} + + mime@3.0.0: {} + + miniflare@3.20240925.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + acorn: 8.12.1 + acorn-walk: 8.3.4 + capnp-ts: 0.7.0 + exit-hook: 2.2.1 + glob-to-regexp: 0.4.1 + stoppable: 1.1.0 + undici: 5.28.4 + workerd: 1.20240925.0 + ws: 8.18.0 + youch: 3.3.3 + zod: 3.23.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + minimist@1.2.8: {} + + mongodb-connection-string-url@3.0.1: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 13.0.0 + + mongodb@6.11.0: + dependencies: + '@mongodb-js/saslprep': 1.1.9 + bson: 6.10.0 + mongodb-connection-string-url: 3.0.1 + + ms@2.1.3: {} + + mustache@4.2.0: {} + + mysql2@3.11.4: + dependencies: + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.6.3 + long: 5.2.3 + lru.min: 1.1.1 + named-placeholders: 1.1.3 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.3: + dependencies: + lru-cache: 7.18.3 + + nanoid@3.3.7: {} + + neo-async@2.6.2: {} + + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-forge@1.3.1: {} + + node-sql-parser@4.18.0: + dependencies: + big-integer: 1.6.52 + + normalize-path@3.0.0: {} + + obuf@1.1.2: {} + + ohash@1.1.4: {} + + path-parse@1.0.7: {} + + path-to-regexp@6.3.0: {} + + pathe@1.1.2: {} + + pg-cloudflare@1.1.1: + optional: true + + pg-connection-string@2.7.0: {} + + pg-int8@1.0.1: {} + + pg-numeric@1.0.2: {} + + pg-pool@3.7.0(pg@8.13.1): + dependencies: + pg: 8.13.1 + + pg-protocol@1.7.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg-types@4.0.2: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.2 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + + pg@8.13.1: + dependencies: + pg-connection-string: 2.7.0 + pg-pool: 3.7.0(pg@8.13.1) + pg-protocol: 1.7.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + + picomatch@2.3.1: {} + + postgres-array@2.0.0: {} + + postgres-array@3.0.2: {} + + postgres-bytea@1.0.0: {} + + postgres-bytea@3.0.0: + dependencies: + obuf: 1.1.2 + + postgres-date@1.0.7: {} + + postgres-date@2.1.0: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres-interval@3.0.0: {} + + postgres-range@1.1.4: {} + + printable-characters@1.0.42: {} + + promise-limit@2.7.0: {} + + punycode@2.3.1: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve.exports@2.0.2: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + rollup-plugin-inject@3.0.2: + dependencies: + estree-walker: 0.6.1 + magic-string: 0.25.9 + rollup-pluginutils: 2.8.2 + + rollup-plugin-node-polyfills@0.2.1: + dependencies: + rollup-plugin-inject: 3.0.2 + + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + + safer-buffer@2.1.2: {} + + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + + seq-queue@0.0.5: {} + + source-map@0.6.1: {} + + sourcemap-codec@1.4.8: {} + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + + split2@4.2.0: {} + + sqlstring@2.3.3: {} + + stacktracey@2.1.8: + dependencies: + as-table: 1.0.55 + get-source: 2.0.12 + + stoppable@1.1.0: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@4.1.1: + dependencies: + punycode: 2.3.1 + + tslib@2.7.0: {} + + typescript@5.6.2: {} + + ufo@1.5.4: {} + + uglify-js@3.19.3: + optional: true + + undici-types@6.19.8: {} + + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + unenv-nightly@2.0.0-20240919-125358-9a64854: + dependencies: + defu: 6.1.4 + ohash: 1.1.4 + pathe: 1.1.2 + ufo: 1.5.4 + + web-streams-polyfill@3.3.3: {} + + webidl-conversions@7.0.0: {} + + whatwg-url@13.0.0: + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + + wordwrap@1.0.0: {} + + workerd@1.20240925.0: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20240925.0 + '@cloudflare/workerd-darwin-arm64': 1.20240925.0 + '@cloudflare/workerd-linux-64': 1.20240925.0 + '@cloudflare/workerd-linux-arm64': 1.20240925.0 + '@cloudflare/workerd-windows-64': 1.20240925.0 + + wrangler@3.78.12(@cloudflare/workers-types@4.20240925.0): + dependencies: + '@cloudflare/kv-asset-handler': 0.3.4 + '@cloudflare/workers-shared': 0.5.4 + '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) + '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) + blake3-wasm: 2.1.5 + chokidar: 3.6.0 + esbuild: 0.17.19 + miniflare: 3.20240925.0 + nanoid: 3.3.7 + path-to-regexp: 6.3.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + selfsigned: 2.4.1 + source-map: 0.6.1 + unenv: unenv-nightly@2.0.0-20240919-125358-9a64854 + workerd: 1.20240925.0 + xxhash-wasm: 1.0.2 + optionalDependencies: + '@cloudflare/workers-types': 4.20240925.0 + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + ws@8.18.0: {} + + xtend@4.0.2: {} + + xxhash-wasm@1.0.2: {} + + youch@3.3.3: + dependencies: + cookie: 0.5.0 + mustache: 4.2.0 + stacktracey: 2.1.8 + + zod@3.23.8: {} diff --git a/src/handler.ts b/src/handler.ts index 6c76615..0091469 100644 --- a/src/handler.ts +++ b/src/handler.ts @@ -1,8 +1,11 @@ +import { Hono } from "hono"; +import { createMiddleware } from "hono/factory"; +import { validator } from "hono/validator"; + import { DataSource, Source } from "./types"; import { LiteREST } from "./literest"; import { executeQuery, executeTransaction } from "./operation"; import { createResponse, QueryRequest, QueryTransactionRequest } from "./utils"; -import { Env } from './' import { handleApiRequest } from "./api"; import { dumpDatabaseRoute } from "./export/dump"; import { exportTableToJsonRoute } from "./export/json"; @@ -12,168 +15,241 @@ import { importTableFromJsonRoute } from "./import/json"; import { importTableFromCsvRoute } from "./import/csv"; export interface HandlerConfig { - adminAuthorizationToken: string; - outerbaseApiKey?: string; - enableAllowlist?: boolean; - enableRls?: boolean; + adminAuthorizationToken: string; + outerbaseApiKey?: string; + enableAllowlist?: boolean; + enableRls?: boolean; - externalDbType?: string; + externalDbType?: string; - externalDbHost?: string; - externalDbPort?: number; - externalDbUser?: string; - externalDbPassword?: string; - externalDbName?: string; - externalDbDefaultSchema?: string; + externalDbHost?: string; + externalDbPort?: number; + externalDbUser?: string; + externalDbPassword?: string; + externalDbName?: string; + externalDbDefaultSchema?: string; - externalDbMongodbUri?: string; + externalDbMongodbUri?: string; - externalDbTursoUri?: string; - externalDbTursoToken?: string; + externalDbTursoUri?: string; + externalDbTursoToken?: string; - externalDbCloudflareApiKey?: string; - externalDbCloudflareAccountId?: string; - externalDbCloudflareDatabaseId?: string; + externalDbCloudflareApiKey?: string; + externalDbCloudflareAccountId?: string; + externalDbCloudflareDatabaseId?: string; - externalDbStarbaseUri?: string; - externalDbStarbaseToken?: string; + externalDbStarbaseUri?: string; + externalDbStarbaseToken?: string; } export class Handler { - private liteREST?: LiteREST; - private dataSource?: DataSource; - private config?: HandlerConfig; - - constructor() { } - - public async handle(request: Request, dataSource: DataSource, config: HandlerConfig): Promise { - this.dataSource = dataSource; - this.liteREST = new LiteREST(dataSource, config); - this.config = config; - const url = new URL(request.url); - - if (request.method === 'POST' && url.pathname === '/query/raw') { - return this.queryRoute(request, true); - } else if (request.method === 'POST' && url.pathname === '/query') { - return this.queryRoute(request, false); - } else if (url.pathname === '/socket') { - return this.clientConnected(); - } else if (url.pathname.startsWith('/rest')) { - return await this.liteREST.handleRequest(request); - } else if (request.method === 'GET' && url.pathname === '/export/dump') { - if (this.dataSource.source === Source.external) { - return createResponse(undefined, 'Function is only available for internal data source.', 400); - } - - return dumpDatabaseRoute(this.dataSource); - } else if (request.method === 'GET' && url.pathname.startsWith('/export/json/')) { - if (this.dataSource.source === Source.external) { - return createResponse(undefined, 'Function is only available for internal data source.', 400); - } - - const tableName = url.pathname.split('/').pop(); - if (!tableName) { - return createResponse(undefined, 'Table name is required', 400); - } - return exportTableToJsonRoute(tableName, this.dataSource); - } else if (request.method === 'GET' && url.pathname.startsWith('/export/csv/')) { - if (this.dataSource.source === Source.external) { - return createResponse(undefined, 'Function is only available for internal data source.', 400); - } - - const tableName = url.pathname.split('/').pop(); - if (!tableName) { - return createResponse(undefined, 'Table name is required', 400); - } - return exportTableToCsvRoute(tableName, this.dataSource); - } else if (request.method === 'POST' && url.pathname === '/import/dump') { - if (this.dataSource.source === Source.external) { - return createResponse(undefined, 'Function is only available for internal data source.', 400); - } - - return importDumpRoute(request, this.dataSource); - } else if (request.method === 'POST' && url.pathname.startsWith('/import/json/')) { - if (this.dataSource.source === Source.external) { - return createResponse(undefined, 'Function is only available for internal data source.', 400); - } - - const tableName = url.pathname.split('/').pop(); - if (!tableName) { - return createResponse(undefined, 'Table name is required', 400); - } - return importTableFromJsonRoute(tableName, request, this.dataSource); - } else if (request.method === 'POST' && url.pathname.startsWith('/import/csv/')) { - if (this.dataSource.source === Source.external) { - return createResponse(undefined, 'Function is only available for internal data source.', 400); - } - - const tableName = url.pathname.split('/').pop(); - if (!tableName) { - return createResponse(undefined, 'Table name is required', 400); - } - return importTableFromCsvRoute(tableName, request, this.dataSource); - } else if (url.pathname.startsWith('/api')) { - return await handleApiRequest(request); - } - - return createResponse(undefined, 'Unknown operation', 400); - } - - async queryRoute(request: Request, isRaw: boolean): Promise { - try { - const contentType = request.headers.get('Content-Type') || ''; - if (!contentType.includes('application/json')) { - return createResponse(undefined, 'Content-Type must be application/json.', 400); - } - - const { sql, params, transaction } = await request.json() as QueryRequest & QueryTransactionRequest; - - if (Array.isArray(transaction) && transaction.length) { - const queries = transaction.map((queryObj: any) => { - const { sql, params } = queryObj; - - if (typeof sql !== 'string' || !sql.trim()) { - throw new Error('Invalid or empty "sql" field in transaction.'); - } else if (params !== undefined && !Array.isArray(params) && typeof params !== 'object') { - throw new Error('Invalid "params" field in transaction. Must be an array or object.'); - } - - return { sql, params }; - }); - - const response = await executeTransaction(queries, isRaw, this.dataSource, this.config); - return createResponse(response, undefined, 200); - } else if (typeof sql !== 'string' || !sql.trim()) { - return createResponse(undefined, 'Invalid or empty "sql" field.', 400); - } else if (params !== undefined && !Array.isArray(params) && typeof params !== 'object') { - return createResponse(undefined, 'Invalid "params" field. Must be an array or object.', 400); - } - - const response = await executeQuery(sql, params, isRaw, this.dataSource, this.config); - return createResponse(response, undefined, 200); - } catch (error: any) { - console.error('Query Route Error:', error); - return createResponse(undefined, error?.message || 'An unexpected error occurred.', 500); - } - } - - clientConnected() { - const webSocketPair = new WebSocketPair(); - const [client, server] = Object.values(webSocketPair); - - server.accept(); - server.addEventListener('message', event => { - const { sql, params, action } = JSON.parse(event.data as string); - - if (action === 'query') { - const executeQueryWrapper = async () => { - const response = await executeQuery(sql, params, false, this.dataSource); - server.send(JSON.stringify(response)); - }; - executeQueryWrapper(); - } + private dataSource: DataSource; + private config: HandlerConfig; + private liteREST: LiteREST; + + constructor(options: { dataSource: DataSource; config: HandlerConfig }) { + this.dataSource = options.dataSource; + this.config = options.config; + this.liteREST = new LiteREST(this.dataSource, this.config); + } + + private get isInternalSource() { + return createMiddleware(async (_, next) => { + if (this.dataSource.source !== Source.internal) { + return createResponse( + undefined, + "Function is only available for internal data source.", + 400 + ); + } + + return next(); + }); + } + + private get hasTableName() { + return validator("param", (params) => { + const tableName = params["tableName"]; + + if (!tableName) { + return createResponse(undefined, "Table name is required", 400); + } + + return { tableName }; + }); + } + + public async handle(request: Request): Promise { + const app = new Hono(); + + app.notFound(() => { + return createResponse(undefined, "Not found", 404); + }); + + app.onError((error) => { + return createResponse( + undefined, + error?.message || "An unexpected error occurred.", + 500 + ); + }); + + app.all("/socket", async () => this.clientConnected()); + + app.post("/query/raw", async (c) => this.queryRoute(c.req.raw, true)); + app.post("/query", async (c) => this.queryRoute(c.req.raw, false)); + + app.all("/rest/*", async (c) => { + return this.liteREST.handleRequest(c.req.raw); + }); + + app.get("/export/dump", this.isInternalSource, async () => { + return dumpDatabaseRoute(this.dataSource); + }); + + app.get( + "/export/json/:tableName", + this.isInternalSource, + this.hasTableName, + async (c) => { + const tableName = c.req.valid("param").tableName; + return exportTableToJsonRoute(tableName, this.dataSource); + } + ); + + app.get( + "/export/csv/:tableName", + this.isInternalSource, + this.hasTableName, + async (c) => { + const tableName = c.req.valid("param").tableName; + return exportTableToCsvRoute(tableName, this.dataSource); + } + ); + + app.post("/import/dump", this.isInternalSource, async (c) => { + return importDumpRoute(c.req.raw, this.dataSource); + }); + + app.post( + "/import/json/:tableName", + this.isInternalSource, + this.hasTableName, + async (c) => { + const tableName = c.req.valid("param").tableName; + return importTableFromJsonRoute(tableName, request, this.dataSource); + } + ); + + app.post( + "/import/csv/:tableName", + this.isInternalSource, + this.hasTableName, + async (c) => { + const tableName = c.req.valid("param").tableName; + return importTableFromCsvRoute(tableName, request, this.dataSource); + } + ); + + app.all("/api/*", async (c) => handleApiRequest(c.req.raw)); + + return app.fetch(request); + } + + async queryRoute(request: Request, isRaw: boolean): Promise { + try { + const contentType = request.headers.get("Content-Type") || ""; + if (!contentType.includes("application/json")) { + return createResponse( + undefined, + "Content-Type must be application/json.", + 400 + ); + } + + const { sql, params, transaction } = + (await request.json()) as QueryRequest & QueryTransactionRequest; + + if (Array.isArray(transaction) && transaction.length) { + const queries = transaction.map((queryObj: any) => { + const { sql, params } = queryObj; + + if (typeof sql !== "string" || !sql.trim()) { + throw new Error('Invalid or empty "sql" field in transaction.'); + } else if ( + params !== undefined && + !Array.isArray(params) && + typeof params !== "object" + ) { + throw new Error( + 'Invalid "params" field in transaction. Must be an array or object.' + ); + } + + return { sql, params }; }); - return new Response(null, { status: 101, webSocket: client }); + const response = await executeTransaction( + queries, + isRaw, + this.dataSource, + this.config + ); + return createResponse(response, undefined, 200); + } else if (typeof sql !== "string" || !sql.trim()) { + return createResponse(undefined, 'Invalid or empty "sql" field.', 400); + } else if ( + params !== undefined && + !Array.isArray(params) && + typeof params !== "object" + ) { + return createResponse( + undefined, + 'Invalid "params" field. Must be an array or object.', + 400 + ); + } + + const response = await executeQuery( + sql, + params, + isRaw, + this.dataSource, + this.config + ); + return createResponse(response, undefined, 200); + } catch (error: any) { + console.error("Query Route Error:", error); + return createResponse( + undefined, + error?.message || "An unexpected error occurred.", + 500 + ); } -} \ No newline at end of file + } + + clientConnected() { + const webSocketPair = new WebSocketPair(); + const [client, server] = Object.values(webSocketPair); + + server.accept(); + server.addEventListener("message", (event) => { + const { sql, params, action } = JSON.parse(event.data as string); + + if (action === "query") { + const executeQueryWrapper = async () => { + const response = await executeQuery( + sql, + params, + false, + this.dataSource + ); + server.send(JSON.stringify(response)); + }; + executeQueryWrapper(); + } + }); + + return new Response(null, { status: 101, webSocket: client }); + } +} diff --git a/src/index.ts b/src/index.ts index e665729..e4550b1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,210 +1,252 @@ -import { createResponse } from './utils'; +import { createResponse } from "./utils"; import handleStudioRequest from "./studio"; import { Handler, HandlerConfig } from "./handler"; -import { DatabaseStub, DataSource, RegionLocationHint, Source } from './types'; -import { corsPreflight } from './cors'; -export { DatabaseDurableObject } from './do'; +import { DatabaseStub, DataSource, RegionLocationHint, Source } from "./types"; +import { corsPreflight } from "./cors"; +export { DatabaseDurableObject } from "./do"; import { createRemoteJWKSet, jwtVerify } from "jose"; -const DURABLE_OBJECT_ID = 'sql-durable-object'; +const DURABLE_OBJECT_ID = "sql-durable-object"; export interface Env { - ADMIN_AUTHORIZATION_TOKEN: string; - CLIENT_AUTHORIZATION_TOKEN: string; - DATABASE_DURABLE_OBJECT: DurableObjectNamespace; - REGION: string; - - // Studio credentials - STUDIO_USER?: string; - STUDIO_PASS?: string; - - ENABLE_ALLOWLIST?: boolean; - ENABLE_RLS?: boolean; - - // External database source details - OUTERBASE_API_KEY?: string; - EXTERNAL_DB_TYPE?: string; - EXTERNAL_DB_HOST?: string; - EXTERNAL_DB_PORT?: number; - EXTERNAL_DB_USER?: string; - EXTERNAL_DB_PASS?: string; - EXTERNAL_DB_DATABASE?: string; - EXTERNAL_DB_DEFAULT_SCHEMA?: string; - - EXTERNAL_DB_MONGODB_URI?: string; - EXTERNAL_DB_TURSO_URI?: string; - EXTERNAL_DB_TURSO_TOKEN?: string; - EXTERNAL_DB_STARBASEDB_URI?: string; - EXTERNAL_DB_STARBASEDB_TOKEN?: string; - EXTERNAL_DB_CLOUDFLARE_API_KEY?: string; - EXTERNAL_DB_CLOUDFLARE_ACCOUNT_ID?: string; - EXTERNAL_DB_CLOUDFLARE_DATABASE_ID?: string; - - AUTH_ALGORITHM?: string; - AUTH_JWT_SECRET?: string; - AUTH_JWKS_ENDPOINT?: string; - - // ## DO NOT REMOVE: TEMPLATE INTERFACE ## + ADMIN_AUTHORIZATION_TOKEN: string; + CLIENT_AUTHORIZATION_TOKEN: string; + DATABASE_DURABLE_OBJECT: DurableObjectNamespace; + REGION: string; + + // Studio credentials + STUDIO_USER?: string; + STUDIO_PASS?: string; + + ENABLE_ALLOWLIST?: boolean; + ENABLE_RLS?: boolean; + + // External database source details + OUTERBASE_API_KEY?: string; + EXTERNAL_DB_TYPE?: string; + EXTERNAL_DB_HOST?: string; + EXTERNAL_DB_PORT?: number; + EXTERNAL_DB_USER?: string; + EXTERNAL_DB_PASS?: string; + EXTERNAL_DB_DATABASE?: string; + EXTERNAL_DB_DEFAULT_SCHEMA?: string; + + EXTERNAL_DB_MONGODB_URI?: string; + EXTERNAL_DB_TURSO_URI?: string; + EXTERNAL_DB_TURSO_TOKEN?: string; + EXTERNAL_DB_STARBASEDB_URI?: string; + EXTERNAL_DB_STARBASEDB_TOKEN?: string; + EXTERNAL_DB_CLOUDFLARE_API_KEY?: string; + EXTERNAL_DB_CLOUDFLARE_ACCOUNT_ID?: string; + EXTERNAL_DB_CLOUDFLARE_DATABASE_ID?: string; + + AUTH_ALGORITHM?: string; + AUTH_JWT_SECRET?: string; + AUTH_JWKS_ENDPOINT?: string; + + // ## DO NOT REMOVE: TEMPLATE INTERFACE ## } export default { - /** - * This is the standard fetch handler for a Cloudflare Worker - * - * @param request - The request submitted to the Worker from the client - * @param env - The interface to reference bindings declared in wrangler.toml - * @param ctx - The execution context of the Worker - * @returns The response to be sent back to the client - */ - async fetch(request, env, ctx): Promise { - try { - const url = new URL(request.url); - const pathname = url.pathname; - const isWebSocket = request.headers.get("Upgrade") === "websocket"; - let jwtPayload; - - // Authorize the request with CORS rules before proceeding. - if (request.method === 'OPTIONS') { - const preflightResponse = corsPreflight(request) - - if (preflightResponse) { - return preflightResponse; - } - } - - /** - * If the request is a GET request to the /studio endpoint, we can handle the request - * directly in the Worker to avoid the need to deploy a separate Worker for the Studio. - * Studio provides a user interface to interact with the SQLite database in the Durable - * Object. - */ - if (env.STUDIO_USER && env.STUDIO_PASS && request.method === 'GET' && pathname === '/studio') { - return handleStudioRequest(request, { - username: env.STUDIO_USER, - password: env.STUDIO_PASS, - apiToken: env.ADMIN_AUTHORIZATION_TOKEN - }); - } - - /** - * Prior to proceeding to the Durable Object, we can perform any necessary validation or - * authorization checks here to ensure the request signature is valid and authorized to - * interact with the Durable Object. - */ - if (!isWebSocket) { - const authorizationValue = request.headers.get('Authorization') - - // The `AUTHORIZATION_TOKEN` is like an admin path of automatically authorizing the - // incoming request as verified. If this does not match then we next want to check - // if the `Authorization` header contains a JWT session token we can verify before - // allowing the user to proceed to our request handler. - if (authorizationValue !== `Bearer ${env.ADMIN_AUTHORIZATION_TOKEN}` && authorizationValue !== `Bearer ${env.CLIENT_AUTHORIZATION_TOKEN}`) { - const authorizationWithoutBearer = authorizationValue?.replace('Bearer ', ''); - - // If the above case failed (no admin or client token) and you're not using JWT authentication - // then we will just fail overall. Some form of Authorization is required to proceed. - if ((!env.AUTH_JWT_SECRET && !env.AUTH_JWKS_ENDPOINT) || authorizationWithoutBearer === undefined) { - return createResponse(undefined, 'Unauthorized request', 400) - } - - if (env.AUTH_JWKS_ENDPOINT && env?.AUTH_ALGORITHM) { - try { - const JWKS = createRemoteJWKSet(new URL(env.AUTH_JWKS_ENDPOINT)); - const { payload } = await jwtVerify(authorizationWithoutBearer, JWKS, { - algorithms: [env?.AUTH_ALGORITHM], - }); - - if (!payload.sub) { - return createResponse(undefined, 'Unauthorized request', 401) - } else { - jwtPayload = payload; - } - } catch (error: any) { - console.error("JWT Verification failed: ", error.message); - throw new Error("JWT verification failed"); - } - } - } - } else if (isWebSocket) { - /** - * Web socket connections cannot pass in an Authorization header into their requests, - * so we can use a query parameter to validate the connection. - */ - const token = url.searchParams.get('token'); - - if (token !== env.ADMIN_AUTHORIZATION_TOKEN && token !== env.CLIENT_AUTHORIZATION_TOKEN) { - return new Response('WebSocket connections are not supported at this endpoint.', { status: 440 }); + /** + * This is the standard fetch handler for a Cloudflare Worker + * + * @param request - The request submitted to the Worker from the client + * @param env - The interface to reference bindings declared in wrangler.toml + * @param ctx - The execution context of the Worker + * @returns The response to be sent back to the client + */ + async fetch(request, env, ctx): Promise { + try { + const url = new URL(request.url); + const pathname = url.pathname; + const isWebSocket = request.headers.get("Upgrade") === "websocket"; + let jwtPayload; + + // Authorize the request with CORS rules before proceeding. + if (request.method === "OPTIONS") { + const preflightResponse = corsPreflight(request); + + if (preflightResponse) { + return preflightResponse; + } + } + + /** + * If the request is a GET request to the /studio endpoint, we can handle the request + * directly in the Worker to avoid the need to deploy a separate Worker for the Studio. + * Studio provides a user interface to interact with the SQLite database in the Durable + * Object. + */ + if ( + env.STUDIO_USER && + env.STUDIO_PASS && + request.method === "GET" && + pathname === "/studio" + ) { + return handleStudioRequest(request, { + username: env.STUDIO_USER, + password: env.STUDIO_PASS, + apiToken: env.ADMIN_AUTHORIZATION_TOKEN, + }); + } + + /** + * Prior to proceeding to the Durable Object, we can perform any necessary validation or + * authorization checks here to ensure the request signature is valid and authorized to + * interact with the Durable Object. + */ + if (!isWebSocket) { + const authorizationValue = request.headers.get("Authorization"); + + // The `AUTHORIZATION_TOKEN` is like an admin path of automatically authorizing the + // incoming request as verified. If this does not match then we next want to check + // if the `Authorization` header contains a JWT session token we can verify before + // allowing the user to proceed to our request handler. + if ( + authorizationValue !== `Bearer ${env.ADMIN_AUTHORIZATION_TOKEN}` && + authorizationValue !== `Bearer ${env.CLIENT_AUTHORIZATION_TOKEN}` + ) { + const authorizationWithoutBearer = authorizationValue?.replace( + "Bearer ", + "" + ); + + // If the above case failed (no admin or client token) and you're not using JWT authentication + // then we will just fail overall. Some form of Authorization is required to proceed. + if ( + (!env.AUTH_JWT_SECRET && !env.AUTH_JWKS_ENDPOINT) || + authorizationWithoutBearer === undefined + ) { + return createResponse(undefined, "Unauthorized request", 400); + } + + if (env.AUTH_JWKS_ENDPOINT && env?.AUTH_ALGORITHM) { + try { + const JWKS = createRemoteJWKSet(new URL(env.AUTH_JWKS_ENDPOINT)); + const { payload } = await jwtVerify( + authorizationWithoutBearer, + JWKS, + { + algorithms: [env?.AUTH_ALGORITHM], } + ); + + if (!payload.sub) { + return createResponse(undefined, "Unauthorized request", 401); + } else { + jwtPayload = payload; + } + } catch (error: any) { + console.error("JWT Verification failed: ", error.message); + throw new Error("JWT verification failed"); } - - /** - * Retrieve the Durable Object identifier from the environment bindings and instantiate a - * Durable Object stub to interact with the Durable Object. - */ - const region = env.REGION ?? RegionLocationHint.AUTO; - const id: DurableObjectId = env.DATABASE_DURABLE_OBJECT.idFromName(DURABLE_OBJECT_ID); - const stub = region !== RegionLocationHint.AUTO ? env.DATABASE_DURABLE_OBJECT.get(id, { locationHint: region as DurableObjectLocationHint }) : env.DATABASE_DURABLE_OBJECT.get(id); - - const source: Source = request.headers.get('X-Starbase-Source') as Source ?? url.searchParams.get('source') as Source ?? 'internal'; - const dataSource: DataSource = { - source: source, - request: request.clone(), - internalConnection: { - durableObject: stub as unknown as DatabaseStub, - }, - externalConnection: { - outerbaseApiKey: env.OUTERBASE_API_KEY ?? '' - }, - context: { - ...jwtPayload - } - }; - - // Non-blocking operation to remove expired cache entries from our DO - expireCache(dataSource) - - const config = { - adminAuthorizationToken: env.ADMIN_AUTHORIZATION_TOKEN, - outerbaseApiKey: env.OUTERBASE_API_KEY, - enableAllowlist: env.ENABLE_ALLOWLIST, - enableRls: env.ENABLE_RLS, - externalDbType: env.EXTERNAL_DB_TYPE, - externalDbHost: env.EXTERNAL_DB_HOST, - externalDbPort: env.EXTERNAL_DB_PORT, - externalDbUser: env.EXTERNAL_DB_USER, - externalDbPassword: env.EXTERNAL_DB_PASS, - externalDbName: env.EXTERNAL_DB_DATABASE, - externalDbDefaultSchema: env.EXTERNAL_DB_DEFAULT_SCHEMA, - externalDbMongodbUri: env.EXTERNAL_DB_MONGODB_URI, - externalDbTursoUri: env.EXTERNAL_DB_TURSO_URI, - externalDbTursoToken: env.EXTERNAL_DB_TURSO_TOKEN, - externalDbCloudflareApiKey: env.EXTERNAL_DB_CLOUDFLARE_API_KEY, - externalDbCloudflareAccountId: env.EXTERNAL_DB_CLOUDFLARE_ACCOUNT_ID, - externalDbCloudflareDatabaseId: env.EXTERNAL_DB_CLOUDFLARE_DATABASE_ID, - externalDbStarbaseUri: env.EXTERNAL_DB_STARBASEDB_URI, - externalDbStarbaseToken: env.EXTERNAL_DB_STARBASEDB_TOKEN, - } satisfies HandlerConfig; - - // Return the final response to our user - return await new Handler().handle(request, dataSource, config); - } catch (error) { - // Return error response to client - return createResponse( - undefined, - error instanceof Error ? error.message : 'An unexpected error occurred', - 400 - ); + } } - - function expireCache(dataSource: DataSource) { - ctx.waitUntil((async () => { - try { - const cleanupSQL = `DELETE FROM tmp_cache WHERE timestamp + (ttl * 1000) < ?`; - await dataSource.internalConnection?.durableObject.executeQuery(cleanupSQL, [Date.now()], false); - } catch (err) { - console.error('Error cleaning up expired cache entries:', err); - } - })()); + } else if (isWebSocket) { + /** + * Web socket connections cannot pass in an Authorization header into their requests, + * so we can use a query parameter to validate the connection. + */ + const token = url.searchParams.get("token"); + + if ( + token !== env.ADMIN_AUTHORIZATION_TOKEN && + token !== env.CLIENT_AUTHORIZATION_TOKEN + ) { + return new Response( + "WebSocket connections are not supported at this endpoint.", + { status: 440 } + ); } - } + } + + /** + * Retrieve the Durable Object identifier from the environment bindings and instantiate a + * Durable Object stub to interact with the Durable Object. + */ + const region = env.REGION ?? RegionLocationHint.AUTO; + const id: DurableObjectId = + env.DATABASE_DURABLE_OBJECT.idFromName(DURABLE_OBJECT_ID); + const stub = + region !== RegionLocationHint.AUTO + ? env.DATABASE_DURABLE_OBJECT.get(id, { + locationHint: region as DurableObjectLocationHint, + }) + : env.DATABASE_DURABLE_OBJECT.get(id); + + const source: Source = + (request.headers.get("X-Starbase-Source") as Source) ?? + (url.searchParams.get("source") as Source) ?? + "internal"; + const dataSource: DataSource = { + source: source, + request: request.clone(), + internalConnection: { + durableObject: stub as unknown as DatabaseStub, + }, + externalConnection: { + outerbaseApiKey: env.OUTERBASE_API_KEY ?? "", + }, + context: { + ...jwtPayload, + }, + }; + + // Non-blocking operation to remove expired cache entries from our DO + expireCache(dataSource); + + const config = { + adminAuthorizationToken: env.ADMIN_AUTHORIZATION_TOKEN, + outerbaseApiKey: env.OUTERBASE_API_KEY, + enableAllowlist: env.ENABLE_ALLOWLIST, + enableRls: env.ENABLE_RLS, + externalDbType: env.EXTERNAL_DB_TYPE, + externalDbHost: env.EXTERNAL_DB_HOST, + externalDbPort: env.EXTERNAL_DB_PORT, + externalDbUser: env.EXTERNAL_DB_USER, + externalDbPassword: env.EXTERNAL_DB_PASS, + externalDbName: env.EXTERNAL_DB_DATABASE, + externalDbDefaultSchema: env.EXTERNAL_DB_DEFAULT_SCHEMA, + externalDbMongodbUri: env.EXTERNAL_DB_MONGODB_URI, + externalDbTursoUri: env.EXTERNAL_DB_TURSO_URI, + externalDbTursoToken: env.EXTERNAL_DB_TURSO_TOKEN, + externalDbCloudflareApiKey: env.EXTERNAL_DB_CLOUDFLARE_API_KEY, + externalDbCloudflareAccountId: env.EXTERNAL_DB_CLOUDFLARE_ACCOUNT_ID, + externalDbCloudflareDatabaseId: env.EXTERNAL_DB_CLOUDFLARE_DATABASE_ID, + externalDbStarbaseUri: env.EXTERNAL_DB_STARBASEDB_URI, + externalDbStarbaseToken: env.EXTERNAL_DB_STARBASEDB_TOKEN, + } satisfies HandlerConfig; + + // Return the final response to our user + return await new Handler({ + dataSource, + config, + }).handle(request); + } catch (error) { + // Return error response to client + return createResponse( + undefined, + error instanceof Error ? error.message : "An unexpected error occurred", + 400 + ); + } + + function expireCache(dataSource: DataSource) { + ctx.waitUntil( + (async () => { + try { + const cleanupSQL = `DELETE FROM tmp_cache WHERE timestamp + (ttl * 1000) < ?`; + await dataSource.internalConnection?.durableObject.executeQuery( + cleanupSQL, + [Date.now()], + false + ); + } catch (err) { + console.error("Error cleaning up expired cache entries:", err); + } + })() + ); + } + }, } satisfies ExportedHandler;