From e6355c1aea2484ffba9d95110faa2af40e922855 Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Wed, 26 Jun 2024 21:23:55 -0700 Subject: [PATCH] refactor(multi): plugification --- .changeset/config.json | 8 +- .gitignore | 3 +- .husky/pre-push | 4 +- commitlint.config.cjs | 10 +- cspell.json | 5 + package.json | 61 +- .../mothership-dashboard}/.env-template | 0 .../mothership-dashboard}/.gitignore | 0 .../pending/mothership-dashboard/.npmignore | 5 + .../mothership-dashboard}/.npmrc | 0 .../mothership-dashboard}/.prettierignore | 0 .../mothership-dashboard}/README.md | 0 .../Rest/CreateInstance.ts | 0 .../Rest/DeleteInstance.ts | 0 .../Rest/GetUserTokenInfo.ts | 0 .../Rest/UpdateInstance.ts | 0 .../mothership-dashboard}/Rest/index.ts | 0 .../mothership-dashboard}/User.ts | 22 + .../mothership-dashboard}/marked.config.js | 0 .../mothership-dashboard}/package.json | 18 +- .../pocketbase-client-helpers/RestHelper.ts | 5 +- .../pocketbase-client-helpers/index.ts | 0 .../mothership-dashboard}/postcss.config.cjs | 0 .../mothership-dashboard}/src/app.css | 0 .../mothership-dashboard}/src/app.html | 0 .../src/components/AlertBar.svelte | 0 .../src/components/Clipboard.svelte | 0 .../src/components/CodeSample.svelte | 0 .../src/components/CopyButton.svelte | 0 .../src/components/Logo.svelte | 0 .../src/components/MediaQuery.svelte | 0 .../src/components/MobileNavDrawer.svelte | 0 .../src/components/Navbar.svelte | 0 .../src/components/ProvisioningStatus.svelte | 0 .../src/components/SubscriptionStatus.svelte | 0 .../src/components/VerifyAccountBar.svelte | 0 .../src/components/cards/Card.svelte | 0 .../src/components/cards/CardHeader.svelte | 0 .../components/helpers/AuthStateGuard.svelte | 0 .../src/components/helpers/Meta.svelte | 0 .../src/components/helpers/TinyButton.svelte | 0 .../components/helpers/UserLoggedIn.svelte | 0 .../components/helpers/UserLoggedOut.svelte | 0 .../components/helpers/UserUnverified.svelte | 0 .../components/helpers/UserVerified.svelte | 0 .../src/components/helpers/theme.ts | 0 .../InstanceGeneratorWidget.svelte | 0 .../login-register/LoginForm.svelte | 0 .../NewInstanceProcessingBlock.svelte | 0 .../login-register/RegisterForm.svelte | 0 .../components/sidebar/SidebarNavLink.svelte | 0 .../tables/pricing-table/FeatureName.svelte | 0 .../pricing-table/FeatureSupportBlock.svelte | 0 .../tables/pricing-table/MobileTable.svelte | 0 .../tables/pricing-table/NoBlock.svelte | 0 .../tables/pricing-table/PricingTable.svelte | 0 .../tables/pricing-table/TextBlock.svelte | 0 .../tables/pricing-table/YesBlock.svelte | 0 .../mothership-dashboard}/src/env.ts | 0 .../src/pocketbase-client/PocketbaseClient.ts | 15 +- .../src/pocketbase-client/index.ts | 0 .../src/routes/+error.svelte | 0 .../src/routes/+layout.svelte | 0 .../src/routes/+layout.ts | 0 .../src/routes/+page.svelte | 0 .../src/routes/InstancesGuard.svelte | 0 .../src/routes/account/+layout.svelte | 0 .../src/routes/account/+page.svelte | 0 .../src/routes/account/Card.svelte | 0 .../src/routes/account/Check.svelte | 0 .../src/routes/account/FAQItem.svelte | 0 .../src/routes/account/FAQSection.svelte | 0 .../src/routes/account/PricingCard.svelte | 0 .../routes/account/notifications/+page.svelte | 0 .../src/routes/app/+layout.svelte | 0 .../app/instances/[instanceId]/+layout.svelte | 0 .../app/instances/[instanceId]/+page.svelte | 0 .../app/instances/[instanceId]/Code.svelte | 0 .../app/instances/[instanceId]/Ftpx.svelte | 0 .../instances/[instanceId]/Overview.svelte | 0 .../instances/[instanceId]/UsageChart.svelte | 0 .../instances/[instanceId]/logs/+page.svelte | 0 .../[instanceId]/logs/Logging.svelte | 0 .../[instanceId]/logs/LoggingInner.svelte | 0 .../[instanceId]/secrets/+page.svelte | 0 .../[instanceId]/secrets/Form.svelte | 0 .../[instanceId]/secrets/List.svelte | 0 .../[instanceId]/secrets/Secrets.svelte | 0 .../[instanceId]/secrets/SecretsInner.svelte | 0 .../instances/[instanceId]/secrets/stores.ts | 0 .../[instanceId]/settings/+page.svelte | 0 .../[instanceId]/settings/AdminSync.svelte | 0 .../[instanceId]/settings/CustomDomain.svelte | 0 .../settings/DangerZoneTitle.svelte | 0 .../settings/DeleteInstance.svelte | 0 .../[instanceId]/settings/DevMode.svelte | 0 .../[instanceId]/settings/ErrorMessage.svelte | 0 .../[instanceId]/settings/Maintenance.svelte | 0 .../settings/RenameInstance.svelte | 0 .../VersionChange/VersionChange.svelte | 0 .../VersionChange/VersionPicker.svelte | 0 .../app/instances/[instanceId]/store.ts | 0 .../src/routes/app/new/+page.svelte | 0 .../src/routes/app/new/Creator.svelte | 0 .../src/routes/app/new/Paywall.svelte | 0 .../src/routes/dashboard/+layout.svelte | 0 .../src/routes/dashboard/Dashboard.svelte | 0 .../src/routes/dashboard/InstanceList.svelte | 0 .../src/routes/dashboard/InstanceRow.svelte | 0 .../UsageChartForAllInstances.svelte | 0 .../src/routes/login/+page.svelte | 0 .../routes/login/confirm-account/+page.svelte | 0 .../routes/login/password-reset/+page.svelte | 0 .../login/password-reset/confirm/+page.svelte | 0 .../mothership-dashboard}/src/services.ts | 0 .../src/util/componentCleanup.ts | 0 .../src/util/database.ts | 0 .../mothership-dashboard}/src/util/events.ts | 0 .../mothership-dashboard}/src/util/stores.ts | 2 +- .../mothership-dashboard}/static/favicon.ico | Bin .../mothership-dashboard}/static/favicon.png | Bin .../static/icons/all.min.css | 0 .../static/icons/brands.min.css | 0 .../static/icons/fontawesome.min.css | 0 .../static/icons/icon-192x192.png | Bin .../static/icons/icon-256x256.png | Bin .../static/icons/icon-384x384.png | Bin .../static/icons/icon-512x512.png | Bin .../static/images/logo-square.png | Bin .../static/images/pocketbase-intro-screen.jpg | Bin .../static/images/pocketbase-logo.svg | 0 .../static/images/pockethost-cloud-logo.jpg | Bin .../static/manifest.json | 0 .../mothership-dashboard}/static/poster.png | Bin .../static/webfonts/fa-brands-400.ttf | Bin .../static/webfonts/fa-brands-400.woff2 | Bin .../static/webfonts/fa-duotone-900.ttf | Bin .../static/webfonts/fa-duotone-900.woff2 | Bin .../static/webfonts/fa-light-300.ttf | Bin .../static/webfonts/fa-light-300.woff2 | Bin .../static/webfonts/fa-regular-400.ttf | Bin .../static/webfonts/fa-regular-400.woff2 | Bin .../static/webfonts/fa-sharp-light-300.ttf | Bin .../static/webfonts/fa-sharp-light-300.woff2 | Bin .../static/webfonts/fa-sharp-regular-400.ttf | Bin .../webfonts/fa-sharp-regular-400.woff2 | Bin .../static/webfonts/fa-sharp-solid-900.ttf | Bin .../static/webfonts/fa-sharp-solid-900.woff2 | Bin .../static/webfonts/fa-solid-900.ttf | Bin .../static/webfonts/fa-solid-900.woff2 | Bin .../static/webfonts/fa-thin-100.ttf | Bin .../static/webfonts/fa-thin-100.woff2 | Bin .../static/webfonts/fa-v4compatibility.ttf | Bin .../static/webfonts/fa-v4compatibility.woff2 | Bin .../mothership-dashboard}/svelte.config.js | 0 .../mothership-dashboard}/tailwind.config.cjs | 0 .../mothership-dashboard}/tsconfig.json | 0 .../mothership-dashboard}/types.ts | 0 .../mothership-dashboard}/vite.config.ts | 0 .../mothership-superadmin}/.env-template | 0 .../mothership-superadmin}/.gitignore | 0 .../pending/mothership-superadmin/.npmignore | 5 + .../mothership-superadmin}/.npmrc | 0 .../mothership-superadmin}/.prettierignore | 0 .../mothership-superadmin}/README.md | 0 .../mothership-superadmin}/marked.config.js | 0 .../mothership-superadmin}/package.json | 22 +- .../mothership-superadmin}/postcss.config.cjs | 0 .../mothership-superadmin}/src/app.css | 0 .../mothership-superadmin}/src/app.html | 0 .../src/components/AlertBar.svelte | 0 .../src/components/Clipboard.svelte | 0 .../src/components/CodeSample.svelte | 0 .../src/components/CopyButton.svelte | 0 .../src/components/Logo.svelte | 0 .../src/components/MediaQuery.svelte | 0 .../src/components/MobileNavDrawer.svelte | 0 .../src/components/cards/Card.svelte | 0 .../src/components/cards/CardHeader.svelte | 0 .../components/helpers/AuthStateGuard.svelte | 0 .../src/components/helpers/Meta.svelte | 0 .../src/components/helpers/TinyButton.svelte | 0 .../components/helpers/UserLoggedIn.svelte | 0 .../components/helpers/UserLoggedOut.svelte | 0 .../src/components/helpers/theme.ts | 0 .../login-register/LoginForm.svelte | 0 .../mothership-superadmin}/src/env.ts | 0 .../src/pocketbase-client/PocketbaseClient.ts | 5 +- .../src/pocketbase-client/index.ts | 0 .../src/routes/+error.svelte | 0 .../src/routes/+layout.svelte | 0 .../src/routes/+layout.ts | 0 .../src/routes/+page.svelte | 0 .../src/routes/login/+page.svelte | 0 .../src/routes/plugins/+page.svelte | 0 .../src/routes/stats/+page.svelte | 0 .../mothership-superadmin}/src/services.ts | 0 .../src/util/componentCleanup.ts | 0 .../src/util/database.ts | 0 .../mothership-superadmin}/src/util/events.ts | 0 .../mothership-superadmin}/src/util/stores.ts | 0 .../mothership-superadmin/static}/favicon.ico | Bin .../mothership-superadmin}/static/favicon.png | Bin .../static}/icons/all.min.css | 0 .../static}/icons/brands.min.css | 0 .../static}/icons/fontawesome.min.css | 0 .../static/icons/icon-192x192.png | Bin .../static/icons/icon-256x256.png | Bin .../static/icons/icon-384x384.png | Bin .../static/icons/icon-512x512.png | Bin .../static/images/logo-square.png | Bin .../static/images/pocketbase-intro-screen.jpg | Bin .../static/images/pocketbase-logo.svg | 0 .../static/images}/pockethost-cloud-logo.jpg | Bin .../static/manifest.json | 0 .../mothership-superadmin/static}/poster.png | Bin .../static}/webfonts/fa-brands-400.ttf | Bin .../static}/webfonts/fa-brands-400.woff2 | Bin .../static}/webfonts/fa-duotone-900.ttf | Bin .../static}/webfonts/fa-duotone-900.woff2 | Bin .../static}/webfonts/fa-light-300.ttf | Bin .../static}/webfonts/fa-light-300.woff2 | Bin .../static}/webfonts/fa-regular-400.ttf | Bin .../static}/webfonts/fa-regular-400.woff2 | Bin .../static}/webfonts/fa-sharp-light-300.ttf | Bin .../static}/webfonts/fa-sharp-light-300.woff2 | Bin .../static}/webfonts/fa-sharp-regular-400.ttf | Bin .../webfonts/fa-sharp-regular-400.woff2 | Bin .../static}/webfonts/fa-sharp-solid-900.ttf | Bin .../static}/webfonts/fa-sharp-solid-900.woff2 | Bin .../static}/webfonts/fa-solid-900.ttf | Bin .../static}/webfonts/fa-solid-900.woff2 | Bin .../static}/webfonts/fa-thin-100.ttf | Bin .../static}/webfonts/fa-thin-100.woff2 | Bin .../static}/webfonts/fa-v4compatibility.ttf | Bin .../static}/webfonts/fa-v4compatibility.woff2 | Bin .../mothership-superadmin}/svelte.config.js | 0 .../tailwind.config.cjs | 0 .../mothership-superadmin}/tsconfig.json | 0 .../mothership-superadmin}/vite.config.ts | 0 .../.npmignore | 5 + .../package.json | 21 + .../src/index.ts | 27 + .../tsconfig.json | 21 + .../pending/plugin-discord-alerts/.npmignore | 5 + .../plugin-discord-alerts/package.json | 22 + .../plugin-discord-alerts/src/index.ts | 70 + .../pending/plugin-discord-alerts/src/lib.ts | 58 + .../plugin-discord-alerts/tsconfig.json | 20 + .../pending/plugin-edge-self-check/.npmignore | 5 + .../plugin-edge-self-check/package.json | 23 + .../src/HealthCommand/checkHealth.ts | 122 + .../src/HealthCommand/docker.ts | 63 + .../src}/HealthCommand/index.ts | 3 +- .../plugin-edge-self-check/src/index.ts | 32 + .../plugin-edge-self-check/tsconfig.json | 20 + packages/pending/plugin-ftp-server/.npmignore | 5 + .../pending/plugin-ftp-server/package.json | 23 + .../src}/FtpCommand/FtpService/PhFs.ts | 19 +- .../src}/FtpCommand/FtpService/fs-async.ts | 0 .../src}/FtpCommand/FtpService/index.ts | 45 +- .../src/FtpCommand/ServeCommand/ftp.ts | 10 + .../src}/FtpCommand/ServeCommand/index.ts | 2 +- .../src}/FtpCommand/index.ts | 2 +- .../pending/plugin-ftp-server/src/index.ts | 59 + .../pending/plugin-ftp-server/tsconfig.json | 21 + .../.npmignore | 5 + .../package.json | 23 + .../readme.md | 33 + .../src/RealtimeLog.ts | 62 + .../src/constants.ts | 9 + .../src/index.ts | 12 + .../src/log.ts | 4 + .../tsconfig.json | 20 + .../plugin-instance-logger-file/.npmignore | 5 + .../plugin-instance-logger-file/package.json | 25 + .../src}/InstanceLoggerService/index.ts | 6 +- .../plugin-instance-logger-file/src/index.ts | 24 + .../plugin-instance-logger-file/tsconfig.json | 23 + .../.npmignore | 5 + .../package.json | 23 + .../readme.md | 1 + .../src}/SyslogCommand/ServeCommand/index.ts | 2 +- .../src}/SyslogCommand/ServeCommand/syslog.ts | 18 +- .../src}/SyslogCommand/index.ts | 2 +- .../src}/SyslogLogger.ts | 4 +- .../src/constants.ts | 11 + .../src/index.ts | 13 + .../src/logger.ts | 4 + .../tsconfig.json | 20 + .../pending/plugin-launcher-docker/.npmignore | 5 + .../plugin-launcher-docker}/Dockerfile | 0 .../plugin-launcher-docker/package.json | 22 + .../src}/PocketBaseService/index.ts | 10 +- .../plugin-launcher-docker/src/index copy.ts} | 322 +- .../plugin-launcher-docker/src/index.ts | 39 + .../plugin-launcher-docker/tsconfig.json | 20 + packages/pending/plugin-maildev/.npmignore | 5 + packages/pending/plugin-maildev/package.json | 24 + packages/pending/plugin-maildev/src/index.ts | 48 + packages/pending/plugin-maildev/tsconfig.json | 21 + packages/pending/plugin-mothership/.npmignore | 5 + .../pending/plugin-mothership/package.json | 24 + .../InstanceMIxin.ts | 4 +- .../createAdminPbClient.ts | 4 +- .../MothershipAdminClientService/index.ts | 10 +- .../SendMailCommand/SqliteService/index.ts | 2 +- .../SendMailCommand/index.ts | 3 +- .../SendMailCommand/sendmail.ts | 8 +- .../MothershipCommand/ServeCommand/index.ts | 2 +- .../ServeCommand/mothership.ts | 13 +- .../MothershipCommand/UpdateCommand/index.ts | 2 +- .../freshenPocketbaseVersions.ts | 4 +- .../src}/MothershipCommand/index.ts | 4 +- packages/pending/plugin-mothership/src/env.ts | 85 + .../pending/plugin-mothership/src/index.ts | 295 + .../1699198734_pockethost_defaults.js | 0 .../pb_hooks/_ph_admin_sync.pb.js | 0 .../src/instance-app/pb_hooks/_ph_lib.js | 0 .../src/instance-app/tsconfig.json | 0 .../src/instance-app/types/goja.d.ts | 0 .../src/instance-app/types/lib.d.ts | 0 .../src/instance-app/types/types.d.ts | 0 .../plugin-mothership/src}/mkInstanceCache.ts | 4 +- .../1705062576_collections_snapshot.js | 0 .../migrations/1705083826_updated_stats.js | 0 .../1706060446_updated_instances.js | 0 .../1716628803_updated_instances.js | 0 .../pb_hooks/src/instances-create.pb.js | 0 .../pb_hooks/src/instances-delete.pb.js | 0 .../src/instances-migrate-versions.pb.js | 0 ...nstances-notify-discord-after-create.pb.js | 0 ...instances-notify-on-maintenance-mode.pb.js | 0 .../pb_hooks/src/instances-reset-idle.pb.js | 0 .../pb_hooks/src/instances-update.pb.js | 0 .../instances-validate-before-create.pb.js | 0 .../instances-validate-before-update.pb.js | 0 .../src/mothership-app/pb_hooks/src/lib.js | 0 .../src/mothership-app/pb_hooks/src/ls.pb.js | 0 .../mothership-app/pb_hooks/src/mail.pb.js | 0 .../pb_hooks/src/notifications.pb.js | 0 .../pb_hooks/src/random-words.js | 0 .../mothership-app/pb_hooks/src/signup.pb.js | 0 .../src/mothership-app/pb_hooks/src/sns.pb.js | 0 .../pb_hooks/src/unsubscribe.pb.js | 0 .../pb_hooks/src/user-token.pb.js | 0 .../pb_hooks/src/user-welcome-msg.pb.js | 0 .../pb_hooks/src/versions-route.pb.js | 0 .../mothership-app/pb_hooks/src/versions.cjs | 0 .../mothership-app/pb_hooks/types/global.d.ts | 0 .../mothership-app/pb_hooks/types/goja.d.ts | 0 .../mothership-app/pb_hooks/types/lemon.d.ts | 0 .../mothership-app/pb_hooks/types/lib.d.ts | 0 .../mothership-app/pb_hooks/types/types.d.ts | 0 .../src/mothership-app/ph_app/index.js | 0 .../mothership-app/ph_app/package-lock.json | 0 .../src/mothership-app/ph_app/package.json | 0 .../pending/plugin-mothership/tsconfig.json | 21 + .../pending/plugin-pockethost.io/.npmignore | 5 + .../pending/plugin-pockethost.io/package.json | 21 + .../pending/plugin-pockethost.io/src/index.ts | 78 + .../plugin-pockethost.io/tsconfig.json | 21 + .../pending/plugin-waf-enforce-ssl/.npmignore | 5 + .../plugin-waf-enforce-ssl/package.json | 25 + .../pending/plugin-waf-enforce-ssl/readme.md | 40 + .../plugin-waf-enforce-ssl/src/constants.ts | 17 + .../plugin-waf-enforce-ssl/src/index.ts | 57 + .../plugin-waf-enforce-ssl/tsconfig.json | 20 + packages/pending/plugin-waf-ipcidr/.npmignore | 5 + .../pending/plugin-waf-ipcidr/package.json | 23 + packages/pending/plugin-waf-ipcidr/readme.md | 42 + .../pending/plugin-waf-ipcidr/src/cidr.ts | 19 + .../plugin-waf-ipcidr/src/constants.ts | 18 + .../pending/plugin-waf-ipcidr/src/index.ts | 24 + .../pending/plugin-waf-ipcidr/src/presets.ts | 19 + .../pending/plugin-waf-ipcidr/tsconfig.json | 20 + packages/pending/plugin-waf/.npmignore | 5 + packages/pending/plugin-waf/package.json | 24 + packages/pending/plugin-waf/readme.md | 61 + .../firewall/createVhostProxyMiddleware.ts | 2 +- .../ServeCommand/firewall/server.ts | 57 + .../FirewallCommand/ServeCommand/index.ts | 4 +- .../plugin-waf/src}/FirewallCommand/index.ts | 6 +- packages/pending/plugin-waf/src/constants.ts | 11 + packages/pending/plugin-waf/src/index.ts | 21 + packages/pending/plugin-waf/tsconfig.json | 20 + .../pockethost-io-lander}/.env-template | 0 .../pockethost-io-lander}/.gitignore | 0 .../pending/pockethost-io-lander/.npmignore | 5 + .../pockethost-io-lander}/LICENSE | 0 .../pockethost-io-lander}/README.md | 0 .../pockethost-io-lander}/_data/env.js | 0 .../pockethost-io-lander}/_data/metadata.js | 0 .../pockethost-io-lander}/_data/showcase.json | 0 .../_includes/components/buttons.njk | 0 .../_includes/components/header.njk | 0 .../_includes/components/postslist.njk | 0 .../_includes/layouts/base.njk | 0 .../_includes/layouts/docs.njk | 0 .../_includes/layouts/home.njk | 0 .../_includes/layouts/post.njk | 0 .../pockethost-io-lander}/content/404.md | 0 .../pockethost-io-lander}/content/blog.njk | 0 .../content/blog/0.0.1.md | 0 .../content/blog/0.2.0.md | 0 .../content/blog/0.3.0.md | 0 .../content/blog/0.3.1.md | 0 .../content/blog/0.3.2.md | 0 .../content/blog/0.4.0.md | 0 .../content/blog/0.4.1.md | 0 .../content/blog/0.4.2.md | 0 .../content/blog/0.5.0.md | 0 .../content/blog/0.5.1.md | 0 .../content/blog/0.5.2.md | 0 .../content/blog/0.5.3.md | 0 .../content/blog/0.5.4.md | 0 .../content/blog/0.5.5.md | 0 .../content/blog/0.5.6.md | 0 .../content/blog/0.5.7.md | 0 .../content/blog/0.6.0.md | 0 .../content/blog/0.6.1.md | 0 .../content/blog/0.7.0.md | 0 .../content/blog/0.7.1.md | 0 .../content/blog/0.7.2.md | 0 .../content/blog/0.8.0.md | 0 .../content/blog/0.8.1.md | 0 .../content/blog/0.8.2.md | 0 .../content/blog/0.9.0.md | 0 .../content/blog/0.9.1.md | 0 .../content/blog/0.9.2.md | 0 .../content/blog/0.9.3.md | 0 .../blog/awesome-pocketbase-20-and-growing.md | 0 .../content/blog/blog.11tydata.js | 0 .../content/blog/pocket-host-v0-10-0.md | 0 .../content/blog/pocket-host-v0-10-1.md | 0 .../content/blog/pocket-host-v0-11-0.md | 0 .../content/docs/docs.11tydata.js | 0 .../content/docs/index.njk | 0 .../content/docs/overview/faq.md | 0 .../content/docs/overview/introduction.md | 0 .../content/docs/usage/accessing-instance.md | 0 .../content/docs/usage/admin-sync.md | 0 .../content/docs/usage/create.md | 0 .../content/docs/usage/custom-domain.md | 0 .../content/docs/usage/delete.md | 0 .../content/docs/usage/dev-mode.md | 0 .../content/docs/usage/errors.md | 0 .../content/docs/usage/ftp.md | 0 .../content/docs/usage/hooks.md | 0 .../content/docs/usage/instances/index.md | 0 .../content/docs/usage/maintenance.md | 0 .../content/docs/usage/rename-instance.md | 0 .../content/docs/usage/upgrading.md | 0 .../content/docs/usage/usage-limits.md | 0 .../content/feed/feed.11tydata.js | 0 .../content/feed/feed.njk | 0 .../content/feed/json.njk | 0 .../pockethost-io-lander}/content/index.njk | 0 .../content/pricing/index.njk | 0 .../content/showcase/index.njk | 0 .../content/sitemap/sitemap.xml.njk | 0 .../pockethost-io-lander}/content/support.njk | 0 .../content/tags-list.njk | 0 .../pockethost-io-lander}/content/tags.njk | 0 .../eleventy.config.drafts.js | 0 .../eleventy.config.images.js | 0 .../pockethost-io-lander}/eleventy.config.js | 0 .../pockethost-io-lander}/package.json | 23 +- .../public/css/index.css | 0 .../public/docs/custom-domain.png | Bin .../public/docs/instance-idle-screenshot.png | Bin .../public/docs/instance-usage-screenshot.png | Bin .../docs/instance-version-screenshot.png | Bin .../docs/maintenance-mode-screenshot.png | Bin .../pockethost-io-lander/public}/favicon.ico | Bin .../public}/icons/all.min.css | 0 .../public}/icons/brands.min.css | 0 .../public}/icons/fontawesome.min.css | 0 .../public/img/futuristic-server-room.png | Bin .../img/pockethost-cloud-logo-upscaled.png | Bin .../public/img}/pockethost-cloud-logo.jpg | Bin .../public/img/pockethost-cloud-logo.pxd | Bin .../public/img/pockethost-homepage-bg.png | Bin .../pockethost-showcase-battleborn.jpg | Bin .../showcase/pockethost-showcase-ecourse.jpg | Bin .../pockethost-io-lander/public}/poster.png | Bin .../public}/webfonts/fa-brands-400.ttf | Bin .../public}/webfonts/fa-brands-400.woff2 | Bin .../public}/webfonts/fa-duotone-900.ttf | Bin .../public}/webfonts/fa-duotone-900.woff2 | Bin .../public}/webfonts/fa-light-300.ttf | Bin .../public}/webfonts/fa-light-300.woff2 | Bin .../public}/webfonts/fa-regular-400.ttf | Bin .../public}/webfonts/fa-regular-400.woff2 | Bin .../public}/webfonts/fa-sharp-light-300.ttf | Bin .../public}/webfonts/fa-sharp-light-300.woff2 | Bin .../public}/webfonts/fa-sharp-regular-400.ttf | Bin .../webfonts/fa-sharp-regular-400.woff2 | Bin .../public}/webfonts/fa-sharp-solid-900.ttf | Bin .../public}/webfonts/fa-sharp-solid-900.woff2 | Bin .../public}/webfonts/fa-solid-900.ttf | Bin .../public}/webfonts/fa-solid-900.woff2 | Bin .../public}/webfonts/fa-thin-100.ttf | Bin .../public}/webfonts/fa-thin-100.woff2 | Bin .../public}/webfonts/fa-v4compatibility.ttf | Bin .../public}/webfonts/fa-v4compatibility.woff2 | Bin .../pockethost-io-lander}/tailwind.config.js | 0 packages/plugin-auto-admin/CHANGELOG.md | 7 + packages/plugin-auto-admin/LICENSE.md | 16 + packages/plugin-auto-admin/package.json | 34 + packages/plugin-auto-admin/readme.md | 37 + packages/plugin-auto-admin/src/constants.ts | 16 + packages/plugin-auto-admin/src/index.ts | 30 + packages/plugin-auto-admin/src/log.ts | 4 + packages/plugin-auto-admin/tsconfig.json | 20 + packages/plugin-console-logger/.npmignore | 6 + packages/plugin-console-logger/CHANGELOG.md | 28 + packages/plugin-console-logger/LICENSE.md | 16 + packages/plugin-console-logger/package.json | 31 +- packages/plugin-console-logger/readme.md | 23 + packages/plugin-console-logger/src/index.ts | 64 +- packages/plugin-console-logger/tsconfig.json | 123 +- packages/plugin-launcher-spawn/.npmignore | 6 + packages/plugin-launcher-spawn/CHANGELOG.md | 23 + packages/plugin-launcher-spawn/LICENSE.md | 16 + packages/plugin-launcher-spawn/package.json | 34 + packages/plugin-launcher-spawn/readme.md | 32 + packages/plugin-launcher-spawn/src/index.ts | 233 + packages/plugin-launcher-spawn/tsconfig.json | 21 + packages/pockethost-instance/package.json | 12 - packages/pockethost/.npmignore | 6 + packages/pockethost/CHANGELOG.md | 49 + packages/pockethost/package.json | 93 +- packages/pockethost/plugin-guide.md | 45 + packages/pockethost/readme.md | 70 + .../src/cli/commands/ConfigCommand/index.ts | 99 + .../DaemonCommand/ServeCommand/daemon.ts | 53 - .../DaemonCommand/ServeCommand/index.ts | 15 - .../EdgeCommand/DaemonCommand/index.ts | 13 - .../FtpCommand/ServeCommand/ftp.ts | 15 - .../src/cli/commands/EdgeCommand/index.ts | 18 - .../ServeCommand/firewall/cidr.ts | 23 - .../ServeCommand/firewall/server.ts | 93 - .../cli/commands/HealthCommand/checkHealth.ts | 235 - .../src/cli/commands/PluginCommand/index.ts | 122 + .../src/cli/commands/PluginCommand/util.ts | 140 + .../src/cli/commands/ServeCommand/index.ts | 13 +- packages/pockethost/src/cli/index.ts | 59 +- .../pockethost/src/common/CleanupManager.ts | 7 +- packages/pockethost/src/common/Logger.ts | 22 +- packages/pockethost/src/common/debug.ts | 8 + packages/pockethost/src/common/error.ts | 16 + packages/pockethost/src/common/index.ts | 9 +- packages/pockethost/src/common/ioc.ts | 44 - packages/pockethost/src/common/newId.ts | 4 - packages/pockethost/src/common/now.ts | 1 - packages/pockethost/src/common/plugin.ts | 65 - .../pockethost/src/common/plugin/action.ts | 127 + .../pockethost/src/common/plugin/filter.ts | 115 + .../pockethost/src/common/plugin/index.ts | 21 + packages/pockethost/src/common/pocketbase.ts | 14 - .../src/common/promiseSerializer.ts | 22 + .../pockethost/src/common/schema/Instance.ts | 35 +- .../pockethost/src/common/schema/index.ts | 3 - packages/pockethost/src/common/stringify.ts | 3 - packages/pockethost/src/constants.ts | 284 +- packages/pockethost/src/core/Settings.ts | 29 +- packages/pockethost/src/core/discordAlert.ts | 26 - packages/pockethost/src/core/env.ts | 34 - packages/pockethost/src/core/index.ts | 5 - packages/pockethost/src/core/pexec.ts | 19 - packages/pockethost/src/core/process.ts | 24 - packages/pockethost/src/core/tryFetch.ts | 10 +- packages/pockethost/src/index.ts | 1 - packages/pockethost/src/server.ts | 115 + .../pockethost/src/services/PortService.ts | 12 - .../pockethost/src/services/ProxyService.ts | 98 - .../pockethost/src/services/RealtimeLog.ts | 91 - packages/pockethost/src/services/index.ts | 7 - packages/pockethost/tsconfig.json | 7 +- plop-templates/plugin/.npmignore | 6 + plop-templates/plugin/LICENSE.md | 16 + plop-templates/plugin/package.json | 31 + plop-templates/plugin/readme.md | 33 + plop-templates/plugin/src/constants.ts | 11 + plop-templates/plugin/src/index.ts | 9 + plop-templates/plugin/src/log.ts | 4 + plop-templates/plugin/tsconfig.json | 20 + plopfile.mjs | 27 + pnpm-lock.yaml | 7477 ++--------------- turbo.json | 25 + 591 files changed, 4970 insertions(+), 8911 deletions(-) rename packages/{dashboard => pending/mothership-dashboard}/.env-template (100%) rename packages/{dashboard => pending/mothership-dashboard}/.gitignore (100%) create mode 100644 packages/pending/mothership-dashboard/.npmignore rename packages/{dashboard => pending/mothership-dashboard}/.npmrc (100%) rename packages/{dashboard => pending/mothership-dashboard}/.prettierignore (100%) rename packages/{dashboard => pending/mothership-dashboard}/README.md (100%) rename packages/{pockethost/src/common/schema => pending/mothership-dashboard}/Rest/CreateInstance.ts (100%) rename packages/{pockethost/src/common/schema => pending/mothership-dashboard}/Rest/DeleteInstance.ts (100%) rename packages/{pockethost/src/common/schema => pending/mothership-dashboard}/Rest/GetUserTokenInfo.ts (100%) rename packages/{pockethost/src/common/schema => pending/mothership-dashboard}/Rest/UpdateInstance.ts (100%) rename packages/{pockethost/src/common/schema => pending/mothership-dashboard}/Rest/index.ts (100%) rename packages/{pockethost/src/common/schema => pending/mothership-dashboard}/User.ts (51%) rename packages/{dashboard => pending/mothership-dashboard}/marked.config.js (100%) rename packages/{dashboard => pending/mothership-dashboard}/package.json (76%) rename packages/{pockethost/src/common => pending/mothership-dashboard}/pocketbase-client-helpers/RestHelper.ts (94%) rename packages/{pockethost/src/common => pending/mothership-dashboard}/pocketbase-client-helpers/index.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/postcss.config.cjs (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/app.css (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/app.html (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/AlertBar.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/Clipboard.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/CodeSample.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/CopyButton.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/Logo.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/MediaQuery.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/MobileNavDrawer.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/Navbar.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/ProvisioningStatus.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/SubscriptionStatus.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/VerifyAccountBar.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/cards/Card.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/cards/CardHeader.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/AuthStateGuard.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/Meta.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/TinyButton.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/UserLoggedIn.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/UserLoggedOut.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/UserUnverified.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/UserVerified.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/helpers/theme.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/login-register/InstanceGeneratorWidget.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/login-register/LoginForm.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/login-register/NewInstanceProcessingBlock.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/login-register/RegisterForm.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/sidebar/SidebarNavLink.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/tables/pricing-table/FeatureName.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/tables/pricing-table/FeatureSupportBlock.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/tables/pricing-table/MobileTable.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/tables/pricing-table/NoBlock.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/tables/pricing-table/PricingTable.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/tables/pricing-table/TextBlock.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/components/tables/pricing-table/YesBlock.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/env.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/pocketbase-client/PocketbaseClient.ts (95%) rename packages/{dashboard => pending/mothership-dashboard}/src/pocketbase-client/index.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/+error.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/+layout.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/+layout.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/InstancesGuard.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/+layout.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/Card.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/Check.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/FAQItem.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/FAQSection.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/PricingCard.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/account/notifications/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/+layout.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/+layout.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/Code.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/Ftpx.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/Overview.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/UsageChart.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/logs/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/logs/Logging.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/logs/LoggingInner.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/secrets/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/secrets/Form.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/secrets/List.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/secrets/Secrets.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/secrets/SecretsInner.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/secrets/stores.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/AdminSync.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/CustomDomain.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/DangerZoneTitle.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/DeleteInstance.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/DevMode.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/ErrorMessage.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/Maintenance.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/RenameInstance.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionChange.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionPicker.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/instances/[instanceId]/store.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/new/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/new/Creator.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/app/new/Paywall.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/dashboard/+layout.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/dashboard/Dashboard.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/dashboard/InstanceList.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/dashboard/InstanceRow.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/dashboard/UsageChartForAllInstances.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/login/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/login/confirm-account/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/login/password-reset/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/routes/login/password-reset/confirm/+page.svelte (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/services.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/util/componentCleanup.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/util/database.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/util/events.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/src/util/stores.ts (98%) rename packages/{dashboard => pending/mothership-dashboard}/static/favicon.ico (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/favicon.png (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/icons/all.min.css (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/icons/brands.min.css (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/icons/fontawesome.min.css (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/icons/icon-192x192.png (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/icons/icon-256x256.png (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/icons/icon-384x384.png (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/icons/icon-512x512.png (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/images/logo-square.png (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/images/pocketbase-intro-screen.jpg (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/images/pocketbase-logo.svg (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/images/pockethost-cloud-logo.jpg (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/manifest.json (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/poster.png (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-brands-400.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-brands-400.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-duotone-900.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-duotone-900.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-light-300.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-light-300.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-regular-400.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-regular-400.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-sharp-light-300.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-sharp-light-300.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-sharp-regular-400.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-sharp-regular-400.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-sharp-solid-900.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-sharp-solid-900.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-solid-900.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-solid-900.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-thin-100.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-thin-100.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-v4compatibility.ttf (100%) rename packages/{dashboard => pending/mothership-dashboard}/static/webfonts/fa-v4compatibility.woff2 (100%) rename packages/{dashboard => pending/mothership-dashboard}/svelte.config.js (100%) rename packages/{dashboard => pending/mothership-dashboard}/tailwind.config.cjs (100%) rename packages/{dashboard => pending/mothership-dashboard}/tsconfig.json (100%) rename packages/{pockethost/src/common/schema => pending/mothership-dashboard}/types.ts (100%) rename packages/{dashboard => pending/mothership-dashboard}/vite.config.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/.env-template (100%) rename packages/{superadmin => pending/mothership-superadmin}/.gitignore (100%) create mode 100644 packages/pending/mothership-superadmin/.npmignore rename packages/{superadmin => pending/mothership-superadmin}/.npmrc (100%) rename packages/{superadmin => pending/mothership-superadmin}/.prettierignore (100%) rename packages/{superadmin => pending/mothership-superadmin}/README.md (100%) rename packages/{superadmin => pending/mothership-superadmin}/marked.config.js (100%) rename packages/{superadmin => pending/mothership-superadmin}/package.json (74%) rename packages/{superadmin => pending/mothership-superadmin}/postcss.config.cjs (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/app.css (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/app.html (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/AlertBar.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/Clipboard.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/CodeSample.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/CopyButton.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/Logo.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/MediaQuery.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/MobileNavDrawer.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/cards/Card.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/cards/CardHeader.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/helpers/AuthStateGuard.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/helpers/Meta.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/helpers/TinyButton.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/helpers/UserLoggedIn.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/helpers/UserLoggedOut.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/helpers/theme.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/components/login-register/LoginForm.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/env.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/pocketbase-client/PocketbaseClient.ts (98%) rename packages/{superadmin => pending/mothership-superadmin}/src/pocketbase-client/index.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/routes/+error.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/routes/+layout.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/routes/+layout.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/routes/+page.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/routes/login/+page.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/routes/plugins/+page.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/routes/stats/+page.svelte (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/services.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/util/componentCleanup.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/util/database.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/util/events.ts (100%) rename packages/{superadmin => pending/mothership-superadmin}/src/util/stores.ts (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/favicon.ico (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/favicon.png (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/icons/all.min.css (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/icons/brands.min.css (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/icons/fontawesome.min.css (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/icons/icon-192x192.png (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/icons/icon-256x256.png (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/icons/icon-384x384.png (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/icons/icon-512x512.png (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/images/logo-square.png (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/images/pocketbase-intro-screen.jpg (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/images/pocketbase-logo.svg (100%) rename packages/{lander/public/img => pending/mothership-superadmin/static/images}/pockethost-cloud-logo.jpg (100%) rename packages/{superadmin => pending/mothership-superadmin}/static/manifest.json (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/poster.png (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-brands-400.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-brands-400.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-duotone-900.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-duotone-900.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-light-300.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-light-300.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-regular-400.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-regular-400.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-sharp-light-300.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-sharp-light-300.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-sharp-regular-400.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-sharp-regular-400.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-sharp-solid-900.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-sharp-solid-900.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-solid-900.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-solid-900.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-thin-100.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-thin-100.woff2 (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-v4compatibility.ttf (100%) rename packages/{lander/public => pending/mothership-superadmin/static}/webfonts/fa-v4compatibility.woff2 (100%) rename packages/{superadmin => pending/mothership-superadmin}/svelte.config.js (100%) rename packages/{superadmin => pending/mothership-superadmin}/tailwind.config.cjs (100%) rename packages/{superadmin => pending/mothership-superadmin}/tsconfig.json (100%) rename packages/{superadmin => pending/mothership-superadmin}/vite.config.ts (100%) create mode 100644 packages/pending/plugin-cloudflare-request-logger/.npmignore create mode 100644 packages/pending/plugin-cloudflare-request-logger/package.json create mode 100644 packages/pending/plugin-cloudflare-request-logger/src/index.ts create mode 100644 packages/pending/plugin-cloudflare-request-logger/tsconfig.json create mode 100644 packages/pending/plugin-discord-alerts/.npmignore create mode 100644 packages/pending/plugin-discord-alerts/package.json create mode 100644 packages/pending/plugin-discord-alerts/src/index.ts create mode 100644 packages/pending/plugin-discord-alerts/src/lib.ts create mode 100644 packages/pending/plugin-discord-alerts/tsconfig.json create mode 100644 packages/pending/plugin-edge-self-check/.npmignore create mode 100644 packages/pending/plugin-edge-self-check/package.json create mode 100644 packages/pending/plugin-edge-self-check/src/HealthCommand/checkHealth.ts create mode 100644 packages/pending/plugin-edge-self-check/src/HealthCommand/docker.ts rename packages/{pockethost/src/cli/commands => pending/plugin-edge-self-check/src}/HealthCommand/index.ts (83%) create mode 100644 packages/pending/plugin-edge-self-check/src/index.ts create mode 100644 packages/pending/plugin-edge-self-check/tsconfig.json create mode 100644 packages/pending/plugin-ftp-server/.npmignore create mode 100644 packages/pending/plugin-ftp-server/package.json rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-ftp-server/src}/FtpCommand/FtpService/PhFs.ts (99%) rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-ftp-server/src}/FtpCommand/FtpService/fs-async.ts (100%) rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-ftp-server/src}/FtpCommand/FtpService/index.ts (78%) create mode 100644 packages/pending/plugin-ftp-server/src/FtpCommand/ServeCommand/ftp.ts rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-ftp-server/src}/FtpCommand/ServeCommand/index.ts (86%) rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-ftp-server/src}/FtpCommand/index.ts (84%) create mode 100644 packages/pending/plugin-ftp-server/src/index.ts create mode 100644 packages/pending/plugin-ftp-server/tsconfig.json create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/.npmignore create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/package.json create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/readme.md create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/src/RealtimeLog.ts create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/src/constants.ts create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/src/index.ts create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/src/log.ts create mode 100644 packages/pending/plugin-instance-logger-file-realtime-tail/tsconfig.json create mode 100644 packages/pending/plugin-instance-logger-file/.npmignore create mode 100644 packages/pending/plugin-instance-logger-file/package.json rename packages/{pockethost/src/services => pending/plugin-instance-logger-file/src}/InstanceLoggerService/index.ts (99%) create mode 100644 packages/pending/plugin-instance-logger-file/src/index.ts create mode 100644 packages/pending/plugin-instance-logger-file/tsconfig.json create mode 100644 packages/pending/plugin-instance-logger-syslog-server/.npmignore create mode 100644 packages/pending/plugin-instance-logger-syslog-server/package.json create mode 100644 packages/pending/plugin-instance-logger-syslog-server/readme.md rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-instance-logger-syslog-server/src}/SyslogCommand/ServeCommand/index.ts (86%) rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-instance-logger-syslog-server/src}/SyslogCommand/ServeCommand/syslog.ts (73%) rename packages/{pockethost/src/cli/commands/EdgeCommand => pending/plugin-instance-logger-syslog-server/src}/SyslogCommand/index.ts (85%) rename packages/{pockethost/src/core => pending/plugin-instance-logger-syslog-server/src}/SyslogLogger.ts (90%) create mode 100644 packages/pending/plugin-instance-logger-syslog-server/src/constants.ts create mode 100644 packages/pending/plugin-instance-logger-syslog-server/src/index.ts create mode 100644 packages/pending/plugin-instance-logger-syslog-server/src/logger.ts create mode 100644 packages/pending/plugin-instance-logger-syslog-server/tsconfig.json create mode 100644 packages/pending/plugin-launcher-docker/.npmignore rename packages/{pockethost-instance => pending/plugin-launcher-docker}/Dockerfile (100%) create mode 100644 packages/pending/plugin-launcher-docker/package.json rename packages/{pockethost/src/services => pending/plugin-launcher-docker/src}/PocketBaseService/index.ts (98%) rename packages/{pockethost/src/services/InstanceService/index.ts => pending/plugin-launcher-docker/src/index copy.ts} (55%) create mode 100644 packages/pending/plugin-launcher-docker/src/index.ts create mode 100644 packages/pending/plugin-launcher-docker/tsconfig.json create mode 100644 packages/pending/plugin-maildev/.npmignore create mode 100644 packages/pending/plugin-maildev/package.json create mode 100644 packages/pending/plugin-maildev/src/index.ts create mode 100644 packages/pending/plugin-maildev/tsconfig.json create mode 100644 packages/pending/plugin-mothership/.npmignore create mode 100644 packages/pending/plugin-mothership/package.json rename packages/{pockethost/src/services => pending/plugin-mothership/src}/MothershipAdminClientService/InstanceMIxin.ts (98%) rename packages/{pockethost/src/services => pending/plugin-mothership/src}/MothershipAdminClientService/createAdminPbClient.ts (98%) rename packages/{pockethost/src/services => pending/plugin-mothership/src}/MothershipAdminClientService/index.ts (96%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src/MothershipCommand}/SendMailCommand/SqliteService/index.ts (98%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src/MothershipCommand}/SendMailCommand/index.ts (83%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src/MothershipCommand}/SendMailCommand/sendmail.ts (94%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src}/MothershipCommand/ServeCommand/index.ts (90%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src}/MothershipCommand/ServeCommand/mothership.ts (92%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src}/MothershipCommand/UpdateCommand/index.ts (89%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src}/MothershipCommand/freshenPocketbaseVersions.ts (95%) rename packages/{pockethost/src/cli/commands => pending/plugin-mothership/src}/MothershipCommand/index.ts (72%) create mode 100644 packages/pending/plugin-mothership/src/env.ts create mode 100644 packages/pending/plugin-mothership/src/index.ts rename packages/{pockethost => pending/plugin-mothership}/src/instance-app/migrations/1699198734_pockethost_defaults.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/instance-app/pb_hooks/_ph_admin_sync.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/instance-app/pb_hooks/_ph_lib.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/instance-app/tsconfig.json (100%) rename packages/{pockethost => pending/plugin-mothership}/src/instance-app/types/goja.d.ts (100%) rename packages/{pockethost => pending/plugin-mothership}/src/instance-app/types/lib.d.ts (100%) rename packages/{pockethost => pending/plugin-mothership}/src/instance-app/types/types.d.ts (100%) rename packages/{pockethost/src/services/InstanceService => pending/plugin-mothership/src}/mkInstanceCache.ts (96%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/migrations/1705062576_collections_snapshot.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/migrations/1705083826_updated_stats.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/migrations/1706060446_updated_instances.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/migrations/1716628803_updated_instances.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-create.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-delete.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-migrate-versions.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-notify-discord-after-create.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-notify-on-maintenance-mode.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-reset-idle.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-update.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-validate-before-create.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/instances-validate-before-update.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/lib.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/ls.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/mail.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/notifications.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/random-words.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/signup.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/sns.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/unsubscribe.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/user-token.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/user-welcome-msg.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/versions-route.pb.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/src/versions.cjs (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/types/global.d.ts (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/types/goja.d.ts (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/types/lemon.d.ts (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/types/lib.d.ts (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/pb_hooks/types/types.d.ts (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/ph_app/index.js (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/ph_app/package-lock.json (100%) rename packages/{pockethost => pending/plugin-mothership}/src/mothership-app/ph_app/package.json (100%) create mode 100644 packages/pending/plugin-mothership/tsconfig.json create mode 100644 packages/pending/plugin-pockethost.io/.npmignore create mode 100644 packages/pending/plugin-pockethost.io/package.json create mode 100644 packages/pending/plugin-pockethost.io/src/index.ts create mode 100644 packages/pending/plugin-pockethost.io/tsconfig.json create mode 100644 packages/pending/plugin-waf-enforce-ssl/.npmignore create mode 100644 packages/pending/plugin-waf-enforce-ssl/package.json create mode 100644 packages/pending/plugin-waf-enforce-ssl/readme.md create mode 100644 packages/pending/plugin-waf-enforce-ssl/src/constants.ts create mode 100644 packages/pending/plugin-waf-enforce-ssl/src/index.ts create mode 100644 packages/pending/plugin-waf-enforce-ssl/tsconfig.json create mode 100644 packages/pending/plugin-waf-ipcidr/.npmignore create mode 100644 packages/pending/plugin-waf-ipcidr/package.json create mode 100644 packages/pending/plugin-waf-ipcidr/readme.md create mode 100644 packages/pending/plugin-waf-ipcidr/src/cidr.ts create mode 100644 packages/pending/plugin-waf-ipcidr/src/constants.ts create mode 100644 packages/pending/plugin-waf-ipcidr/src/index.ts create mode 100644 packages/pending/plugin-waf-ipcidr/src/presets.ts create mode 100644 packages/pending/plugin-waf-ipcidr/tsconfig.json create mode 100644 packages/pending/plugin-waf/.npmignore create mode 100644 packages/pending/plugin-waf/package.json create mode 100644 packages/pending/plugin-waf/readme.md rename packages/{pockethost/src/cli/commands => pending/plugin-waf/src}/FirewallCommand/ServeCommand/firewall/createVhostProxyMiddleware.ts (93%) create mode 100644 packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/firewall/server.ts rename packages/{pockethost/src/cli/commands => pending/plugin-waf/src}/FirewallCommand/ServeCommand/index.ts (74%) rename packages/{pockethost/src/cli/commands => pending/plugin-waf/src}/FirewallCommand/index.ts (55%) create mode 100644 packages/pending/plugin-waf/src/constants.ts create mode 100644 packages/pending/plugin-waf/src/index.ts create mode 100644 packages/pending/plugin-waf/tsconfig.json rename packages/{lander => pending/pockethost-io-lander}/.env-template (100%) rename packages/{lander => pending/pockethost-io-lander}/.gitignore (100%) create mode 100644 packages/pending/pockethost-io-lander/.npmignore rename packages/{lander => pending/pockethost-io-lander}/LICENSE (100%) rename packages/{lander => pending/pockethost-io-lander}/README.md (100%) rename packages/{lander => pending/pockethost-io-lander}/_data/env.js (100%) rename packages/{lander => pending/pockethost-io-lander}/_data/metadata.js (100%) rename packages/{lander => pending/pockethost-io-lander}/_data/showcase.json (100%) rename packages/{lander => pending/pockethost-io-lander}/_includes/components/buttons.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/_includes/components/header.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/_includes/components/postslist.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/_includes/layouts/base.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/_includes/layouts/docs.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/_includes/layouts/home.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/_includes/layouts/post.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/404.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.0.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.2.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.3.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.3.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.3.2.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.4.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.4.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.4.2.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.2.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.3.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.4.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.5.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.6.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.5.7.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.6.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.6.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.7.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.7.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.7.2.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.8.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.8.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.8.2.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.9.0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.9.1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.9.2.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/0.9.3.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/awesome-pocketbase-20-and-growing.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/blog.11tydata.js (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/pocket-host-v0-10-0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/pocket-host-v0-10-1.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/blog/pocket-host-v0-11-0.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/docs.11tydata.js (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/index.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/overview/faq.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/overview/introduction.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/accessing-instance.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/admin-sync.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/create.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/custom-domain.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/delete.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/dev-mode.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/errors.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/ftp.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/hooks.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/instances/index.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/maintenance.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/rename-instance.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/upgrading.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/docs/usage/usage-limits.md (100%) rename packages/{lander => pending/pockethost-io-lander}/content/feed/feed.11tydata.js (100%) rename packages/{lander => pending/pockethost-io-lander}/content/feed/feed.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/feed/json.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/index.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/pricing/index.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/showcase/index.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/sitemap/sitemap.xml.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/support.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/tags-list.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/content/tags.njk (100%) rename packages/{lander => pending/pockethost-io-lander}/eleventy.config.drafts.js (100%) rename packages/{lander => pending/pockethost-io-lander}/eleventy.config.images.js (100%) rename packages/{lander => pending/pockethost-io-lander}/eleventy.config.js (100%) rename packages/{lander => pending/pockethost-io-lander}/package.json (84%) rename packages/{lander => pending/pockethost-io-lander}/public/css/index.css (100%) rename packages/{lander => pending/pockethost-io-lander}/public/docs/custom-domain.png (100%) rename packages/{lander => pending/pockethost-io-lander}/public/docs/instance-idle-screenshot.png (100%) rename packages/{lander => pending/pockethost-io-lander}/public/docs/instance-usage-screenshot.png (100%) rename packages/{lander => pending/pockethost-io-lander}/public/docs/instance-version-screenshot.png (100%) rename packages/{lander => pending/pockethost-io-lander}/public/docs/maintenance-mode-screenshot.png (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/favicon.ico (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/icons/all.min.css (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/icons/brands.min.css (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/icons/fontawesome.min.css (100%) rename packages/{lander => pending/pockethost-io-lander}/public/img/futuristic-server-room.png (100%) rename packages/{lander => pending/pockethost-io-lander}/public/img/pockethost-cloud-logo-upscaled.png (100%) rename packages/{superadmin/static/images => pending/pockethost-io-lander/public/img}/pockethost-cloud-logo.jpg (100%) rename packages/{lander => pending/pockethost-io-lander}/public/img/pockethost-cloud-logo.pxd (100%) rename packages/{lander => pending/pockethost-io-lander}/public/img/pockethost-homepage-bg.png (100%) rename packages/{lander => pending/pockethost-io-lander}/public/img/showcase/pockethost-showcase-battleborn.jpg (100%) rename packages/{lander => pending/pockethost-io-lander}/public/img/showcase/pockethost-showcase-ecourse.jpg (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/poster.png (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-brands-400.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-brands-400.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-duotone-900.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-duotone-900.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-light-300.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-light-300.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-regular-400.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-regular-400.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-sharp-light-300.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-sharp-light-300.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-sharp-regular-400.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-sharp-regular-400.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-sharp-solid-900.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-sharp-solid-900.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-solid-900.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-solid-900.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-thin-100.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-thin-100.woff2 (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-v4compatibility.ttf (100%) rename packages/{superadmin/static => pending/pockethost-io-lander/public}/webfonts/fa-v4compatibility.woff2 (100%) rename packages/{lander => pending/pockethost-io-lander}/tailwind.config.js (100%) create mode 100644 packages/plugin-auto-admin/CHANGELOG.md create mode 100644 packages/plugin-auto-admin/LICENSE.md create mode 100644 packages/plugin-auto-admin/package.json create mode 100644 packages/plugin-auto-admin/readme.md create mode 100644 packages/plugin-auto-admin/src/constants.ts create mode 100644 packages/plugin-auto-admin/src/index.ts create mode 100644 packages/plugin-auto-admin/src/log.ts create mode 100644 packages/plugin-auto-admin/tsconfig.json create mode 100644 packages/plugin-console-logger/.npmignore create mode 100644 packages/plugin-console-logger/CHANGELOG.md create mode 100644 packages/plugin-console-logger/LICENSE.md create mode 100644 packages/plugin-console-logger/readme.md create mode 100644 packages/plugin-launcher-spawn/.npmignore create mode 100644 packages/plugin-launcher-spawn/CHANGELOG.md create mode 100644 packages/plugin-launcher-spawn/LICENSE.md create mode 100644 packages/plugin-launcher-spawn/package.json create mode 100644 packages/plugin-launcher-spawn/readme.md create mode 100644 packages/plugin-launcher-spawn/src/index.ts create mode 100644 packages/plugin-launcher-spawn/tsconfig.json delete mode 100644 packages/pockethost-instance/package.json create mode 100644 packages/pockethost/.npmignore create mode 100644 packages/pockethost/CHANGELOG.md create mode 100644 packages/pockethost/plugin-guide.md create mode 100644 packages/pockethost/readme.md create mode 100644 packages/pockethost/src/cli/commands/ConfigCommand/index.ts delete mode 100644 packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/daemon.ts delete mode 100644 packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/index.ts delete mode 100644 packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/index.ts delete mode 100644 packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/ServeCommand/ftp.ts delete mode 100644 packages/pockethost/src/cli/commands/EdgeCommand/index.ts delete mode 100644 packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/cidr.ts delete mode 100644 packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/server.ts delete mode 100644 packages/pockethost/src/cli/commands/HealthCommand/checkHealth.ts create mode 100644 packages/pockethost/src/cli/commands/PluginCommand/index.ts create mode 100644 packages/pockethost/src/cli/commands/PluginCommand/util.ts create mode 100644 packages/pockethost/src/common/debug.ts create mode 100644 packages/pockethost/src/common/error.ts delete mode 100644 packages/pockethost/src/common/ioc.ts delete mode 100644 packages/pockethost/src/common/newId.ts delete mode 100644 packages/pockethost/src/common/now.ts delete mode 100644 packages/pockethost/src/common/plugin.ts create mode 100644 packages/pockethost/src/common/plugin/action.ts create mode 100644 packages/pockethost/src/common/plugin/filter.ts create mode 100644 packages/pockethost/src/common/plugin/index.ts delete mode 100644 packages/pockethost/src/common/pocketbase.ts create mode 100644 packages/pockethost/src/common/promiseSerializer.ts delete mode 100644 packages/pockethost/src/common/stringify.ts delete mode 100644 packages/pockethost/src/core/discordAlert.ts delete mode 100644 packages/pockethost/src/core/env.ts delete mode 100644 packages/pockethost/src/core/pexec.ts delete mode 100644 packages/pockethost/src/core/process.ts delete mode 100644 packages/pockethost/src/index.ts create mode 100644 packages/pockethost/src/server.ts delete mode 100644 packages/pockethost/src/services/PortService.ts delete mode 100644 packages/pockethost/src/services/ProxyService.ts delete mode 100644 packages/pockethost/src/services/RealtimeLog.ts delete mode 100644 packages/pockethost/src/services/index.ts create mode 100644 plop-templates/plugin/.npmignore create mode 100644 plop-templates/plugin/LICENSE.md create mode 100644 plop-templates/plugin/package.json create mode 100644 plop-templates/plugin/readme.md create mode 100644 plop-templates/plugin/src/constants.ts create mode 100644 plop-templates/plugin/src/index.ts create mode 100644 plop-templates/plugin/src/log.ts create mode 100644 plop-templates/plugin/tsconfig.json create mode 100644 turbo.json diff --git a/.changeset/config.json b/.changeset/config.json index 536d3fa6..b6844d54 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -2,10 +2,10 @@ "$schema": "https://unpkg.com/@changesets/config@3.0.1/schema.json", "changelog": "@changesets/cli/changelog", "commit": false, - "fixed": [], + "fixed": [["*"]], "linked": [], - "access": "restricted", - "baseBranch": "master", - "updateInternalDependencies": "patch", + "access": "public", + "baseBranch": "plugified", + "updateInternalDependencies": "minor", "ignore": [] } diff --git a/.gitignore b/.gitignore index edda7695..93ce473b 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ live-data dist .pockethost .scripts -*.tgz \ No newline at end of file +*.tgz +.turbo \ No newline at end of file diff --git a/.husky/pre-push b/.husky/pre-push index d0c7bce9..39a59aa1 100644 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,6 +1,6 @@ branch="$(git rev-parse --abbrev-ref HEAD)" if [ "$branch" = "master" ]; then - pnpm check:types - pnpm build-frontends +# pnpm check:types +# pnpm build-frontends fi diff --git a/commitlint.config.cjs b/commitlint.config.cjs index 7fabea8a..a5a73f78 100644 --- a/commitlint.config.cjs +++ b/commitlint.config.cjs @@ -6,13 +6,11 @@ module.exports = { 'always', [ 'root', - 'dashboard', - 'lander', - 'superadmin', 'pockethost', - 'common', - 'ga', - 'plugin-console-logger', + 'console-logger', + 'auto-admin', + 'launcher-spawn', + 'multi', ], ], 'scope-empty': [2, 'never'], diff --git a/cspell.json b/cspell.json index d019bd8f..84e4e888 100644 --- a/cspell.json +++ b/cspell.json @@ -20,9 +20,11 @@ "gobot", "goja", "IPCIDR", + "ipcountry", "jsonifiable", "Jsonifiable", "lemonbot", + "listr", "maildev", "maxsize", "memorystream", @@ -40,6 +42,7 @@ "pbgo", "PBOUNCE", "pexec", + "plugified", "pocketbase", "pockethost", "POCKETSTREAM", @@ -47,6 +50,7 @@ "rizzdown", "Rpcs", "semvers", + "sslify", "superadmin", "syslogd", "tailable", @@ -59,6 +63,7 @@ "Unwatching", "unzipper", "upserting", + "Vhosts", "Virtio" ] } diff --git a/package.json b/package.json index 880f1e08..fd41ec0b 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,8 @@ "pockethost": "dist/index.mjs" }, "scripts": { - "check:types": "concurrently 'pnpm:check:types:*'", - "check:types:dashboard": "cd packages/dashboard && pnpm check:types", - "check:types:superadmin": "cd packages/superadmin && pnpm check:types", - "check:types:pockethost": "cd packages/pockethost && pnpm check:types", + "sherif": "sherif", + "sherif:fix": "sherif --fix", "lint": "prettier -c \"./**/*.{ts,js,cjs,svelte,json}\"", "lint:fix": "prettier -w \"./**/*.{ts,js,cjs,svelte,json}\"", "build": "concurrently 'pnpm:build:*'", @@ -29,8 +27,6 @@ "dev:superadmin": "cd packages/superadmin && pnpm dev", "prod:cli": "cd packages/pockethost && pnpm start", "plop": "plop --no-progress", - "nofile": "cat /proc/sys/fs/file-nr", - "mail": "tsx ./packages/pockethost/src/cli/sendmail.ts", "gobot:download": "gobot download pocketbase", "gobot:download:all": "gobot download pocketbase --g-use-version='*'", "prepare": "husky" @@ -48,52 +44,12 @@ }, "type": "module", "devDependencies": { - "@changesets/cli": "^2.27.5", - "@types/node-os-utils": "^1.3.4", - "@types/winston-syslog": "^2.4.3", - "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", - "@swc/cli": "^0.1.62", - "@swc/core": "^1.3.95", - "@types/bootstrap": "^5.2.8", - "@types/copyfiles": "^2.4.4", - "@types/cors": "^2.8.17", - "@types/d3-scale": "^4.0.6", - "@types/d3-scale-chromatic": "^3.0.1", - "@types/decompress": "^4.2.6", - "@types/dockerode": "^3.3.21", - "@types/eventsource": "^1.1.14", - "@types/express": "^4.17.21", - "@types/express-sslify": "^1.2.5", - "@types/http-proxy": "^1.17.13", - "@types/inquirer": "^9.0.7", - "@types/js-cookie": "^3.0.5", - "@types/js-yaml": "^4.0.9", - "@types/json-stringify-safe": "^5.0.2", - "@types/marked": "^4.3.2", - "@types/memorystream": "^0.3.3", - "@types/ncp": "^2.0.8", - "@types/node": "^20.8.10", - "@types/semver": "^7.5.4", - "@types/tail": "^2.2.2", - "@types/tmp": "^0.2.5", - "@types/unzipper": "^0.10.8", - "@types/vhost": "^3.0.9", - "chokidar-cli": "^3.0.0", - "concurrently": "^8.2.2", - "copyfiles": "^2.4.1", - "date-fns": "^2.30.0", - "dotenv-cli": "^7.3.0", - "esbuild": "^0.20.0", - "esbuild-node-externals": "^1.13.0", - "express": "^4.18.2", - "http-proxy-middleware": "^2.0.6", + "chalk": "^5.3.0", + "commitlint": "^19.3.0", "husky": "^9.0.11", "inquirer": "^9.2.15", - "ip-cidr": "^3.1.0", "js-yaml": "^4.1.0", - "ncp": "^2.0.0", - "nodemon": "^3.0.3", "ora": "^7.0.1", "plop": "^4.0.0", "postinstall-postinstall": "^2.1.0", @@ -102,10 +58,11 @@ "prettier-plugin-organize-imports": "^3.2.3", "prettier-plugin-svelte": "^3.0.3", "rizzdown": "^0.0.7", - "svelte": "^4.2.2", + "sherif": "^0.8.4", "tslib": "^2.6.2", - "tsx": "^3.14.0", - "type-fest": "^4.6.0", + "turbo": "^2.0.4", "typescript": "^5.2.2" - } + }, + "packageManager": "pnpm@9.4.0+sha256.b6fd0bfda555e7e584ad7e56b30c68b01d5a04f9ee93989f4b93ca8473c49c74", + "private": true } diff --git a/packages/dashboard/.env-template b/packages/pending/mothership-dashboard/.env-template similarity index 100% rename from packages/dashboard/.env-template rename to packages/pending/mothership-dashboard/.env-template diff --git a/packages/dashboard/.gitignore b/packages/pending/mothership-dashboard/.gitignore similarity index 100% rename from packages/dashboard/.gitignore rename to packages/pending/mothership-dashboard/.gitignore diff --git a/packages/pending/mothership-dashboard/.npmignore b/packages/pending/mothership-dashboard/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/mothership-dashboard/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/dashboard/.npmrc b/packages/pending/mothership-dashboard/.npmrc similarity index 100% rename from packages/dashboard/.npmrc rename to packages/pending/mothership-dashboard/.npmrc diff --git a/packages/dashboard/.prettierignore b/packages/pending/mothership-dashboard/.prettierignore similarity index 100% rename from packages/dashboard/.prettierignore rename to packages/pending/mothership-dashboard/.prettierignore diff --git a/packages/dashboard/README.md b/packages/pending/mothership-dashboard/README.md similarity index 100% rename from packages/dashboard/README.md rename to packages/pending/mothership-dashboard/README.md diff --git a/packages/pockethost/src/common/schema/Rest/CreateInstance.ts b/packages/pending/mothership-dashboard/Rest/CreateInstance.ts similarity index 100% rename from packages/pockethost/src/common/schema/Rest/CreateInstance.ts rename to packages/pending/mothership-dashboard/Rest/CreateInstance.ts diff --git a/packages/pockethost/src/common/schema/Rest/DeleteInstance.ts b/packages/pending/mothership-dashboard/Rest/DeleteInstance.ts similarity index 100% rename from packages/pockethost/src/common/schema/Rest/DeleteInstance.ts rename to packages/pending/mothership-dashboard/Rest/DeleteInstance.ts diff --git a/packages/pockethost/src/common/schema/Rest/GetUserTokenInfo.ts b/packages/pending/mothership-dashboard/Rest/GetUserTokenInfo.ts similarity index 100% rename from packages/pockethost/src/common/schema/Rest/GetUserTokenInfo.ts rename to packages/pending/mothership-dashboard/Rest/GetUserTokenInfo.ts diff --git a/packages/pockethost/src/common/schema/Rest/UpdateInstance.ts b/packages/pending/mothership-dashboard/Rest/UpdateInstance.ts similarity index 100% rename from packages/pockethost/src/common/schema/Rest/UpdateInstance.ts rename to packages/pending/mothership-dashboard/Rest/UpdateInstance.ts diff --git a/packages/pockethost/src/common/schema/Rest/index.ts b/packages/pending/mothership-dashboard/Rest/index.ts similarity index 100% rename from packages/pockethost/src/common/schema/Rest/index.ts rename to packages/pending/mothership-dashboard/Rest/index.ts diff --git a/packages/pockethost/src/common/schema/User.ts b/packages/pending/mothership-dashboard/User.ts similarity index 51% rename from packages/pockethost/src/common/schema/User.ts rename to packages/pending/mothership-dashboard/User.ts index 758772c9..31a0aeb0 100644 --- a/packages/pockethost/src/common/schema/User.ts +++ b/packages/pending/mothership-dashboard/User.ts @@ -22,3 +22,25 @@ export type UserFields = BaseFields & { subscription: SubscriptionType notifyMaintenanceMode: boolean } + +export type InstanceFieldExtensions = { + uid: UserId + status: InstanceStatus + maintenance: boolean + suspension: string + syncAdmin: boolean + cname: string + dev: boolean + cname_active: boolean + notifyMaintenanceMode: boolean +} + +export type WithUser = { + expand: { uid: UserFields } +} + +export type InstanceFields_WithUser = InstanceFields & WithUser + +export type InstanceFields_Create = Omit + +export type InstanceRecordsById = { [_: RecordId]: InstanceFields } diff --git a/packages/dashboard/marked.config.js b/packages/pending/mothership-dashboard/marked.config.js similarity index 100% rename from packages/dashboard/marked.config.js rename to packages/pending/mothership-dashboard/marked.config.js diff --git a/packages/dashboard/package.json b/packages/pending/mothership-dashboard/package.json similarity index 76% rename from packages/dashboard/package.json rename to packages/pending/mothership-dashboard/package.json index 403a61cd..595af8a1 100644 --- a/packages/dashboard/package.json +++ b/packages/pending/mothership-dashboard/package.json @@ -1,10 +1,10 @@ { - "name": "@pockethost/dashboard", - "version": "1.0.0-rc.1", + "name": "@pockethost/mothership-dashboard", + "version": "0.0.1", "private": true, "main": "./src/app.html", "scripts": { - "check:types": "svelte-check", + "check-types": "svelte-check", "preview": "npx http-server@latest ../../dist/dashboard -P \"http://localhost:8080?\"", "dev": "vite dev --force --host=0.0.0.0 --port=5174", "build": "NODE_ENV=production vite build", @@ -14,15 +14,15 @@ "type": "module", "devDependencies": { "@microsoft/fetch-event-source": "https://github.com/pockethost/fetch-event-source.git#ebe3b7122647b48b93fd11effbbfb915d98956b0", - "pockethost": "workspace:../pockethost", + "@pockethost/plugin-console-logger": "workspace:^", "@s-libs/micro-dash": "^16.1.0", "@sveltejs/adapter-static": "^2.0.3", "@sveltejs/kit": "^1.25.2", "@tailwindcss/typography": "^0.5.10", "@types/bootstrap": "^5.2.6", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "@types/js-cookie": "^3.0.2", + "@types/d3-scale": "^4.0.6", + "@types/d3-scale-chromatic": "^3.0.1", + "@types/js-cookie": "^3.0.5", "autoprefixer": "^10.4.16", "boolean": "^3.2.0", "chart.js": "4.4.0", @@ -38,7 +38,9 @@ "svelte-highlight": "^7.3.0", "svelte-preprocess": "^5.0.4", "tailwindcss": "^3.3.3", + "typescript": "^5.4.5", "vite": "^4.4.9", - "@pockethost/plugin-console-logger": "link:../plugin-console-logger" + "pocketbase": "^0.21.3", + "pockethost": "workspace:^" } } diff --git a/packages/pockethost/src/common/pocketbase-client-helpers/RestHelper.ts b/packages/pending/mothership-dashboard/pocketbase-client-helpers/RestHelper.ts similarity index 94% rename from packages/pockethost/src/common/pocketbase-client-helpers/RestHelper.ts rename to packages/pending/mothership-dashboard/pocketbase-client-helpers/RestHelper.ts index 731f4388..85ee8efa 100644 --- a/packages/pockethost/src/common/pocketbase-client-helpers/RestHelper.ts +++ b/packages/pending/mothership-dashboard/pocketbase-client-helpers/RestHelper.ts @@ -1,12 +1,11 @@ import Ajv, { JSONSchemaType } from 'ajv' +import PocketBase, { ClientResponseError } from 'pocketbase' import type { JsonObject } from 'type-fest' import { - ClientResponseError, LoggerService, - PocketBase, RestCommands, RestMethods, -} from '..' +} from '../../../pockethost/src/common' export type RestHelperConfig = { client: PocketBase diff --git a/packages/pockethost/src/common/pocketbase-client-helpers/index.ts b/packages/pending/mothership-dashboard/pocketbase-client-helpers/index.ts similarity index 100% rename from packages/pockethost/src/common/pocketbase-client-helpers/index.ts rename to packages/pending/mothership-dashboard/pocketbase-client-helpers/index.ts diff --git a/packages/dashboard/postcss.config.cjs b/packages/pending/mothership-dashboard/postcss.config.cjs similarity index 100% rename from packages/dashboard/postcss.config.cjs rename to packages/pending/mothership-dashboard/postcss.config.cjs diff --git a/packages/dashboard/src/app.css b/packages/pending/mothership-dashboard/src/app.css similarity index 100% rename from packages/dashboard/src/app.css rename to packages/pending/mothership-dashboard/src/app.css diff --git a/packages/dashboard/src/app.html b/packages/pending/mothership-dashboard/src/app.html similarity index 100% rename from packages/dashboard/src/app.html rename to packages/pending/mothership-dashboard/src/app.html diff --git a/packages/dashboard/src/components/AlertBar.svelte b/packages/pending/mothership-dashboard/src/components/AlertBar.svelte similarity index 100% rename from packages/dashboard/src/components/AlertBar.svelte rename to packages/pending/mothership-dashboard/src/components/AlertBar.svelte diff --git a/packages/dashboard/src/components/Clipboard.svelte b/packages/pending/mothership-dashboard/src/components/Clipboard.svelte similarity index 100% rename from packages/dashboard/src/components/Clipboard.svelte rename to packages/pending/mothership-dashboard/src/components/Clipboard.svelte diff --git a/packages/dashboard/src/components/CodeSample.svelte b/packages/pending/mothership-dashboard/src/components/CodeSample.svelte similarity index 100% rename from packages/dashboard/src/components/CodeSample.svelte rename to packages/pending/mothership-dashboard/src/components/CodeSample.svelte diff --git a/packages/dashboard/src/components/CopyButton.svelte b/packages/pending/mothership-dashboard/src/components/CopyButton.svelte similarity index 100% rename from packages/dashboard/src/components/CopyButton.svelte rename to packages/pending/mothership-dashboard/src/components/CopyButton.svelte diff --git a/packages/dashboard/src/components/Logo.svelte b/packages/pending/mothership-dashboard/src/components/Logo.svelte similarity index 100% rename from packages/dashboard/src/components/Logo.svelte rename to packages/pending/mothership-dashboard/src/components/Logo.svelte diff --git a/packages/dashboard/src/components/MediaQuery.svelte b/packages/pending/mothership-dashboard/src/components/MediaQuery.svelte similarity index 100% rename from packages/dashboard/src/components/MediaQuery.svelte rename to packages/pending/mothership-dashboard/src/components/MediaQuery.svelte diff --git a/packages/dashboard/src/components/MobileNavDrawer.svelte b/packages/pending/mothership-dashboard/src/components/MobileNavDrawer.svelte similarity index 100% rename from packages/dashboard/src/components/MobileNavDrawer.svelte rename to packages/pending/mothership-dashboard/src/components/MobileNavDrawer.svelte diff --git a/packages/dashboard/src/components/Navbar.svelte b/packages/pending/mothership-dashboard/src/components/Navbar.svelte similarity index 100% rename from packages/dashboard/src/components/Navbar.svelte rename to packages/pending/mothership-dashboard/src/components/Navbar.svelte diff --git a/packages/dashboard/src/components/ProvisioningStatus.svelte b/packages/pending/mothership-dashboard/src/components/ProvisioningStatus.svelte similarity index 100% rename from packages/dashboard/src/components/ProvisioningStatus.svelte rename to packages/pending/mothership-dashboard/src/components/ProvisioningStatus.svelte diff --git a/packages/dashboard/src/components/SubscriptionStatus.svelte b/packages/pending/mothership-dashboard/src/components/SubscriptionStatus.svelte similarity index 100% rename from packages/dashboard/src/components/SubscriptionStatus.svelte rename to packages/pending/mothership-dashboard/src/components/SubscriptionStatus.svelte diff --git a/packages/dashboard/src/components/VerifyAccountBar.svelte b/packages/pending/mothership-dashboard/src/components/VerifyAccountBar.svelte similarity index 100% rename from packages/dashboard/src/components/VerifyAccountBar.svelte rename to packages/pending/mothership-dashboard/src/components/VerifyAccountBar.svelte diff --git a/packages/dashboard/src/components/cards/Card.svelte b/packages/pending/mothership-dashboard/src/components/cards/Card.svelte similarity index 100% rename from packages/dashboard/src/components/cards/Card.svelte rename to packages/pending/mothership-dashboard/src/components/cards/Card.svelte diff --git a/packages/dashboard/src/components/cards/CardHeader.svelte b/packages/pending/mothership-dashboard/src/components/cards/CardHeader.svelte similarity index 100% rename from packages/dashboard/src/components/cards/CardHeader.svelte rename to packages/pending/mothership-dashboard/src/components/cards/CardHeader.svelte diff --git a/packages/dashboard/src/components/helpers/AuthStateGuard.svelte b/packages/pending/mothership-dashboard/src/components/helpers/AuthStateGuard.svelte similarity index 100% rename from packages/dashboard/src/components/helpers/AuthStateGuard.svelte rename to packages/pending/mothership-dashboard/src/components/helpers/AuthStateGuard.svelte diff --git a/packages/dashboard/src/components/helpers/Meta.svelte b/packages/pending/mothership-dashboard/src/components/helpers/Meta.svelte similarity index 100% rename from packages/dashboard/src/components/helpers/Meta.svelte rename to packages/pending/mothership-dashboard/src/components/helpers/Meta.svelte diff --git a/packages/dashboard/src/components/helpers/TinyButton.svelte b/packages/pending/mothership-dashboard/src/components/helpers/TinyButton.svelte similarity index 100% rename from packages/dashboard/src/components/helpers/TinyButton.svelte rename to packages/pending/mothership-dashboard/src/components/helpers/TinyButton.svelte diff --git a/packages/dashboard/src/components/helpers/UserLoggedIn.svelte b/packages/pending/mothership-dashboard/src/components/helpers/UserLoggedIn.svelte similarity index 100% rename from packages/dashboard/src/components/helpers/UserLoggedIn.svelte rename to packages/pending/mothership-dashboard/src/components/helpers/UserLoggedIn.svelte diff --git a/packages/dashboard/src/components/helpers/UserLoggedOut.svelte b/packages/pending/mothership-dashboard/src/components/helpers/UserLoggedOut.svelte similarity index 100% rename from packages/dashboard/src/components/helpers/UserLoggedOut.svelte rename to packages/pending/mothership-dashboard/src/components/helpers/UserLoggedOut.svelte diff --git a/packages/dashboard/src/components/helpers/UserUnverified.svelte b/packages/pending/mothership-dashboard/src/components/helpers/UserUnverified.svelte similarity index 100% rename from packages/dashboard/src/components/helpers/UserUnverified.svelte rename to packages/pending/mothership-dashboard/src/components/helpers/UserUnverified.svelte diff --git a/packages/dashboard/src/components/helpers/UserVerified.svelte b/packages/pending/mothership-dashboard/src/components/helpers/UserVerified.svelte similarity index 100% rename from packages/dashboard/src/components/helpers/UserVerified.svelte rename to packages/pending/mothership-dashboard/src/components/helpers/UserVerified.svelte diff --git a/packages/dashboard/src/components/helpers/theme.ts b/packages/pending/mothership-dashboard/src/components/helpers/theme.ts similarity index 100% rename from packages/dashboard/src/components/helpers/theme.ts rename to packages/pending/mothership-dashboard/src/components/helpers/theme.ts diff --git a/packages/dashboard/src/components/login-register/InstanceGeneratorWidget.svelte b/packages/pending/mothership-dashboard/src/components/login-register/InstanceGeneratorWidget.svelte similarity index 100% rename from packages/dashboard/src/components/login-register/InstanceGeneratorWidget.svelte rename to packages/pending/mothership-dashboard/src/components/login-register/InstanceGeneratorWidget.svelte diff --git a/packages/dashboard/src/components/login-register/LoginForm.svelte b/packages/pending/mothership-dashboard/src/components/login-register/LoginForm.svelte similarity index 100% rename from packages/dashboard/src/components/login-register/LoginForm.svelte rename to packages/pending/mothership-dashboard/src/components/login-register/LoginForm.svelte diff --git a/packages/dashboard/src/components/login-register/NewInstanceProcessingBlock.svelte b/packages/pending/mothership-dashboard/src/components/login-register/NewInstanceProcessingBlock.svelte similarity index 100% rename from packages/dashboard/src/components/login-register/NewInstanceProcessingBlock.svelte rename to packages/pending/mothership-dashboard/src/components/login-register/NewInstanceProcessingBlock.svelte diff --git a/packages/dashboard/src/components/login-register/RegisterForm.svelte b/packages/pending/mothership-dashboard/src/components/login-register/RegisterForm.svelte similarity index 100% rename from packages/dashboard/src/components/login-register/RegisterForm.svelte rename to packages/pending/mothership-dashboard/src/components/login-register/RegisterForm.svelte diff --git a/packages/dashboard/src/components/sidebar/SidebarNavLink.svelte b/packages/pending/mothership-dashboard/src/components/sidebar/SidebarNavLink.svelte similarity index 100% rename from packages/dashboard/src/components/sidebar/SidebarNavLink.svelte rename to packages/pending/mothership-dashboard/src/components/sidebar/SidebarNavLink.svelte diff --git a/packages/dashboard/src/components/tables/pricing-table/FeatureName.svelte b/packages/pending/mothership-dashboard/src/components/tables/pricing-table/FeatureName.svelte similarity index 100% rename from packages/dashboard/src/components/tables/pricing-table/FeatureName.svelte rename to packages/pending/mothership-dashboard/src/components/tables/pricing-table/FeatureName.svelte diff --git a/packages/dashboard/src/components/tables/pricing-table/FeatureSupportBlock.svelte b/packages/pending/mothership-dashboard/src/components/tables/pricing-table/FeatureSupportBlock.svelte similarity index 100% rename from packages/dashboard/src/components/tables/pricing-table/FeatureSupportBlock.svelte rename to packages/pending/mothership-dashboard/src/components/tables/pricing-table/FeatureSupportBlock.svelte diff --git a/packages/dashboard/src/components/tables/pricing-table/MobileTable.svelte b/packages/pending/mothership-dashboard/src/components/tables/pricing-table/MobileTable.svelte similarity index 100% rename from packages/dashboard/src/components/tables/pricing-table/MobileTable.svelte rename to packages/pending/mothership-dashboard/src/components/tables/pricing-table/MobileTable.svelte diff --git a/packages/dashboard/src/components/tables/pricing-table/NoBlock.svelte b/packages/pending/mothership-dashboard/src/components/tables/pricing-table/NoBlock.svelte similarity index 100% rename from packages/dashboard/src/components/tables/pricing-table/NoBlock.svelte rename to packages/pending/mothership-dashboard/src/components/tables/pricing-table/NoBlock.svelte diff --git a/packages/dashboard/src/components/tables/pricing-table/PricingTable.svelte b/packages/pending/mothership-dashboard/src/components/tables/pricing-table/PricingTable.svelte similarity index 100% rename from packages/dashboard/src/components/tables/pricing-table/PricingTable.svelte rename to packages/pending/mothership-dashboard/src/components/tables/pricing-table/PricingTable.svelte diff --git a/packages/dashboard/src/components/tables/pricing-table/TextBlock.svelte b/packages/pending/mothership-dashboard/src/components/tables/pricing-table/TextBlock.svelte similarity index 100% rename from packages/dashboard/src/components/tables/pricing-table/TextBlock.svelte rename to packages/pending/mothership-dashboard/src/components/tables/pricing-table/TextBlock.svelte diff --git a/packages/dashboard/src/components/tables/pricing-table/YesBlock.svelte b/packages/pending/mothership-dashboard/src/components/tables/pricing-table/YesBlock.svelte similarity index 100% rename from packages/dashboard/src/components/tables/pricing-table/YesBlock.svelte rename to packages/pending/mothership-dashboard/src/components/tables/pricing-table/YesBlock.svelte diff --git a/packages/dashboard/src/env.ts b/packages/pending/mothership-dashboard/src/env.ts similarity index 100% rename from packages/dashboard/src/env.ts rename to packages/pending/mothership-dashboard/src/env.ts diff --git a/packages/dashboard/src/pocketbase-client/PocketbaseClient.ts b/packages/pending/mothership-dashboard/src/pocketbase-client/PocketbaseClient.ts similarity index 95% rename from packages/dashboard/src/pocketbase-client/PocketbaseClient.ts rename to packages/pending/mothership-dashboard/src/pocketbase-client/PocketbaseClient.ts index 81614537..df41eec1 100644 --- a/packages/dashboard/src/pocketbase-client/PocketbaseClient.ts +++ b/packages/pending/mothership-dashboard/src/pocketbase-client/PocketbaseClient.ts @@ -1,16 +1,12 @@ import { INSTANCE_URL } from '$src/env' import { createGenericSyncEvent } from '$util/events' import { fetchEventSource } from '@microsoft/fetch-event-source' -import { keys, map } from '@s-libs/micro-dash' +import PocketBase, { BaseAuthStore, type AuthModel } from 'pocketbase' import { - AuthModel, - BaseAuthStore, - ClientResponseError, CreateInstancePayloadSchema, DeleteInstancePayload, DeleteInstancePayloadSchema, DeleteInstanceResult, - PocketBase, RestCommands, RestMethods, UpdateInstancePayload, @@ -164,15 +160,6 @@ export const createPocketbaseClient = (config: PocketbaseClientConfig) => { {} as { [_: InstanceId]: InstanceFields }, ) - const parseError = (e: Error): string[] => { - if (!(e instanceof ClientResponseError)) return [e.message] - if (e.data.message && keys(e.data.data).length === 0) - return [e.data.message] - return map(e.data.data, (v, k) => (v ? v.message : undefined)).filter( - (v) => !!v, - ) - } - const resendVerificationEmail = async () => { const user = client.authStore.model assertExists(user, `Login required`) diff --git a/packages/dashboard/src/pocketbase-client/index.ts b/packages/pending/mothership-dashboard/src/pocketbase-client/index.ts similarity index 100% rename from packages/dashboard/src/pocketbase-client/index.ts rename to packages/pending/mothership-dashboard/src/pocketbase-client/index.ts diff --git a/packages/dashboard/src/routes/+error.svelte b/packages/pending/mothership-dashboard/src/routes/+error.svelte similarity index 100% rename from packages/dashboard/src/routes/+error.svelte rename to packages/pending/mothership-dashboard/src/routes/+error.svelte diff --git a/packages/dashboard/src/routes/+layout.svelte b/packages/pending/mothership-dashboard/src/routes/+layout.svelte similarity index 100% rename from packages/dashboard/src/routes/+layout.svelte rename to packages/pending/mothership-dashboard/src/routes/+layout.svelte diff --git a/packages/dashboard/src/routes/+layout.ts b/packages/pending/mothership-dashboard/src/routes/+layout.ts similarity index 100% rename from packages/dashboard/src/routes/+layout.ts rename to packages/pending/mothership-dashboard/src/routes/+layout.ts diff --git a/packages/dashboard/src/routes/+page.svelte b/packages/pending/mothership-dashboard/src/routes/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/+page.svelte diff --git a/packages/dashboard/src/routes/InstancesGuard.svelte b/packages/pending/mothership-dashboard/src/routes/InstancesGuard.svelte similarity index 100% rename from packages/dashboard/src/routes/InstancesGuard.svelte rename to packages/pending/mothership-dashboard/src/routes/InstancesGuard.svelte diff --git a/packages/dashboard/src/routes/account/+layout.svelte b/packages/pending/mothership-dashboard/src/routes/account/+layout.svelte similarity index 100% rename from packages/dashboard/src/routes/account/+layout.svelte rename to packages/pending/mothership-dashboard/src/routes/account/+layout.svelte diff --git a/packages/dashboard/src/routes/account/+page.svelte b/packages/pending/mothership-dashboard/src/routes/account/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/account/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/account/+page.svelte diff --git a/packages/dashboard/src/routes/account/Card.svelte b/packages/pending/mothership-dashboard/src/routes/account/Card.svelte similarity index 100% rename from packages/dashboard/src/routes/account/Card.svelte rename to packages/pending/mothership-dashboard/src/routes/account/Card.svelte diff --git a/packages/dashboard/src/routes/account/Check.svelte b/packages/pending/mothership-dashboard/src/routes/account/Check.svelte similarity index 100% rename from packages/dashboard/src/routes/account/Check.svelte rename to packages/pending/mothership-dashboard/src/routes/account/Check.svelte diff --git a/packages/dashboard/src/routes/account/FAQItem.svelte b/packages/pending/mothership-dashboard/src/routes/account/FAQItem.svelte similarity index 100% rename from packages/dashboard/src/routes/account/FAQItem.svelte rename to packages/pending/mothership-dashboard/src/routes/account/FAQItem.svelte diff --git a/packages/dashboard/src/routes/account/FAQSection.svelte b/packages/pending/mothership-dashboard/src/routes/account/FAQSection.svelte similarity index 100% rename from packages/dashboard/src/routes/account/FAQSection.svelte rename to packages/pending/mothership-dashboard/src/routes/account/FAQSection.svelte diff --git a/packages/dashboard/src/routes/account/PricingCard.svelte b/packages/pending/mothership-dashboard/src/routes/account/PricingCard.svelte similarity index 100% rename from packages/dashboard/src/routes/account/PricingCard.svelte rename to packages/pending/mothership-dashboard/src/routes/account/PricingCard.svelte diff --git a/packages/dashboard/src/routes/account/notifications/+page.svelte b/packages/pending/mothership-dashboard/src/routes/account/notifications/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/account/notifications/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/account/notifications/+page.svelte diff --git a/packages/dashboard/src/routes/app/+layout.svelte b/packages/pending/mothership-dashboard/src/routes/app/+layout.svelte similarity index 100% rename from packages/dashboard/src/routes/app/+layout.svelte rename to packages/pending/mothership-dashboard/src/routes/app/+layout.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/+layout.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/+layout.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/+layout.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/+layout.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/+page.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/+page.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/Code.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/Code.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/Code.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/Code.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/Ftpx.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/Ftpx.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/Ftpx.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/Ftpx.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/Overview.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/Overview.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/Overview.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/Overview.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/UsageChart.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/UsageChart.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/UsageChart.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/UsageChart.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/logs/+page.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/logs/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/logs/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/logs/+page.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/logs/Logging.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/logs/Logging.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/logs/Logging.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/logs/Logging.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/logs/LoggingInner.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/logs/LoggingInner.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/logs/LoggingInner.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/logs/LoggingInner.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/secrets/+page.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/secrets/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/+page.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/secrets/Form.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/Form.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/secrets/Form.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/Form.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/secrets/List.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/List.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/secrets/List.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/List.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/secrets/Secrets.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/Secrets.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/secrets/Secrets.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/Secrets.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/secrets/SecretsInner.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/SecretsInner.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/secrets/SecretsInner.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/SecretsInner.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/secrets/stores.ts b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/stores.ts similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/secrets/stores.ts rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/secrets/stores.ts diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/+page.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/+page.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/AdminSync.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/AdminSync.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/AdminSync.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/AdminSync.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/CustomDomain.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/CustomDomain.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/CustomDomain.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/CustomDomain.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/DangerZoneTitle.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/DangerZoneTitle.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/DangerZoneTitle.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/DangerZoneTitle.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/DeleteInstance.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/DeleteInstance.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/DeleteInstance.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/DeleteInstance.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/DevMode.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/DevMode.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/DevMode.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/DevMode.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/ErrorMessage.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/ErrorMessage.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/ErrorMessage.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/ErrorMessage.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/Maintenance.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/Maintenance.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/Maintenance.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/Maintenance.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/RenameInstance.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/RenameInstance.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/RenameInstance.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/RenameInstance.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionChange.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionChange.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionChange.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionChange.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionPicker.svelte b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionPicker.svelte similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionPicker.svelte rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/settings/VersionChange/VersionPicker.svelte diff --git a/packages/dashboard/src/routes/app/instances/[instanceId]/store.ts b/packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/store.ts similarity index 100% rename from packages/dashboard/src/routes/app/instances/[instanceId]/store.ts rename to packages/pending/mothership-dashboard/src/routes/app/instances/[instanceId]/store.ts diff --git a/packages/dashboard/src/routes/app/new/+page.svelte b/packages/pending/mothership-dashboard/src/routes/app/new/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/app/new/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/app/new/+page.svelte diff --git a/packages/dashboard/src/routes/app/new/Creator.svelte b/packages/pending/mothership-dashboard/src/routes/app/new/Creator.svelte similarity index 100% rename from packages/dashboard/src/routes/app/new/Creator.svelte rename to packages/pending/mothership-dashboard/src/routes/app/new/Creator.svelte diff --git a/packages/dashboard/src/routes/app/new/Paywall.svelte b/packages/pending/mothership-dashboard/src/routes/app/new/Paywall.svelte similarity index 100% rename from packages/dashboard/src/routes/app/new/Paywall.svelte rename to packages/pending/mothership-dashboard/src/routes/app/new/Paywall.svelte diff --git a/packages/dashboard/src/routes/dashboard/+layout.svelte b/packages/pending/mothership-dashboard/src/routes/dashboard/+layout.svelte similarity index 100% rename from packages/dashboard/src/routes/dashboard/+layout.svelte rename to packages/pending/mothership-dashboard/src/routes/dashboard/+layout.svelte diff --git a/packages/dashboard/src/routes/dashboard/Dashboard.svelte b/packages/pending/mothership-dashboard/src/routes/dashboard/Dashboard.svelte similarity index 100% rename from packages/dashboard/src/routes/dashboard/Dashboard.svelte rename to packages/pending/mothership-dashboard/src/routes/dashboard/Dashboard.svelte diff --git a/packages/dashboard/src/routes/dashboard/InstanceList.svelte b/packages/pending/mothership-dashboard/src/routes/dashboard/InstanceList.svelte similarity index 100% rename from packages/dashboard/src/routes/dashboard/InstanceList.svelte rename to packages/pending/mothership-dashboard/src/routes/dashboard/InstanceList.svelte diff --git a/packages/dashboard/src/routes/dashboard/InstanceRow.svelte b/packages/pending/mothership-dashboard/src/routes/dashboard/InstanceRow.svelte similarity index 100% rename from packages/dashboard/src/routes/dashboard/InstanceRow.svelte rename to packages/pending/mothership-dashboard/src/routes/dashboard/InstanceRow.svelte diff --git a/packages/dashboard/src/routes/dashboard/UsageChartForAllInstances.svelte b/packages/pending/mothership-dashboard/src/routes/dashboard/UsageChartForAllInstances.svelte similarity index 100% rename from packages/dashboard/src/routes/dashboard/UsageChartForAllInstances.svelte rename to packages/pending/mothership-dashboard/src/routes/dashboard/UsageChartForAllInstances.svelte diff --git a/packages/dashboard/src/routes/login/+page.svelte b/packages/pending/mothership-dashboard/src/routes/login/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/login/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/login/+page.svelte diff --git a/packages/dashboard/src/routes/login/confirm-account/+page.svelte b/packages/pending/mothership-dashboard/src/routes/login/confirm-account/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/login/confirm-account/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/login/confirm-account/+page.svelte diff --git a/packages/dashboard/src/routes/login/password-reset/+page.svelte b/packages/pending/mothership-dashboard/src/routes/login/password-reset/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/login/password-reset/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/login/password-reset/+page.svelte diff --git a/packages/dashboard/src/routes/login/password-reset/confirm/+page.svelte b/packages/pending/mothership-dashboard/src/routes/login/password-reset/confirm/+page.svelte similarity index 100% rename from packages/dashboard/src/routes/login/password-reset/confirm/+page.svelte rename to packages/pending/mothership-dashboard/src/routes/login/password-reset/confirm/+page.svelte diff --git a/packages/dashboard/src/services.ts b/packages/pending/mothership-dashboard/src/services.ts similarity index 100% rename from packages/dashboard/src/services.ts rename to packages/pending/mothership-dashboard/src/services.ts diff --git a/packages/dashboard/src/util/componentCleanup.ts b/packages/pending/mothership-dashboard/src/util/componentCleanup.ts similarity index 100% rename from packages/dashboard/src/util/componentCleanup.ts rename to packages/pending/mothership-dashboard/src/util/componentCleanup.ts diff --git a/packages/dashboard/src/util/database.ts b/packages/pending/mothership-dashboard/src/util/database.ts similarity index 100% rename from packages/dashboard/src/util/database.ts rename to packages/pending/mothership-dashboard/src/util/database.ts diff --git a/packages/dashboard/src/util/events.ts b/packages/pending/mothership-dashboard/src/util/events.ts similarity index 100% rename from packages/dashboard/src/util/events.ts rename to packages/pending/mothership-dashboard/src/util/events.ts diff --git a/packages/dashboard/src/util/stores.ts b/packages/pending/mothership-dashboard/src/util/stores.ts similarity index 98% rename from packages/dashboard/src/util/stores.ts rename to packages/pending/mothership-dashboard/src/util/stores.ts index 50585daa..0ebaa63a 100644 --- a/packages/dashboard/src/util/stores.ts +++ b/packages/pending/mothership-dashboard/src/util/stores.ts @@ -6,11 +6,11 @@ import { loadPlugins, type InstanceFields, type InstanceId, - type UnsubscribeFunc, } from 'pockethost/common' import { writable } from 'svelte/store' // TODO: Removing this will cause the app to crash // Theres a reference inside of `createPocketbaseClient.ts` that needs the information that comes from this file +import type { UnsubscribeFunc } from 'pocketbase' import '../services' loadPlugins([consoleLogger]) diff --git a/packages/dashboard/static/favicon.ico b/packages/pending/mothership-dashboard/static/favicon.ico similarity index 100% rename from packages/dashboard/static/favicon.ico rename to packages/pending/mothership-dashboard/static/favicon.ico diff --git a/packages/dashboard/static/favicon.png b/packages/pending/mothership-dashboard/static/favicon.png similarity index 100% rename from packages/dashboard/static/favicon.png rename to packages/pending/mothership-dashboard/static/favicon.png diff --git a/packages/dashboard/static/icons/all.min.css b/packages/pending/mothership-dashboard/static/icons/all.min.css similarity index 100% rename from packages/dashboard/static/icons/all.min.css rename to packages/pending/mothership-dashboard/static/icons/all.min.css diff --git a/packages/dashboard/static/icons/brands.min.css b/packages/pending/mothership-dashboard/static/icons/brands.min.css similarity index 100% rename from packages/dashboard/static/icons/brands.min.css rename to packages/pending/mothership-dashboard/static/icons/brands.min.css diff --git a/packages/dashboard/static/icons/fontawesome.min.css b/packages/pending/mothership-dashboard/static/icons/fontawesome.min.css similarity index 100% rename from packages/dashboard/static/icons/fontawesome.min.css rename to packages/pending/mothership-dashboard/static/icons/fontawesome.min.css diff --git a/packages/dashboard/static/icons/icon-192x192.png b/packages/pending/mothership-dashboard/static/icons/icon-192x192.png similarity index 100% rename from packages/dashboard/static/icons/icon-192x192.png rename to packages/pending/mothership-dashboard/static/icons/icon-192x192.png diff --git a/packages/dashboard/static/icons/icon-256x256.png b/packages/pending/mothership-dashboard/static/icons/icon-256x256.png similarity index 100% rename from packages/dashboard/static/icons/icon-256x256.png rename to packages/pending/mothership-dashboard/static/icons/icon-256x256.png diff --git a/packages/dashboard/static/icons/icon-384x384.png b/packages/pending/mothership-dashboard/static/icons/icon-384x384.png similarity index 100% rename from packages/dashboard/static/icons/icon-384x384.png rename to packages/pending/mothership-dashboard/static/icons/icon-384x384.png diff --git a/packages/dashboard/static/icons/icon-512x512.png b/packages/pending/mothership-dashboard/static/icons/icon-512x512.png similarity index 100% rename from packages/dashboard/static/icons/icon-512x512.png rename to packages/pending/mothership-dashboard/static/icons/icon-512x512.png diff --git a/packages/dashboard/static/images/logo-square.png b/packages/pending/mothership-dashboard/static/images/logo-square.png similarity index 100% rename from packages/dashboard/static/images/logo-square.png rename to packages/pending/mothership-dashboard/static/images/logo-square.png diff --git a/packages/dashboard/static/images/pocketbase-intro-screen.jpg b/packages/pending/mothership-dashboard/static/images/pocketbase-intro-screen.jpg similarity index 100% rename from packages/dashboard/static/images/pocketbase-intro-screen.jpg rename to packages/pending/mothership-dashboard/static/images/pocketbase-intro-screen.jpg diff --git a/packages/dashboard/static/images/pocketbase-logo.svg b/packages/pending/mothership-dashboard/static/images/pocketbase-logo.svg similarity index 100% rename from packages/dashboard/static/images/pocketbase-logo.svg rename to packages/pending/mothership-dashboard/static/images/pocketbase-logo.svg diff --git a/packages/dashboard/static/images/pockethost-cloud-logo.jpg b/packages/pending/mothership-dashboard/static/images/pockethost-cloud-logo.jpg similarity index 100% rename from packages/dashboard/static/images/pockethost-cloud-logo.jpg rename to packages/pending/mothership-dashboard/static/images/pockethost-cloud-logo.jpg diff --git a/packages/dashboard/static/manifest.json b/packages/pending/mothership-dashboard/static/manifest.json similarity index 100% rename from packages/dashboard/static/manifest.json rename to packages/pending/mothership-dashboard/static/manifest.json diff --git a/packages/dashboard/static/poster.png b/packages/pending/mothership-dashboard/static/poster.png similarity index 100% rename from packages/dashboard/static/poster.png rename to packages/pending/mothership-dashboard/static/poster.png diff --git a/packages/dashboard/static/webfonts/fa-brands-400.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-brands-400.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-brands-400.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-brands-400.ttf diff --git a/packages/dashboard/static/webfonts/fa-brands-400.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-brands-400.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-brands-400.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-brands-400.woff2 diff --git a/packages/dashboard/static/webfonts/fa-duotone-900.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-duotone-900.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-duotone-900.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-duotone-900.ttf diff --git a/packages/dashboard/static/webfonts/fa-duotone-900.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-duotone-900.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-duotone-900.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-duotone-900.woff2 diff --git a/packages/dashboard/static/webfonts/fa-light-300.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-light-300.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-light-300.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-light-300.ttf diff --git a/packages/dashboard/static/webfonts/fa-light-300.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-light-300.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-light-300.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-light-300.woff2 diff --git a/packages/dashboard/static/webfonts/fa-regular-400.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-regular-400.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-regular-400.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-regular-400.ttf diff --git a/packages/dashboard/static/webfonts/fa-regular-400.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-regular-400.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-regular-400.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-regular-400.woff2 diff --git a/packages/dashboard/static/webfonts/fa-sharp-light-300.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-sharp-light-300.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-sharp-light-300.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-sharp-light-300.ttf diff --git a/packages/dashboard/static/webfonts/fa-sharp-light-300.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-sharp-light-300.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-sharp-light-300.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-sharp-light-300.woff2 diff --git a/packages/dashboard/static/webfonts/fa-sharp-regular-400.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-sharp-regular-400.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-sharp-regular-400.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-sharp-regular-400.ttf diff --git a/packages/dashboard/static/webfonts/fa-sharp-regular-400.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-sharp-regular-400.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-sharp-regular-400.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-sharp-regular-400.woff2 diff --git a/packages/dashboard/static/webfonts/fa-sharp-solid-900.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-sharp-solid-900.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-sharp-solid-900.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-sharp-solid-900.ttf diff --git a/packages/dashboard/static/webfonts/fa-sharp-solid-900.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-sharp-solid-900.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-sharp-solid-900.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-sharp-solid-900.woff2 diff --git a/packages/dashboard/static/webfonts/fa-solid-900.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-solid-900.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-solid-900.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-solid-900.ttf diff --git a/packages/dashboard/static/webfonts/fa-solid-900.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-solid-900.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-solid-900.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-solid-900.woff2 diff --git a/packages/dashboard/static/webfonts/fa-thin-100.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-thin-100.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-thin-100.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-thin-100.ttf diff --git a/packages/dashboard/static/webfonts/fa-thin-100.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-thin-100.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-thin-100.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-thin-100.woff2 diff --git a/packages/dashboard/static/webfonts/fa-v4compatibility.ttf b/packages/pending/mothership-dashboard/static/webfonts/fa-v4compatibility.ttf similarity index 100% rename from packages/dashboard/static/webfonts/fa-v4compatibility.ttf rename to packages/pending/mothership-dashboard/static/webfonts/fa-v4compatibility.ttf diff --git a/packages/dashboard/static/webfonts/fa-v4compatibility.woff2 b/packages/pending/mothership-dashboard/static/webfonts/fa-v4compatibility.woff2 similarity index 100% rename from packages/dashboard/static/webfonts/fa-v4compatibility.woff2 rename to packages/pending/mothership-dashboard/static/webfonts/fa-v4compatibility.woff2 diff --git a/packages/dashboard/svelte.config.js b/packages/pending/mothership-dashboard/svelte.config.js similarity index 100% rename from packages/dashboard/svelte.config.js rename to packages/pending/mothership-dashboard/svelte.config.js diff --git a/packages/dashboard/tailwind.config.cjs b/packages/pending/mothership-dashboard/tailwind.config.cjs similarity index 100% rename from packages/dashboard/tailwind.config.cjs rename to packages/pending/mothership-dashboard/tailwind.config.cjs diff --git a/packages/dashboard/tsconfig.json b/packages/pending/mothership-dashboard/tsconfig.json similarity index 100% rename from packages/dashboard/tsconfig.json rename to packages/pending/mothership-dashboard/tsconfig.json diff --git a/packages/pockethost/src/common/schema/types.ts b/packages/pending/mothership-dashboard/types.ts similarity index 100% rename from packages/pockethost/src/common/schema/types.ts rename to packages/pending/mothership-dashboard/types.ts diff --git a/packages/dashboard/vite.config.ts b/packages/pending/mothership-dashboard/vite.config.ts similarity index 100% rename from packages/dashboard/vite.config.ts rename to packages/pending/mothership-dashboard/vite.config.ts diff --git a/packages/superadmin/.env-template b/packages/pending/mothership-superadmin/.env-template similarity index 100% rename from packages/superadmin/.env-template rename to packages/pending/mothership-superadmin/.env-template diff --git a/packages/superadmin/.gitignore b/packages/pending/mothership-superadmin/.gitignore similarity index 100% rename from packages/superadmin/.gitignore rename to packages/pending/mothership-superadmin/.gitignore diff --git a/packages/pending/mothership-superadmin/.npmignore b/packages/pending/mothership-superadmin/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/mothership-superadmin/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/superadmin/.npmrc b/packages/pending/mothership-superadmin/.npmrc similarity index 100% rename from packages/superadmin/.npmrc rename to packages/pending/mothership-superadmin/.npmrc diff --git a/packages/superadmin/.prettierignore b/packages/pending/mothership-superadmin/.prettierignore similarity index 100% rename from packages/superadmin/.prettierignore rename to packages/pending/mothership-superadmin/.prettierignore diff --git a/packages/superadmin/README.md b/packages/pending/mothership-superadmin/README.md similarity index 100% rename from packages/superadmin/README.md rename to packages/pending/mothership-superadmin/README.md diff --git a/packages/superadmin/marked.config.js b/packages/pending/mothership-superadmin/marked.config.js similarity index 100% rename from packages/superadmin/marked.config.js rename to packages/pending/mothership-superadmin/marked.config.js diff --git a/packages/superadmin/package.json b/packages/pending/mothership-superadmin/package.json similarity index 74% rename from packages/superadmin/package.json rename to packages/pending/mothership-superadmin/package.json index c2e0d555..d0c71497 100644 --- a/packages/superadmin/package.json +++ b/packages/pending/mothership-superadmin/package.json @@ -1,10 +1,10 @@ { - "name": "@pockethost/superadmin", + "name": "@pockethost/mothership-superadmin", "version": "0.0.1", "private": true, "main": "./src/app.html", "scripts": { - "check:types": "svelte-check", + "check-types": "svelte-check", "preview": "npx http-server@latest ./build -P \"http://localhost:8080?\"", "dev": "vite dev --force --host=0.0.0.0 --port=5175", "build": "NODE_ENV=production vite build", @@ -14,21 +14,21 @@ "type": "module", "devDependencies": { "@microsoft/fetch-event-source": "https://github.com/pockethost/fetch-event-source.git#ebe3b7122647b48b93fd11effbbfb915d98956b0", - "pockethost": "workspace:../pockethost", + "@pockethost/plugin-console-logger": "workspace:^", "@s-libs/micro-dash": "^16.1.0", "@sveltejs/adapter-static": "^2.0.3", "@sveltejs/kit": "^1.25.2", "@tailwindcss/typography": "^0.5.10", "@types/bootstrap": "^5.2.6", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "@types/js-cookie": "^3.0.2", + "@types/d3-scale": "^4.0.6", + "@types/d3-scale-chromatic": "^3.0.1", + "@types/js-cookie": "^3.0.5", "autoprefixer": "^10.4.16", "boolean": "^3.2.0", "chart.js": "4.4.0", "d3-scale": "^4.0.2", "d3-scale-chromatic": "^3.0.0", - "daisyui": "^3.8.1", + "daisyui": "^4.4.23", "date-fns": "^2.30.0", "highlight.js": "^11.8.0", "sass": "^1.68.0", @@ -38,9 +38,9 @@ "svelte-highlight": "^7.3.0", "svelte-preprocess": "^5.0.4", "tailwindcss": "^3.3.3", - "vite": "^4.4.9" - }, - "dependencies": { - "@pockethost/plugin-console-logger": "link:../plugin-console-logger" + "typescript": "^5.4.5", + "vite": "^4.4.9", + "pocketbase": "^0.21.3", + "pockethost": "workspace:^" } } diff --git a/packages/superadmin/postcss.config.cjs b/packages/pending/mothership-superadmin/postcss.config.cjs similarity index 100% rename from packages/superadmin/postcss.config.cjs rename to packages/pending/mothership-superadmin/postcss.config.cjs diff --git a/packages/superadmin/src/app.css b/packages/pending/mothership-superadmin/src/app.css similarity index 100% rename from packages/superadmin/src/app.css rename to packages/pending/mothership-superadmin/src/app.css diff --git a/packages/superadmin/src/app.html b/packages/pending/mothership-superadmin/src/app.html similarity index 100% rename from packages/superadmin/src/app.html rename to packages/pending/mothership-superadmin/src/app.html diff --git a/packages/superadmin/src/components/AlertBar.svelte b/packages/pending/mothership-superadmin/src/components/AlertBar.svelte similarity index 100% rename from packages/superadmin/src/components/AlertBar.svelte rename to packages/pending/mothership-superadmin/src/components/AlertBar.svelte diff --git a/packages/superadmin/src/components/Clipboard.svelte b/packages/pending/mothership-superadmin/src/components/Clipboard.svelte similarity index 100% rename from packages/superadmin/src/components/Clipboard.svelte rename to packages/pending/mothership-superadmin/src/components/Clipboard.svelte diff --git a/packages/superadmin/src/components/CodeSample.svelte b/packages/pending/mothership-superadmin/src/components/CodeSample.svelte similarity index 100% rename from packages/superadmin/src/components/CodeSample.svelte rename to packages/pending/mothership-superadmin/src/components/CodeSample.svelte diff --git a/packages/superadmin/src/components/CopyButton.svelte b/packages/pending/mothership-superadmin/src/components/CopyButton.svelte similarity index 100% rename from packages/superadmin/src/components/CopyButton.svelte rename to packages/pending/mothership-superadmin/src/components/CopyButton.svelte diff --git a/packages/superadmin/src/components/Logo.svelte b/packages/pending/mothership-superadmin/src/components/Logo.svelte similarity index 100% rename from packages/superadmin/src/components/Logo.svelte rename to packages/pending/mothership-superadmin/src/components/Logo.svelte diff --git a/packages/superadmin/src/components/MediaQuery.svelte b/packages/pending/mothership-superadmin/src/components/MediaQuery.svelte similarity index 100% rename from packages/superadmin/src/components/MediaQuery.svelte rename to packages/pending/mothership-superadmin/src/components/MediaQuery.svelte diff --git a/packages/superadmin/src/components/MobileNavDrawer.svelte b/packages/pending/mothership-superadmin/src/components/MobileNavDrawer.svelte similarity index 100% rename from packages/superadmin/src/components/MobileNavDrawer.svelte rename to packages/pending/mothership-superadmin/src/components/MobileNavDrawer.svelte diff --git a/packages/superadmin/src/components/cards/Card.svelte b/packages/pending/mothership-superadmin/src/components/cards/Card.svelte similarity index 100% rename from packages/superadmin/src/components/cards/Card.svelte rename to packages/pending/mothership-superadmin/src/components/cards/Card.svelte diff --git a/packages/superadmin/src/components/cards/CardHeader.svelte b/packages/pending/mothership-superadmin/src/components/cards/CardHeader.svelte similarity index 100% rename from packages/superadmin/src/components/cards/CardHeader.svelte rename to packages/pending/mothership-superadmin/src/components/cards/CardHeader.svelte diff --git a/packages/superadmin/src/components/helpers/AuthStateGuard.svelte b/packages/pending/mothership-superadmin/src/components/helpers/AuthStateGuard.svelte similarity index 100% rename from packages/superadmin/src/components/helpers/AuthStateGuard.svelte rename to packages/pending/mothership-superadmin/src/components/helpers/AuthStateGuard.svelte diff --git a/packages/superadmin/src/components/helpers/Meta.svelte b/packages/pending/mothership-superadmin/src/components/helpers/Meta.svelte similarity index 100% rename from packages/superadmin/src/components/helpers/Meta.svelte rename to packages/pending/mothership-superadmin/src/components/helpers/Meta.svelte diff --git a/packages/superadmin/src/components/helpers/TinyButton.svelte b/packages/pending/mothership-superadmin/src/components/helpers/TinyButton.svelte similarity index 100% rename from packages/superadmin/src/components/helpers/TinyButton.svelte rename to packages/pending/mothership-superadmin/src/components/helpers/TinyButton.svelte diff --git a/packages/superadmin/src/components/helpers/UserLoggedIn.svelte b/packages/pending/mothership-superadmin/src/components/helpers/UserLoggedIn.svelte similarity index 100% rename from packages/superadmin/src/components/helpers/UserLoggedIn.svelte rename to packages/pending/mothership-superadmin/src/components/helpers/UserLoggedIn.svelte diff --git a/packages/superadmin/src/components/helpers/UserLoggedOut.svelte b/packages/pending/mothership-superadmin/src/components/helpers/UserLoggedOut.svelte similarity index 100% rename from packages/superadmin/src/components/helpers/UserLoggedOut.svelte rename to packages/pending/mothership-superadmin/src/components/helpers/UserLoggedOut.svelte diff --git a/packages/superadmin/src/components/helpers/theme.ts b/packages/pending/mothership-superadmin/src/components/helpers/theme.ts similarity index 100% rename from packages/superadmin/src/components/helpers/theme.ts rename to packages/pending/mothership-superadmin/src/components/helpers/theme.ts diff --git a/packages/superadmin/src/components/login-register/LoginForm.svelte b/packages/pending/mothership-superadmin/src/components/login-register/LoginForm.svelte similarity index 100% rename from packages/superadmin/src/components/login-register/LoginForm.svelte rename to packages/pending/mothership-superadmin/src/components/login-register/LoginForm.svelte diff --git a/packages/superadmin/src/env.ts b/packages/pending/mothership-superadmin/src/env.ts similarity index 100% rename from packages/superadmin/src/env.ts rename to packages/pending/mothership-superadmin/src/env.ts diff --git a/packages/superadmin/src/pocketbase-client/PocketbaseClient.ts b/packages/pending/mothership-superadmin/src/pocketbase-client/PocketbaseClient.ts similarity index 98% rename from packages/superadmin/src/pocketbase-client/PocketbaseClient.ts rename to packages/pending/mothership-superadmin/src/pocketbase-client/PocketbaseClient.ts index 6041485b..1f26c5c2 100644 --- a/packages/superadmin/src/pocketbase-client/PocketbaseClient.ts +++ b/packages/pending/mothership-superadmin/src/pocketbase-client/PocketbaseClient.ts @@ -1,11 +1,10 @@ import { createGenericSyncEvent } from '$util/events' import { keys, map } from '@s-libs/micro-dash' -import { +import PocketBase, { BaseAuthStore, ClientResponseError, - PocketBase, type AuthModel, -} from 'pockethost/common' +} from 'pocketbase' export type AuthToken = string export type AuthStoreProps = { diff --git a/packages/superadmin/src/pocketbase-client/index.ts b/packages/pending/mothership-superadmin/src/pocketbase-client/index.ts similarity index 100% rename from packages/superadmin/src/pocketbase-client/index.ts rename to packages/pending/mothership-superadmin/src/pocketbase-client/index.ts diff --git a/packages/superadmin/src/routes/+error.svelte b/packages/pending/mothership-superadmin/src/routes/+error.svelte similarity index 100% rename from packages/superadmin/src/routes/+error.svelte rename to packages/pending/mothership-superadmin/src/routes/+error.svelte diff --git a/packages/superadmin/src/routes/+layout.svelte b/packages/pending/mothership-superadmin/src/routes/+layout.svelte similarity index 100% rename from packages/superadmin/src/routes/+layout.svelte rename to packages/pending/mothership-superadmin/src/routes/+layout.svelte diff --git a/packages/superadmin/src/routes/+layout.ts b/packages/pending/mothership-superadmin/src/routes/+layout.ts similarity index 100% rename from packages/superadmin/src/routes/+layout.ts rename to packages/pending/mothership-superadmin/src/routes/+layout.ts diff --git a/packages/superadmin/src/routes/+page.svelte b/packages/pending/mothership-superadmin/src/routes/+page.svelte similarity index 100% rename from packages/superadmin/src/routes/+page.svelte rename to packages/pending/mothership-superadmin/src/routes/+page.svelte diff --git a/packages/superadmin/src/routes/login/+page.svelte b/packages/pending/mothership-superadmin/src/routes/login/+page.svelte similarity index 100% rename from packages/superadmin/src/routes/login/+page.svelte rename to packages/pending/mothership-superadmin/src/routes/login/+page.svelte diff --git a/packages/superadmin/src/routes/plugins/+page.svelte b/packages/pending/mothership-superadmin/src/routes/plugins/+page.svelte similarity index 100% rename from packages/superadmin/src/routes/plugins/+page.svelte rename to packages/pending/mothership-superadmin/src/routes/plugins/+page.svelte diff --git a/packages/superadmin/src/routes/stats/+page.svelte b/packages/pending/mothership-superadmin/src/routes/stats/+page.svelte similarity index 100% rename from packages/superadmin/src/routes/stats/+page.svelte rename to packages/pending/mothership-superadmin/src/routes/stats/+page.svelte diff --git a/packages/superadmin/src/services.ts b/packages/pending/mothership-superadmin/src/services.ts similarity index 100% rename from packages/superadmin/src/services.ts rename to packages/pending/mothership-superadmin/src/services.ts diff --git a/packages/superadmin/src/util/componentCleanup.ts b/packages/pending/mothership-superadmin/src/util/componentCleanup.ts similarity index 100% rename from packages/superadmin/src/util/componentCleanup.ts rename to packages/pending/mothership-superadmin/src/util/componentCleanup.ts diff --git a/packages/superadmin/src/util/database.ts b/packages/pending/mothership-superadmin/src/util/database.ts similarity index 100% rename from packages/superadmin/src/util/database.ts rename to packages/pending/mothership-superadmin/src/util/database.ts diff --git a/packages/superadmin/src/util/events.ts b/packages/pending/mothership-superadmin/src/util/events.ts similarity index 100% rename from packages/superadmin/src/util/events.ts rename to packages/pending/mothership-superadmin/src/util/events.ts diff --git a/packages/superadmin/src/util/stores.ts b/packages/pending/mothership-superadmin/src/util/stores.ts similarity index 100% rename from packages/superadmin/src/util/stores.ts rename to packages/pending/mothership-superadmin/src/util/stores.ts diff --git a/packages/lander/public/favicon.ico b/packages/pending/mothership-superadmin/static/favicon.ico similarity index 100% rename from packages/lander/public/favicon.ico rename to packages/pending/mothership-superadmin/static/favicon.ico diff --git a/packages/superadmin/static/favicon.png b/packages/pending/mothership-superadmin/static/favicon.png similarity index 100% rename from packages/superadmin/static/favicon.png rename to packages/pending/mothership-superadmin/static/favicon.png diff --git a/packages/lander/public/icons/all.min.css b/packages/pending/mothership-superadmin/static/icons/all.min.css similarity index 100% rename from packages/lander/public/icons/all.min.css rename to packages/pending/mothership-superadmin/static/icons/all.min.css diff --git a/packages/lander/public/icons/brands.min.css b/packages/pending/mothership-superadmin/static/icons/brands.min.css similarity index 100% rename from packages/lander/public/icons/brands.min.css rename to packages/pending/mothership-superadmin/static/icons/brands.min.css diff --git a/packages/lander/public/icons/fontawesome.min.css b/packages/pending/mothership-superadmin/static/icons/fontawesome.min.css similarity index 100% rename from packages/lander/public/icons/fontawesome.min.css rename to packages/pending/mothership-superadmin/static/icons/fontawesome.min.css diff --git a/packages/superadmin/static/icons/icon-192x192.png b/packages/pending/mothership-superadmin/static/icons/icon-192x192.png similarity index 100% rename from packages/superadmin/static/icons/icon-192x192.png rename to packages/pending/mothership-superadmin/static/icons/icon-192x192.png diff --git a/packages/superadmin/static/icons/icon-256x256.png b/packages/pending/mothership-superadmin/static/icons/icon-256x256.png similarity index 100% rename from packages/superadmin/static/icons/icon-256x256.png rename to packages/pending/mothership-superadmin/static/icons/icon-256x256.png diff --git a/packages/superadmin/static/icons/icon-384x384.png b/packages/pending/mothership-superadmin/static/icons/icon-384x384.png similarity index 100% rename from packages/superadmin/static/icons/icon-384x384.png rename to packages/pending/mothership-superadmin/static/icons/icon-384x384.png diff --git a/packages/superadmin/static/icons/icon-512x512.png b/packages/pending/mothership-superadmin/static/icons/icon-512x512.png similarity index 100% rename from packages/superadmin/static/icons/icon-512x512.png rename to packages/pending/mothership-superadmin/static/icons/icon-512x512.png diff --git a/packages/superadmin/static/images/logo-square.png b/packages/pending/mothership-superadmin/static/images/logo-square.png similarity index 100% rename from packages/superadmin/static/images/logo-square.png rename to packages/pending/mothership-superadmin/static/images/logo-square.png diff --git a/packages/superadmin/static/images/pocketbase-intro-screen.jpg b/packages/pending/mothership-superadmin/static/images/pocketbase-intro-screen.jpg similarity index 100% rename from packages/superadmin/static/images/pocketbase-intro-screen.jpg rename to packages/pending/mothership-superadmin/static/images/pocketbase-intro-screen.jpg diff --git a/packages/superadmin/static/images/pocketbase-logo.svg b/packages/pending/mothership-superadmin/static/images/pocketbase-logo.svg similarity index 100% rename from packages/superadmin/static/images/pocketbase-logo.svg rename to packages/pending/mothership-superadmin/static/images/pocketbase-logo.svg diff --git a/packages/lander/public/img/pockethost-cloud-logo.jpg b/packages/pending/mothership-superadmin/static/images/pockethost-cloud-logo.jpg similarity index 100% rename from packages/lander/public/img/pockethost-cloud-logo.jpg rename to packages/pending/mothership-superadmin/static/images/pockethost-cloud-logo.jpg diff --git a/packages/superadmin/static/manifest.json b/packages/pending/mothership-superadmin/static/manifest.json similarity index 100% rename from packages/superadmin/static/manifest.json rename to packages/pending/mothership-superadmin/static/manifest.json diff --git a/packages/lander/public/poster.png b/packages/pending/mothership-superadmin/static/poster.png similarity index 100% rename from packages/lander/public/poster.png rename to packages/pending/mothership-superadmin/static/poster.png diff --git a/packages/lander/public/webfonts/fa-brands-400.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-brands-400.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-brands-400.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-brands-400.ttf diff --git a/packages/lander/public/webfonts/fa-brands-400.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-brands-400.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-brands-400.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-brands-400.woff2 diff --git a/packages/lander/public/webfonts/fa-duotone-900.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-duotone-900.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-duotone-900.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-duotone-900.ttf diff --git a/packages/lander/public/webfonts/fa-duotone-900.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-duotone-900.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-duotone-900.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-duotone-900.woff2 diff --git a/packages/lander/public/webfonts/fa-light-300.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-light-300.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-light-300.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-light-300.ttf diff --git a/packages/lander/public/webfonts/fa-light-300.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-light-300.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-light-300.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-light-300.woff2 diff --git a/packages/lander/public/webfonts/fa-regular-400.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-regular-400.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-regular-400.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-regular-400.ttf diff --git a/packages/lander/public/webfonts/fa-regular-400.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-regular-400.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-regular-400.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-regular-400.woff2 diff --git a/packages/lander/public/webfonts/fa-sharp-light-300.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-sharp-light-300.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-sharp-light-300.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-sharp-light-300.ttf diff --git a/packages/lander/public/webfonts/fa-sharp-light-300.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-sharp-light-300.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-sharp-light-300.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-sharp-light-300.woff2 diff --git a/packages/lander/public/webfonts/fa-sharp-regular-400.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-sharp-regular-400.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-sharp-regular-400.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-sharp-regular-400.ttf diff --git a/packages/lander/public/webfonts/fa-sharp-regular-400.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-sharp-regular-400.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-sharp-regular-400.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-sharp-regular-400.woff2 diff --git a/packages/lander/public/webfonts/fa-sharp-solid-900.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-sharp-solid-900.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-sharp-solid-900.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-sharp-solid-900.ttf diff --git a/packages/lander/public/webfonts/fa-sharp-solid-900.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-sharp-solid-900.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-sharp-solid-900.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-sharp-solid-900.woff2 diff --git a/packages/lander/public/webfonts/fa-solid-900.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-solid-900.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-solid-900.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-solid-900.ttf diff --git a/packages/lander/public/webfonts/fa-solid-900.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-solid-900.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-solid-900.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-solid-900.woff2 diff --git a/packages/lander/public/webfonts/fa-thin-100.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-thin-100.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-thin-100.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-thin-100.ttf diff --git a/packages/lander/public/webfonts/fa-thin-100.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-thin-100.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-thin-100.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-thin-100.woff2 diff --git a/packages/lander/public/webfonts/fa-v4compatibility.ttf b/packages/pending/mothership-superadmin/static/webfonts/fa-v4compatibility.ttf similarity index 100% rename from packages/lander/public/webfonts/fa-v4compatibility.ttf rename to packages/pending/mothership-superadmin/static/webfonts/fa-v4compatibility.ttf diff --git a/packages/lander/public/webfonts/fa-v4compatibility.woff2 b/packages/pending/mothership-superadmin/static/webfonts/fa-v4compatibility.woff2 similarity index 100% rename from packages/lander/public/webfonts/fa-v4compatibility.woff2 rename to packages/pending/mothership-superadmin/static/webfonts/fa-v4compatibility.woff2 diff --git a/packages/superadmin/svelte.config.js b/packages/pending/mothership-superadmin/svelte.config.js similarity index 100% rename from packages/superadmin/svelte.config.js rename to packages/pending/mothership-superadmin/svelte.config.js diff --git a/packages/superadmin/tailwind.config.cjs b/packages/pending/mothership-superadmin/tailwind.config.cjs similarity index 100% rename from packages/superadmin/tailwind.config.cjs rename to packages/pending/mothership-superadmin/tailwind.config.cjs diff --git a/packages/superadmin/tsconfig.json b/packages/pending/mothership-superadmin/tsconfig.json similarity index 100% rename from packages/superadmin/tsconfig.json rename to packages/pending/mothership-superadmin/tsconfig.json diff --git a/packages/superadmin/vite.config.ts b/packages/pending/mothership-superadmin/vite.config.ts similarity index 100% rename from packages/superadmin/vite.config.ts rename to packages/pending/mothership-superadmin/vite.config.ts diff --git a/packages/pending/plugin-cloudflare-request-logger/.npmignore b/packages/pending/plugin-cloudflare-request-logger/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-cloudflare-request-logger/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-cloudflare-request-logger/package.json b/packages/pending/plugin-cloudflare-request-logger/package.json new file mode 100644 index 00000000..195d7792 --- /dev/null +++ b/packages/pending/plugin-cloudflare-request-logger/package.json @@ -0,0 +1,21 @@ +{ + "name": "@pockethost/plugin-cloudflare-request-logger", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "typescript": "^5.4.5" + }, + "dependencies": { + "pockethost": "workspace:^" + } +} diff --git a/packages/pending/plugin-cloudflare-request-logger/src/index.ts b/packages/pending/plugin-cloudflare-request-logger/src/index.ts new file mode 100644 index 00000000..ad4cc914 --- /dev/null +++ b/packages/pending/plugin-cloudflare-request-logger/src/index.ts @@ -0,0 +1,27 @@ +import { + LoggerService, + PocketHostAction, + PocketHostPlugin, +} from 'pockethost/core' + +export const logger = LoggerService().create('cloudflare-request-logger') +export const { info, dbg } = logger + +const plugin: PocketHostPlugin = async ({ registerAction }) => { + registerAction(PocketHostAction.Core_Request, async ({ req, res }) => { + const url = new URL(`http://${req.headers.host}${req.url}`) + const country = (req.headers['cf-ipcountry'] as string) || '' + const ip = (req.headers['x-forwarded-for'] as string) || '' + const method = req.method || '' + const sig = [ + method.padStart(10), + country.padStart(5), + ip.padEnd(45), + url.toString(), + ].join(' ') + info(`Incoming request ${sig}`) + res.locals.sig = sig + }) +} + +export default plugin diff --git a/packages/pending/plugin-cloudflare-request-logger/tsconfig.json b/packages/pending/plugin-cloudflare-request-logger/tsconfig.json new file mode 100644 index 00000000..0f098a71 --- /dev/null +++ b/packages/pending/plugin-cloudflare-request-logger/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"], + "exclude": ["./src/mothership-app/**/*", "./src/instance-app/**/*"] +} diff --git a/packages/pending/plugin-discord-alerts/.npmignore b/packages/pending/plugin-discord-alerts/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-discord-alerts/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-discord-alerts/package.json b/packages/pending/plugin-discord-alerts/package.json new file mode 100644 index 00000000..6681e06b --- /dev/null +++ b/packages/pending/plugin-discord-alerts/package.json @@ -0,0 +1,22 @@ +{ + "name": "@pockethost/plugin-discord-alerts", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "bottleneck": "^2.19.5", + "pockethost": "workspace:^" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pending/plugin-discord-alerts/src/index.ts b/packages/pending/plugin-discord-alerts/src/index.ts new file mode 100644 index 00000000..a280021e --- /dev/null +++ b/packages/pending/plugin-discord-alerts/src/index.ts @@ -0,0 +1,70 @@ +import { join } from 'path' +import { + DEBUG, + LoggerService, + PH_HOME, + PocketHostPlugin, + Settings, + gracefulExit, + mkNumber, + mkString, + onInit, +} from 'pockethost/core' +import { alert, send } from './lib' + +const _HOME_DIR = + process.env.PH_FIREWALL_HOME || join(PH_HOME(), `plugin-discord-alerts`) + +const settings = Settings({ + PH_DISCORD_ALERTS_ALERT_CHANNEL_URL: mkString(), + PH_DISCORD_ALERTS_HEALTH_CHANNEL_URL: mkString(), + PH_DISCORD_ALERTS_DUPLICATE_ALERT_MS: mkNumber(60 * 1000), +}) + +export const ALERT_CHANNEL_URL = () => + settings.PH_DISCORD_ALERTS_ALERT_CHANNEL_URL + +export const HEALTH_CHANNEL_URL = () => + settings.PH_DISCORD_ALERTS_HEALTH_CHANNEL_URL + +export const DUPLICATE_ALERT_MS = () => + settings.PH_DISCORD_ALERTS_DUPLICATE_ALERT_MS + +export const logger = LoggerService().create('plugin-discord-alerts') +export const { dbg } = logger + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + onInit(async () => { + ;['unhandledRejection', 'uncaughtException'].forEach((type) => { + process.on(type, (e) => { + console.error(e) + try { + alert(ALERT_CHANNEL_URL(), e) + } catch (e) { + console.error(e) + } + if (DEBUG()) { + console.error(e.stack) + gracefulExit() + } + }) + }) + }) + + registerAction( + PocketHostAction.Firewall_OnRequestError, + async ({ error }) => { + alert(ALERT_CHANNEL_URL(), error.message) + }, + ) + + registerAction(PocketHostAction.Health_OnError, async ({ error }) => { + alert(ALERT_CHANNEL_URL(), error.message) + }) + + registerAction(PocketHostAction.Health_OnMessage, async ({ lines }) => { + send(HEALTH_CHANNEL_URL(), lines) + }) +} + +export default plugin diff --git a/packages/pending/plugin-discord-alerts/src/lib.ts b/packages/pending/plugin-discord-alerts/src/lib.ts new file mode 100644 index 00000000..cb777384 --- /dev/null +++ b/packages/pending/plugin-discord-alerts/src/lib.ts @@ -0,0 +1,58 @@ +import { Bottleneck } from 'pockethost/core' +import { stringify } from 'pockethost/src/common' +import { DUPLICATE_ALERT_MS } from '.' + +const cache: { [_: string]: NodeJS.Timeout } = {} + +function splitIntoChunks(lines: string[], maxChars: number = 2000): string[] { + const chunks: string[] = [] + let currentChunk: string = '' + + lines.forEach((line) => { + // Check if adding the next line exceeds the maxChars limit + if (currentChunk.length + line.length + 1 > maxChars) { + chunks.push(currentChunk) + currentChunk = '' + } + currentChunk += line + '\n' // Add the line and a newline character + }) + + // Add the last chunk if it's not empty + if (currentChunk) { + chunks.push(currentChunk) + } + + return chunks +} + +const limiter = new Bottleneck({ maxConcurrent: 1 }) + +export const send = (url: string, lines: string[]) => + Promise.all( + splitIntoChunks(lines).map((content) => + limiter.schedule(() => + fetch(url, { + method: 'POST', + body: stringify({ + content, + }), + headers: { 'content-type': 'application/json' }, + }), + ), + ), + ) + +export const alert = (url: string, message: { toString: () => string }) => { + if (!url) return + const m = message.toString() + const isCached = !!cache[m] + if (isCached) { + clearTimeout(cache[m]) + } + cache[m] = setTimeout(() => { + delete cache[message.toString()] + }, DUPLICATE_ALERT_MS()) + if (isCached) return + + send(url, [message.toString()]).catch(console.error) +} diff --git a/packages/pending/plugin-discord-alerts/tsconfig.json b/packages/pending/plugin-discord-alerts/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-discord-alerts/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/pending/plugin-edge-self-check/.npmignore b/packages/pending/plugin-edge-self-check/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-edge-self-check/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-edge-self-check/package.json b/packages/pending/plugin-edge-self-check/package.json new file mode 100644 index 00000000..e40de731 --- /dev/null +++ b/packages/pending/plugin-edge-self-check/package.json @@ -0,0 +1,23 @@ +{ + "name": "@pockethost/plugin-edge-self-check", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/node-os-utils": "^1.3.4", + "node-os-utils": "^1.3.7", + "pockethost": "workspace:^" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pending/plugin-edge-self-check/src/HealthCommand/checkHealth.ts b/packages/pending/plugin-edge-self-check/src/HealthCommand/checkHealth.ts new file mode 100644 index 00000000..2c0c388b --- /dev/null +++ b/packages/pending/plugin-edge-self-check/src/HealthCommand/checkHealth.ts @@ -0,0 +1,122 @@ +import { execSync } from 'child_process' +import { default as osu } from 'node-os-utils' +import { freemem } from 'os' +import { + DAEMON_PORT, + EDGE_NAME, + PocketHostAction, + PocketHostFilter, + action, + fetch, + filter, +} from 'pockethost/core' +import { dbg, info } from '..' +import { getContainerChecks } from './docker' + +export const notify = (lines: string[]) => + action(PocketHostAction.Health_OnMessage, { lines }) + +export type Check = { + name: string + priority: number + emoji: string + isHealthy: boolean + url: string + + // Instance + port?: number + ago?: string + mem?: string + created?: Date +} + +export const _exec = (cmd: string) => + execSync(cmd, { shell: '/bin/bash', maxBuffer: 1024 * 1024 * 10 }) + .toString() + .split(`\n`) + +export const checkHealth = async () => { + const { cpu, drive } = osu + + info(`Starting`) + + try { + const openFiles = _exec(`lsof -n | awk '$4 ~ /^[0-9]/ {print}'`) + + function getFreeMemoryInGB(): string { + const freeMemoryBytes: number = freemem() + const freeMemoryGB: number = freeMemoryBytes / Math.pow(1024, 3) + return freeMemoryGB.toFixed(2) // Rounds to 2 decimal places + } + + const containers = getContainerChecks() + dbg + await notify([ + `===================`, + `Server: ${EDGE_NAME()}`, + `${new Date()}`, + `CPUs: ${cpu.count()}`, + `CPU Usage: ${await cpu.usage()}%`, + `Free RAM: ${getFreeMemoryInGB()}GB`, + `Free Storage: ${(await drive.info(`/`)).freeGb}GB`, + `Open files: ${openFiles.length}`, + `Containers: ${containers.length}`, + ]) + + const checks = await filter(PocketHostFilter.EdgeSelfCheck_Checks, [ + { + name: `edge daemon`, + priority: 8, + emoji: `:imp:`, + isHealthy: false, + url: `http://localhost:${DAEMON_PORT()}/_api/health`, + }, + ...containers, + ]) + + await Promise.all( + checks.map(async (check) => { + const { url } = check + dbg({ container: check }) + try { + const res = await fetch(url) + dbg({ url, status: res.status }) + check.isHealthy = res.status === 200 + return true + } catch (e) { + dbg(`${url}: ${e}`) + check.isHealthy = false + } + }), + ) + dbg({ checks }) + await notify([ + `---health checks---`, + ...checks + .sort((a, b) => { + if (a.priority > b.priority) return -1 + if (a.priority < b.priority) return 1 + const now = new Date() + const res = +(b.created || now) - +(a.created || now) + if (res) return res + return a.name.localeCompare(b.name) + }) + .map(({ name, isHealthy, emoji, mem, ago }) => { + const isInstance = !!mem + if (isInstance) { + return `${ + isHealthy ? ':white_check_mark:' : ':face_vomiting: ' + } \`${name.padStart(30)} ${(mem || '').padStart(10)} ${( + ago || '' + ).padStart(20)}\`` + } else { + return `${ + isHealthy ? ':white_check_mark:' : ':face_vomiting: ' + } ${name}` + } + }), + ]) + } catch (e) { + action(PocketHostAction.Health_OnError, `${e}`) + } +} diff --git a/packages/pending/plugin-edge-self-check/src/HealthCommand/docker.ts b/packages/pending/plugin-edge-self-check/src/HealthCommand/docker.ts new file mode 100644 index 00000000..4d43447d --- /dev/null +++ b/packages/pending/plugin-edge-self-check/src/HealthCommand/docker.ts @@ -0,0 +1,63 @@ +import { dbg } from '..' +import { Check, _exec } from './checkHealth' + +type DockerPs = { + Command: string + CreatedAt: string + ID: string + Image: string + Labels: string + LocalVolumes: string + Mounts: string + Names: string + Networks: string + Ports: string + RunningFor: string + Size: string + State: string + Status: string +} + +const SAMPLE: DockerPs = { + Command: '"docker-entrypoint.s…"', + CreatedAt: '2024-01-23 04:36:09 +0000 UTC', + ID: '6e0921e84391', + Image: 'pockethost-instance', + Labels: '', + LocalVolumes: '0', + Mounts: + '/home/pocketho…,/home/pocketho…,/home/pocketho…,/home/pocketho…,/home/pocketho…', + Names: 'kekbase-1705984569777', + Networks: 'bridge', + Ports: '0.0.0.0:44447-\u003e8090/tcp, :::44447-\u003e8090/tcp', + RunningFor: '7 hours ago', + Size: '0B (virtual 146MB)', + State: 'running', + Status: 'Up 7 hours', +} + +export const getContainerChecks = () => + _exec(`docker ps --format '{{json .}}'`) + .filter((line) => line.trim()) + .map((line) => { + dbg(line) + return line + }) + .map((line) => JSON.parse(line) as DockerPs) + .map((rec) => { + const name = rec.Names.replace(/-\d+/, '') + const port = parseInt(rec.Ports.match(/:(\d+)/)?.[1] || '0', 10) + const mem = rec.Size.match(/(\d+MB)/)?.[1] || '0MB' + const created = new Date(rec.CreatedAt) + return { + name, + priority: 0, + emoji: ':octopus:', + port, + isHealthy: false, + url: `http://localhost:${port}/api/health`, + ago: rec.RunningFor, + mem, + created, + } + }) diff --git a/packages/pockethost/src/cli/commands/HealthCommand/index.ts b/packages/pending/plugin-edge-self-check/src/HealthCommand/index.ts similarity index 83% rename from packages/pockethost/src/cli/commands/HealthCommand/index.ts rename to packages/pending/plugin-edge-self-check/src/HealthCommand/index.ts index 3a8b3221..5c1a1a5b 100644 --- a/packages/pockethost/src/cli/commands/HealthCommand/index.ts +++ b/packages/pending/plugin-edge-self-check/src/HealthCommand/index.ts @@ -1,5 +1,4 @@ -import { Command } from 'commander' -import { LoggerService } from '../../../../core' +import { Command, LoggerService } from 'pockethost/core' import { checkHealth } from './checkHealth' type Options = { diff --git a/packages/pending/plugin-edge-self-check/src/index.ts b/packages/pending/plugin-edge-self-check/src/index.ts new file mode 100644 index 00000000..cef66184 --- /dev/null +++ b/packages/pending/plugin-edge-self-check/src/index.ts @@ -0,0 +1,32 @@ +import { join } from 'path' +import { + LoggerService, + PH_HOME, + PocketHostFilter, + PocketHostPlugin, + Settings, + mkPath, +} from 'pockethost/core' +import { HealthCommand } from './HealthCommand' + +const _HOME_DIR = + process.env.PH_FIREWALL_HOME || join(PH_HOME(), `plugin-edge-health-check`) + +const settings = Settings({ + PH_EDGE_SELF_CHECK_HOME: mkPath(_HOME_DIR, { create: true }), + PH_EDGE_SELF_CHECK_EXTRA_CHECKS: mkPath(join(_HOME_DIR, 'extra-checks.ts')), +}) + +export const HOME = () => settings.PH_EDGE_SELF_CHECK_HOME +export const EXTRA_CHECKS = () => settings.PH_EDGE_SELF_CHECK_EXTRA_CHECKS + +const logger = LoggerService().create('HealthPlugin') +export const { dbg, info } = logger + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + registerFilter(PocketHostFilter.Core_CliCommands, async (commands) => { + return [...commands, HealthCommand()] + }) +} + +export default plugin diff --git a/packages/pending/plugin-edge-self-check/tsconfig.json b/packages/pending/plugin-edge-self-check/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-edge-self-check/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/pending/plugin-ftp-server/.npmignore b/packages/pending/plugin-ftp-server/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-ftp-server/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-ftp-server/package.json b/packages/pending/plugin-ftp-server/package.json new file mode 100644 index 00000000..cd744328 --- /dev/null +++ b/packages/pending/plugin-ftp-server/package.json @@ -0,0 +1,23 @@ +{ + "name": "@pockethost/plugin-ftp-server", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "devcert": "^1.2.2", + "ftp-srv": "github:pockethost/ftp-srv#0fc708bae0d5d7a55ce948767f082d6fcfb2af59", + "pockethost": "workspace:^" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/PhFs.ts b/packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/PhFs.ts similarity index 99% rename from packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/PhFs.ts rename to packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/PhFs.ts index 40cd34ef..cf7a8c46 100644 --- a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/PhFs.ts +++ b/packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/PhFs.ts @@ -1,4 +1,3 @@ -import { compact, map } from '@s-libs/micro-dash' import { Mode, constants, @@ -9,6 +8,16 @@ import { } from 'fs' import { FileStat, FileSystem, FtpConnection } from 'ftp-srv' import { isAbsolute, join, normalize, resolve, sep } from 'path' +import { + DATA_ROOT, + InstanceFields, + Logger, + PocketBase, + assert, + compact, + map, + newId, +} from 'pockethost/core' import { FolderNamesMap, INSTANCE_ROOT_VIRTUAL_FOLDER_NAMES, @@ -16,14 +25,6 @@ import { VirtualFolderNames, virtualFolderGuard, } from '.' -import { - InstanceFields, - Logger, - PocketBase, - assert, - newId, -} from '../../../../../common' -import { DATA_ROOT } from '../../../../../core' import * as fsAsync from './fs-async' export type PathError = { diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/fs-async.ts b/packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/fs-async.ts similarity index 100% rename from packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/fs-async.ts rename to packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/fs-async.ts diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/index.ts b/packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/index.ts similarity index 78% rename from packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/index.ts rename to packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/index.ts index 4dfca964..37ab8d5c 100644 --- a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/FtpService/index.ts +++ b/packages/pending/plugin-ftp-server/src/FtpCommand/FtpService/index.ts @@ -1,25 +1,25 @@ -import { keys, values } from '@s-libs/micro-dash' import { readFileSync } from 'fs' import { FtpSrv } from 'ftp-srv' +import { keys, values } from 'pockethost/core' import { LoggerService, PocketBase, - mergeConfig, + PocketHostFilter, + filter, mkSingleton, -} from '../../../../../common' +} from 'pockethost/src/common' +import { asyncExitHook } from 'pockethost/src/core' import { - MOTHERSHIP_INTERNAL_URL, - PH_FTP_PASV_IP, - PH_FTP_PASV_PORT_MAX, - PH_FTP_PASV_PORT_MIN, - PH_FTP_PORT, + PASV_IP, + PASV_PORT_MAX, + PASV_PORT_MIN, + PORT, SSL_CERT, SSL_KEY, - asyncExitHook, -} from '../../../../../core' +} from '../..' import { PhFs } from './PhFs' -export type FtpConfig = { mothershipUrl: string } +export type FtpConfig = {} export enum VirtualFolderNames { Data = 'pb_data', @@ -65,12 +65,6 @@ export function virtualFolderGuard( } export const ftpService = mkSingleton((config: Partial = {}) => { - const { mothershipUrl } = mergeConfig( - { - mothershipUrl: MOTHERSHIP_INTERNAL_URL(), - }, - config, - ) const tls = { key: readFileSync(SSL_KEY()), cert: readFileSync(SSL_CERT()), @@ -79,21 +73,26 @@ export const ftpService = mkSingleton((config: Partial = {}) => { const { dbg, info } = _ftpServiceLogger const ftpServer = new FtpSrv({ - url: 'ftp://0.0.0.0:' + PH_FTP_PORT(), + url: 'ftp://0.0.0.0:' + PORT(), anonymous: false, log: _ftpServiceLogger.create(`ftpServer`), tls, - pasv_url: PH_FTP_PASV_IP(), - pasv_max: PH_FTP_PASV_PORT_MAX(), - pasv_min: PH_FTP_PASV_PORT_MIN(), + pasv_url: PASV_IP(), + pasv_max: PASV_PORT_MAX(), + pasv_min: PASV_PORT_MIN(), }) ftpServer.on( 'login', async ({ connection, username, password }, resolve, reject) => { dbg(`Got a connection`) - dbg(`Finding ${mothershipUrl}`) - const client = new PocketBase(mothershipUrl) + dbg(`Finding ${username}`) + const client = new PocketBase( + await filter( + PocketHostFilter.Mothership_MothershipPublicUrl, + ``, + ), + ) try { await client.collection('users').authWithPassword(username, password) dbg(`Logged in`) diff --git a/packages/pending/plugin-ftp-server/src/FtpCommand/ServeCommand/ftp.ts b/packages/pending/plugin-ftp-server/src/FtpCommand/ServeCommand/ftp.ts new file mode 100644 index 00000000..95cc23bd --- /dev/null +++ b/packages/pending/plugin-ftp-server/src/FtpCommand/ServeCommand/ftp.ts @@ -0,0 +1,10 @@ +import { LoggerService } from 'pockethost/core' +import { ftpService } from '../FtpService' + +export async function ftp() { + const logger = LoggerService().create(`EdgeFtpCommand`) + const { dbg, error, info, warn } = logger + info(`Starting`) + + await ftpService({}) +} diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/ServeCommand/index.ts b/packages/pending/plugin-ftp-server/src/FtpCommand/ServeCommand/index.ts similarity index 86% rename from packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/ServeCommand/index.ts rename to packages/pending/plugin-ftp-server/src/FtpCommand/ServeCommand/index.ts index 56f188a6..b4f69e08 100644 --- a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/ServeCommand/index.ts +++ b/packages/pending/plugin-ftp-server/src/FtpCommand/ServeCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { ftp } from './ftp' type Options = { diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/index.ts b/packages/pending/plugin-ftp-server/src/FtpCommand/index.ts similarity index 84% rename from packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/index.ts rename to packages/pending/plugin-ftp-server/src/FtpCommand/index.ts index 3de921c8..dbd09a1e 100644 --- a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/index.ts +++ b/packages/pending/plugin-ftp-server/src/FtpCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { ServeCommand } from './ServeCommand' type Options = { diff --git a/packages/pending/plugin-ftp-server/src/index.ts b/packages/pending/plugin-ftp-server/src/index.ts new file mode 100644 index 00000000..e5ba5cfc --- /dev/null +++ b/packages/pending/plugin-ftp-server/src/index.ts @@ -0,0 +1,59 @@ +import devcert from 'devcert' +import { mkdirSync, writeFileSync } from 'fs' +import { join } from 'path' +import { + APEX_DOMAIN, + Command, + IS_DEV, + PH_HOME, + PocketHostAction, + PocketHostFilter, + PocketHostPlugin, + Settings, + mkNumber, + mkPath, + mkString, +} from 'pockethost/core' +import { FtpCommand } from './FtpCommand' + +const _HOME_DIR = + process.env.PH_FIREWALL_HOME || join(PH_HOME(), `plugin-ftp-server`) + +const TLS_PFX = `tls` + +const settings = Settings({ + PH_FTP_HOME: mkPath(_HOME_DIR, { create: true }), + PH_FTP_PORT: mkNumber(21), + PH_FTP_SSL_KEY: mkPath(join(_HOME_DIR, `${TLS_PFX}.key`)), + PH_FTP_SSL_CERT: mkPath(join(_HOME_DIR, `${TLS_PFX}.cert`)), + PH_FTP_PASV_IP: mkString(`0.0.0.0`), + PH_FTP_PASV_PORT_MIN: mkNumber(10000), + PH_FTP_PASV_PORT_MAX: mkNumber(20000), +}) + +export const PORT = () => settings.PH_FTP_PORT +export const SSL_KEY = () => settings.PH_FTP_SSL_KEY +export const SSL_CERT = () => settings.PH_FTP_SSL_CERT +export const PASV_IP = () => settings.PH_FTP_PASV_IP +export const PASV_PORT_MIN = () => settings.PH_FTP_PASV_PORT_MIN +export const PASV_PORT_MAX = () => settings.PH_FTP_PASV_PORT_MAX + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + registerFilter( + PocketHostFilter.Core_CliCommands, + async (commands: Command[]) => { + return [...commands, FtpCommand()] + }, + ) + + registerAction(PocketHostAction.Core_Init, async () => { + if (IS_DEV()) { + mkdirSync(_HOME_DIR, { recursive: true }) + const { key, cert } = await devcert.certificateFor(APEX_DOMAIN(), {}) + writeFileSync(SSL_KEY(), key) + writeFileSync(SSL_CERT(), cert) + } + }) +} + +export default plugin diff --git a/packages/pending/plugin-ftp-server/tsconfig.json b/packages/pending/plugin-ftp-server/tsconfig.json new file mode 100644 index 00000000..0f098a71 --- /dev/null +++ b/packages/pending/plugin-ftp-server/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"], + "exclude": ["./src/mothership-app/**/*", "./src/instance-app/**/*"] +} diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/.npmignore b/packages/pending/plugin-instance-logger-file-realtime-tail/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/package.json b/packages/pending/plugin-instance-logger-file-realtime-tail/package.json new file mode 100644 index 00000000..f70e7f5a --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/package.json @@ -0,0 +1,23 @@ +{ + "name": "@pockethost/plugin-instance-logger-file-realtime-tail", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/node": "^20.8.10", + "pockethost": "workspace:^", + "type-fest": "^4.6.0" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/readme.md b/packages/pending/plugin-instance-logger-file-realtime-tail/readme.md new file mode 100644 index 00000000..cfaec1c2 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/readme.md @@ -0,0 +1,33 @@ +# plugin-instance-logger-file-realtime-tail + +A PocketHost plugin. + +## Quickstart + +```bash +npx pockethost install @pockethost/plugin-instance-logger-file-realtime-tail + +npx pockethost instance-logger-file-realtime-tail --help +``` + +## Variables + +The following variables will be used if they are found in the shell environment. PocketHost will also load them from an `.env` file if found at load time. + +| Name | Default | Discussion | +| ------------------------------- | -------------------------------------- | ------------------------------------------------------------- | +| PH\_INSTANCE_LOGGER_FILE_REALTIME_TAIL\_HOME | `.pockethost/plugin-instance-logger-file-realtime-tail` | The home directory for any data storage needs of this plugin. | + +## Actions + +## Filters + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/src/RealtimeLog.ts b/packages/pending/plugin-instance-logger-file-realtime-tail/src/RealtimeLog.ts new file mode 100644 index 00000000..f19b5c4a --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/src/RealtimeLog.ts @@ -0,0 +1,62 @@ +import { text } from 'node:stream/consumers' +import { + filter, + PocketHostFilter, + RequestHandler, + stringify, +} from 'pockethost/core' +import { JsonifiableObject } from 'type-fest/source/jsonifiable' +import { dbg } from './log' + +const mkEvent = (name: string, data: JsonifiableObject) => { + return `event: ${name}\ndata: ${stringify(data)}\n\n` +} + +export const realtimeLogMiddleware: RequestHandler = async (req, res, next) => { + dbg(`Got a logging request`) + + dbg(`Got a log request`) + const parsed = new URL(req.url, `https://${req.headers.host}`) + + const json = await text(req) + dbg(`JSON payload is`, json) + const payload = JSON.parse(json) + dbg(`Parsed payload is`, parsed) + const { instanceId, auth, n: nInitialRecords } = payload + + if (!instanceId) { + throw new Error(`instanceId query param required in ${req.url}`) + } + if (!auth) { + throw new Error(`Expected 'auth' query param, but found ${req.url}`) + } + + const isAuthenticated = await filter( + PocketHostFilter.Core_AuthenticateRequest, + false, + { req, auth, instanceId }, + ) + if (!isAuthenticated) { + throw new Error(`Unauthorized`) + } + + /** Get a database connection */ + const instanceLogger = InstanceLogger(instanceId, `exec`) + + /** Start the stream */ + res.writeHead(200, { + 'Content-Type': 'text/event-stream; charset=UTF-8', + Connection: 'keep-alive', + 'Cache-Control': 'no-store', + }) + + const unsub = instanceLogger.tail(100, (entry) => { + const evt = mkEvent(`log`, entry) + res.write(evt) + }) + + res.on('close', () => { + unsub() + instanceLogger.shutdown() + }) +} diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/src/constants.ts b/packages/pending/plugin-instance-logger-file-realtime-tail/src/constants.ts new file mode 100644 index 00000000..cc87ec7f --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/src/constants.ts @@ -0,0 +1,9 @@ +import { join } from 'path' +import { PH_HOME, Settings, mkPath } from 'pockethost/core' + +const HOME_DIR = + process.env.PH_INSTANCE_LOGGER_FILE_REALTIME_TAIL_HOME || join(PH_HOME(), `plugin-instance-logger-file-realtime-tail`) + +const settings = Settings({ + PH_INSTANCE_LOGGER_FILE_REALTIME_TAIL_HOME: mkPath(HOME_DIR, { create: true }), +}) diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/src/index.ts b/packages/pending/plugin-instance-logger-file-realtime-tail/src/index.ts new file mode 100644 index 00000000..e7268908 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/src/index.ts @@ -0,0 +1,12 @@ +import { PocketHostPlugin, onAppMount } from 'pockethost/core' +import { realtimeLogMiddleware } from './RealtimeLog' +import { dbg } from './log' + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + dbg(`initializing plugin-instance-logger-file-realtime-tail`) + onAppMount(async (app) => { + app.use('/logs', realtimeLogMiddleware) + }) +} + +export default plugin diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/src/log.ts b/packages/pending/plugin-instance-logger-file-realtime-tail/src/log.ts new file mode 100644 index 00000000..05d8a4e0 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/src/log.ts @@ -0,0 +1,4 @@ +import { LoggerService } from 'pockethost/core' + +const logger = LoggerService().create('plugin-instance-logger-file-realtime-tail') +export const { dbg, info } = logger diff --git a/packages/pending/plugin-instance-logger-file-realtime-tail/tsconfig.json b/packages/pending/plugin-instance-logger-file-realtime-tail/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-instance-logger-file-realtime-tail/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/pending/plugin-instance-logger-file/.npmignore b/packages/pending/plugin-instance-logger-file/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-instance-logger-file/package.json b/packages/pending/plugin-instance-logger-file/package.json new file mode 100644 index 00000000..b4874569 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file/package.json @@ -0,0 +1,25 @@ +{ + "name": "@pockethost/plugin-file-instance-logger", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@types/tail": "^2.2.2", + "tail": "^2.2.6", + "type-fest": "^4.6.0", + "typescript": "^5.4.5", + "winston": "^3.11.0" + }, + "dependencies": { + "pockethost": "workspace:^" + } +} diff --git a/packages/pockethost/src/services/InstanceLoggerService/index.ts b/packages/pending/plugin-instance-logger-file/src/InstanceLoggerService/index.ts similarity index 99% rename from packages/pockethost/src/services/InstanceLoggerService/index.ts rename to packages/pending/plugin-instance-logger-file/src/InstanceLoggerService/index.ts index 7d90dc16..30e13825 100644 --- a/packages/pockethost/src/services/InstanceLoggerService/index.ts +++ b/packages/pending/plugin-instance-logger-file/src/InstanceLoggerService/index.ts @@ -1,6 +1,4 @@ import * as fs from 'fs' -import { Tail } from 'tail' -import * as winston from 'winston' import { LoggerService, asyncExitHook, @@ -8,7 +6,9 @@ import { mergeConfig, mkInstanceDataPath, stringify, -} from '../../../core' +} from 'pockethost/core' +import { Tail } from 'tail' +import * as winston from 'winston' type UnsubFunc = () => void diff --git a/packages/pending/plugin-instance-logger-file/src/index.ts b/packages/pending/plugin-instance-logger-file/src/index.ts new file mode 100644 index 00000000..e67d0344 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file/src/index.ts @@ -0,0 +1,24 @@ +import { join } from 'path' +import { + LoggerService, + PH_HOME, + PocketHostPlugin, + Settings, + mkPath, +} from 'pockethost/core' + +const _HOME_DIR = + process.env.PH_SIL_HOME || join(PH_HOME(), `plugin-file-instance-logger`) + +const settings = Settings({ + PH_FIL_HOME: mkPath(_HOME_DIR, { create: true }), +}) + +const logger = LoggerService().create('plugin-file-instance-logger') +export const { dbg } = logger + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + dbg(`initializing plugin-file-instance-logger`) +} + +export default plugin diff --git a/packages/pending/plugin-instance-logger-file/tsconfig.json b/packages/pending/plugin-instance-logger-file/tsconfig.json new file mode 100644 index 00000000..d43b5981 --- /dev/null +++ b/packages/pending/plugin-instance-logger-file/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": [ + "**/*.ts", + "../plugin-instance-logger-file-realtime-tail/src/RealtimeLog.ts" + ] +} diff --git a/packages/pending/plugin-instance-logger-syslog-server/.npmignore b/packages/pending/plugin-instance-logger-syslog-server/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-instance-logger-syslog-server/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-instance-logger-syslog-server/package.json b/packages/pending/plugin-instance-logger-syslog-server/package.json new file mode 100644 index 00000000..8850bba6 --- /dev/null +++ b/packages/pending/plugin-instance-logger-syslog-server/package.json @@ -0,0 +1,23 @@ +{ + "name": "@pockethost/plugin-syslog-instance-logger", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "syslog-parse": "^2.0.0", + "typescript": "^5.4.5", + "winston": "^3.11.0" + }, + "dependencies": { + "pockethost": "workspace:^" + } +} diff --git a/packages/pending/plugin-instance-logger-syslog-server/readme.md b/packages/pending/plugin-instance-logger-syslog-server/readme.md new file mode 100644 index 00000000..0c36390b --- /dev/null +++ b/packages/pending/plugin-instance-logger-syslog-server/readme.md @@ -0,0 +1 @@ +A syslog server to generate instance log events. diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/ServeCommand/index.ts b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/ServeCommand/index.ts similarity index 86% rename from packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/ServeCommand/index.ts rename to packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/ServeCommand/index.ts index 1572ffe7..02a84056 100644 --- a/packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/ServeCommand/index.ts +++ b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/ServeCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { syslog } from './syslog' type Options = { diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/ServeCommand/syslog.ts b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/ServeCommand/syslog.ts similarity index 73% rename from packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/ServeCommand/syslog.ts rename to packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/ServeCommand/syslog.ts index 2935028b..804c0b6d 100644 --- a/packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/ServeCommand/syslog.ts +++ b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/ServeCommand/syslog.ts @@ -1,8 +1,12 @@ import * as dgram from 'dgram' +import { + LoggerService, + PocketHostAction, + action, + enqueueJob, +} from 'pockethost/core' import parse from 'syslog-parse' -import { LoggerService } from '../../../../../common' -import { SYSLOGD_PORT } from '../../../../../core' -import { InstanceLogger } from '../../../../../services' +import { SYSLOGD_PORT } from '../../constants' export function syslog() { return new Promise((resolve) => { @@ -30,6 +34,14 @@ export function syslog() { const { process: instanceId, severity, message } = parsed + enqueueJob(instanceId, async () => { + const instance = await getInstanceById(instanceId) + }) + action(PocketHostAction.Core_InstanceLog, { + instance, + type: severity === 'info' ? 'stdout' : 'stderr', + data: message, + }) const logger = InstanceLogger(instanceId, `exec`, { ttl: 5000 }) if (severity === 'info') { logger.info(message) diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/index.ts b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/index.ts similarity index 85% rename from packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/index.ts rename to packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/index.ts index 95ff0433..802bd3a2 100644 --- a/packages/pockethost/src/cli/commands/EdgeCommand/SyslogCommand/index.ts +++ b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { ServeCommand } from './ServeCommand' type Options = { diff --git a/packages/pockethost/src/core/SyslogLogger.ts b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogLogger.ts similarity index 90% rename from packages/pockethost/src/core/SyslogLogger.ts rename to packages/pending/plugin-instance-logger-syslog-server/src/SyslogLogger.ts index 240b27df..9c9d9dcf 100644 --- a/packages/pockethost/src/core/SyslogLogger.ts +++ b/packages/pending/plugin-instance-logger-syslog-server/src/SyslogLogger.ts @@ -1,7 +1,7 @@ +import { LoggerService } from 'pockethost/core' import * as winston from 'winston' import 'winston-syslog' -import { SYSLOGD_PORT } from '..' -import { LoggerService } from '../common' +import { SYSLOGD_PORT } from './constants' export function SyslogLogger(instanceId: string, target: string) { // @ts-ignore diff --git a/packages/pending/plugin-instance-logger-syslog-server/src/constants.ts b/packages/pending/plugin-instance-logger-syslog-server/src/constants.ts new file mode 100644 index 00000000..121d1081 --- /dev/null +++ b/packages/pending/plugin-instance-logger-syslog-server/src/constants.ts @@ -0,0 +1,11 @@ +import { join } from 'path' +import { PH_HOME, Settings, mkNumber, mkPath } from 'pockethost/core' + +const _HOME_DIR = + process.env.PH_SIL_HOME || join(PH_HOME(), `plugin-syslog-instance-logger`) +const settings = Settings({ + PH_SIL_HOME: mkPath(_HOME_DIR, { create: true }), + PH_SIL_PORT: mkNumber(5789), +}) + +export const SYSLOGD_PORT = () => settings.PH_SIL_PORT diff --git a/packages/pending/plugin-instance-logger-syslog-server/src/index.ts b/packages/pending/plugin-instance-logger-syslog-server/src/index.ts new file mode 100644 index 00000000..57201a76 --- /dev/null +++ b/packages/pending/plugin-instance-logger-syslog-server/src/index.ts @@ -0,0 +1,13 @@ +import { Command, PocketHostFilter, PocketHostPlugin } from 'pockethost/core' +import { SyslogCommand } from './SyslogCommand' + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + registerFilter( + PocketHostFilter.Core_CliCommands, + async (commands: Command[]) => { + return [...commands, SyslogCommand()] + }, + ) +} + +export default plugin diff --git a/packages/pending/plugin-instance-logger-syslog-server/src/logger.ts b/packages/pending/plugin-instance-logger-syslog-server/src/logger.ts new file mode 100644 index 00000000..18638e51 --- /dev/null +++ b/packages/pending/plugin-instance-logger-syslog-server/src/logger.ts @@ -0,0 +1,4 @@ +import { LoggerService } from 'pockethost/core' + +const logger = LoggerService().create('SyslogInstanceLoggerPlugin') +export const { dbg, error } = logger diff --git a/packages/pending/plugin-instance-logger-syslog-server/tsconfig.json b/packages/pending/plugin-instance-logger-syslog-server/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-instance-logger-syslog-server/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/pending/plugin-launcher-docker/.npmignore b/packages/pending/plugin-launcher-docker/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-launcher-docker/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pockethost-instance/Dockerfile b/packages/pending/plugin-launcher-docker/Dockerfile similarity index 100% rename from packages/pockethost-instance/Dockerfile rename to packages/pending/plugin-launcher-docker/Dockerfile diff --git a/packages/pending/plugin-launcher-docker/package.json b/packages/pending/plugin-launcher-docker/package.json new file mode 100644 index 00000000..9d46a175 --- /dev/null +++ b/packages/pending/plugin-launcher-docker/package.json @@ -0,0 +1,22 @@ +{ + "name": "@pockethost/plugin-launcher-docker", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "build": "docker build . -t benallfree/pockethost-instance:${npm_package_version} -t benallfree/pockethost-instance:latest", + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "typescript": "^5.4.5" + }, + "dependencies": { + "pockethost": "workspace:^" + } +} diff --git a/packages/pockethost/src/services/PocketBaseService/index.ts b/packages/pending/plugin-launcher-docker/src/PocketBaseService/index.ts similarity index 98% rename from packages/pockethost/src/services/PocketBaseService/index.ts rename to packages/pending/plugin-launcher-docker/src/PocketBaseService/index.ts index 3d4decd5..42a0d67b 100644 --- a/packages/pockethost/src/services/PocketBaseService/index.ts +++ b/packages/pending/plugin-launcher-docker/src/PocketBaseService/index.ts @@ -3,9 +3,6 @@ import Docker, { Container, ContainerCreateOptions } from 'dockerode' import { existsSync } from 'fs' import { gobot } from 'gobot' import MemoryStream from 'memorystream' -import { gte } from 'semver' -import { EventEmitter } from 'stream' -import { AsyncReturnType } from 'type-fest' import { APEX_DOMAIN, DOCKER_CONTAINER_HOST, @@ -20,8 +17,11 @@ import { mkInternalUrl, mkSingleton, tryFetch, -} from '../../../core' -import { PortService } from '../PortService' +} from 'pockethost/core' +import { PortService } from 'pockethost/src/services/PortService' +import { gte } from 'semver' +import { EventEmitter } from 'stream' +import { AsyncReturnType } from 'type-fest' export type Env = { [_: string]: string } export type SpawnConfig = { diff --git a/packages/pockethost/src/services/InstanceService/index.ts b/packages/pending/plugin-launcher-docker/src/index copy.ts similarity index 55% rename from packages/pockethost/src/services/InstanceService/index.ts rename to packages/pending/plugin-launcher-docker/src/index copy.ts index 3c07de06..7b56e045 100644 --- a/packages/pockethost/src/services/InstanceService/index.ts +++ b/packages/pending/plugin-launcher-docker/src/index copy.ts @@ -1,44 +1,33 @@ import { flatten, map, values } from '@s-libs/micro-dash' -import Bottleneck from 'bottleneck' import { globSync } from 'glob' import { basename, join } from 'path' -import { AsyncReturnType } from 'type-fest' import { - APP_URL, CLEANUP_PRIORITY_LAST, ClientResponseError, DAEMON_PB_IDLE_TTL, - DOCS_URL, - EDGE_APEX_DOMAIN, INSTANCE_APP_HOOK_DIR, INSTANCE_APP_MIGRATIONS_DIR, InstanceFields, InstanceId, - InstanceStatus, LoggerService, + PocketHostAction, + PocketHostFilter, SingletonBaseConfig, - UPGRADE_MODE, + action, asyncExitHook, createCleanupManager, createTimerManager, - mkAppUrl, + filter, mkContainerHomePath, - mkDocUrl, mkEdgeUrl, mkInternalUrl, mkSingleton, now, - stringify, -} from '../../../core' -import { - InstanceLogger, - MothershipAdminClientService, - PocketbaseService, - PortService, - SpawnConfig, - proxyService, -} from '../../services' -import { mkInstanceCache } from './mkInstanceCache' + registerAction, + registerFilter, +} from 'pockethost/core' +import { PortService } from 'pockethost/src/services' +import { AsyncReturnType } from 'type-fest' enum InstanceApiStatus { Starting = 'starting', @@ -64,9 +53,6 @@ export const instanceService = mkSingleton( const { instanceApiTimeoutMs, instanceApiCheckIntervalMs } = config const instanceServiceLogger = LoggerService().create('InstanceService') const { dbg, raw, error, warn } = instanceServiceLogger - const { client } = await MothershipAdminClientService() - - const pbService = await PocketbaseService() const instanceApis: { [_: InstanceId]: InstanceApi } = {} @@ -80,14 +66,11 @@ export const instanceService = mkSingleton( const retry = (interval = instanceApiCheckIntervalMs) => { maxTries-- if (maxTries <= 0) { - reject( - new Error( - `PocketBase instance failed to launch. Please check logs at ${APP_URL()}. [${id}:${subdomain}]. ${DOCS_URL( - `usage`, - `errors`, - )}`, - ), - ) + filter( + PocketHostFilter.Core_FailedToLaunchInstanceMessage, + `PocketBase instance failed to launch.`, + { instance }, + ).then((msg) => reject(new Error(msg))) return } dbg(`${maxTries} tries remaining. Retrying in ${interval}ms`) @@ -220,33 +203,10 @@ export const instanceService = mkSingleton( ) } - /* - Create serialized client communication functions to prevent race conditions - */ - const clientLimiter = new Bottleneck({ maxConcurrent: 1 }) - const updateInstance = clientLimiter.wrap( - (id: InstanceId, fields: Partial) => { - dbg(`Updating instance fields`, fields) - return client - .updateInstance(id, fields) - .then(() => { - dbg(`Updated instance fields`, fields) - }) - .catch((e) => { - dbg(`Error updating instance fields`, fields) - error(e) - }) - }, - ) - const updateInstanceStatus = (id: InstanceId, status: InstanceStatus) => - updateInstance(id, { status }) - /* Handle async setup */ ;(async () => { - const { version } = instance - /* Obtain empty port */ @@ -264,102 +224,87 @@ export const instanceService = mkSingleton( Create the user instance logger */ healthyGuard() - const userInstanceLogger = InstanceLogger(instance.id, `exec`) /* Start the instance */ dbg(`Starting instance`) healthyGuard() - updateInstanceStatus(instance.id, InstanceStatus.Starting) + action(PocketHostAction.Core_BeforeInstanceStarted, { instance }) shutdownManager.add(async () => { dbg(`Shutting down: set instance status: idle`) - updateInstanceStatus(id, InstanceStatus.Idle) + action(PocketHostAction.Core_BeforeInstanceStopped, { instance }) }) healthyGuard() /** Create spawn config */ - const spawnArgs: SpawnConfig = { - subdomain: instance.subdomain, - instanceId: instance.id, - port: newPort, - dev: instance.dev, - extraBinds: flatten([ - globSync(join(INSTANCE_APP_MIGRATIONS_DIR(), '*.js')).map( - (file) => - `${file}:${mkContainerHomePath( - `pb_migrations/${basename(file)}`, - )}:ro`, - ), - globSync(join(INSTANCE_APP_HOOK_DIR(), '*.js')).map( - (file) => - `${file}:${mkContainerHomePath( - `pb_hooks/${basename(file)}`, - )}:ro`, - ), - ]), - env: { - ...instance.secrets, - PH_APP_NAME: instance.subdomain, - PH_INSTANCE_URL: mkEdgeUrl(instance.subdomain), + const spawnArgs = await filter( + PocketHostFilter.Core_SpawnConfig, + { + subdomain: instance.subdomain, + instanceId: instance.id, + port: newPort, + dev: instance.dev, + extraBinds: flatten([ + globSync(join(INSTANCE_APP_MIGRATIONS_DIR(), '*.js')).map( + (file) => + `${file}:${mkContainerHomePath( + `pb_migrations/${basename(file)}`, + )}:ro`, + ), + globSync(join(INSTANCE_APP_HOOK_DIR(), '*.js')).map( + (file) => + `${file}:${mkContainerHomePath( + `pb_hooks/${basename(file)}`, + )}:ro`, + ), + ]), + env: { + ...instance.secrets, + PH_APP_NAME: instance.subdomain, + PH_INSTANCE_URL: mkEdgeUrl(instance.subdomain), + }, + version, }, - version, - } + { instance }, + ) - /** Sync admin account */ - if (instance.syncAdmin) { - const id = instance.uid - dbg(`Fetching token info for uid ${id}`) - const { email, tokenKey, passwordHash } = - await client.getUserTokenInfo({ id }) - dbg(`Token info is`, { email, tokenKey, passwordHash }) - spawnArgs.env!.ADMIN_SYNC = stringify({ - id, - email, - tokenKey, - passwordHash, - }) - } + registerAction( + PocketHostAction.Core_AfterInstanceStarted, + async ({ instance }) => {}, + ) + registerAction( + PocketHostAction.Core_AfterInstanceStopped, + async ({ instance }) => {}, + ) + await action(PocketHostAction.Core_StartInstance, { instance }) /* Spawn the child process */ const childProcess = await (async () => { try { + const url = await filter(PocketHostFilter.Core_LaunchInstance, '', { + instance, + }) const cp = await pbService.spawn(spawnArgs) return cp } catch (e) { warn(`Error spawning: ${e}`) userInstanceLogger.error(`Error spawning: ${e}`) - if (UPGRADE_MODE()) { - // Noop - } else { - updateInstance(instance.id, { - maintenance: true, - }) - } throw new Error( - `Could not launch container. Instance has been placed in maintenance mode. Please review your instance logs at https://app.pockethost.io/app/instances/${instance.id} or contact support at https://pockethost.io/support`, + await filter( + PocketHostFilter.Core_ErrorSpawningInstanceMessage, + `Could not launch instance.`, + { instance }, + ), ) } })() const { exitCode } = childProcess exitCode.then((code) => { info(`Processes exited with ${code}.`) - if (code !== 0 && !UPGRADE_MODE()) { - shutdownManager.add(async () => { - userInstanceLogger.error( - `Putting instance in maintenance mode because it shut down with return code ${code}. `, - ) - error( - `Putting instance in maintenance mode because it shut down with return code ${code}. `, - ) - updateInstance(instance.id, { - maintenance: true, - }) - }) - } setImmediate(() => { _safeShutdown().catch(error) }) @@ -413,7 +358,7 @@ export const instanceService = mkSingleton( dbg(`${internalUrl} is running`) status = InstanceApiStatus.Healthy healthyGuard() - updateInstanceStatus(instance.id, InstanceStatus.Running) + action(PocketHostAction.Core_AfterInstanceStarted, { instance }) })().catch((e) => { const detail = (() => { if (e instanceof ClientResponseError) { @@ -435,138 +380,23 @@ export const instanceService = mkSingleton( return api } - const getInstance = (() => { - const cache = mkInstanceCache(client.client) + registerFilter( + PocketHostFilter.Core_GetOrProvisionInstanceUrl, + async ({ req, res, instance }) => { + const logger = LoggerService().create(`InstanceRequest`) - return async (host: string) => { - if (cache.hasItem(host)) { - dbg(`cache hit ${host}`) - return cache.getItem(host) - } - dbg(`cache miss ${host}`) + const { dbg } = logger - { - dbg(`Trying to get instance by host: ${host}`) - const instance = await client - .getInstanceByCname(host) - - .catch((e: ClientResponseError) => { - if (e.status !== 404) { - throw new Error( - `Unexpected response ${stringify(e)} from mothership`, - ) - } - }) - if (instance) { - if (!instance.cname_active) { - throw new Error(`CNAME blocked.`) - } - dbg(`${host} is a cname`) - cache.setItem(instance) - return instance - } + const api = await getInstanceApi(instance) + const endRequest = api.startRequest() + res.on('close', endRequest) + if (req.closed) { + throw new Error(`Request already closed.`) } - const idOrSubdomain = host.replace(`.${EDGE_APEX_DOMAIN()}`, '') - { - dbg(`Trying to get instance by ID: ${idOrSubdomain}`) - const instance = await client - .getInstanceById(idOrSubdomain) - .catch((e: ClientResponseError) => { - if (e.status !== 404) { - throw new Error( - `Unexpected response ${stringify(e)} from mothership`, - ) - } - }) - if (instance) { - dbg(`${idOrSubdomain} is an instance ID`) - cache.setItem(instance) - return instance - } - } - { - dbg(`Trying to get instance by subdomain: ${idOrSubdomain}`) - const instance = await client - .getInstanceBySubdomain(idOrSubdomain) - .catch((e: ClientResponseError) => { - if (e.status !== 404) { - throw new Error( - `Unexpected response ${stringify(e)} from mothership`, - ) - } - }) - if (instance) { - dbg(`${idOrSubdomain} is a subdomain`) - cache.setItem(instance) - return instance - } - } - dbg(`${host} is none of: cname, id, subdomain`) - cache.blankItem(host) - } - })() - - ;(await proxyService()).use(async (req, res, next) => { - const logger = LoggerService().create(`InstanceRequest`) - - const { dbg } = logger - - const { host, proxy } = res.locals - - const instance = await getInstance(host) - if (!instance) { - res.status(404).end(`${host} not found`) - return - } - const owner = instance.expand.uid - if (!owner) { - throw new Error(`Instance owner is invalid`) - } - - /* - Suspension check - */ - dbg(`Checking for suspension`) - if (instance.suspension) { - throw new Error(instance.suspension) - } - - /* - Maintenance check - */ - dbg(`Checking for maintenance mode`) - if (instance.maintenance) { - throw new Error( - `This instance is in Maintenance Mode. See ${mkDocUrl( - `usage/maintenance`, - )} for more information.`, - ) - } - - /* - Owner check - */ - dbg(`Checking for verified account`) - if (!owner.verified) { - throw new Error(`Log in at ${mkAppUrl()} to verify your account.`) - } - - const api = await getInstanceApi(instance) - const endRequest = api.startRequest() - res.on('close', endRequest) - if (req.closed) { - throw new Error(`Request already closed.`) - } - - dbg( - `Forwarding proxy request for ${ - req.url - } to instance ${api.internalUrl()}`, - ) - - proxy.web(req, res, { target: api.internalUrl() }) - }) + return api.internalUrl() + }, + ) asyncExitHook(async () => { dbg(`Shutting down instance manager`) diff --git a/packages/pending/plugin-launcher-docker/src/index.ts b/packages/pending/plugin-launcher-docker/src/index.ts new file mode 100644 index 00000000..74ba1609 --- /dev/null +++ b/packages/pending/plugin-launcher-docker/src/index.ts @@ -0,0 +1,39 @@ +import devcert from 'devcert' +import { mkdirSync, writeFileSync } from 'fs' +import { join } from 'path' +import { + APEX_DOMAIN, + IS_DEV, + LoggerService, + PH_HOME, + PocketHostAction, + PocketHostPlugin, + Settings, + mkPath, +} from 'pockethost/core' + +const _HOME_DIR = + process.env.PH_FIREWALL_HOME || + join(PH_HOME(), `plugin-docker-launch-provider`) + +const TLS_PFX = `tls` + +const settings = Settings({ + PH_DOCKER_LAUNCH_PROVIDER_HOME: mkPath(_HOME_DIR, { create: true }), +}) + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + const logger = LoggerService().create('FirewallPlugin') + const { dbg } = logger + + registerAction(PocketHostAction.Core_Init, async () => { + if (IS_DEV()) { + mkdirSync(_HOME_DIR, { recursive: true }) + const { key, cert } = await devcert.certificateFor(APEX_DOMAIN(), {}) + writeFileSync(SSL_KEY(), key) + writeFileSync(SSL_CERT(), cert) + } + }) +} + +export default plugin diff --git a/packages/pending/plugin-launcher-docker/tsconfig.json b/packages/pending/plugin-launcher-docker/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-launcher-docker/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/pending/plugin-maildev/.npmignore b/packages/pending/plugin-maildev/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-maildev/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-maildev/package.json b/packages/pending/plugin-maildev/package.json new file mode 100644 index 00000000..935fa2a0 --- /dev/null +++ b/packages/pending/plugin-maildev/package.json @@ -0,0 +1,24 @@ +{ + "name": "@pockethost/plugin-maildev", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/maildev": "^0.0.7", + "@types/node": "^20.8.10", + "maildev": "^2.1.0", + "pockethost": "workspace:^" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pending/plugin-maildev/src/index.ts b/packages/pending/plugin-maildev/src/index.ts new file mode 100644 index 00000000..67ee6b29 --- /dev/null +++ b/packages/pending/plugin-maildev/src/index.ts @@ -0,0 +1,48 @@ +import MailDev from 'maildev' +import { + APEX_DOMAIN, + Command, + IS_DEV, + LoggerService, + PocketHostFilter, + PocketHostPlugin, +} from 'pockethost/core' + +const maildev = new MailDev({}) + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + if (!IS_DEV()) return + const logger = LoggerService().create('MailDevPlugin') + const { dbg } = logger + + registerFilter(PocketHostFilter.Firewall_HostnameRoutes, async (routes) => { + return { + ...routes, + [`mail.${APEX_DOMAIN()}`]: `http://localhost:${1080}`, + } + }) + + registerFilter(PocketHostFilter.Core_CliCommands, async (commands) => { + return [...commands, MailDevCommand()] + }) + + const MailDevCommand = () => { + const cmd = new Command(`maildev`) + .description(`maildev commands`) + .addCommand( + new Command(`serve`) + .description(`Run a local mail server for development purposes`) + .action(async (options) => { + maildev.listen() + + maildev.on('new', function (email) { + dbg(email) + }) + }), + ) + + return cmd + } +} + +export default plugin diff --git a/packages/pending/plugin-maildev/tsconfig.json b/packages/pending/plugin-maildev/tsconfig.json new file mode 100644 index 00000000..0f098a71 --- /dev/null +++ b/packages/pending/plugin-maildev/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"], + "exclude": ["./src/mothership-app/**/*", "./src/instance-app/**/*"] +} diff --git a/packages/pending/plugin-mothership/.npmignore b/packages/pending/plugin-mothership/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-mothership/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-mothership/package.json b/packages/pending/plugin-mothership/package.json new file mode 100644 index 00000000..6d7956b5 --- /dev/null +++ b/packages/pending/plugin-mothership/package.json @@ -0,0 +1,24 @@ +{ + "name": "@pockethost/plugin-mothership", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "copyfiles": "^2.4.1", + "knex": "^2.5.1", + "pockethost": "workspace:^" + }, + "@types/node": "^20.8.10", + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pockethost/src/services/MothershipAdminClientService/InstanceMIxin.ts b/packages/pending/plugin-mothership/src/MothershipAdminClientService/InstanceMIxin.ts similarity index 98% rename from packages/pockethost/src/services/MothershipAdminClientService/InstanceMIxin.ts rename to packages/pending/plugin-mothership/src/MothershipAdminClientService/InstanceMIxin.ts index ce63c357..5bd1b4d5 100644 --- a/packages/pockethost/src/services/MothershipAdminClientService/InstanceMIxin.ts +++ b/packages/pending/plugin-mothership/src/MothershipAdminClientService/InstanceMIxin.ts @@ -1,4 +1,3 @@ -import { MixinContext } from '.' import { INSTANCE_COLLECTION, InstanceFields, @@ -6,7 +5,8 @@ import { InstanceId, InstanceStatus, WithUser, -} from '../../../core' +} from 'pockethost/core' +import { MixinContext } from '.' export type InstanceApi = ReturnType diff --git a/packages/pockethost/src/services/MothershipAdminClientService/createAdminPbClient.ts b/packages/pending/plugin-mothership/src/MothershipAdminClientService/createAdminPbClient.ts similarity index 98% rename from packages/pockethost/src/services/MothershipAdminClientService/createAdminPbClient.ts rename to packages/pending/plugin-mothership/src/MothershipAdminClientService/createAdminPbClient.ts index adebc6f4..d6e502c8 100644 --- a/packages/pockethost/src/services/MothershipAdminClientService/createAdminPbClient.ts +++ b/packages/pending/plugin-mothership/src/MothershipAdminClientService/createAdminPbClient.ts @@ -1,4 +1,3 @@ -import { MixinContext } from '.' import { GetUserTokenPayload, GetUserTokenPayloadSchema, @@ -9,7 +8,8 @@ import { RestMethods, createRestHelper, stringify, -} from '../../../core' +} from 'pockethost/core' +import { MixinContext } from '.' import { createInstanceMixin } from './InstanceMIxin' export type PocketbaseClientApi = ReturnType diff --git a/packages/pockethost/src/services/MothershipAdminClientService/index.ts b/packages/pending/plugin-mothership/src/MothershipAdminClientService/index.ts similarity index 96% rename from packages/pockethost/src/services/MothershipAdminClientService/index.ts rename to packages/pending/plugin-mothership/src/MothershipAdminClientService/index.ts index 49db74f8..9ace0d24 100644 --- a/packages/pockethost/src/services/MothershipAdminClientService/index.ts +++ b/packages/pending/plugin-mothership/src/MothershipAdminClientService/index.ts @@ -1,13 +1,15 @@ import { Logger, LoggerService, - MOTHERSHIP_ADMIN_PASSWORD, - MOTHERSHIP_ADMIN_USERNAME, - MOTHERSHIP_URL, PocketBase, mergeConfig, mkSingleton, -} from '../../../core' +} from 'pockethost/core' +import { + MOTHERSHIP_ADMIN_PASSWORD, + MOTHERSHIP_ADMIN_USERNAME, + MOTHERSHIP_URL, +} from '../env' import { createAdminPbClient } from './createAdminPbClient' export type ClientServiceConfig = { diff --git a/packages/pockethost/src/cli/commands/SendMailCommand/SqliteService/index.ts b/packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/SqliteService/index.ts similarity index 98% rename from packages/pockethost/src/cli/commands/SendMailCommand/SqliteService/index.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/SqliteService/index.ts index 46e0a79c..c591b944 100644 --- a/packages/pockethost/src/cli/commands/SendMailCommand/SqliteService/index.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/SqliteService/index.ts @@ -5,7 +5,7 @@ import { mkSingleton, serialAsyncExecutionGuard, SingletonBaseConfig, -} from '../../../../../core' +} from 'pockethost/core' export type SqliteServiceApi = ReturnType export type SqliteServiceConfig = SingletonBaseConfig & {} diff --git a/packages/pockethost/src/cli/commands/SendMailCommand/index.ts b/packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/index.ts similarity index 83% rename from packages/pockethost/src/cli/commands/SendMailCommand/index.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/index.ts index 132fecea..f7077842 100644 --- a/packages/pockethost/src/cli/commands/SendMailCommand/index.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/index.ts @@ -1,5 +1,4 @@ -import { Command } from 'commander' -import { LoggerService } from '../../../../core' +import { Command, LoggerService } from 'pockethost/core' import { sendMail } from './sendmail' type Options = { diff --git a/packages/pockethost/src/cli/commands/SendMailCommand/sendmail.ts b/packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/sendmail.ts similarity index 94% rename from packages/pockethost/src/cli/commands/SendMailCommand/sendmail.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/sendmail.ts index 5914f5b1..9b5c64a8 100644 --- a/packages/pockethost/src/cli/commands/SendMailCommand/sendmail.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/SendMailCommand/sendmail.ts @@ -1,15 +1,13 @@ -import { map } from '@s-libs/micro-dash' import Bottleneck from 'bottleneck' -import { InvalidArgumentError, program } from 'commander' -import { LoggerService, PocketBase, UserFields } from '../../../common' +import { LoggerService, PocketBase, UserFields } from 'pockethost/common' +import { InvalidArgumentError, TEST_EMAIL, map, program } from 'pockethost/core' import { MOTHERSHIP_ADMIN_PASSWORD, MOTHERSHIP_ADMIN_USERNAME, MOTHERSHIP_DATA_DB, MOTHERSHIP_INTERNAL_URL, MOTHERSHIP_URL, - TEST_EMAIL, -} from '../../../core' +} from '../../env' import { SqliteService } from './SqliteService' const TBL_SENT_MESSAGES = `sent_messages` diff --git a/packages/pockethost/src/cli/commands/MothershipCommand/ServeCommand/index.ts b/packages/pending/plugin-mothership/src/MothershipCommand/ServeCommand/index.ts similarity index 90% rename from packages/pockethost/src/cli/commands/MothershipCommand/ServeCommand/index.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/ServeCommand/index.ts index 419487ce..edc4a512 100644 --- a/packages/pockethost/src/cli/commands/MothershipCommand/ServeCommand/index.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/ServeCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { mothership } from './mothership' type Options = { diff --git a/packages/pockethost/src/cli/commands/MothershipCommand/ServeCommand/mothership.ts b/packages/pending/plugin-mothership/src/MothershipCommand/ServeCommand/mothership.ts similarity index 92% rename from packages/pockethost/src/cli/commands/MothershipCommand/ServeCommand/mothership.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/ServeCommand/mothership.ts index 4647630a..29c36644 100644 --- a/packages/pockethost/src/cli/commands/MothershipCommand/ServeCommand/mothership.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/ServeCommand/mothership.ts @@ -1,19 +1,22 @@ import copyfiles from 'copyfiles' -import { GobotOptions, gobot } from 'gobot' -import { rimraf } from 'rimraf' import { DEBUG, + GobotOptions, IS_DEV, LS_WEBHOOK_SECRET, LoggerService, + gobot, + mkContainerHomePath, + rimraf, +} from 'pockethost/core' +import { PortService } from 'pockethost/src/services' +import { MOTHERSHIP_DATA_ROOT, MOTHERSHIP_HOOKS_DIR, MOTHERSHIP_MIGRATIONS_DIR, MOTHERSHIP_PORT, MOTHERSHIP_SEMVER, - mkContainerHomePath, -} from '../../../../../core' -import { PortService } from '../../../../services' +} from '../../env' import { freshenPocketbaseVersions } from '../freshenPocketbaseVersions' export type MothershipConfig = { isolate: boolean } diff --git a/packages/pockethost/src/cli/commands/MothershipCommand/UpdateCommand/index.ts b/packages/pending/plugin-mothership/src/MothershipCommand/UpdateCommand/index.ts similarity index 89% rename from packages/pockethost/src/cli/commands/MothershipCommand/UpdateCommand/index.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/UpdateCommand/index.ts index ffc824f9..6df4e464 100644 --- a/packages/pockethost/src/cli/commands/MothershipCommand/UpdateCommand/index.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/UpdateCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { freshenPocketbaseVersions } from '../freshenPocketbaseVersions' type Options = {} diff --git a/packages/pockethost/src/cli/commands/MothershipCommand/freshenPocketbaseVersions.ts b/packages/pending/plugin-mothership/src/MothershipCommand/freshenPocketbaseVersions.ts similarity index 95% rename from packages/pockethost/src/cli/commands/MothershipCommand/freshenPocketbaseVersions.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/freshenPocketbaseVersions.ts index 2ef64524..d4367d25 100644 --- a/packages/pockethost/src/cli/commands/MothershipCommand/freshenPocketbaseVersions.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/freshenPocketbaseVersions.ts @@ -1,6 +1,6 @@ import { writeFileSync } from 'fs' -import { gobot } from 'gobot' -import { MOTHERSHIP_DATA_ROOT, stringify } from '../../../../core' +import { gobot, stringify } from 'pockethost/core' +import { MOTHERSHIP_DATA_ROOT } from '../env' function compareSemVer(a: string, b: string): number { // Consider wildcards as higher than any version number, hence represented by a large number for comparison diff --git a/packages/pockethost/src/cli/commands/MothershipCommand/index.ts b/packages/pending/plugin-mothership/src/MothershipCommand/index.ts similarity index 72% rename from packages/pockethost/src/cli/commands/MothershipCommand/index.ts rename to packages/pending/plugin-mothership/src/MothershipCommand/index.ts index f80f18ae..c6e270e8 100644 --- a/packages/pockethost/src/cli/commands/MothershipCommand/index.ts +++ b/packages/pending/plugin-mothership/src/MothershipCommand/index.ts @@ -1,4 +1,5 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' +import { SendMailCommand } from './SendMailCommand' import { ServeCommand } from './ServeCommand' import { UpdateCommand } from './UpdateCommand' @@ -11,5 +12,6 @@ export const MothershipCommand = () => { .description(`Mothership commands`) .addCommand(ServeCommand()) .addCommand(UpdateCommand()) + .addCommand(SendMailCommand()) return cmd } diff --git a/packages/pending/plugin-mothership/src/env.ts b/packages/pending/plugin-mothership/src/env.ts new file mode 100644 index 00000000..962df412 --- /dev/null +++ b/packages/pending/plugin-mothership/src/env.ts @@ -0,0 +1,85 @@ +import { dirname, join } from 'path' +import { + APEX_DOMAIN, + HTTP_PROTOCOL, + INSTANCE_DATA_ROOT, + Settings, + mkNumber, + mkPath, + mkString, +} from 'pockethost/core' +import { fileURLToPath } from 'url' + +const __dirname = dirname(fileURLToPath(import.meta.url)) + +export const _MOTHERSHIP_NAME = + process.env.PH_MOTHERSHIP_NAME || 'pockethost-central' + +export const _MOTHERSHIP_APP_ROOT = (...paths: string[]) => + join( + process.env.PH_MOTHERSHIP_APP_ROOT || join(__dirname, 'mothership-app'), + ...paths, + ) + +export const _INSTANCE_APP_ROOT = (...paths: string[]) => + join( + process.env.PH_INSTANCE_APP_ROOT || join(__dirname, 'instance-app'), + ...paths, + ) + +const settings = Settings({ + PH_MOTHERSHIP_URL: mkString( + `${HTTP_PROTOCOL()}//${_MOTHERSHIP_NAME}.${APEX_DOMAIN()}`, + ), + PH_MOTHERSHIP_NAME: mkString(_MOTHERSHIP_NAME), + PH_MOTHERSHIP_INTERNAL_HOST: mkString(`localhost`), + PH_MOTHERSHIP_ADMIN_USERNAME: mkString(), + PH_MOTHERSHIP_ADMIN_PASSWORD: mkString(), + PH_MOTHERSHIP_APP_ROOT: mkString(_MOTHERSHIP_APP_ROOT()), + PH_MOTHERSHIP_MIGRATIONS_DIR: mkPath(_MOTHERSHIP_APP_ROOT(`migrations`)), + PH_MOTHERSHIP_HOOKS_DIR: mkPath(_MOTHERSHIP_APP_ROOT(`pb_hooks`, `src`)), + PH_MOTHERSHIP_APP_DIR: mkPath(_MOTHERSHIP_APP_ROOT(`ph_app`), { + required: false, + }), + PH_MOTHERSHIP_SEMVER: mkString('*'), + PH_MOTHERSHIP_PORT: mkNumber(8091), + + PH_MOTHERSHIP_INSTANCE_APP_ROOT: mkString(_INSTANCE_APP_ROOT()), + PH_MOTHERSHIP_INSTANCE_APP_HOOKS_DIR: mkPath(_INSTANCE_APP_ROOT(`pb_hooks`), { + create: true, + }), + PH_MOTHERSHIP_INSTANCE_APP_MIGRATIONS_DIR: mkPath( + _INSTANCE_APP_ROOT(`migrations`), + { + create: true, + }, + ), +}) + +export const MOTHERSHIP_URL = () => settings.PH_MOTHERSHIP_URL +export const MOTHERSHIP_INTERNAL_HOST = () => + settings.PH_MOTHERSHIP_INTERNAL_HOST +export const MOTHERSHIP_NAME = () => settings.PH_MOTHERSHIP_NAME +export const MOTHERSHIP_ADMIN_USERNAME = () => + settings.PH_MOTHERSHIP_ADMIN_USERNAME +export const MOTHERSHIP_ADMIN_PASSWORD = () => + settings.PH_MOTHERSHIP_ADMIN_PASSWORD +export const MOTHERSHIP_MIGRATIONS_DIR = (...paths: string[]) => + join(settings.PH_MOTHERSHIP_MIGRATIONS_DIR, ...paths) +export const MOTHERSHIP_HOOKS_DIR = (...paths: string[]) => + join(settings.PH_MOTHERSHIP_HOOKS_DIR, ...paths) +export const MOTHERSHIP_APP_DIR = () => settings.PH_MOTHERSHIP_APP_DIR +export const MOTHERSHIP_SEMVER = () => settings.PH_MOTHERSHIP_SEMVER +export const MOTHERSHIP_PORT = () => settings.PH_MOTHERSHIP_PORT + +export const MOTHERSHIP_DATA_ROOT = (...paths: string[]) => + join(INSTANCE_DATA_ROOT(MOTHERSHIP_NAME()), ...paths) +export const MOTHERSHIP_DATA_DB = () => + join(MOTHERSHIP_DATA_ROOT(), `pb_data`, `data.db`) +export const MOTHERSHIP_INTERNAL_URL = (path = '') => + `http://${MOTHERSHIP_INTERNAL_HOST()}:${MOTHERSHIP_PORT()}${path}` + +export const INSTANCE_APP_HOOK_DIR = () => + settings.PH_MOTHERSHIP_INSTANCE_APP_HOOKS_DIR +export const INSTANCE_APP_MIGRATIONS_DIR = () => + settings.PH_MOTHERSHIP_INSTANCE_APP_MIGRATIONS_DIR diff --git a/packages/pending/plugin-mothership/src/index.ts b/packages/pending/plugin-mothership/src/index.ts new file mode 100644 index 00000000..5f4a363a --- /dev/null +++ b/packages/pending/plugin-mothership/src/index.ts @@ -0,0 +1,295 @@ +import Bottleneck from 'bottleneck' +import { + APEX_DOMAIN, + ClientResponseError, + Command, + EDGE_APEX_DOMAIN, + InstanceFields, + InstanceId, + InstanceStatus, + LoggerService, + PocketBase, + PocketHostAction, + PocketHostFilter, + PocketHostPlugin, + SpawnConfig, + filter, + stringify, + tryFetch, +} from 'pockethost/core' +import { MothershipAdminClientService } from './MothershipAdminClientService' +import { MothershipCommand } from './MothershipCommand' +import { + MOTHERSHIP_ADMIN_PASSWORD, + MOTHERSHIP_ADMIN_USERNAME, + MOTHERSHIP_INTERNAL_URL, + MOTHERSHIP_NAME, + MOTHERSHIP_PORT, + MOTHERSHIP_URL, +} from './env' +import { mkInstanceCache } from './mkInstanceCache' + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + const logger = LoggerService().create(`MothershipPlugin`) + const { dbg, error } = logger + + registerFilter( + PocketHostFilter.Core_CliCommands, + async (commands: Command[]) => { + return [...commands, MothershipCommand()] + }, + ) + + registerAction(PocketHostAction.Core_Init, async () => { + await MothershipAdminClientService({ + url: MOTHERSHIP_INTERNAL_URL(), + username: MOTHERSHIP_ADMIN_USERNAME(), + password: MOTHERSHIP_ADMIN_PASSWORD(), + }) + }) + + registerAction(PocketHostAction.Core_Cli_Before_ServeCommand, async () => { + await tryFetch(`${MOTHERSHIP_INTERNAL_URL(`/api/health`)}`, {}) + }) + + registerAction( + PocketHostAction.Core_BeforeInstanceStarted, + async ({ instance }) => + updateInstanceStatus(instance.id, InstanceStatus.Starting), + ) + + registerAction( + PocketHostAction.Core_BeforeInstanceStopped, + async ({ instance }) => + updateInstanceStatus(instance.id, InstanceStatus.Idle), + ) + + registerFilter( + PocketHostFilter.Core_SpawnConfig, + async (spawnArgs: SpawnConfig, { instance }) => { + /** Sync admin account */ + if (!instance.syncAdmin) return spawnArgs + const id = instance.uid + dbg(`Fetching token info for uid ${id}`) + const { email, tokenKey, passwordHash } = await client.getUserTokenInfo({ + id, + }) + dbg(`Token info is`, { email, tokenKey, passwordHash }) + spawnArgs.env!.ADMIN_SYNC = stringify({ + id, + email, + tokenKey, + passwordHash, + }) + return spawnArgs + }, + ) + + registerAction(PocketHostAction.Core_Log, async ({ instance }) => { + updateInstanceStatus(instance.id, InstanceStatus.Running) + }) + + registerFilter( + PocketHostFilter.Core_GetInstance, + async (instance: InstanceFields | undefined, { host }) => { + if (cache.hasItem(host)) { + dbg(`cache hit ${host}`) + return cache.getItem(host) + } + dbg(`cache miss ${host}`) + + { + dbg(`Trying to get instance by host: ${host}`) + const instance = await client + .getInstanceByCname(host) + + .catch((e: ClientResponseError) => { + if (e.status !== 404) { + throw new Error( + `Unexpected response ${stringify(e)} from mothership`, + ) + } + }) + if (instance) { + if (!instance.cname_active) { + throw new Error(`CNAME blocked.`) + } + dbg(`${host} is a cname`) + cache.setItem(instance) + return instance + } + } + + const idOrSubdomain = host.replace(`.${EDGE_APEX_DOMAIN()}`, '') + { + dbg(`Trying to get instance by ID: ${idOrSubdomain}`) + const instance = await client + .getInstanceById(idOrSubdomain) + .catch((e: ClientResponseError) => { + if (e.status !== 404) { + throw new Error( + `Unexpected response ${stringify(e)} from mothership`, + ) + } + }) + if (instance) { + dbg(`${idOrSubdomain} is an instance ID`) + cache.setItem(instance) + return instance + } + } + { + dbg(`Trying to get instance by subdomain: ${idOrSubdomain}`) + const instance = await client + .getInstanceBySubdomain(idOrSubdomain) + .catch((e: ClientResponseError) => { + if (e.status !== 404) { + throw new Error( + `Unexpected response ${stringify(e)} from mothership`, + ) + } + }) + if (instance) { + dbg(`${idOrSubdomain} is a subdomain`) + cache.setItem(instance) + return instance + } + } + dbg(`${host} is none of: cname, id, subdomain`) + cache.blankItem(host) + }, + ) + + registerFilter( + PocketHostFilter.Core_AuthenticateRequest, + async (isAuthenticated, { req, auth, instanceId }) => { + /** Validate auth token */ + const client = new PocketBase(MOTHERSHIP_URL()) + client.authStore.loadFromCookie(auth) + dbg(`Cookie here is`, client.authStore.isValid) + await client.collection('users').authRefresh() + if (!client.authStore.isValid) { + throw new Error(`Cookie is invalid her`) + } + const user = client.authStore.model + if (!user) { + throw new Error(`Valid user expected here`) + } + dbg(`Cookie auth passed)`) + + /** Validate instance and ownership */ + dbg(`Got a log request for instance ID ${instanceId}`) + const instance = await client + .collection('instances') + .getOne(instanceId) + if (!instance) { + throw new Error( + `instanceId ${instanceId} not found for user ${user.id}`, + ) + } + dbg(`Instance is `, instance) + }, + ) + + registerAction( + PocketHostAction.Core_AfterInstanceFound, + async ({ instance }) => { + const owner = instance.expand.uid + if (!owner) { + throw new Error(`Instance owner is invalid`) + } + + /* + Suspension check + */ + dbg(`Checking for suspension`) + if (instance.suspension) { + throw new Error(instance.suspension) + } + + /* + Maintenance check + */ + dbg(`Checking for maintenance mode`) + if (instance.maintenance) { + throw new Error( + await filter( + PocketHostFilter.Mothership_MaintenanceMode_Message, + `This instance is in Maintenance Mode.`, + { instance }, + ), + ) + } + + /* + Owner check + */ + dbg(`Checking for verified account`) + if (!owner.verified) { + throw new Error( + await filter( + PocketHostFilter.Mothership_UnverifiedAccountError_Message, + `Owner account not verified`, + ), + ) + } + }, + ) + + registerFilter(PocketHostFilter.Mothership_PublicUrl, async () => + MOTHERSHIP_URL(), + ) + + registerFilter(PocketHostFilter.Firewall_HostnameRoutes, async (routes) => { + return { + ...routes, + [`${MOTHERSHIP_NAME()}.${APEX_DOMAIN()}`]: `http://localhost:${MOTHERSHIP_PORT()}`, + } + }) + + registerFilter(PocketHostFilter.EdgeSelfCheck_Checks, async (checks) => { + return [ + ...checks, + { + name: `mothership`, + priority: 9, + emoji: `:flying_saucer:`, + url: MOTHERSHIP_URL(), + }, + ] + }) + + const { client } = await MothershipAdminClientService() + const cache = mkInstanceCache(client.client) + + /* + Create serialized client communication functions to prevent race conditions + */ + const clientLimiter = (() => { + const limiters: { [key: string]: Bottleneck } = {} + return (id: InstanceId) => { + if (!limiters[id]) { + limiters[id] = new Bottleneck({ maxConcurrent: 1 }) + } + return limiters[id]! + } + })() + + const updateInstance = (id: InstanceId, fields: Partial) => + clientLimiter(id).schedule(() => { + dbg(`Updating instance fields`, fields) + return client + .updateInstance(id, fields) + .then(() => { + dbg(`Updated instance fields`, fields) + }) + .catch((e) => { + dbg(`Error updating instance fields`, fields) + error(e) + }) + }) + const updateInstanceStatus = (id: InstanceId, status: InstanceStatus) => + updateInstance(id, { status }) +} + +export default plugin diff --git a/packages/pockethost/src/instance-app/migrations/1699198734_pockethost_defaults.js b/packages/pending/plugin-mothership/src/instance-app/migrations/1699198734_pockethost_defaults.js similarity index 100% rename from packages/pockethost/src/instance-app/migrations/1699198734_pockethost_defaults.js rename to packages/pending/plugin-mothership/src/instance-app/migrations/1699198734_pockethost_defaults.js diff --git a/packages/pockethost/src/instance-app/pb_hooks/_ph_admin_sync.pb.js b/packages/pending/plugin-mothership/src/instance-app/pb_hooks/_ph_admin_sync.pb.js similarity index 100% rename from packages/pockethost/src/instance-app/pb_hooks/_ph_admin_sync.pb.js rename to packages/pending/plugin-mothership/src/instance-app/pb_hooks/_ph_admin_sync.pb.js diff --git a/packages/pockethost/src/instance-app/pb_hooks/_ph_lib.js b/packages/pending/plugin-mothership/src/instance-app/pb_hooks/_ph_lib.js similarity index 100% rename from packages/pockethost/src/instance-app/pb_hooks/_ph_lib.js rename to packages/pending/plugin-mothership/src/instance-app/pb_hooks/_ph_lib.js diff --git a/packages/pockethost/src/instance-app/tsconfig.json b/packages/pending/plugin-mothership/src/instance-app/tsconfig.json similarity index 100% rename from packages/pockethost/src/instance-app/tsconfig.json rename to packages/pending/plugin-mothership/src/instance-app/tsconfig.json diff --git a/packages/pockethost/src/instance-app/types/goja.d.ts b/packages/pending/plugin-mothership/src/instance-app/types/goja.d.ts similarity index 100% rename from packages/pockethost/src/instance-app/types/goja.d.ts rename to packages/pending/plugin-mothership/src/instance-app/types/goja.d.ts diff --git a/packages/pockethost/src/instance-app/types/lib.d.ts b/packages/pending/plugin-mothership/src/instance-app/types/lib.d.ts similarity index 100% rename from packages/pockethost/src/instance-app/types/lib.d.ts rename to packages/pending/plugin-mothership/src/instance-app/types/lib.d.ts diff --git a/packages/pockethost/src/instance-app/types/types.d.ts b/packages/pending/plugin-mothership/src/instance-app/types/types.d.ts similarity index 100% rename from packages/pockethost/src/instance-app/types/types.d.ts rename to packages/pending/plugin-mothership/src/instance-app/types/types.d.ts diff --git a/packages/pockethost/src/services/InstanceService/mkInstanceCache.ts b/packages/pending/plugin-mothership/src/mkInstanceCache.ts similarity index 96% rename from packages/pockethost/src/services/InstanceService/mkInstanceCache.ts rename to packages/pending/plugin-mothership/src/mkInstanceCache.ts index 768e0a9a..e1a8dbe6 100644 --- a/packages/pockethost/src/services/InstanceService/mkInstanceCache.ts +++ b/packages/pending/plugin-mothership/src/mkInstanceCache.ts @@ -1,4 +1,3 @@ -import { forEach } from '@s-libs/micro-dash' import { EDGE_APEX_DOMAIN, INSTANCE_COLLECTION, @@ -8,7 +7,8 @@ import { PocketBase, UserFields, UserId, -} from '../../../core' + forEach, +} from 'pockethost/core' export const mkInstanceCache = (client: PocketBase) => { const { dbg } = LoggerService().create(`InstanceCache`) diff --git a/packages/pockethost/src/mothership-app/migrations/1705062576_collections_snapshot.js b/packages/pending/plugin-mothership/src/mothership-app/migrations/1705062576_collections_snapshot.js similarity index 100% rename from packages/pockethost/src/mothership-app/migrations/1705062576_collections_snapshot.js rename to packages/pending/plugin-mothership/src/mothership-app/migrations/1705062576_collections_snapshot.js diff --git a/packages/pockethost/src/mothership-app/migrations/1705083826_updated_stats.js b/packages/pending/plugin-mothership/src/mothership-app/migrations/1705083826_updated_stats.js similarity index 100% rename from packages/pockethost/src/mothership-app/migrations/1705083826_updated_stats.js rename to packages/pending/plugin-mothership/src/mothership-app/migrations/1705083826_updated_stats.js diff --git a/packages/pockethost/src/mothership-app/migrations/1706060446_updated_instances.js b/packages/pending/plugin-mothership/src/mothership-app/migrations/1706060446_updated_instances.js similarity index 100% rename from packages/pockethost/src/mothership-app/migrations/1706060446_updated_instances.js rename to packages/pending/plugin-mothership/src/mothership-app/migrations/1706060446_updated_instances.js diff --git a/packages/pockethost/src/mothership-app/migrations/1716628803_updated_instances.js b/packages/pending/plugin-mothership/src/mothership-app/migrations/1716628803_updated_instances.js similarity index 100% rename from packages/pockethost/src/mothership-app/migrations/1716628803_updated_instances.js rename to packages/pending/plugin-mothership/src/mothership-app/migrations/1716628803_updated_instances.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-create.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-create.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-create.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-create.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-delete.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-delete.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-delete.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-delete.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-migrate-versions.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-migrate-versions.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-migrate-versions.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-migrate-versions.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-notify-discord-after-create.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-notify-discord-after-create.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-notify-discord-after-create.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-notify-discord-after-create.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-notify-on-maintenance-mode.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-notify-on-maintenance-mode.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-notify-on-maintenance-mode.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-notify-on-maintenance-mode.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-reset-idle.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-reset-idle.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-reset-idle.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-reset-idle.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-update.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-update.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-update.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-update.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-validate-before-create.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-validate-before-create.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-validate-before-create.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-validate-before-create.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/instances-validate-before-update.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-validate-before-update.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/instances-validate-before-update.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/instances-validate-before-update.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/lib.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/lib.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/lib.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/lib.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/ls.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/ls.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/ls.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/ls.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/mail.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/mail.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/mail.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/mail.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/notifications.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/notifications.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/notifications.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/notifications.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/random-words.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/random-words.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/random-words.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/random-words.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/signup.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/signup.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/signup.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/signup.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/sns.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/sns.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/sns.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/sns.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/unsubscribe.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/unsubscribe.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/unsubscribe.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/unsubscribe.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/user-token.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/user-token.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/user-token.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/user-token.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/user-welcome-msg.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/user-welcome-msg.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/user-welcome-msg.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/user-welcome-msg.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/versions-route.pb.js b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/versions-route.pb.js similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/versions-route.pb.js rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/versions-route.pb.js diff --git a/packages/pockethost/src/mothership-app/pb_hooks/src/versions.cjs b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/versions.cjs similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/src/versions.cjs rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/src/versions.cjs diff --git a/packages/pockethost/src/mothership-app/pb_hooks/types/global.d.ts b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/global.d.ts similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/types/global.d.ts rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/global.d.ts diff --git a/packages/pockethost/src/mothership-app/pb_hooks/types/goja.d.ts b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/goja.d.ts similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/types/goja.d.ts rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/goja.d.ts diff --git a/packages/pockethost/src/mothership-app/pb_hooks/types/lemon.d.ts b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/lemon.d.ts similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/types/lemon.d.ts rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/lemon.d.ts diff --git a/packages/pockethost/src/mothership-app/pb_hooks/types/lib.d.ts b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/lib.d.ts similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/types/lib.d.ts rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/lib.d.ts diff --git a/packages/pockethost/src/mothership-app/pb_hooks/types/types.d.ts b/packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/types.d.ts similarity index 100% rename from packages/pockethost/src/mothership-app/pb_hooks/types/types.d.ts rename to packages/pending/plugin-mothership/src/mothership-app/pb_hooks/types/types.d.ts diff --git a/packages/pockethost/src/mothership-app/ph_app/index.js b/packages/pending/plugin-mothership/src/mothership-app/ph_app/index.js similarity index 100% rename from packages/pockethost/src/mothership-app/ph_app/index.js rename to packages/pending/plugin-mothership/src/mothership-app/ph_app/index.js diff --git a/packages/pockethost/src/mothership-app/ph_app/package-lock.json b/packages/pending/plugin-mothership/src/mothership-app/ph_app/package-lock.json similarity index 100% rename from packages/pockethost/src/mothership-app/ph_app/package-lock.json rename to packages/pending/plugin-mothership/src/mothership-app/ph_app/package-lock.json diff --git a/packages/pockethost/src/mothership-app/ph_app/package.json b/packages/pending/plugin-mothership/src/mothership-app/ph_app/package.json similarity index 100% rename from packages/pockethost/src/mothership-app/ph_app/package.json rename to packages/pending/plugin-mothership/src/mothership-app/ph_app/package.json diff --git a/packages/pending/plugin-mothership/tsconfig.json b/packages/pending/plugin-mothership/tsconfig.json new file mode 100644 index 00000000..b841064d --- /dev/null +++ b/packages/pending/plugin-mothership/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"], + "exclude": ["./src/mothership-app/**/*"] +} diff --git a/packages/pending/plugin-pockethost.io/.npmignore b/packages/pending/plugin-pockethost.io/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-pockethost.io/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-pockethost.io/package.json b/packages/pending/plugin-pockethost.io/package.json new file mode 100644 index 00000000..678e97dd --- /dev/null +++ b/packages/pending/plugin-pockethost.io/package.json @@ -0,0 +1,21 @@ +{ + "name": "@pockethost/plugin-pockethost.io", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "typescript": "^5.4.5" + }, + "dependencies": { + "pockethost": "workspace:^" + } +} diff --git a/packages/pending/plugin-pockethost.io/src/index.ts b/packages/pending/plugin-pockethost.io/src/index.ts new file mode 100644 index 00000000..58bf9869 --- /dev/null +++ b/packages/pending/plugin-pockethost.io/src/index.ts @@ -0,0 +1,78 @@ +import { join } from 'path' +import { + APEX_DOMAIN, + HTTP_PROTOCOL, + IS_DEV, + PocketHostFilter, + PocketHostPlugin, + Settings, + mkString, +} from 'pockethost/core' + +export const _APP_NAME = process.env.PH_APP_NAME || 'app' + +const settings = Settings({ + PH_APP_NAME: mkString(_APP_NAME), + PH_APP_URL: mkString(`${HTTP_PROTOCOL()}//${_APP_NAME}.${APEX_DOMAIN()}`), + PH_BLOG_URL: mkString(`${HTTP_PROTOCOL}//${APEX_DOMAIN()}`), +}) + +export const APP_URL = () => settings.PH_APP_URL +export const APP_NAME = () => settings.PH_APP_NAME +export const BLOG_URL = (...path: string[]) => + join(settings.PH_BLOG_URL, ...path) +export const DOCS_URL = (...path: string[]) => BLOG_URL(`docs`, ...path) + +export const mkAppUrl = (path = '') => `${APP_URL()}${path}` +export const mkBlogUrl = (path = '') => `${BLOG_URL()}${path}` +export const mkDocUrl = (path = '') => mkBlogUrl(join('/docs', path)) + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + registerFilter( + PocketHostFilter.Mothership_MaintenanceMode_Message, + async (message: string) => { + return `${message} See ${mkDocUrl( + `usage/maintenance`, + )} for more information.` + }, + ) + + registerFilter( + PocketHostFilter.Mothership_UnverifiedAccountError_Message, + async (message: string) => { + return `${message} Log in at ${mkAppUrl()} to verify your account.` + }, + ) + + registerFilter( + PocketHostFilter.Core_ErrorSpawningInstanceMessage, + async (message: string, { instance }) => { + return `${message} Please review your instance logs at ${mkAppUrl( + `/app/instances/${instance.id}`, + )} or contact support at ${mkBlogUrl(`support`)}.` + }, + ) + + registerFilter( + PocketHostFilter.Core_FailedToLaunchInstanceMessage, + async (message, { instance }) => { + const { id, subdomain } = instance + return `${message} Please check logs at ${APP_URL()}. [${id}:${subdomain}]. ${DOCS_URL( + `usage`, + `errors`, + )}` + }, + ) + + registerFilter(PocketHostFilter.Firewall_HostnameRoutes, async (routes) => { + if (!IS_DEV()) return routes + return { + ...routes, + [`${APP_NAME()}.${APEX_DOMAIN()}`]: `http://localhost:${5174}`, + [`superadmin.${APEX_DOMAIN()}`]: `http://localhost:${5175}`, + [`${APEX_DOMAIN()}`]: `http://localhost:${8080}`, + } + }) +} + +export default plugin diff --git a/packages/pending/plugin-pockethost.io/tsconfig.json b/packages/pending/plugin-pockethost.io/tsconfig.json new file mode 100644 index 00000000..0f098a71 --- /dev/null +++ b/packages/pending/plugin-pockethost.io/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"], + "exclude": ["./src/mothership-app/**/*", "./src/instance-app/**/*"] +} diff --git a/packages/pending/plugin-waf-enforce-ssl/.npmignore b/packages/pending/plugin-waf-enforce-ssl/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-waf-enforce-ssl/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-waf-enforce-ssl/package.json b/packages/pending/plugin-waf-enforce-ssl/package.json new file mode 100644 index 00000000..58e0961d --- /dev/null +++ b/packages/pending/plugin-waf-enforce-ssl/package.json @@ -0,0 +1,25 @@ +{ + "name": "@pockethost/plugin-waf-enforce-ssl", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/express-sslify": "^1.2.5", + "@types/node": "^20.8.10", + "devcert": "^1.2.2", + "express-sslify": "^1.2.0", + "pockethost": "workspace:^" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pending/plugin-waf-enforce-ssl/readme.md b/packages/pending/plugin-waf-enforce-ssl/readme.md new file mode 100644 index 00000000..99761dec --- /dev/null +++ b/packages/pending/plugin-waf-enforce-ssl/readme.md @@ -0,0 +1,40 @@ +# plugin-waf-enforce-ssl + +Enforce SSL at WAF level. + +## Quickstart + +```bash +npx pockethost install @pockethost/plugin-waf-enforce-ssl + +# now only accepts https +npx pockethost waf serve +``` + +## Discussion + +When SSL is enforced on WAF, `PH_WAF_PORT` is ignored. Instead, it will listen on 80 and 443, redirecting any port 80 traffic to 443. + +In dev mode (`PH_DEV`), a wildcard dev certificate for the `PH_APEX_DOMAIN` value will be created. In prod mode, you must create your own certificate. For example, Cloudflare issues [origin certificates](https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/) which must be downloaded and used here. + +Use `npx pockethost config set PH_WAF_ENFORCE_SSL_KEY ` and `npx pockethost config set PH_WAF_ENFORCE_SSL_CERT ` to set production mode settings. + +## Variables + +The following variables will be used if they are found in the shell environment. PocketHost will also load them from an `.env` file if found at load time. + +| Name | Default | Discussion | +| ----------------------- | --------------------------------------------- | ------------------------------------------------------------- | +| PH_WAF_ENFORCE_SSL_HOME | `.pockethost/plugin-waf-enforce-ssl` | The home directory for any data storage needs of this plugin. | +| PH_WAF_ENFORCE_SSL_KEY | `.pockethost/plugin-waf-enforce-ssl/tls.key` | The path to your SSL cert. | +| PH_WAF_ENFORCE_SSL_CERT | `.pockethost/plugin-waf-enforce-ssl/tls.cert` | The path to your SSL key. | + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/packages/pending/plugin-waf-enforce-ssl/src/constants.ts b/packages/pending/plugin-waf-enforce-ssl/src/constants.ts new file mode 100644 index 00000000..8af2f1ec --- /dev/null +++ b/packages/pending/plugin-waf-enforce-ssl/src/constants.ts @@ -0,0 +1,17 @@ +import { join } from 'path' +import { PH_HOME, Settings, mkPath } from 'pockethost/core' + +const HOME_DIR = + process.env.PH_WAF_ENFORCE_SSL_HOME || + join(PH_HOME(), `plugin-waf-enforce-ssl`) + +const TLS_PFX = `tls` + +const settings = Settings({ + PH_WAF_ENFORCE_SSL_HOME: mkPath(HOME_DIR, { create: true }), + PH_WAF_ENFORCE_SSL_KEY: mkPath(join(HOME_DIR, `${TLS_PFX}.key`)), + PH_WAF_ENFORCE_SSL_CERT: mkPath(join(HOME_DIR, `${TLS_PFX}.cert`)), +}) + +export const SSL_KEY = () => settings.PH_WAF_ENFORCE_SSL_KEY +export const SSL_CERT = () => settings.PH_WAF_ENFORCE_SSL_CERT diff --git a/packages/pending/plugin-waf-enforce-ssl/src/index.ts b/packages/pending/plugin-waf-enforce-ssl/src/index.ts new file mode 100644 index 00000000..83fef281 --- /dev/null +++ b/packages/pending/plugin-waf-enforce-ssl/src/index.ts @@ -0,0 +1,57 @@ +import devcert from 'devcert' +import enforce from 'express-sslify' +import { readFileSync, writeFileSync } from 'fs' +import http from 'http' +import https from 'https' +import { + APEX_DOMAIN, + IS_DEV, + LoggerService, + PocketHostAction, + PocketHostFilter, + type Express, + type PocketHostPlugin, +} from 'pockethost/core' +import { SSL_CERT, SSL_KEY } from './constants' + +const logger = LoggerService().create('plugin-waf-enforce-ssl') +const { dbg, info } = logger + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + dbg(`initializing plugin-waf-enforce-ssl`) + + registerAction(PocketHostAction.Waf_OnAppMiddleware, async (app) => { + app.use(enforce.HTTPS()) + }) + + registerFilter( + PocketHostFilter.Waf_AppMount, + async (isMounted: boolean, app: Express) => { + if (!IS_DEV()) return isMounted + + const { key, cert } = await devcert.certificateFor(APEX_DOMAIN(), {}) + writeFileSync(SSL_KEY(), key) + writeFileSync(SSL_CERT(), cert) + + http.createServer(app).listen(80, () => { + info('SSL redirect server listening on 80') + }) + + // HTTPS server options + const httpsOptions = { + key: readFileSync(SSL_KEY()), + cert: readFileSync(SSL_CERT()), + } + + return new Promise((resolve) => { + // Create HTTPS server + https.createServer(httpsOptions, app).listen(443, () => { + info('HTTPS server running on port 443') + resolve(true) + }) + }) + }, + ) +} + +export default plugin diff --git a/packages/pending/plugin-waf-enforce-ssl/tsconfig.json b/packages/pending/plugin-waf-enforce-ssl/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-waf-enforce-ssl/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/pending/plugin-waf-ipcidr/.npmignore b/packages/pending/plugin-waf-ipcidr/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-waf-ipcidr/package.json b/packages/pending/plugin-waf-ipcidr/package.json new file mode 100644 index 00000000..93e84f2c --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/package.json @@ -0,0 +1,23 @@ +{ + "name": "@pockethost/plugin-waf-ipcidr", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/node": "^20.8.10", + "ip-cidr": "^3.1.0", + "pockethost": "workspace:^" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pending/plugin-waf-ipcidr/readme.md b/packages/pending/plugin-waf-ipcidr/readme.md new file mode 100644 index 00000000..51a79340 --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/readme.md @@ -0,0 +1,42 @@ +# plugin-waf-ipcidr + +This PocketHost plugin adds IP CIDR filtering to PocketHost's WAF. Useful for protecting the origin from web requests not originating from a known upstream proxy such as Cloudflare. + +## Quickstart + +```bash +# Install plugin +npx pockethost install @pockethost/plugin-waf-ipcidr + +# Configure with Cloudflare preset +npx pockethost config add PH_WAF_IPCIDR_PRESET cloudflare + +# now only accepts requests from cloudflare +npx pockethost waf serve +``` + +## Variables + +The following variables will be used if they are found in the shell environment. PocketHost will also load them from an `.env` file if found at load time. + +| Name | Default | Discussion | +| --------------------------- | ------------------------------- | ----------------------------------------------------------------------------- | +| PH_WAF_IPCIDR_HOME | `.pockethost/plugin-waf-ipcidr` | The home directory for any data storage needs of this plugin. | +| PH_WAF_IPCIDR_PRESET | `''` | Popular presets. Current allowed values: `cloudflare` | +| PH_WAF_IPCIDR_ALLOWED_CIDRS | `''` | A comma-separated list of allowed CIDRs. This will be merged with any preset. | + +## CIDR presets + +### `cloudflare` + +https://www.cloudflare.com/ips/ + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/packages/pending/plugin-waf-ipcidr/src/cidr.ts b/packages/pending/plugin-waf-ipcidr/src/cidr.ts new file mode 100644 index 00000000..def4fab8 --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/src/cidr.ts @@ -0,0 +1,19 @@ +import IPCIDR from 'ip-cidr' +import { NextFunction, Request, Response } from 'pockethost/core' + +// Middleware factory to create an IP blocking middleware based on CIDR ranges +export const createIpWhitelistMiddleware = (allowedCIDRs: string[]) => { + const allowedCIDRObjects = allowedCIDRs.map((cidr) => new IPCIDR(cidr)) + + return (req: Request, res: Response, next: NextFunction) => { + const ip = req.ip // or req.headers['x-forwarded-for'] || req.connection.remoteAddress; + if ( + allowedCIDRs.length === 0 || + allowedCIDRObjects.some((cidr) => cidr.contains(ip)) + ) { + next() + } else { + res.status(403).send('Nope') + } + } +} diff --git a/packages/pending/plugin-waf-ipcidr/src/constants.ts b/packages/pending/plugin-waf-ipcidr/src/constants.ts new file mode 100644 index 00000000..1ac9ed87 --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/src/constants.ts @@ -0,0 +1,18 @@ +import { join } from 'path' +import { + PH_HOME, + Settings, + mkCsvString, + mkPath, + mkString, +} from 'pockethost/core' + +const HOME_DIR = + process.env.PH_WAF_IPCIDR_HOME || join(PH_HOME(), `plugin-waf-ipcidr`) +const settings = Settings({ + PH_WAF_IPCIDR_HOME: mkPath(HOME_DIR, { create: true }), + PH_WAF_IPCIDR_PRESET: mkString(''), + PH_WAF_IPCIDR_ALLOWED_CIDRS: mkCsvString([]), +}) +export const PRESET = () => settings.PH_WAF_IPCIDR_PRESET +export const ALLOWED_CIDRS = () => settings.PH_WAF_IPCIDR_ALLOWED_CIDRS diff --git a/packages/pending/plugin-waf-ipcidr/src/index.ts b/packages/pending/plugin-waf-ipcidr/src/index.ts new file mode 100644 index 00000000..7713e57b --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/src/index.ts @@ -0,0 +1,24 @@ +import { + Express, + PocketHostAction, + PocketHostPlugin, + compact, +} from 'pockethost/core' +import { createIpWhitelistMiddleware } from './cidr' +import { ALLOWED_CIDRS, PRESET } from './constants' +import { PRESETS } from './presets' + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + registerAction(PocketHostAction.Waf_OnAppMiddleware, async (app: Express) => { + app.use( + createIpWhitelistMiddleware( + compact([ + ...(PRESETS[PRESET() as keyof typeof PRESETS] || []), + ...ALLOWED_CIDRS(), + ]), + ), + ) + }) +} + +export default plugin diff --git a/packages/pending/plugin-waf-ipcidr/src/presets.ts b/packages/pending/plugin-waf-ipcidr/src/presets.ts new file mode 100644 index 00000000..8701b731 --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/src/presets.ts @@ -0,0 +1,19 @@ +export const PRESETS = { + cloudflare: [ + '173.245.48.0/20', + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '141.101.64.0/18', + '108.162.192.0/18', + '190.93.240.0/20', + '188.114.96.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '162.158.0.0/15', + '104.16.0.0/13', + '104.24.0.0/14', + '172.64.0.0/13', + '131.0.72.0/22', + ], +} as const diff --git a/packages/pending/plugin-waf-ipcidr/tsconfig.json b/packages/pending/plugin-waf-ipcidr/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-waf-ipcidr/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/pending/plugin-waf/.npmignore b/packages/pending/plugin-waf/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/plugin-waf/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/pending/plugin-waf/package.json b/packages/pending/plugin-waf/package.json new file mode 100644 index 00000000..7b78605d --- /dev/null +++ b/packages/pending/plugin-waf/package.json @@ -0,0 +1,24 @@ +{ + "name": "@pockethost/plugin-waf", + "version": "0.0.1", + "description": "", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/vhost": "^3.0.9", + "http-proxy-middleware": "^2.0.6", + "pockethost": "workspace:^", + "vhost": "^3.0.2" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/pending/plugin-waf/readme.md b/packages/pending/plugin-waf/readme.md new file mode 100644 index 00000000..bc6550d9 --- /dev/null +++ b/packages/pending/plugin-waf/readme.md @@ -0,0 +1,61 @@ +# plugin-waf + +A Web Application Firewall for PocketHost. + +This plugin adds WAF support to PocketHost. Use it to run a WAF server that understands the rest of your PocketHost configuration and how to direct traffic appropriately. WAF can also be extended with other WAF-aware plugins to add rules like rate limiting and IP whitelisting. + +pockethost.io uses WAF extensively to add a security layer in front of PocketHost origin servers. + +## Quickstart + +``` +npx pockethost install @pockethost/plugin-waf + +npx pockethost waf --help +``` + +## Discussion + +By itself, WAF functions primarily as a reverse proxy. When WAF is enabled, PocketHost plugins that run servers should listen for the `Waf_VHosts` filter and add their route. + +## Actions + +### Waf_OnAppMiddleware (`waf_on_app_middleware`) + +```ts +import { type Express, type PocketHostAction } from 'pockethost/core' + +registerAction(PocketHostAction.Waf_OnAppMiddleware, (app: Express) => { + app.use((req) => { + console.log(req.host) + }) +}) +``` + +### Waf_OnRequestError (`waf_on_request_error`) + +## Filters + +### Waf_VHosts(`waf_vhosts`) + +```ts +import { type PocketHostFilter } from 'pockethost/core' + +registerFilter( + PocketHostFilter.Waf_HostnameRoutes, + async (routes: { [_: string]: string }) => { + return { ...routes, '*': `http://localhost:${DAEMON_PORT()}` } + }, + 99, +) +``` + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/createVhostProxyMiddleware.ts b/packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/firewall/createVhostProxyMiddleware.ts similarity index 93% rename from packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/createVhostProxyMiddleware.ts rename to packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/firewall/createVhostProxyMiddleware.ts index 31bb87f8..0eb46934 100644 --- a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/createVhostProxyMiddleware.ts +++ b/packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/firewall/createVhostProxyMiddleware.ts @@ -1,5 +1,5 @@ -import { Request } from 'express' import { createProxyMiddleware } from 'http-proxy-middleware' +import { Request } from 'pockethost/core' import vhost from 'vhost' export function createVhostProxyMiddleware( diff --git a/packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/firewall/server.ts b/packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/firewall/server.ts new file mode 100644 index 00000000..8dba0956 --- /dev/null +++ b/packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/firewall/server.ts @@ -0,0 +1,57 @@ +import { + ErrorRequestHandler, + IS_DEV, + PocketHostAction, + PocketHostFilter, + action, + cors, + express, + filter, + forEach, +} from 'pockethost/core' +import { info } from '../../..' +import { createVhostProxyMiddleware } from './createVhostProxyMiddleware' + +export const firewall = async () => { + const hostnameRoutes = await filter<{ [_: string]: string }>( + PocketHostFilter.Waf_VHosts, + {}, + ) + + // Create Express app + const app = express() + + await action(PocketHostAction.Waf_OnAppMiddleware, app) + + app.options('*', cors()) // include before other routes + app.use(cors()) + + forEach(hostnameRoutes, (target, host) => { + app.use(createVhostProxyMiddleware(host, target, IS_DEV())) + }) + + app.get(`/_api/health`, (req, res, next) => { + res.json({ status: 'ok' }) + res.end() + }) + + // Fall-through + app.all(`*`, (req, res, next) => { + throw new Error(`No route for ${req.method} ${req.url}`) + }) + + const errorHandler: ErrorRequestHandler = async (err, req, res, next) => { + action(PocketHostAction.Waf_OnRequestError, { err }) + res + .status(500) + .send(await filter(PocketHostFilter.Waf_OnError_Message, err.toString())) + } + app.use(errorHandler) + + const isMounted = await filter(PocketHostFilter.Waf_AppMount, false, app) + if (!isMounted) { + app.listen(80, () => { + info(`Listening on port 80`) + }) + } +} diff --git a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/index.ts b/packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/index.ts similarity index 74% rename from packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/index.ts rename to packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/index.ts index a414b1b8..e51b034c 100644 --- a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/index.ts +++ b/packages/pending/plugin-waf/src/FirewallCommand/ServeCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { firewall } from './firewall/server' type Options = { @@ -7,7 +7,7 @@ type Options = { export const ServeCommand = () => { const cmd = new Command(`serve`) - .description(`Serve the root firewall`) + .description(`Start the WAF server`) .action(async (options: Options) => { await firewall() }) diff --git a/packages/pockethost/src/cli/commands/FirewallCommand/index.ts b/packages/pending/plugin-waf/src/FirewallCommand/index.ts similarity index 55% rename from packages/pockethost/src/cli/commands/FirewallCommand/index.ts rename to packages/pending/plugin-waf/src/FirewallCommand/index.ts index 7fad7de3..8e0c95df 100644 --- a/packages/pockethost/src/cli/commands/FirewallCommand/index.ts +++ b/packages/pending/plugin-waf/src/FirewallCommand/index.ts @@ -1,4 +1,4 @@ -import { Command } from 'commander' +import { Command } from 'pockethost/core' import { ServeCommand } from './ServeCommand' type Options = { @@ -6,8 +6,8 @@ type Options = { } export const FirewallCommand = () => { - const cmd = new Command(`firewall`) - .description(`Root firewall commands`) + const cmd = new Command(`waf`) + .description(`Web Application Firewall (WAF) commands`) .addCommand(ServeCommand()) return cmd } diff --git a/packages/pending/plugin-waf/src/constants.ts b/packages/pending/plugin-waf/src/constants.ts new file mode 100644 index 00000000..6a8a9cd3 --- /dev/null +++ b/packages/pending/plugin-waf/src/constants.ts @@ -0,0 +1,11 @@ +import { join } from 'path' +import { PH_HOME, Settings, mkNumber, mkPath } from 'pockethost/core' + +const _HOME_DIR = + process.env.PH_FIREWALL_HOME || join(PH_HOME(), `plugin-firewall`) +const settings = Settings({ + PH_WAF_HOME: mkPath(_HOME_DIR, { create: true }), + PH_WAF_PORT: mkNumber(8080), +}) + +export const WAF_PORT = () => settings.PH_WAF_PORT diff --git a/packages/pending/plugin-waf/src/index.ts b/packages/pending/plugin-waf/src/index.ts new file mode 100644 index 00000000..5f3e1cd5 --- /dev/null +++ b/packages/pending/plugin-waf/src/index.ts @@ -0,0 +1,21 @@ +import { + Command, + LoggerService, + PocketHostFilter, + PocketHostPlugin, +} from 'pockethost/core' +import { FirewallCommand } from './FirewallCommand' + +const logger = LoggerService().create('plugin-waf') +export const { dbg, info } = logger + +const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => { + registerFilter( + PocketHostFilter.Core_CliCommands, + async (commands: Command[]) => { + return [...commands, FirewallCommand()] + }, + ) +} + +export default plugin diff --git a/packages/pending/plugin-waf/tsconfig.json b/packages/pending/plugin-waf/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/pending/plugin-waf/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/lander/.env-template b/packages/pending/pockethost-io-lander/.env-template similarity index 100% rename from packages/lander/.env-template rename to packages/pending/pockethost-io-lander/.env-template diff --git a/packages/lander/.gitignore b/packages/pending/pockethost-io-lander/.gitignore similarity index 100% rename from packages/lander/.gitignore rename to packages/pending/pockethost-io-lander/.gitignore diff --git a/packages/pending/pockethost-io-lander/.npmignore b/packages/pending/pockethost-io-lander/.npmignore new file mode 100644 index 00000000..d1589c83 --- /dev/null +++ b/packages/pending/pockethost-io-lander/.npmignore @@ -0,0 +1,5 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md \ No newline at end of file diff --git a/packages/lander/LICENSE b/packages/pending/pockethost-io-lander/LICENSE similarity index 100% rename from packages/lander/LICENSE rename to packages/pending/pockethost-io-lander/LICENSE diff --git a/packages/lander/README.md b/packages/pending/pockethost-io-lander/README.md similarity index 100% rename from packages/lander/README.md rename to packages/pending/pockethost-io-lander/README.md diff --git a/packages/lander/_data/env.js b/packages/pending/pockethost-io-lander/_data/env.js similarity index 100% rename from packages/lander/_data/env.js rename to packages/pending/pockethost-io-lander/_data/env.js diff --git a/packages/lander/_data/metadata.js b/packages/pending/pockethost-io-lander/_data/metadata.js similarity index 100% rename from packages/lander/_data/metadata.js rename to packages/pending/pockethost-io-lander/_data/metadata.js diff --git a/packages/lander/_data/showcase.json b/packages/pending/pockethost-io-lander/_data/showcase.json similarity index 100% rename from packages/lander/_data/showcase.json rename to packages/pending/pockethost-io-lander/_data/showcase.json diff --git a/packages/lander/_includes/components/buttons.njk b/packages/pending/pockethost-io-lander/_includes/components/buttons.njk similarity index 100% rename from packages/lander/_includes/components/buttons.njk rename to packages/pending/pockethost-io-lander/_includes/components/buttons.njk diff --git a/packages/lander/_includes/components/header.njk b/packages/pending/pockethost-io-lander/_includes/components/header.njk similarity index 100% rename from packages/lander/_includes/components/header.njk rename to packages/pending/pockethost-io-lander/_includes/components/header.njk diff --git a/packages/lander/_includes/components/postslist.njk b/packages/pending/pockethost-io-lander/_includes/components/postslist.njk similarity index 100% rename from packages/lander/_includes/components/postslist.njk rename to packages/pending/pockethost-io-lander/_includes/components/postslist.njk diff --git a/packages/lander/_includes/layouts/base.njk b/packages/pending/pockethost-io-lander/_includes/layouts/base.njk similarity index 100% rename from packages/lander/_includes/layouts/base.njk rename to packages/pending/pockethost-io-lander/_includes/layouts/base.njk diff --git a/packages/lander/_includes/layouts/docs.njk b/packages/pending/pockethost-io-lander/_includes/layouts/docs.njk similarity index 100% rename from packages/lander/_includes/layouts/docs.njk rename to packages/pending/pockethost-io-lander/_includes/layouts/docs.njk diff --git a/packages/lander/_includes/layouts/home.njk b/packages/pending/pockethost-io-lander/_includes/layouts/home.njk similarity index 100% rename from packages/lander/_includes/layouts/home.njk rename to packages/pending/pockethost-io-lander/_includes/layouts/home.njk diff --git a/packages/lander/_includes/layouts/post.njk b/packages/pending/pockethost-io-lander/_includes/layouts/post.njk similarity index 100% rename from packages/lander/_includes/layouts/post.njk rename to packages/pending/pockethost-io-lander/_includes/layouts/post.njk diff --git a/packages/lander/content/404.md b/packages/pending/pockethost-io-lander/content/404.md similarity index 100% rename from packages/lander/content/404.md rename to packages/pending/pockethost-io-lander/content/404.md diff --git a/packages/lander/content/blog.njk b/packages/pending/pockethost-io-lander/content/blog.njk similarity index 100% rename from packages/lander/content/blog.njk rename to packages/pending/pockethost-io-lander/content/blog.njk diff --git a/packages/lander/content/blog/0.0.1.md b/packages/pending/pockethost-io-lander/content/blog/0.0.1.md similarity index 100% rename from packages/lander/content/blog/0.0.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.0.1.md diff --git a/packages/lander/content/blog/0.2.0.md b/packages/pending/pockethost-io-lander/content/blog/0.2.0.md similarity index 100% rename from packages/lander/content/blog/0.2.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.2.0.md diff --git a/packages/lander/content/blog/0.3.0.md b/packages/pending/pockethost-io-lander/content/blog/0.3.0.md similarity index 100% rename from packages/lander/content/blog/0.3.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.3.0.md diff --git a/packages/lander/content/blog/0.3.1.md b/packages/pending/pockethost-io-lander/content/blog/0.3.1.md similarity index 100% rename from packages/lander/content/blog/0.3.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.3.1.md diff --git a/packages/lander/content/blog/0.3.2.md b/packages/pending/pockethost-io-lander/content/blog/0.3.2.md similarity index 100% rename from packages/lander/content/blog/0.3.2.md rename to packages/pending/pockethost-io-lander/content/blog/0.3.2.md diff --git a/packages/lander/content/blog/0.4.0.md b/packages/pending/pockethost-io-lander/content/blog/0.4.0.md similarity index 100% rename from packages/lander/content/blog/0.4.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.4.0.md diff --git a/packages/lander/content/blog/0.4.1.md b/packages/pending/pockethost-io-lander/content/blog/0.4.1.md similarity index 100% rename from packages/lander/content/blog/0.4.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.4.1.md diff --git a/packages/lander/content/blog/0.4.2.md b/packages/pending/pockethost-io-lander/content/blog/0.4.2.md similarity index 100% rename from packages/lander/content/blog/0.4.2.md rename to packages/pending/pockethost-io-lander/content/blog/0.4.2.md diff --git a/packages/lander/content/blog/0.5.0.md b/packages/pending/pockethost-io-lander/content/blog/0.5.0.md similarity index 100% rename from packages/lander/content/blog/0.5.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.0.md diff --git a/packages/lander/content/blog/0.5.1.md b/packages/pending/pockethost-io-lander/content/blog/0.5.1.md similarity index 100% rename from packages/lander/content/blog/0.5.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.1.md diff --git a/packages/lander/content/blog/0.5.2.md b/packages/pending/pockethost-io-lander/content/blog/0.5.2.md similarity index 100% rename from packages/lander/content/blog/0.5.2.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.2.md diff --git a/packages/lander/content/blog/0.5.3.md b/packages/pending/pockethost-io-lander/content/blog/0.5.3.md similarity index 100% rename from packages/lander/content/blog/0.5.3.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.3.md diff --git a/packages/lander/content/blog/0.5.4.md b/packages/pending/pockethost-io-lander/content/blog/0.5.4.md similarity index 100% rename from packages/lander/content/blog/0.5.4.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.4.md diff --git a/packages/lander/content/blog/0.5.5.md b/packages/pending/pockethost-io-lander/content/blog/0.5.5.md similarity index 100% rename from packages/lander/content/blog/0.5.5.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.5.md diff --git a/packages/lander/content/blog/0.5.6.md b/packages/pending/pockethost-io-lander/content/blog/0.5.6.md similarity index 100% rename from packages/lander/content/blog/0.5.6.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.6.md diff --git a/packages/lander/content/blog/0.5.7.md b/packages/pending/pockethost-io-lander/content/blog/0.5.7.md similarity index 100% rename from packages/lander/content/blog/0.5.7.md rename to packages/pending/pockethost-io-lander/content/blog/0.5.7.md diff --git a/packages/lander/content/blog/0.6.0.md b/packages/pending/pockethost-io-lander/content/blog/0.6.0.md similarity index 100% rename from packages/lander/content/blog/0.6.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.6.0.md diff --git a/packages/lander/content/blog/0.6.1.md b/packages/pending/pockethost-io-lander/content/blog/0.6.1.md similarity index 100% rename from packages/lander/content/blog/0.6.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.6.1.md diff --git a/packages/lander/content/blog/0.7.0.md b/packages/pending/pockethost-io-lander/content/blog/0.7.0.md similarity index 100% rename from packages/lander/content/blog/0.7.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.7.0.md diff --git a/packages/lander/content/blog/0.7.1.md b/packages/pending/pockethost-io-lander/content/blog/0.7.1.md similarity index 100% rename from packages/lander/content/blog/0.7.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.7.1.md diff --git a/packages/lander/content/blog/0.7.2.md b/packages/pending/pockethost-io-lander/content/blog/0.7.2.md similarity index 100% rename from packages/lander/content/blog/0.7.2.md rename to packages/pending/pockethost-io-lander/content/blog/0.7.2.md diff --git a/packages/lander/content/blog/0.8.0.md b/packages/pending/pockethost-io-lander/content/blog/0.8.0.md similarity index 100% rename from packages/lander/content/blog/0.8.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.8.0.md diff --git a/packages/lander/content/blog/0.8.1.md b/packages/pending/pockethost-io-lander/content/blog/0.8.1.md similarity index 100% rename from packages/lander/content/blog/0.8.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.8.1.md diff --git a/packages/lander/content/blog/0.8.2.md b/packages/pending/pockethost-io-lander/content/blog/0.8.2.md similarity index 100% rename from packages/lander/content/blog/0.8.2.md rename to packages/pending/pockethost-io-lander/content/blog/0.8.2.md diff --git a/packages/lander/content/blog/0.9.0.md b/packages/pending/pockethost-io-lander/content/blog/0.9.0.md similarity index 100% rename from packages/lander/content/blog/0.9.0.md rename to packages/pending/pockethost-io-lander/content/blog/0.9.0.md diff --git a/packages/lander/content/blog/0.9.1.md b/packages/pending/pockethost-io-lander/content/blog/0.9.1.md similarity index 100% rename from packages/lander/content/blog/0.9.1.md rename to packages/pending/pockethost-io-lander/content/blog/0.9.1.md diff --git a/packages/lander/content/blog/0.9.2.md b/packages/pending/pockethost-io-lander/content/blog/0.9.2.md similarity index 100% rename from packages/lander/content/blog/0.9.2.md rename to packages/pending/pockethost-io-lander/content/blog/0.9.2.md diff --git a/packages/lander/content/blog/0.9.3.md b/packages/pending/pockethost-io-lander/content/blog/0.9.3.md similarity index 100% rename from packages/lander/content/blog/0.9.3.md rename to packages/pending/pockethost-io-lander/content/blog/0.9.3.md diff --git a/packages/lander/content/blog/awesome-pocketbase-20-and-growing.md b/packages/pending/pockethost-io-lander/content/blog/awesome-pocketbase-20-and-growing.md similarity index 100% rename from packages/lander/content/blog/awesome-pocketbase-20-and-growing.md rename to packages/pending/pockethost-io-lander/content/blog/awesome-pocketbase-20-and-growing.md diff --git a/packages/lander/content/blog/blog.11tydata.js b/packages/pending/pockethost-io-lander/content/blog/blog.11tydata.js similarity index 100% rename from packages/lander/content/blog/blog.11tydata.js rename to packages/pending/pockethost-io-lander/content/blog/blog.11tydata.js diff --git a/packages/lander/content/blog/pocket-host-v0-10-0.md b/packages/pending/pockethost-io-lander/content/blog/pocket-host-v0-10-0.md similarity index 100% rename from packages/lander/content/blog/pocket-host-v0-10-0.md rename to packages/pending/pockethost-io-lander/content/blog/pocket-host-v0-10-0.md diff --git a/packages/lander/content/blog/pocket-host-v0-10-1.md b/packages/pending/pockethost-io-lander/content/blog/pocket-host-v0-10-1.md similarity index 100% rename from packages/lander/content/blog/pocket-host-v0-10-1.md rename to packages/pending/pockethost-io-lander/content/blog/pocket-host-v0-10-1.md diff --git a/packages/lander/content/blog/pocket-host-v0-11-0.md b/packages/pending/pockethost-io-lander/content/blog/pocket-host-v0-11-0.md similarity index 100% rename from packages/lander/content/blog/pocket-host-v0-11-0.md rename to packages/pending/pockethost-io-lander/content/blog/pocket-host-v0-11-0.md diff --git a/packages/lander/content/docs/docs.11tydata.js b/packages/pending/pockethost-io-lander/content/docs/docs.11tydata.js similarity index 100% rename from packages/lander/content/docs/docs.11tydata.js rename to packages/pending/pockethost-io-lander/content/docs/docs.11tydata.js diff --git a/packages/lander/content/docs/index.njk b/packages/pending/pockethost-io-lander/content/docs/index.njk similarity index 100% rename from packages/lander/content/docs/index.njk rename to packages/pending/pockethost-io-lander/content/docs/index.njk diff --git a/packages/lander/content/docs/overview/faq.md b/packages/pending/pockethost-io-lander/content/docs/overview/faq.md similarity index 100% rename from packages/lander/content/docs/overview/faq.md rename to packages/pending/pockethost-io-lander/content/docs/overview/faq.md diff --git a/packages/lander/content/docs/overview/introduction.md b/packages/pending/pockethost-io-lander/content/docs/overview/introduction.md similarity index 100% rename from packages/lander/content/docs/overview/introduction.md rename to packages/pending/pockethost-io-lander/content/docs/overview/introduction.md diff --git a/packages/lander/content/docs/usage/accessing-instance.md b/packages/pending/pockethost-io-lander/content/docs/usage/accessing-instance.md similarity index 100% rename from packages/lander/content/docs/usage/accessing-instance.md rename to packages/pending/pockethost-io-lander/content/docs/usage/accessing-instance.md diff --git a/packages/lander/content/docs/usage/admin-sync.md b/packages/pending/pockethost-io-lander/content/docs/usage/admin-sync.md similarity index 100% rename from packages/lander/content/docs/usage/admin-sync.md rename to packages/pending/pockethost-io-lander/content/docs/usage/admin-sync.md diff --git a/packages/lander/content/docs/usage/create.md b/packages/pending/pockethost-io-lander/content/docs/usage/create.md similarity index 100% rename from packages/lander/content/docs/usage/create.md rename to packages/pending/pockethost-io-lander/content/docs/usage/create.md diff --git a/packages/lander/content/docs/usage/custom-domain.md b/packages/pending/pockethost-io-lander/content/docs/usage/custom-domain.md similarity index 100% rename from packages/lander/content/docs/usage/custom-domain.md rename to packages/pending/pockethost-io-lander/content/docs/usage/custom-domain.md diff --git a/packages/lander/content/docs/usage/delete.md b/packages/pending/pockethost-io-lander/content/docs/usage/delete.md similarity index 100% rename from packages/lander/content/docs/usage/delete.md rename to packages/pending/pockethost-io-lander/content/docs/usage/delete.md diff --git a/packages/lander/content/docs/usage/dev-mode.md b/packages/pending/pockethost-io-lander/content/docs/usage/dev-mode.md similarity index 100% rename from packages/lander/content/docs/usage/dev-mode.md rename to packages/pending/pockethost-io-lander/content/docs/usage/dev-mode.md diff --git a/packages/lander/content/docs/usage/errors.md b/packages/pending/pockethost-io-lander/content/docs/usage/errors.md similarity index 100% rename from packages/lander/content/docs/usage/errors.md rename to packages/pending/pockethost-io-lander/content/docs/usage/errors.md diff --git a/packages/lander/content/docs/usage/ftp.md b/packages/pending/pockethost-io-lander/content/docs/usage/ftp.md similarity index 100% rename from packages/lander/content/docs/usage/ftp.md rename to packages/pending/pockethost-io-lander/content/docs/usage/ftp.md diff --git a/packages/lander/content/docs/usage/hooks.md b/packages/pending/pockethost-io-lander/content/docs/usage/hooks.md similarity index 100% rename from packages/lander/content/docs/usage/hooks.md rename to packages/pending/pockethost-io-lander/content/docs/usage/hooks.md diff --git a/packages/lander/content/docs/usage/instances/index.md b/packages/pending/pockethost-io-lander/content/docs/usage/instances/index.md similarity index 100% rename from packages/lander/content/docs/usage/instances/index.md rename to packages/pending/pockethost-io-lander/content/docs/usage/instances/index.md diff --git a/packages/lander/content/docs/usage/maintenance.md b/packages/pending/pockethost-io-lander/content/docs/usage/maintenance.md similarity index 100% rename from packages/lander/content/docs/usage/maintenance.md rename to packages/pending/pockethost-io-lander/content/docs/usage/maintenance.md diff --git a/packages/lander/content/docs/usage/rename-instance.md b/packages/pending/pockethost-io-lander/content/docs/usage/rename-instance.md similarity index 100% rename from packages/lander/content/docs/usage/rename-instance.md rename to packages/pending/pockethost-io-lander/content/docs/usage/rename-instance.md diff --git a/packages/lander/content/docs/usage/upgrading.md b/packages/pending/pockethost-io-lander/content/docs/usage/upgrading.md similarity index 100% rename from packages/lander/content/docs/usage/upgrading.md rename to packages/pending/pockethost-io-lander/content/docs/usage/upgrading.md diff --git a/packages/lander/content/docs/usage/usage-limits.md b/packages/pending/pockethost-io-lander/content/docs/usage/usage-limits.md similarity index 100% rename from packages/lander/content/docs/usage/usage-limits.md rename to packages/pending/pockethost-io-lander/content/docs/usage/usage-limits.md diff --git a/packages/lander/content/feed/feed.11tydata.js b/packages/pending/pockethost-io-lander/content/feed/feed.11tydata.js similarity index 100% rename from packages/lander/content/feed/feed.11tydata.js rename to packages/pending/pockethost-io-lander/content/feed/feed.11tydata.js diff --git a/packages/lander/content/feed/feed.njk b/packages/pending/pockethost-io-lander/content/feed/feed.njk similarity index 100% rename from packages/lander/content/feed/feed.njk rename to packages/pending/pockethost-io-lander/content/feed/feed.njk diff --git a/packages/lander/content/feed/json.njk b/packages/pending/pockethost-io-lander/content/feed/json.njk similarity index 100% rename from packages/lander/content/feed/json.njk rename to packages/pending/pockethost-io-lander/content/feed/json.njk diff --git a/packages/lander/content/index.njk b/packages/pending/pockethost-io-lander/content/index.njk similarity index 100% rename from packages/lander/content/index.njk rename to packages/pending/pockethost-io-lander/content/index.njk diff --git a/packages/lander/content/pricing/index.njk b/packages/pending/pockethost-io-lander/content/pricing/index.njk similarity index 100% rename from packages/lander/content/pricing/index.njk rename to packages/pending/pockethost-io-lander/content/pricing/index.njk diff --git a/packages/lander/content/showcase/index.njk b/packages/pending/pockethost-io-lander/content/showcase/index.njk similarity index 100% rename from packages/lander/content/showcase/index.njk rename to packages/pending/pockethost-io-lander/content/showcase/index.njk diff --git a/packages/lander/content/sitemap/sitemap.xml.njk b/packages/pending/pockethost-io-lander/content/sitemap/sitemap.xml.njk similarity index 100% rename from packages/lander/content/sitemap/sitemap.xml.njk rename to packages/pending/pockethost-io-lander/content/sitemap/sitemap.xml.njk diff --git a/packages/lander/content/support.njk b/packages/pending/pockethost-io-lander/content/support.njk similarity index 100% rename from packages/lander/content/support.njk rename to packages/pending/pockethost-io-lander/content/support.njk diff --git a/packages/lander/content/tags-list.njk b/packages/pending/pockethost-io-lander/content/tags-list.njk similarity index 100% rename from packages/lander/content/tags-list.njk rename to packages/pending/pockethost-io-lander/content/tags-list.njk diff --git a/packages/lander/content/tags.njk b/packages/pending/pockethost-io-lander/content/tags.njk similarity index 100% rename from packages/lander/content/tags.njk rename to packages/pending/pockethost-io-lander/content/tags.njk diff --git a/packages/lander/eleventy.config.drafts.js b/packages/pending/pockethost-io-lander/eleventy.config.drafts.js similarity index 100% rename from packages/lander/eleventy.config.drafts.js rename to packages/pending/pockethost-io-lander/eleventy.config.drafts.js diff --git a/packages/lander/eleventy.config.images.js b/packages/pending/pockethost-io-lander/eleventy.config.images.js similarity index 100% rename from packages/lander/eleventy.config.images.js rename to packages/pending/pockethost-io-lander/eleventy.config.images.js diff --git a/packages/lander/eleventy.config.js b/packages/pending/pockethost-io-lander/eleventy.config.js similarity index 100% rename from packages/lander/eleventy.config.js rename to packages/pending/pockethost-io-lander/eleventy.config.js diff --git a/packages/lander/package.json b/packages/pending/pockethost-io-lander/package.json similarity index 84% rename from packages/lander/package.json rename to packages/pending/pockethost-io-lander/package.json index b788f726..62e8c0f3 100644 --- a/packages/lander/package.json +++ b/packages/pending/pockethost-io-lander/package.json @@ -1,7 +1,7 @@ { - "name": "eleventy-base-blog", - "version": "8.0.0", - "description": "A starter repository for a blog web site using the Eleventy site generator.", + "name": "@pockethost/pockethost-io-lander", + "version": "0.0.1", + "description": "pockethost.io lander", "scripts": { "build": "NODE_ENV=production npx @11ty/eleventy", "build-ghpages": "npx @11ty/eleventy --pathprefix=/eleventy-base-blog/", @@ -39,18 +39,19 @@ "@11ty/eleventy-plugin-bundle": "^1.0.4", "@11ty/eleventy-plugin-rss": "^1.2.0", "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0", - "luxon": "^3.3.0", - "markdown-it-anchor": "^8.6.7", - "prettier": "^3.0.3" - }, - "dependencies": { - "pockethost": "workspace:../pockethost", "@tailwindcss/typography": "^0.5.10", "autoprefixer": "^10.4.16", "boolean": "^3.2.0", - "daisyui": "^3.7.7", + "daisyui": "^4.4.23", "dotenv": "^16.3.1", + "luxon": "^3.3.0", + "markdown-it-anchor": "^8.6.7", "postcss": "^8.4.30", - "tailwindcss": "^3.3.3" + "prettier": "^3.0.3", + "tailwindcss": "^3.3.3", + "typescript": "^5.4.5" + }, + "dependencies": { + "pockethost": "workspace:^" } } diff --git a/packages/lander/public/css/index.css b/packages/pending/pockethost-io-lander/public/css/index.css similarity index 100% rename from packages/lander/public/css/index.css rename to packages/pending/pockethost-io-lander/public/css/index.css diff --git a/packages/lander/public/docs/custom-domain.png b/packages/pending/pockethost-io-lander/public/docs/custom-domain.png similarity index 100% rename from packages/lander/public/docs/custom-domain.png rename to packages/pending/pockethost-io-lander/public/docs/custom-domain.png diff --git a/packages/lander/public/docs/instance-idle-screenshot.png b/packages/pending/pockethost-io-lander/public/docs/instance-idle-screenshot.png similarity index 100% rename from packages/lander/public/docs/instance-idle-screenshot.png rename to packages/pending/pockethost-io-lander/public/docs/instance-idle-screenshot.png diff --git a/packages/lander/public/docs/instance-usage-screenshot.png b/packages/pending/pockethost-io-lander/public/docs/instance-usage-screenshot.png similarity index 100% rename from packages/lander/public/docs/instance-usage-screenshot.png rename to packages/pending/pockethost-io-lander/public/docs/instance-usage-screenshot.png diff --git a/packages/lander/public/docs/instance-version-screenshot.png b/packages/pending/pockethost-io-lander/public/docs/instance-version-screenshot.png similarity index 100% rename from packages/lander/public/docs/instance-version-screenshot.png rename to packages/pending/pockethost-io-lander/public/docs/instance-version-screenshot.png diff --git a/packages/lander/public/docs/maintenance-mode-screenshot.png b/packages/pending/pockethost-io-lander/public/docs/maintenance-mode-screenshot.png similarity index 100% rename from packages/lander/public/docs/maintenance-mode-screenshot.png rename to packages/pending/pockethost-io-lander/public/docs/maintenance-mode-screenshot.png diff --git a/packages/superadmin/static/favicon.ico b/packages/pending/pockethost-io-lander/public/favicon.ico similarity index 100% rename from packages/superadmin/static/favicon.ico rename to packages/pending/pockethost-io-lander/public/favicon.ico diff --git a/packages/superadmin/static/icons/all.min.css b/packages/pending/pockethost-io-lander/public/icons/all.min.css similarity index 100% rename from packages/superadmin/static/icons/all.min.css rename to packages/pending/pockethost-io-lander/public/icons/all.min.css diff --git a/packages/superadmin/static/icons/brands.min.css b/packages/pending/pockethost-io-lander/public/icons/brands.min.css similarity index 100% rename from packages/superadmin/static/icons/brands.min.css rename to packages/pending/pockethost-io-lander/public/icons/brands.min.css diff --git a/packages/superadmin/static/icons/fontawesome.min.css b/packages/pending/pockethost-io-lander/public/icons/fontawesome.min.css similarity index 100% rename from packages/superadmin/static/icons/fontawesome.min.css rename to packages/pending/pockethost-io-lander/public/icons/fontawesome.min.css diff --git a/packages/lander/public/img/futuristic-server-room.png b/packages/pending/pockethost-io-lander/public/img/futuristic-server-room.png similarity index 100% rename from packages/lander/public/img/futuristic-server-room.png rename to packages/pending/pockethost-io-lander/public/img/futuristic-server-room.png diff --git a/packages/lander/public/img/pockethost-cloud-logo-upscaled.png b/packages/pending/pockethost-io-lander/public/img/pockethost-cloud-logo-upscaled.png similarity index 100% rename from packages/lander/public/img/pockethost-cloud-logo-upscaled.png rename to packages/pending/pockethost-io-lander/public/img/pockethost-cloud-logo-upscaled.png diff --git a/packages/superadmin/static/images/pockethost-cloud-logo.jpg b/packages/pending/pockethost-io-lander/public/img/pockethost-cloud-logo.jpg similarity index 100% rename from packages/superadmin/static/images/pockethost-cloud-logo.jpg rename to packages/pending/pockethost-io-lander/public/img/pockethost-cloud-logo.jpg diff --git a/packages/lander/public/img/pockethost-cloud-logo.pxd b/packages/pending/pockethost-io-lander/public/img/pockethost-cloud-logo.pxd similarity index 100% rename from packages/lander/public/img/pockethost-cloud-logo.pxd rename to packages/pending/pockethost-io-lander/public/img/pockethost-cloud-logo.pxd diff --git a/packages/lander/public/img/pockethost-homepage-bg.png b/packages/pending/pockethost-io-lander/public/img/pockethost-homepage-bg.png similarity index 100% rename from packages/lander/public/img/pockethost-homepage-bg.png rename to packages/pending/pockethost-io-lander/public/img/pockethost-homepage-bg.png diff --git a/packages/lander/public/img/showcase/pockethost-showcase-battleborn.jpg b/packages/pending/pockethost-io-lander/public/img/showcase/pockethost-showcase-battleborn.jpg similarity index 100% rename from packages/lander/public/img/showcase/pockethost-showcase-battleborn.jpg rename to packages/pending/pockethost-io-lander/public/img/showcase/pockethost-showcase-battleborn.jpg diff --git a/packages/lander/public/img/showcase/pockethost-showcase-ecourse.jpg b/packages/pending/pockethost-io-lander/public/img/showcase/pockethost-showcase-ecourse.jpg similarity index 100% rename from packages/lander/public/img/showcase/pockethost-showcase-ecourse.jpg rename to packages/pending/pockethost-io-lander/public/img/showcase/pockethost-showcase-ecourse.jpg diff --git a/packages/superadmin/static/poster.png b/packages/pending/pockethost-io-lander/public/poster.png similarity index 100% rename from packages/superadmin/static/poster.png rename to packages/pending/pockethost-io-lander/public/poster.png diff --git a/packages/superadmin/static/webfonts/fa-brands-400.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-brands-400.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-brands-400.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-brands-400.ttf diff --git a/packages/superadmin/static/webfonts/fa-brands-400.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-brands-400.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-brands-400.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-brands-400.woff2 diff --git a/packages/superadmin/static/webfonts/fa-duotone-900.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-duotone-900.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-duotone-900.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-duotone-900.ttf diff --git a/packages/superadmin/static/webfonts/fa-duotone-900.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-duotone-900.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-duotone-900.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-duotone-900.woff2 diff --git a/packages/superadmin/static/webfonts/fa-light-300.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-light-300.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-light-300.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-light-300.ttf diff --git a/packages/superadmin/static/webfonts/fa-light-300.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-light-300.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-light-300.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-light-300.woff2 diff --git a/packages/superadmin/static/webfonts/fa-regular-400.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-regular-400.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-regular-400.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-regular-400.ttf diff --git a/packages/superadmin/static/webfonts/fa-regular-400.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-regular-400.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-regular-400.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-regular-400.woff2 diff --git a/packages/superadmin/static/webfonts/fa-sharp-light-300.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-light-300.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-sharp-light-300.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-light-300.ttf diff --git a/packages/superadmin/static/webfonts/fa-sharp-light-300.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-light-300.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-sharp-light-300.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-light-300.woff2 diff --git a/packages/superadmin/static/webfonts/fa-sharp-regular-400.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-regular-400.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-sharp-regular-400.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-regular-400.ttf diff --git a/packages/superadmin/static/webfonts/fa-sharp-regular-400.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-regular-400.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-sharp-regular-400.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-regular-400.woff2 diff --git a/packages/superadmin/static/webfonts/fa-sharp-solid-900.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-solid-900.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-sharp-solid-900.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-solid-900.ttf diff --git a/packages/superadmin/static/webfonts/fa-sharp-solid-900.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-solid-900.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-sharp-solid-900.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-sharp-solid-900.woff2 diff --git a/packages/superadmin/static/webfonts/fa-solid-900.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-solid-900.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-solid-900.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-solid-900.ttf diff --git a/packages/superadmin/static/webfonts/fa-solid-900.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-solid-900.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-solid-900.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-solid-900.woff2 diff --git a/packages/superadmin/static/webfonts/fa-thin-100.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-thin-100.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-thin-100.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-thin-100.ttf diff --git a/packages/superadmin/static/webfonts/fa-thin-100.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-thin-100.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-thin-100.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-thin-100.woff2 diff --git a/packages/superadmin/static/webfonts/fa-v4compatibility.ttf b/packages/pending/pockethost-io-lander/public/webfonts/fa-v4compatibility.ttf similarity index 100% rename from packages/superadmin/static/webfonts/fa-v4compatibility.ttf rename to packages/pending/pockethost-io-lander/public/webfonts/fa-v4compatibility.ttf diff --git a/packages/superadmin/static/webfonts/fa-v4compatibility.woff2 b/packages/pending/pockethost-io-lander/public/webfonts/fa-v4compatibility.woff2 similarity index 100% rename from packages/superadmin/static/webfonts/fa-v4compatibility.woff2 rename to packages/pending/pockethost-io-lander/public/webfonts/fa-v4compatibility.woff2 diff --git a/packages/lander/tailwind.config.js b/packages/pending/pockethost-io-lander/tailwind.config.js similarity index 100% rename from packages/lander/tailwind.config.js rename to packages/pending/pockethost-io-lander/tailwind.config.js diff --git a/packages/plugin-auto-admin/CHANGELOG.md b/packages/plugin-auto-admin/CHANGELOG.md new file mode 100644 index 00000000..aacd5e9a --- /dev/null +++ b/packages/plugin-auto-admin/CHANGELOG.md @@ -0,0 +1,7 @@ +# @pockethost/plugin-auto-admin + +## 0.0.2 + +### Patch Changes + +- 7cab221: Logging: output default admin login on instance launch diff --git a/packages/plugin-auto-admin/LICENSE.md b/packages/plugin-auto-admin/LICENSE.md new file mode 100644 index 00000000..6f385987 --- /dev/null +++ b/packages/plugin-auto-admin/LICENSE.md @@ -0,0 +1,16 @@ +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/packages/plugin-auto-admin/package.json b/packages/plugin-auto-admin/package.json new file mode 100644 index 00000000..4b9c5e9c --- /dev/null +++ b/packages/plugin-auto-admin/package.json @@ -0,0 +1,34 @@ +{ + "name": "@pockethost/plugin-auto-admin", + "version": "0.0.2", + "repository": { + "type": "git", + "url": "http://github.com/pockethost/pockethost/packages/plugin-auto-admin" + }, + "description": "A pockethost plugin.", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [ + "pockethost" + ], + "author": { + "name": "Ben Allfree", + "url": "https://github.com/benallfree" + }, + "license": "MIT", + "dependencies": { + "@types/json-stringify-safe": "^5.0.2", + "json-stringify-safe": "^5.0.1", + "pocketbase": "^0.21.3", + "pockethost": "workspace:^1.0.0" + }, + "devDependencies": { + "@types/node": "^20.8.10", + "typescript": "^5.4.5" + } +} diff --git a/packages/plugin-auto-admin/readme.md b/packages/plugin-auto-admin/readme.md new file mode 100644 index 00000000..b575dd76 --- /dev/null +++ b/packages/plugin-auto-admin/readme.md @@ -0,0 +1,37 @@ +# plugin-auto-admin + +A plugin for [pockethost](https://www.npmjs.com/package/pockethost). + +This auto-admin plugin will automatically create an admin user for the PocketBase instance if one doesn't already exist. + +## Quickstart + +```bash +npx pockethost plugin install @pockethost/plugin-auto-admin + +npx pockethost auto-admin --help +``` + +## Variables + +The following variables will be used if they are found in the shell environment. PocketHost will also load them from an `.env` file if found at load time. + +| Name | Default | Discussion | +| ---------------------- | ------------------------------- | ------------------------------------------------------------- | +| PH_AUTO_ADMIN_HOME | `.pockethost/plugin-auto-admin` | The home directory for any data storage needs of this plugin. | +| PH_AUTO_ADMIN_LOGIN | `admin@pockethost.io` | The admin login to use when creating an admin account. | +| PH_AUTO_ADMIN_PASSWORD | `password` | The admin password to use when creating an admin account. | + +## Actions + +## Filters + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/packages/plugin-auto-admin/src/constants.ts b/packages/plugin-auto-admin/src/constants.ts new file mode 100644 index 00000000..43335d41 --- /dev/null +++ b/packages/plugin-auto-admin/src/constants.ts @@ -0,0 +1,16 @@ +import { join } from 'path' +import { PH_HOME, Settings, mkPath, mkString } from 'pockethost/core' + +export const PLUGIN_NAME = `plugin-auto-admin` + +export const HOME_DIR = + process.env.PH_AUTO_ADMIN_HOME || join(PH_HOME(), PLUGIN_NAME) + +const settings = Settings({ + PH_AUTO_ADMIN_HOME: mkPath(HOME_DIR, { create: true }), + PH_AUTO_ADMIN_LOGIN: mkString(`admin@pockethost.lvh.me`), + PH_AUTO_ADMIN_PASSWORD: mkString(`0123456789`), +}) + +export const LOGIN = () => settings.PH_AUTO_ADMIN_LOGIN +export const PASSWORD = () => settings.PH_AUTO_ADMIN_PASSWORD diff --git a/packages/plugin-auto-admin/src/index.ts b/packages/plugin-auto-admin/src/index.ts new file mode 100644 index 00000000..f14e1101 --- /dev/null +++ b/packages/plugin-auto-admin/src/index.ts @@ -0,0 +1,30 @@ +import PocketBase from 'pocketbase' +import { + PocketHostPlugin, + onAfterInstanceStartedAction, + parseError, +} from 'pockethost/core' +import { LOGIN, PASSWORD, PLUGIN_NAME } from './constants' +import { dbg, info } from './log' + +const plugin: PocketHostPlugin = async ({}) => { + dbg(`initializing ${PLUGIN_NAME}`) + + onAfterInstanceStartedAction(async ({ instance, url }) => { + const { subdomain } = instance + dbg(`launched instance ${instance.subdomain} on ${url}`) + const client = new PocketBase(url) + const email = LOGIN() + const password = PASSWORD() + try { + await client.admins.create({ email, password, passwordConfirm: password }) + dbg(`Admin account created`) + } catch (e: any) { + dbg(`Failed to create admin account: ${parseError(e)} `) + } finally { + info(`Default admin login for ${subdomain} is ${email}/${password}`) + } + }) +} + +export default plugin diff --git a/packages/plugin-auto-admin/src/log.ts b/packages/plugin-auto-admin/src/log.ts new file mode 100644 index 00000000..2131ec7a --- /dev/null +++ b/packages/plugin-auto-admin/src/log.ts @@ -0,0 +1,4 @@ +import { LoggerService } from 'pockethost/core' + +const logger = LoggerService().create('plugin-auto-admin') +export const { dbg, info } = logger diff --git a/packages/plugin-auto-admin/tsconfig.json b/packages/plugin-auto-admin/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/packages/plugin-auto-admin/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/plugin-console-logger/.npmignore b/packages/plugin-console-logger/.npmignore new file mode 100644 index 00000000..f7130f53 --- /dev/null +++ b/packages/plugin-console-logger/.npmignore @@ -0,0 +1,6 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md +!CHANGELOG.md diff --git a/packages/plugin-console-logger/CHANGELOG.md b/packages/plugin-console-logger/CHANGELOG.md new file mode 100644 index 00000000..ab53b266 --- /dev/null +++ b/packages/plugin-console-logger/CHANGELOG.md @@ -0,0 +1,28 @@ +# @pockethost/plugin-console-logger + +## 0.1.0 + +### Minor Changes + +- 1384a86: BREAKING: refactored actions/filters + +### Patch Changes + +- 3d47cbf: Code cleanup +- 9d626ec: Improved readme.md +- Updated dependencies [cc4aa02] + - pockethost@1.3.0 + +## 0.0.3 + +### Patch Changes + +- 76d57f6: CHANGELOG.md is now published with package. + +## 0.0.2 + +### Patch Changes + +- d83daf9: Fix empty logs so they are displayed correctly +- Updated dependencies [1695b59] + - pockethost@1.1.0 diff --git a/packages/plugin-console-logger/LICENSE.md b/packages/plugin-console-logger/LICENSE.md new file mode 100644 index 00000000..6f385987 --- /dev/null +++ b/packages/plugin-console-logger/LICENSE.md @@ -0,0 +1,16 @@ +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/packages/plugin-console-logger/package.json b/packages/plugin-console-logger/package.json index 71c1bc5b..6ed63c14 100644 --- a/packages/plugin-console-logger/package.json +++ b/packages/plugin-console-logger/package.json @@ -1,16 +1,33 @@ { "name": "@pockethost/plugin-console-logger", - "version": "1.0.0", - "description": "", + "version": "0.1.0", + "repository": { + "type": "git", + "url": "http://github.com/pockethost/pockethost/packages/plugin-console-logger" + }, + "description": "A console logger for pockethost.", "main": "src/index.ts", "module": "src/index.ts", "types": "src/index.ts", "type": "module", - "scripts": {}, - "keywords": [], - "author": "", - "license": "ISC", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [ + "pockethost" + ], + "author": { + "name": "Ben Allfree", + "url": "https://github.com/benallfree" + }, + "license": "MIT", + "devDependencies": { + "@types/json-stringify-safe": "^5.0.2", + "@types/node": "^20.8.10", + "typescript": "^5.4.5" + }, "dependencies": { - "pockethost": "workspace:../pockethost" + "json-stringify-safe": "^5.0.1", + "pockethost": "workspace:^1.3.0" } } diff --git a/packages/plugin-console-logger/readme.md b/packages/plugin-console-logger/readme.md new file mode 100644 index 00000000..595d0d8d --- /dev/null +++ b/packages/plugin-console-logger/readme.md @@ -0,0 +1,23 @@ +# plugin-console-logger + +A console logging plugin for [pockethost](https://www.npmjs.com/package/pockethost). + +This plugin will listen for `core_log` events and output them to the console. + +## Quickstart + +```bash +npx pockethost plugin install @pockethost/plugin-console-logger +``` + +Note: this plugin is installed by default. + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/packages/plugin-console-logger/src/index.ts b/packages/plugin-console-logger/src/index.ts index 9fc532a9..fd451216 100644 --- a/packages/plugin-console-logger/src/index.ts +++ b/packages/plugin-console-logger/src/index.ts @@ -1,9 +1,10 @@ +import stringify from 'json-stringify-safe' import { LogLevelName, PocketHostPlugin, isLevelGte, isLevelLte, - stringify, + onLogAction, } from 'pockethost' export const LogLevelConsoleMap = { @@ -16,39 +17,38 @@ export const LogLevelConsoleMap = { [LogLevelName.Abort]: console.error, } as const -const plugin: PocketHostPlugin = async ({ registerAction }) => { - registerAction( - `log`, - async (currentLevel: LogLevelName, levelIn: LogLevelName, args: any[]) => { - if (!isLevelGte(levelIn, currentLevel)) return - const finalArgs = [args.shift()] - while (args.length > 0) { - let arg = args.shift() - const t = typeof arg - if (arg instanceof Error) { - finalArgs.push(...[arg.name, arg.message.toString()]) - if (isLevelLte(levelIn, LogLevelName.Debug) && arg.stack) { - finalArgs.push(...arg.stack.split(/\n/)) - } - continue +const plugin: PocketHostPlugin = async ({}) => { + onLogAction(async ({ currentLevel, levelIn, args }) => { + if (!isLevelGte(levelIn, currentLevel)) return + const finalArgs = [] + if (args.length > 0) { + finalArgs.push(args.shift()) + } + while (args.length > 0) { + let arg = args.shift() + if (arg instanceof Error) { + finalArgs.push(...[arg.name, arg.message.toString()]) + if (isLevelLte(levelIn, LogLevelName.Debug) && arg.stack) { + finalArgs.push(...arg.stack.split(/\n/)) } - if (t === 'string' && !!arg.match(/\n/)) { - finalArgs.push(...arg.split(/\n/)) - continue - } - if (t === 'object') { - finalArgs.push(...stringify(arg, undefined, 2).split(/\n/)) - continue - } - if (t === 'function') { - finalArgs.push(`<>`) - continue - } - finalArgs.push(arg) + continue } - LogLevelConsoleMap[levelIn](...finalArgs) - }, - ) + if (typeof arg === 'string') { + finalArgs.push(arg) + continue + } + if (typeof arg === 'object') { + finalArgs.push(stringify(arg, null, 2)) + continue + } + if (typeof arg === 'function') { + finalArgs.push(`<>`) + continue + } + finalArgs.push(arg) + } + LogLevelConsoleMap[levelIn](...finalArgs) + }) } export default plugin diff --git a/packages/plugin-console-logger/tsconfig.json b/packages/plugin-console-logger/tsconfig.json index bb2f7f66..d0035bbf 100644 --- a/packages/plugin-console-logger/tsconfig.json +++ b/packages/plugin-console-logger/tsconfig.json @@ -1,109 +1,20 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] } diff --git a/packages/plugin-launcher-spawn/.npmignore b/packages/plugin-launcher-spawn/.npmignore new file mode 100644 index 00000000..82c5072b --- /dev/null +++ b/packages/plugin-launcher-spawn/.npmignore @@ -0,0 +1,6 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md +!CHANGELOG.md \ No newline at end of file diff --git a/packages/plugin-launcher-spawn/CHANGELOG.md b/packages/plugin-launcher-spawn/CHANGELOG.md new file mode 100644 index 00000000..23a28879 --- /dev/null +++ b/packages/plugin-launcher-spawn/CHANGELOG.md @@ -0,0 +1,23 @@ +# @pockethost/plugin-launcher-spawn + +## 0.1.0 + +### Minor Changes + +- 2fc2eeb: Added before/after instance start/stop events +- 1384a86: BREAKING: refactored actions/filters + +### Patch Changes + +- 2722a5d: Fix: support directory names with spaces +- aa08447: Internal updates to database management +- f1abbd8: Added readme.md +- c0d9441: Fixed issue where demo URL wasn't displaying the correct URL in some cases. +- Updated dependencies [cc4aa02] + - pockethost@1.3.0 + +## 0.0.2 + +### Patch Changes + +- 76d57f6: CHANGELOG.md is now published with package. diff --git a/packages/plugin-launcher-spawn/LICENSE.md b/packages/plugin-launcher-spawn/LICENSE.md new file mode 100644 index 00000000..6f385987 --- /dev/null +++ b/packages/plugin-launcher-spawn/LICENSE.md @@ -0,0 +1,16 @@ +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/packages/plugin-launcher-spawn/package.json b/packages/plugin-launcher-spawn/package.json new file mode 100644 index 00000000..2c38eefc --- /dev/null +++ b/packages/plugin-launcher-spawn/package.json @@ -0,0 +1,34 @@ +{ + "name": "@pockethost/plugin-launcher-spawn", + "version": "0.1.0", + "repository": { + "type": "git", + "url": "http://github.com/pockethost/pockethost/packages/plugin-launcher-spawn" + }, + "description": "A spawn()-based launcher for pockethost.", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "keywords": [ + "pockethost" + ], + "author": { + "name": "Ben Allfree", + "url": "https://github.com/benallfree" + }, + "license": "MIT", + "dependencies": { + "@types/node": "^20.8.10", + "@types/semver": "^7.5.4", + "async-mutex": "^0.5.0", + "bottleneck": "^2.19.5", + "get-port": "^6.1.2", + "gobot": "1.0.0-alpha.40", + "semver": "^7.6.2", + "pockethost": "workspace:^1.3.0" + }, + "devDependencies": { + "typescript": "^5.4.5" + } +} diff --git a/packages/plugin-launcher-spawn/readme.md b/packages/plugin-launcher-spawn/readme.md new file mode 100644 index 00000000..7982eb20 --- /dev/null +++ b/packages/plugin-launcher-spawn/readme.md @@ -0,0 +1,32 @@ +# plugin-launcher-spawn + +A `spawn()`-based PocketBase launcher plugin for [pockethost](https://www.npmjs.com/package/pockethost). + +This plugin will listen for incoming request events and respond by launching the requested PocketBase version using `spawn()`. Note that `spawn()` should only be used in trusted environments such as development environments or homogeneous servers where all PocketBase instances are under your complete control. + +## Quickstart + +```bash +npx pockethost plugin install @pockethost/plugin-launcher-spawn +``` + +Note: this plugin is installed by default. + +## Events + +| Name | Discussion | +| --------------------------------- | ---------- | +| doInstanceLogAction | | +| onAfterServerStartAction | | +| onGetOrProvisionInstanceUrlFilter | | +| onNewInstanceRecordFilter | | + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/packages/plugin-launcher-spawn/src/index.ts b/packages/plugin-launcher-spawn/src/index.ts new file mode 100644 index 00000000..cb6a6ff2 --- /dev/null +++ b/packages/plugin-launcher-spawn/src/index.ts @@ -0,0 +1,233 @@ +import { Mutex } from 'async-mutex' +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs' +import getPort from 'get-port' +import { gobot } from 'gobot' +import { join } from 'path' +import { + APEX_DOMAIN, + INSTANCE_DATA_DIR, + LoggerService, + PH_HOME, + PORT, + PocketHostPlugin, + doAfterInstanceStartedAction, + doAfterInstanceStoppedAction, + doInstanceLogAction, + exitHook, + mkInstance, + onAfterInstanceFoundAction, + onAfterServerStartAction, + onGetInstanceByRequestInfoFilter, + onGetOrProvisionInstanceUrlFilter, + onNewInstanceRecordFilter, + tryFetch, +} from 'pockethost/core' +import { gte } from 'semver' + +const HOME = + process.env.PH_BASIC_LAUNCHER_HOME || join(PH_HOME(), `plugin-basic-launcher`) + +const logger = LoggerService().create('plugin-basic-launcher') +export const { dbg, info } = logger + +export type InstanceFields = { + subdomain: string + version: string + secrets: { [_: string]: string } + dev: boolean +} + +const escape = (path: string) => `"${path}"` + +const metaPath = (name: string) => { + const instanceRootDir = INSTANCE_DATA_DIR(name) + mkdirSync(instanceRootDir, { recursive: true }) + const instanceMetaFile = INSTANCE_DATA_DIR(name, `meta.json`) + return instanceMetaFile +} + +const readMeta = (path: string) => + JSON.parse(readFileSync(path, 'utf-8').toString()) + +const getOrCreateMeta = async (name: string) => { + const instanceMetaFile = metaPath(name) + const meta = await (async () => { + if (!existsSync(instanceMetaFile)) { + const meta = await mkInstance(name) + writeFileSync(instanceMetaFile, JSON.stringify(meta, null, 2)) + } + const meta = readMeta(instanceMetaFile) + return meta + })() + return meta +} + +const writeMeta = async (instance: InstanceFields) => { + const { subdomain } = instance + const instanceMetaFile = metaPath(subdomain) + writeFileSync(instanceMetaFile, JSON.stringify(instance, null, 2)) +} + +const plugin: PocketHostPlugin = async ({}) => { + /** Display some informational alerts to help the user get started. */ + onAfterServerStartAction(async () => { + info(`Listening for requests on *.${APEX_DOMAIN()}`) + const protocol = PORT() === 443 ? 'https' : 'http' + const url = new URL(`${protocol}://hello.${APEX_DOMAIN()}`) + url.port = `${PORT() === 80 || PORT() == 443 ? '' : PORT()}` + info(`Try visiting ${url}`) + }) + + /** When a request comes in, return an instance based on subdomain */ + onGetInstanceByRequestInfoFilter(async (instance, context) => { + const { subdomain } = context + const meta = await getOrCreateMeta(subdomain) + return { ...instance, ...meta } + }) + + /** + * When a new instance model is instantiated, this filter gives listeners a + * chance to augment or update the instance data. + * + * In this case, the instance data is restored from a local db. + */ + onNewInstanceRecordFilter(async (instance) => { + const { subdomain } = instance + const path = metaPath(subdomain) + if (!existsSync(path)) return instance + const meta = await readMeta(path) + return { ...instance, ...meta } + }) + + /** After an instance has been found, store it to the db */ + onAfterInstanceFoundAction(async (context) => { + const { instance } = context + await writeMeta(instance) + }) + + const instances: { [_: string]: Promise } = {} + + const launchMutex = new Mutex() + + /** + * The workhorse. This filter is responsible for launching PocketBase and + * returning an endpoint URL. + */ + onGetOrProvisionInstanceUrlFilter(async (url: string, { instance }) => { + const { dev, subdomain, version, secrets } = instance + + if (subdomain in instances) return instances[subdomain]! + + dbg({ instance }) + return (instances[subdomain] = new Promise( + async (resolve, reject) => { + const bot = await gobot(`pocketbase`, { version }) + const realVersion = await bot.maxSatisfyingVersion(version) + if (!realVersion) { + throw new Error(`No PocketBase version satisfying ${version}`) + } + + return launchMutex.runExclusive(async () => { + dbg(`got lock`) + const port = await getPort() + const args = [ + `serve`, + `--dir`, + escape(INSTANCE_DATA_DIR(subdomain, `pb_data`)), + `--hooksDir`, + escape(INSTANCE_DATA_DIR(subdomain, `pb_hooks`)), + `--migrationsDir`, + escape(INSTANCE_DATA_DIR(subdomain, `pb_migrations`)), + `--publicDir`, + escape(INSTANCE_DATA_DIR(subdomain, `pb_public`)), + `--http`, + `0.0.0.0:${port}`, + ] + if (dev && gte(realVersion, `0.20.1`)) args.push(`--dev`) + doInstanceLogAction({ + instance, + type: 'stdout', + data: `Launching: ${await bot.getBinaryFilePath()} ${args.join( + ' ', + )}`, + }) + bot.run(args, { env: secrets }, (proc) => { + proc.stdout.on('data', (data) => { + data + .toString() + .trim() + .split(`\n`) + .forEach((line: string) => { + doInstanceLogAction({ + instance, + type: 'stdout', + data: line, + }) + }) + }) + proc.stderr.on('data', (data) => { + data + .toString() + .trim() + .split(`\n`) + .forEach((line: string) => { + doInstanceLogAction({ + instance, + type: 'stderr', + data: line, + }) + }) + }) + + const unsub = exitHook(() => { + dbg(`killing ${subdomain}`) + doInstanceLogAction({ + instance, + type: 'stdout', + data: `Forcibly killing PocketBase process`, + }) + proc.kill() + }) + proc.on('exit', (code) => { + unsub() + delete instances[subdomain] + doInstanceLogAction({ + instance, + type: 'stdout', + data: `PocketBase process exited with code ${code}`, + }) + doAfterInstanceStoppedAction({ instance, url }) + dbg(`${subdomain} process exited with code ${code}`) + }) + const url = `http://localhost:${port}` + doInstanceLogAction({ + instance, + type: 'stdout', + data: `Waiting for PocketBase to start on ${url}`, + }) + tryFetch(url) + .then(() => { + doInstanceLogAction({ + instance, + type: 'stdout', + data: `PocketBase started on ${url}`, + }) + doAfterInstanceStartedAction({ instance, url }) + return resolve(url) + }) + .catch((e) => { + doInstanceLogAction({ + instance, + type: 'stderr', + data: `PocketBase failed to start on ${url}: ${e}`, + }) + reject(e) + }) + }) + }) + }, + )) + }) +} + +export default plugin diff --git a/packages/plugin-launcher-spawn/tsconfig.json b/packages/plugin-launcher-spawn/tsconfig.json new file mode 100644 index 00000000..0f098a71 --- /dev/null +++ b/packages/plugin-launcher-spawn/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"], + "exclude": ["./src/mothership-app/**/*", "./src/instance-app/**/*"] +} diff --git a/packages/pockethost-instance/package.json b/packages/pockethost-instance/package.json deleted file mode 100644 index 9954e73b..00000000 --- a/packages/pockethost-instance/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "pockethost-instance", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "build": "docker build . -t benallfree/pockethost-instance:${npm_package_version} -t benallfree/pockethost-instance:latest" - }, - "keywords": [], - "author": "", - "license": "ISC" -} diff --git a/packages/pockethost/.npmignore b/packages/pockethost/.npmignore new file mode 100644 index 00000000..f7130f53 --- /dev/null +++ b/packages/pockethost/.npmignore @@ -0,0 +1,6 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md +!CHANGELOG.md diff --git a/packages/pockethost/CHANGELOG.md b/packages/pockethost/CHANGELOG.md new file mode 100644 index 00000000..a2145319 --- /dev/null +++ b/packages/pockethost/CHANGELOG.md @@ -0,0 +1,49 @@ +# pockethost + +## 1.3.1 + +### Patch Changes + +- 8288197: Added plugin authoring guide + +## 1.3.0 + +### Minor Changes + +- 96f355a: Now auto-creates first admin account by default +- 2fc2eeb: Added before/after instance start/stop events +- 3f99ea0: Added subdomain to request action and filter context +- 1384a86: BREAKING: refactored actions/filters + +### Patch Changes + +- 6812784: Added improved error parsing support +- da82667: Fix: properly determine hostname when running on nonstandard port +- cc4aa02: Moved mothership-related code into mothership plugin +- Updated dependencies [9d626ec] + - @pockethost/plugin-launcher-spawn@0.1.0 + - @pockethost/plugin-console-logger@0.1.0 + +## 1.2.0 + +### Minor Changes + +- 72a6c6d: --version now displays version number +- ac10d1f: Display notification when new pockethost update is available. +- f9aea10: Debugging info removed from `plugin ls` + +### Patch Changes + +- 76d57f6: CHANGELOG.md is now published with package. +- 3783447: plugin-console-logger and plugin-launcher-spawn are now automatically installed. + +## 1.1.0 + +### Minor Changes + +- 1695b59: New feature: list plugins (pockethost plugin ls) + +### Patch Changes + +- 2514c09: Fix: make sure PH_PLUGINS contains only unique values. +- 1228840: Fixed extra newline when listing configs diff --git a/packages/pockethost/package.json b/packages/pockethost/package.json index e22d3a22..19d17bb1 100644 --- a/packages/pockethost/package.json +++ b/packages/pockethost/package.json @@ -1,6 +1,6 @@ { "name": "pockethost", - "version": "0.11.0", + "version": "1.3.1", "author": { "name": "Ben Allfree", "url": "https://github.com/benallfree" @@ -13,96 +13,49 @@ "pockethost": "src/cli/index.ts" }, "scripts": { - "check:types": "tsc --noEmit ", - "dev": "NODE_ENV=development dotenvx run -f ../../.env -- tsx ./src/cli/index.ts", - "start": "dotenvx run -f ../../.env -- tsx ./src/cli/index.ts", - "mail": "dotenvx run -f ../../.env -- tsx ./src/cli/sendmail.ts" + "check-types": "tsc --noEmit ", + "lint": "prettier -c \"./**/*.{ts,js,cjs,svelte,json}\"", + "dev": "NODE_ENV=development tsx --watch ./src/cli/index.ts", + "start": "tsx ./src/cli/index.ts" }, "dependencies": { - "@dotenvx/dotenvx": "^0.44.1", - "pockethost": "workspace:../pockethost", - "@pockethost/plugin-console-logger": "workspace:../plugin-console-logger", "@s-libs/micro-dash": "^16.1.0", - "@types/node-os-utils": "^1.3.4", - "@types/winston-syslog": "^2.4.3", "ajv": "^8.12.0", "boolean": "^3.2.0", "bottleneck": "^2.19.5", + "chalk": "^5.3.0", "commander": "^11.1.0", - "cors": "^2.8.5", - "decompress": "^4.2.1", - "decompress-unzip": "https://github.com/pockethost/decompress-unzip.git#6ef397b9a2df11d39c7b26ce779e123833844751", - "devcert": "^1.2.2", - "dockerode": "^3.3.5", + "dotenv": "^16.3.1", "env-paths": "^3.0.0", - "event-source-polyfill": "^1.0.31", - "eventsource": "^2.0.2", "exit-hook": "^4.0.0", "express": "^4.18.2", "express-async-errors": "^3.1.1", - "express-sslify": "^1.2.0", - "ftp-srv": "github:pockethost/ftp-srv#0fc708bae0d5d7a55ce948767f082d6fcfb2af59", "get-port": "^6.1.2", - "glob": "^10.3.10", - "gobot": "1.0.0-alpha.40", - "gobot-pocketbase": "0.22.8-alpha.22", "http-proxy": "^1.18.1", - "http-proxy-middleware": "^2.0.6", - "ip-cidr": "^3.1.0", - "knex": "^2.5.1", - "memorystream": "^0.3.1", - "node-fetch": "^3.3.2", - "node-os-utils": "^1.3.7", - "rimraf": "^5.0.5", - "semver": "^7.5.4", - "sqlite3": "^5.1.6", - "syslog-parse": "^2.0.0", - "tail": "^2.2.6", - "tmp": "^0.2.1", - "url-pattern": "^1.0.3", - "vhost": "^3.0.2", - "winston": "^3.11.0", - "winston-syslog": "^2.7.0", - "chalk": "^5.3.0", "json-stringify-safe": "^5.0.1", + "listr2": "^8.2.3", "nanoid": "^5.0.2", - "pocketbase": "^0.21.3" + "node-fetch": "^3.3.2", + "pocketbase": "^0.21.3", + "rimraf": "^5.0.5", + "semver": "^7.6.2", + "tmp": "^0.2.1", + "tsx": "^4.15.7", + "type-fest": "^4.6.0", + "typescript": "^5.4.5", + "update-notifier": "^7.0.0", + "url-pattern": "^1.0.3", + "@pockethost/plugin-console-logger": "workspace:^", + "@pockethost/plugin-launcher-spawn": "workspace:^", + "@pockethost/plugin-auto-admin": "workspace:^" }, "devDependencies": { - "@types/json-stringify-safe": "^5.0.2", - "@types/cors": "^2.8.17", - "@types/d3-scale": "^4.0.6", - "@types/d3-scale-chromatic": "^3.0.1", - "@types/decompress": "^4.2.6", - "@types/dockerode": "^3.3.21", - "@types/eventsource": "^1.1.14", "@types/express": "^4.17.21", - "@types/express-sslify": "^1.2.5", "@types/http-proxy": "^1.17.13", - "@types/inquirer": "^9.0.7", - "@types/js-cookie": "^3.0.5", - "@types/js-yaml": "^4.0.9", - "@types/memorystream": "^0.3.3", - "@types/ncp": "^2.0.8", + "@types/json-stringify-safe": "^5.0.2", "@types/node": "^20.8.10", "@types/semver": "^7.5.4", - "@types/tail": "^2.2.2", "@types/tmp": "^0.2.5", - "@types/unzipper": "^0.10.8", - "@types/vhost": "^3.0.9", - "chokidar-cli": "^3.0.0", - "concurrently": "^8.2.2", - "copyfiles": "^2.4.1", - "date-fns": "^2.30.0", - "express": "^4.18.2", - "http-proxy-middleware": "^2.0.6", - "inquirer": "^9.2.15", - "ip-cidr": "^3.1.0", - "js-yaml": "^4.1.0", - "ncp": "^2.0.0", - "nodemon": "^3.0.3", - "ora": "^7.0.1", - "postinstall-postinstall": "^2.1.0", - "type-fest": "^4.6.0" + "@types/update-notifier": "^6.0.8" } } diff --git a/packages/pockethost/plugin-guide.md b/packages/pockethost/plugin-guide.md new file mode 100644 index 00000000..8dcdcfc1 --- /dev/null +++ b/packages/pockethost/plugin-guide.md @@ -0,0 +1,45 @@ +# PocketHost Plugin Authoring Guide + +## Introduction + +PocketHost features a plugin architecture where various hooks and events are exposed throughout the lifecycle of the server and PocketBase instances. + +A core set of hooks are available, and plugins are also allowed to introduce their own hooks. + +_Action_ hooks have side effects and are executed in any order. When an action is fired, it will await all handlers. Think of a `map` operation. + +_Filter_ hooks should have no side effects and return a single value. Think of a `reduce` operation. + +All hooks follow a specific naming convention: + +`doAction`/`doFilter` - Execute an action or filter, optionally with context. + +Example: + +```ts +const url = await doGetOrProvisionInstanceUrlFilter('', { + req, + res, + instance, + host, + subdomain, +}) +``` + +`onAction`/`onFilter` - Listen for an action or filter. + +Example: + +```ts +onLogAction(async ({ currentLevel, levelIn, args }) => { + console.log(...args) +}) +``` + +## Creating a plugin + +A plugin is an npm package. Run `pockethost plugin create ` to create a new plugin in the current directory. From there, use `import { onLogAction } from 'pockethost/core` to import hooks. Define your own with `createCustomFilter`/`createCustomFilterWithContext` and `createCustomAction`/`createCustomActionWithContext`. + +## Core Actions + +## Core Filters diff --git a/packages/pockethost/readme.md b/packages/pockethost/readme.md new file mode 100644 index 00000000..a9fb7b06 --- /dev/null +++ b/packages/pockethost/readme.md @@ -0,0 +1,70 @@ +# PocketHost + +PocketHost is the open source multi-tenant PocketBase server. PocketHost can run dozens, hundreds, even thousands of PocketBase instances on a single server or across a global cloud. + +Extend PocketHost with its Plugin ecosystem. Start with the bare-bones dev server and add plugins to grow your enterprise into a global cloud. + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- + +## Quickstart + +``` +npx pockethost serve +``` + +## Configuration + +PocketHost supports configuration by environment variable. All PocketHost environment variables begin with `PH_`. + +PocketHost will search the current directory for an `.env` when it loads. Anything in `.env` will be merged with and override any `/.env` that may exist. + +Use `pockethost config` to set global defaults stored in `/.env`. + +### Variables + +| Name | Default | Discussion | +| -------------- | -------------------------- | ----------------------------------------------------------------------------- | +| PH_HOME | `~/.pockethost` | PocketHost's home directory where it holds all data. | +| PH_APEX_DOMAIN | `pockethost.lvh.me` | The apex domain used for routing and determining instance names. | +| PH_PORT | `3000` | The port PocketHost listens on | +| PH_DEBUG | `NODE_ENV==='development'` | Debug mode | +| PH_PLUGINS | (see below) | A comma-separated list of Plugins to load | +| PH_DATA_DIR | `~/.pockethost/data` | The root directory for storing PocketHost data, including instance databases. | +| PH_DEV | `NODE_ENV==='development'` | Whether PocketHost is running in development mode. | + +### Default Plugins + +- `@pockethost/plugin-console-logger` +- `@pockethost/plugin-launcher-spawn` +- `@pockethost/plugin-auto-admin` + +## Plugins + +PocketHost uses a hook architecture and features a growing list plugins. Some plugins have a CLI component, whereas others add purely programmatic support to alter how PocketHost works: + +Current plugins: + +| name | description | +| --------------------- | ------------------------------------------------------------------------------------------------- | +| plugin-console-logger | Routes log messages to the console | +| plugin-auto-admin | Auto-creates a default admin account on instance launch | +| plugin-launcher-spawn | Launches PocketBase instances via `spawn()` on the local machine. PocketHost uses this by default | + +Coming soon: +| name | description | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| plugin-ftp-server | Used to provide secure FTPS access to PocketBase instance data. This FTP server can run along-side a PocketHost server. | +| plugin-launcher-docker | Launches PocketBase instances via Docker. This is useful for running untrusted PocketBase code and instances. pockethost.io uses this. | +| plugin-waf | A Web Application Firewall | +| plugin-waf-enforce-ssl | Enforce SSL at the +WAF + +See the [./plugin-guide.md](Plugin Authoring Guide) for details about what hooks and filters are available. + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). diff --git a/packages/pockethost/src/cli/commands/ConfigCommand/index.ts b/packages/pockethost/src/cli/commands/ConfigCommand/index.ts new file mode 100644 index 00000000..b927e404 --- /dev/null +++ b/packages/pockethost/src/cli/commands/ConfigCommand/index.ts @@ -0,0 +1,99 @@ +import { forEach, keys, omit } from '@s-libs/micro-dash' +import { Command } from 'commander' +import { parse } from 'dotenv' +import { existsSync, readFileSync, writeFileSync } from 'fs' +import { info } from '../..' +import { PH_HOME, isSettingKey, settings } from '../../../constants' + +const envFile = () => { + const envFile = PH_HOME(`.env`) + if (!existsSync(envFile)) { + writeFileSync(envFile, '') + } + return envFile +} + +const _parse = () => + parse(readFileSync(envFile(), { encoding: 'utf8' }).toString()) + +export const ConfigCommand = () => { + const cmd = new Command(`config`) + .description(`Set global config defaults`) + .addCommand( + new Command(`set`) + .argument(``, `Config name`) + .argument(``, `Config value`) + .description(`Set a config value`) + .action((name, value) => { + if (!isSettingKey(name)) + throw new Error(`Invalid setting name ${name}`) + + if (value === '=') throw new Error(`Invalid value ${value}`) + + const values = _parse() + values[name] = value + writeFileSync( + envFile(), + Object.entries(values) + .map(([k, v]) => `${k}=${v}`) + .join('\n'), + ) + info(`Set ${name}=${value}`) + info(`Written to ${envFile()}`) + }), + ) + + .addCommand( + new Command(`unset`) + .argument(``, `Config name`) + .description(`Unset a config value`) + .action((name) => { + if (!isSettingKey(name)) + throw new Error(`Invalid setting name ${name}`) + + const values = _parse() + delete values[name] + writeFileSync( + envFile(), + Object.entries(values) + .map(([k, v]) => `${k}=${v}`) + .join('\n'), + ) + info(`Unset ${name}`) + info(`Written to ${envFile()}`) + }), + ) + .addCommand( + new Command(`list`) + .description(`List all config values`) + .alias(`ls`) + .action(() => { + const values = _parse() + + if (keys(values).length > 0) { + info() + info(`Config values from ${envFile()}:`) + forEach(values, (v, k) => { + info(`\t${k}=${v}`) + }) + info() + } else { + info(`No config values found in ${envFile()}`) + } + + const defaults = omit(settings, keys(values) as any) + if (keys(defaults).length > 0) { + info(`Default values:`) + forEach(settings, (v, k) => { + if (k in values) return + info(`\t${k}=${v}`) + }) + } else { + info( + `No default values because all values are defined in ${envFile()}`, + ) + } + }), + ) + return cmd +} diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/daemon.ts b/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/daemon.ts deleted file mode 100644 index 7ebe8b3c..00000000 --- a/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/daemon.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { ErrorRequestHandler } from 'express' -import { LoggerService } from '../../../../../common' -import { - MOTHERSHIP_ADMIN_PASSWORD, - MOTHERSHIP_ADMIN_USERNAME, - MOTHERSHIP_INTERNAL_URL, - discordAlert, - tryFetch, -} from '../../../../../core' -import { - MothershipAdminClientService, - PocketbaseService, - PortService, - instanceService, - proxyService, - realtimeLog, -} from '../../../../../services' - -export async function daemon() { - const logger = LoggerService().create(`EdgeDaemonCommand`) - const { dbg, error, info, warn } = logger - info(`Starting`) - - await PortService({}) - await PocketbaseService({}) - - await tryFetch(`${MOTHERSHIP_INTERNAL_URL(`/api/health`)}`, {}) - - info(`Serving`) - - /** Launch services */ - await MothershipAdminClientService({ - url: MOTHERSHIP_INTERNAL_URL(), - username: MOTHERSHIP_ADMIN_USERNAME(), - password: MOTHERSHIP_ADMIN_PASSWORD(), - }) - - await proxyService({ - coreInternalUrl: MOTHERSHIP_INTERNAL_URL(), - }) - await realtimeLog({}) - await instanceService({ - instanceApiCheckIntervalMs: 50, - instanceApiTimeoutMs: 5000, - }) - - const errorHandler: ErrorRequestHandler = (err: Error, req, res, next) => { - console.log(`###error`, err) - discordAlert(err) - res.status(500).send(err.toString()) - } - ;(await proxyService()).use(errorHandler) -} diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/index.ts b/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/index.ts deleted file mode 100644 index d53e44aa..00000000 --- a/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/ServeCommand/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Command } from 'commander' -import { daemon } from './daemon' - -type Options = { - debug: boolean -} - -export const ServeCommand = () => { - const cmd = new Command(`serve`) - .description(`Run an edge daemon server`) - .action(async (options: Options) => { - await daemon() - }) - return cmd -} diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/index.ts b/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/index.ts deleted file mode 100644 index ffc30e85..00000000 --- a/packages/pockethost/src/cli/commands/EdgeCommand/DaemonCommand/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Command } from 'commander' -import { ServeCommand } from './ServeCommand' - -type Options = { - debug: boolean -} - -export const DaemonCommand = () => { - const cmd = new Command(`daemon`) - .description(`Daemon commands`) - .addCommand(ServeCommand()) - return cmd -} diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/ServeCommand/ftp.ts b/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/ServeCommand/ftp.ts deleted file mode 100644 index 9bc1720a..00000000 --- a/packages/pockethost/src/cli/commands/EdgeCommand/FtpCommand/ServeCommand/ftp.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { LoggerService } from '../../../../../common' -import { MOTHERSHIP_INTERNAL_URL, tryFetch } from '../../../../../core' -import { ftpService } from '../FtpService' - -export async function ftp() { - const logger = LoggerService().create(`EdgeFtpCommand`) - const { dbg, error, info, warn } = logger - info(`Starting`) - - await tryFetch(`${MOTHERSHIP_INTERNAL_URL(`/api/health`)}`, {}) - - await ftpService({ - mothershipUrl: MOTHERSHIP_INTERNAL_URL(), - }) -} diff --git a/packages/pockethost/src/cli/commands/EdgeCommand/index.ts b/packages/pockethost/src/cli/commands/EdgeCommand/index.ts deleted file mode 100644 index 73045c39..00000000 --- a/packages/pockethost/src/cli/commands/EdgeCommand/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Command } from 'commander' -import { DaemonCommand } from './DaemonCommand' -import { FtpCommand } from './FtpCommand' -import { SyslogCommand } from './SyslogCommand' - -type Options = { - debug: boolean -} - -export const EdgeCommand = () => { - const cmd = new Command(`edge`).description(`Edge commands`) - - cmd - .addCommand(DaemonCommand()) - .addCommand(FtpCommand()) - .addCommand(SyslogCommand()) - return cmd -} diff --git a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/cidr.ts b/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/cidr.ts deleted file mode 100644 index 34e7f5a7..00000000 --- a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/cidr.ts +++ /dev/null @@ -1,23 +0,0 @@ -import express from 'express' -import IPCIDR from 'ip-cidr' - -// Middleware factory to create an IP blocking middleware based on CIDR ranges -export const createIpWhitelistMiddleware = (blockedCIDRs: string[]) => { - const blockedCIDRObjects = blockedCIDRs.map((cidr) => new IPCIDR(cidr)) - - return ( - req: express.Request, - res: express.Response, - next: express.NextFunction, - ) => { - const ip = req.ip // or req.headers['x-forwarded-for'] || req.connection.remoteAddress; - if ( - blockedCIDRs.length === 0 || - blockedCIDRObjects.some((cidr) => cidr.contains(ip)) - ) { - next() - } else { - res.status(403).send('Nope') - } - } -} diff --git a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/server.ts b/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/server.ts deleted file mode 100644 index d04525f0..00000000 --- a/packages/pockethost/src/cli/commands/FirewallCommand/ServeCommand/firewall/server.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { forEach } from '@s-libs/micro-dash' -import cors from 'cors' -import express, { ErrorRequestHandler } from 'express' -import 'express-async-errors' -import enforce from 'express-sslify' -import fs from 'fs' -import http from 'http' -import { createProxyMiddleware } from 'http-proxy-middleware' -import https from 'https' -import { LoggerService } from '../../../../../common' -import { - APEX_DOMAIN, - APP_NAME, - DAEMON_PORT, - IPCIDR_LIST, - IS_DEV, - MOTHERSHIP_NAME, - MOTHERSHIP_PORT, - SSL_CERT, - SSL_KEY, - discordAlert, -} from '../../../../../core' -import { createIpWhitelistMiddleware } from './cidr' -import { createVhostProxyMiddleware } from './createVhostProxyMiddleware' - -export const firewall = async () => { - const { debug } = LoggerService().create(`proxy`) - - const PROD_ROUTES = { - [`${MOTHERSHIP_NAME()}.${APEX_DOMAIN()}`]: `http://localhost:${MOTHERSHIP_PORT()}`, - } - const DEV_ROUTES = { - [`mail.${APEX_DOMAIN()}`]: `http://localhost:${1080}`, - [`${MOTHERSHIP_NAME()}.${APEX_DOMAIN()}`]: `http://localhost:${MOTHERSHIP_PORT()}`, - [`${APP_NAME()}.${APEX_DOMAIN()}`]: `http://localhost:${5174}`, - [`superadmin.${APEX_DOMAIN()}`]: `http://localhost:${5175}`, - [`${APEX_DOMAIN()}`]: `http://localhost:${8080}`, - } - const hostnameRoutes = IS_DEV() ? DEV_ROUTES : PROD_ROUTES - - // Create Express app - const app = express() - - app.options('*', cors()) // include before other routes - app.use(cors()) - app.use(enforce.HTTPS()) - - // Use the IP blocker middleware - app.use(createIpWhitelistMiddleware(IPCIDR_LIST())) - - forEach(hostnameRoutes, (target, host) => { - app.use(createVhostProxyMiddleware(host, target, IS_DEV())) - }) - - app.get(`/_api/health`, (req, res, next) => { - res.json({ status: 'ok' }) - res.end() - }) - - // Fall-through - const handler = createProxyMiddleware({ - target: `http://localhost:${DAEMON_PORT()}`, - }) - app.all(`*`, (req, res, next) => { - const method = req.method - const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl - - debug(`${method} ${fullUrl} -> ${`http://localhost:${DAEMON_PORT()}`}`) - - handler(req, res, next) - }) - - const errorHandler: ErrorRequestHandler = (err, req, res, next) => { - discordAlert(err.toString()) - res.status(500).send(err.toString()) - } - app.use(errorHandler) - - http.createServer(app).listen(80, () => { - console.log('SSL redirect server listening on 80') - }) - - // HTTPS server options - const httpsOptions = { - key: fs.readFileSync(SSL_KEY()), - cert: fs.readFileSync(SSL_CERT()), - } - - // Create HTTPS server - https.createServer(httpsOptions, app).listen(443, () => { - console.log('HTTPS server running on port 443') - }) -} diff --git a/packages/pockethost/src/cli/commands/HealthCommand/checkHealth.ts b/packages/pockethost/src/cli/commands/HealthCommand/checkHealth.ts deleted file mode 100644 index c5d0a732..00000000 --- a/packages/pockethost/src/cli/commands/HealthCommand/checkHealth.ts +++ /dev/null @@ -1,235 +0,0 @@ -import Bottleneck from 'bottleneck' -import { execSync } from 'child_process' -import fetch from 'node-fetch' -import { default as osu } from 'node-os-utils' -import { freemem } from 'os' -import { - DAEMON_PORT, - DISCORD_HEALTH_CHANNEL_URL, - LoggerService, - MOTHERSHIP_PORT, - discordAlert, - stringify, -} from '../../../../core' - -export const checkHealth = async () => { - const { cpu, drive } = osu - - const DISCORD_URL = DISCORD_HEALTH_CHANNEL_URL() - - const { dbg, error, info, warn } = LoggerService().create('edge-health.ts') - - info(`Starting`) - - try { - const _exec = (cmd: string) => - execSync(cmd, { shell: '/bin/bash', maxBuffer: 1024 * 1024 * 10 }) - .toString() - .split(`\n`) - - const openFiles = _exec(`lsof -n | awk '$4 ~ /^[0-9]/ {print}'`) - - type DockerPs = { - Command: string - CreatedAt: string - ID: string - Image: string - Labels: string - LocalVolumes: string - Mounts: string - Names: string - Networks: string - Ports: string - RunningFor: string - Size: string - State: string - Status: string - } - - const SAMPLE: DockerPs = { - Command: '"docker-entrypoint.s…"', - CreatedAt: '2024-01-23 04:36:09 +0000 UTC', - ID: '6e0921e84391', - Image: 'pockethost-instance', - Labels: '', - LocalVolumes: '0', - Mounts: - '/home/pocketho…,/home/pocketho…,/home/pocketho…,/home/pocketho…,/home/pocketho…', - Names: 'kekbase-1705984569777', - Networks: 'bridge', - Ports: '0.0.0.0:44447-\u003e8090/tcp, :::44447-\u003e8090/tcp', - RunningFor: '7 hours ago', - Size: '0B (virtual 146MB)', - State: 'running', - Status: 'Up 7 hours', - } - - type Check = { - name: string - priority: number - emoji: string - isHealthy: boolean - url: string - - // Instance - port?: number - ago?: string - mem?: string - created?: Date - } - - const containers = _exec(`docker ps --format '{{json .}}'`) - .filter((line) => line.trim()) - .map((line) => { - dbg(line) - return line - }) - .map((line) => JSON.parse(line) as DockerPs) - .map((rec) => { - const name = rec.Names.replace(/-\d+/, '') - const port = parseInt(rec.Ports.match(/:(\d+)/)?.[1] || '0', 10) - const mem = rec.Size.match(/(\d+MB)/)?.[1] || '0MB' - const created = new Date(rec.CreatedAt) - return { - name, - priority: 0, - emoji: ':octopus:', - port, - isHealthy: false, - url: `http://localhost:${port}/api/health`, - ago: rec.RunningFor, - mem, - created, - } - }) - - function getFreeMemoryInGB(): string { - const freeMemoryBytes: number = freemem() - const freeMemoryGB: number = freeMemoryBytes / Math.pow(1024, 3) - return freeMemoryGB.toFixed(2) // Rounds to 2 decimal places - } - - function splitIntoChunks( - lines: string[], - maxChars: number = 2000, - ): string[] { - const chunks: string[] = [] - let currentChunk: string = '' - - lines.forEach((line) => { - // Check if adding the next line exceeds the maxChars limit - if (currentChunk.length + line.length + 1 > maxChars) { - chunks.push(currentChunk) - currentChunk = '' - } - currentChunk += line + '\n' // Add the line and a newline character - }) - - // Add the last chunk if it's not empty - if (currentChunk) { - chunks.push(currentChunk) - } - - return chunks - } - - const limiter = new Bottleneck({ maxConcurrent: 1 }) - - const send = (lines: string[]) => - Promise.all( - splitIntoChunks(lines).map((content) => - limiter.schedule(() => - fetch(DISCORD_URL, { - method: 'POST', - body: stringify({ - content, - }), - headers: { 'content-type': 'application/json' }, - }), - ), - ), - ) - - await send([ - `===================`, - `Server: SFO-1`, - `${new Date()}`, - `CPUs: ${cpu.count()}`, - `CPU Usage: ${await cpu.usage()}%`, - `Free RAM: ${getFreeMemoryInGB()}GB`, - `Free Storage: ${(await drive.info(`/`)).freeGb}GB`, - `Open files: ${openFiles.length}`, - `Containers: ${containers.length}`, - ]) - - const checks: Check[] = [ - { - name: `edge proxy`, - priority: 10, - emoji: `:park:`, - isHealthy: false, - url: `https://proxy.pockethost.io/_api/health`, - }, - { - name: `edge daemon`, - priority: 8, - emoji: `:imp:`, - isHealthy: false, - url: `http://localhost:${DAEMON_PORT()}/_api/health`, - }, - { - name: `mothership`, - priority: 9, - emoji: `:flying_saucer:`, - isHealthy: false, - url: `http://localhost:${MOTHERSHIP_PORT()}/api/health`, - }, - ...containers, - ] - - await Promise.all( - checks.map(async (check) => { - const { url } = check - dbg({ container: check }) - try { - const res = await fetch(url) - dbg({ url, status: res.status }) - check.isHealthy = res.status === 200 - return true - } catch (e) { - dbg(`${url}: ${e}`) - check.isHealthy = false - } - }), - ) - dbg({ checks }) - await send([ - `---health checks---`, - ...checks - .sort((a, b) => { - if (a.priority > b.priority) return -1 - if (a.priority < b.priority) return 1 - const now = new Date() - const res = +(b.created || now) - +(a.created || now) - if (res) return res - return a.name.localeCompare(b.name) - }) - .map(({ name, isHealthy, emoji, mem, ago }) => { - const isInstance = !!mem - if (isInstance) { - return `${ - isHealthy ? ':white_check_mark:' : ':face_vomiting: ' - } \`${name.padStart(30)} ${(mem || '').padStart(10)} ${( - ago || '' - ).padStart(20)}\`` - } else { - return `${ - isHealthy ? ':white_check_mark:' : ':face_vomiting: ' - } ${name}` - } - }), - ]) - } catch (e) { - discordAlert(`${e}`) - } -} diff --git a/packages/pockethost/src/cli/commands/PluginCommand/index.ts b/packages/pockethost/src/cli/commands/PluginCommand/index.ts new file mode 100644 index 00000000..245badff --- /dev/null +++ b/packages/pockethost/src/cli/commands/PluginCommand/index.ts @@ -0,0 +1,122 @@ +import { uniq } from '@s-libs/micro-dash' +import { Command } from 'commander' +import { parse } from 'dotenv' +import { existsSync, readFileSync, writeFileSync } from 'fs' +import { error, info } from '../..' +import { PH_HOME, PH_PLUGINS, PH_PROJECT_DIR } from '../../../constants' +import { getCompatibleVersions, getPackageJson, removePackage } from './util' + +const envFile = () => { + const envFile = PH_HOME(`.env`) + if (!existsSync(envFile)) { + writeFileSync(envFile, '') + } + return envFile +} + +const _parse = () => + parse(readFileSync(envFile(), { encoding: 'utf8' }).toString()) + +export const PluginCommand = () => { + const cmd = new Command(`plugin`) + .description(`Manage PocketHost plugins`) + .addCommand( + new Command(`install`) + .alias(`i`) + .argument(``, `NPM registry plugin name`) + .description(`Install a plugin`) + .action(async (name: string) => { + try { + const pkg = JSON.parse( + readFileSync(PH_PROJECT_DIR(`package.json`), 'utf8').toString(), + ) + const { version } = pkg + await getCompatibleVersions(`pockethost`, version, [name]) + + const values = _parse() + values[`PH_PLUGINS`] = uniq([ + ...(values[`PH_PLUGINS`] + ?.split(/,/) + .map((v) => v.trim()) + .filter((v) => !!v) || []), + name, + ]).join(`,`) + writeFileSync( + envFile(), + Object.entries(values) + .map(([k, v]) => `${k}=${v}`) + .join('\n'), + ) + info(`Installed ${name}`) + info(`Written to ${envFile()}`) + } catch (e) { + error(`${e}`) + } + }), + ) + + .addCommand( + new Command(`list`) + .alias(`ls`) + .description(`List plugins`) + .action(async (name: string) => { + try { + for (const plugin of PH_PLUGINS()) { + const pkg = await getPackageJson(plugin) + info(`${plugin}@${pkg.version} - ${pkg?.description}`) + } + } catch (e) { + error(`${e}`) + } + }), + ) + + .addCommand( + new Command(`remove`) + .alias(`rm`) + .alias(`uninstall`) + .alias(`delete`) + .argument(``, `Plugin name`) + .description(`Remove a plugin`) + .action(async (name) => { + try { + await removePackage(name) + const values = _parse() + values[`PH_PLUGINS`] = uniq([ + ...(values[`PH_PLUGINS`] + ?.split(/,/) + .map((v) => v.trim()) + .filter((v) => v !== name) || []), + ]).join(`,`) + writeFileSync( + envFile(), + Object.entries(values) + .map(([k, v]) => `${k}=${v}`) + .join('\n'), + ) + info(`Removed ${name}`) + info(`Written to ${envFile()}`) + } catch (e) { + error(`${e}`) + } + }), + ) + + .addCommand( + new Command(`update`) + .alias(`up`) + .description(`Update all plugins`) + .action(async () => { + try { + const pkg = JSON.parse( + readFileSync(PH_PROJECT_DIR(`package.json`), 'utf8').toString(), + ) + const { version } = pkg + await getCompatibleVersions(`pockethost`, version, PH_PLUGINS()) + } catch (e) { + error(`${e}`) + } + }), + ) + return cmd +} diff --git a/packages/pockethost/src/cli/commands/PluginCommand/util.ts b/packages/pockethost/src/cli/commands/PluginCommand/util.ts new file mode 100644 index 00000000..eb4dd1dc --- /dev/null +++ b/packages/pockethost/src/cli/commands/PluginCommand/util.ts @@ -0,0 +1,140 @@ +import { exec } from 'child_process' +import fs from 'fs/promises' +import { Listr, ListrTask } from 'listr2' +import { createRequire } from 'module' +import fetch from 'node-fetch' +import semver from 'semver' +import util from 'util' + +const execPromise = util.promisify(exec) +const require = createRequire(import.meta.url) + +export async function getPackageJson(packageName: string): Promise { + try { + const packageJsonPath = require.resolve(`${packageName}/package.json`) + const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8')) + return packageJson + } catch (error) { + return null + } +} + +export async function fetchPackageData( + packageName: string, +): Promise { + const npmRegistryUrl = `https://registry.npmjs.org/${packageName}` + try { + const response = await fetch(npmRegistryUrl) + return await response.json() + } catch (error) { + return null + } +} + +async function installPackage( + packageName: string, + version: string, +): Promise { + try { + await execPromise(`npm install -g ${packageName}@${version}`) + } catch (e) { + throw new Error(`Error installing ${packageName}@${version}: ${e}`) + } +} + +export async function removePackage(packageName: string): Promise { + try { + await execPromise(`npm remove -g ${packageName}`) + } catch (e) { + throw new Error(`Error removing ${packageName}: ${e}`) + } +} + +async function checkPackageCompatibility( + packageA: string, + versionA: string, + packageB: string, +): Promise { + const localPackageJson = await getPackageJson(packageB) + + if (localPackageJson) { + const { version: localPackageBVersion, dependencies } = localPackageJson + + if (dependencies && semver.satisfies(versionA, dependencies[packageA])) { + return `Local ${packageB}@${localPackageBVersion} is already compatible with ${packageA}@${versionA}` + } + } + + const packageBData = await fetchPackageData(packageB) + if (!packageBData) { + throw new Error(`Error fetching data for ${packageB}`) + } + + const versions = packageBData.versions + let latestCompatibleVersion: string | null = null + + for (const version in versions) { + const dependencies = versions[version].dependencies + if ( + dependencies && + packageA in dependencies && + semver.satisfies(versionA, dependencies[packageA]) + ) { + if ( + !latestCompatibleVersion || + semver.gt(version, latestCompatibleVersion) + ) { + latestCompatibleVersion = version + } + } + } + + if (latestCompatibleVersion) { + await installPackage(packageB, latestCompatibleVersion) + return `${packageB}@${latestCompatibleVersion} installed successfully` + } else { + throw new Error( + `No compatible version of ${packageB} found for ${packageA}@${versionA}`, + ) + } +} + +export async function getCompatibleVersions( + packageA: string, + versionA: string, + packagesB: string[], +): Promise { + const tasks = packagesB.map( + (packageB) => + ({ + title: `Checking ${packageB}...`, + task: async (_, task) => { + try { + const result = await checkPackageCompatibility( + packageA, + versionA, + packageB, + ) + task.output = result + } catch (error) { + task.output = `${error}` + throw error + } + }, + }) as ListrTask, + ) + + const listr = new Listr(tasks, { + concurrent: true, + rendererOptions: { collapseSubtasks: false }, + }) + + await listr.run() +} + +// Example usage +// const packageA = 'express' +// const versionA = '4.17.1' +// const packagesB = ['some-package', 'another-package', 'yet-another-package'] + +// getCompatibleVersions(packageA, versionA, packagesB) diff --git a/packages/pockethost/src/cli/commands/ServeCommand/index.ts b/packages/pockethost/src/cli/commands/ServeCommand/index.ts index 1c904276..9bdf7db1 100644 --- a/packages/pockethost/src/cli/commands/ServeCommand/index.ts +++ b/packages/pockethost/src/cli/commands/ServeCommand/index.ts @@ -1,9 +1,6 @@ import { Command } from 'commander' import { LoggerService } from '../../../common' -import { daemon } from '../EdgeCommand/DaemonCommand/ServeCommand/daemon' -import { syslog } from '../EdgeCommand/SyslogCommand/ServeCommand/syslog' -import { firewall } from '../FirewallCommand/ServeCommand/firewall/server' -import { mothership } from '../MothershipCommand/ServeCommand/mothership' +import { serve } from '../../../server' type Options = { isolate: boolean @@ -11,17 +8,13 @@ type Options = { export const ServeCommand = () => { const cmd = new Command(`serve`) - .description(`Run the entire PocketHost stack`) - .option(`--isolate`, `Use Docker for process isolation.`, false) + .description(`Run PocketHost`) .action(async (options: Options) => { const logger = LoggerService().create(`ServeCommand`) const { dbg, error, info, warn } = logger info(`Starting`) - await syslog() - await mothership(options) - await daemon() - await firewall() + await serve() }) return cmd } diff --git a/packages/pockethost/src/cli/index.ts b/packages/pockethost/src/cli/index.ts index 221b733a..d68a8457 100755 --- a/packages/pockethost/src/cli/index.ts +++ b/packages/pockethost/src/cli/index.ts @@ -1,46 +1,49 @@ -#!/usr/bin/env node +#!/usr/bin/env tsx +import { uniq } from '@s-libs/micro-dash' import { program } from 'commander' -import EventSource from 'eventsource' +import { readFileSync } from 'fs' +import updateNotifier from 'update-notifier' import { DEBUG, - DefaultSettingsService, LogLevelName, LoggerService, PH_PLUGINS, - SETTINGS, + PH_PROJECT_DIR, + doCliCommandsFilter, loadPlugins, } from '../../core' -import { EdgeCommand } from './commands/EdgeCommand' -import { FirewallCommand } from './commands/FirewallCommand' -import { HealthCommand } from './commands/HealthCommand' -import { MothershipCommand } from './commands/MothershipCommand' -import { SendMailCommand } from './commands/SendMailCommand' +import { ConfigCommand } from './commands/ConfigCommand' +import { PluginCommand } from './commands/PluginCommand' import { ServeCommand } from './commands/ServeCommand' -export type GlobalOptions = { - logLevel?: LogLevelName - debug: boolean -} - -DefaultSettingsService(SETTINGS) - -LoggerService({ level: DEBUG() ? LogLevelName.Debug : LogLevelName.Info }) - -//@ts-ignore -global.EventSource = EventSource +export const { dbg, info, error } = LoggerService({ + level: DEBUG() ? LogLevelName.Debug : LogLevelName.Info, +}) export const main = async () => { - await loadPlugins(PH_PLUGINS()) - program.name('pockethost').description('Multitenant PocketBase hosting') + await loadPlugins(uniq(PH_PLUGINS())) + const pkg = await JSON.parse( + readFileSync(PH_PROJECT_DIR(`package.json`), 'utf8').toString(), + ) + updateNotifier({ pkg }).notify() + + const { version } = pkg program - .addCommand(MothershipCommand()) - .addCommand(EdgeCommand()) - .addCommand(HealthCommand()) - .addCommand(FirewallCommand()) - .addCommand(SendMailCommand()) - .addCommand(ServeCommand()) + .name('pockethost') + .description('Multitenant PocketBase hosting') + .version(version) + + const commands = await doCliCommandsFilter([ + ServeCommand(), + ConfigCommand(), + PluginCommand(), + ]) + + for (const command of commands) { + program.addCommand(command) + } await program.parseAsync() } diff --git a/packages/pockethost/src/common/CleanupManager.ts b/packages/pockethost/src/common/CleanupManager.ts index e7b3a5f7..acd062f0 100644 --- a/packages/pockethost/src/common/CleanupManager.ts +++ b/packages/pockethost/src/common/CleanupManager.ts @@ -1,5 +1,4 @@ -import { reduce, values } from '@s-libs/micro-dash' -import { nanoid } from 'nanoid' +import { reduce, uniqueId, values } from '@s-libs/micro-dash' import { LoggerService } from '.' export type CleanupFunc = () => Promise | void @@ -16,10 +15,8 @@ export const CLEANUP_PRIORITY_LAST = 1000 export type CleanupManagerApi = ReturnType -// TODO: Document this -// This is currently only used in the Logging.svelte file for unsubscribing from real-time events from PocketBase export const createCleanupManager = (slug?: string) => { - const _slug = slug || nanoid() + const _slug = slug || uniqueId() const { error, warn, dbg } = LoggerService().create(`cleanupManager:${_slug}`) diff --git a/packages/pockethost/src/common/Logger.ts b/packages/pockethost/src/common/Logger.ts index ff48d578..273b60ee 100644 --- a/packages/pockethost/src/common/Logger.ts +++ b/packages/pockethost/src/common/Logger.ts @@ -2,7 +2,7 @@ import chalk from 'chalk' import stringify from 'json-stringify-safe' -import { action, mergeConfig, mkSingleton } from '.' +import { doLogAction, mergeConfig, mkSingleton } from '.' export type LoggerConfig = { level: LogLevelName @@ -68,13 +68,17 @@ export const createLogger = (config: Partial) => { } const _pfx = (s: string) => - [new Date().toISOString(), s, ...pfx] + [s, ...pfx] .filter((v) => !!v) .map((p) => `[${p}]`) .join(' ') const _log = (levelIn: LogLevelName, ...args: any[]) => { - action(`log`, _config.level, levelIn, args) + doLogAction({ + currentLevel: _config.level, + levelIn, + args, + }) } const raw = (...args: any[]) => { @@ -90,12 +94,16 @@ export const createLogger = (config: Partial) => { } const info = (...args: any[]) => { + const _args = (() => { + if (isLevelGt(LogLevelName.Info, _config.level)) { + return [chalk.gray(`INFO`), ...args] + } + return [...args] + })() _log( LogLevelName.Info, - _pfx( - isLevelGt(LogLevelName.Info, _config.level) ? chalk.gray(`INFO`) : '', - ), - ...args, + + ..._args, ) } diff --git a/packages/pockethost/src/common/debug.ts b/packages/pockethost/src/common/debug.ts new file mode 100644 index 00000000..d6b2137d --- /dev/null +++ b/packages/pockethost/src/common/debug.ts @@ -0,0 +1,8 @@ +import { boolean } from 'boolean' + +export const IS_DEV = () => + `PH_DEV` in process.env + ? boolean(process.env.PH_DEV) + : process.env.NODE_ENV === 'development' +export const DEBUG = () => + `PH_DEBUG` in process.env ? boolean(process.env.PH_DEBUG) : IS_DEV() diff --git a/packages/pockethost/src/common/error.ts b/packages/pockethost/src/common/error.ts new file mode 100644 index 00000000..a8aab964 --- /dev/null +++ b/packages/pockethost/src/common/error.ts @@ -0,0 +1,16 @@ +import { keys, map } from '@s-libs/micro-dash' +import { ClientResponseError } from 'pocketbase' + +export const parseError = (e: any): string[] => { + if (e instanceof ClientResponseError) { + if (e.data.message && keys(e.data.data).length === 0) + return [e.data.message] + return map(e.data.data, (v, k) => (v ? v.message : undefined)).filter( + (v) => !!v, + ) + } + if (e instanceof Error) { + return [e.message] + } + return [e.toString()] +} diff --git a/packages/pockethost/src/common/index.ts b/packages/pockethost/src/common/index.ts index 7c1ec79b..fb88f00e 100644 --- a/packages/pockethost/src/common/index.ts +++ b/packages/pockethost/src/common/index.ts @@ -2,14 +2,11 @@ export * from './CleanupManager' export * from './Logger' export * from './TimerManager' export * from './assert' +export * from './debug' +export * from './error' export * from './events' -export * from './ioc' export * from './mergeConfig' export * from './mkSingleton' -export * from './newId' -export * from './now' export * from './plugin' -export * from './pocketbase' -export * from './pocketbase-client-helpers' +export * from './promiseSerializer' export * from './schema' -export * from './stringify' diff --git a/packages/pockethost/src/common/ioc.ts b/packages/pockethost/src/common/ioc.ts deleted file mode 100644 index 10ce1119..00000000 --- a/packages/pockethost/src/common/ioc.ts +++ /dev/null @@ -1,44 +0,0 @@ -type ServiceMap = { - [serviceName: string]: unknown -} - -export class IoCManager { - private services: Map = new Map() - - register(key: K, instance: M[K]): void - register(key: string, instance: T): void - register(key: string, instance: any): void { - if (this.services.has(key)) { - throw new Error(`Service with key '${key}' already registered.`) - } - this.services.set(key, instance) - } - - // For known services - service(key: K): M[K] - // For unknown services with explicit type - service(key: string): T - service(key: string): any { - const service = this.services.get(key) - if (!service) { - throw new Error(`No service registered with key '${key}'.`) - } - return service - } -} - -/* - -// Use IoC Manager -const ioc = new IoCManager(); - -ioc.register("logger", new Logger()); -ioc.register("database", new Database()); - -const loggerService = ioc.service("logger"); -loggerService.log("This is a log message."); - -const databaseService = ioc.service("database"); -databaseService.connect(); - -*/ diff --git a/packages/pockethost/src/common/newId.ts b/packages/pockethost/src/common/newId.ts deleted file mode 100644 index ecb0ecc4..00000000 --- a/packages/pockethost/src/common/newId.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { customAlphabet } from 'nanoid' - -const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz') -export const newId = (length = 15) => nanoid(length) diff --git a/packages/pockethost/src/common/now.ts b/packages/pockethost/src/common/now.ts deleted file mode 100644 index 5204b88b..00000000 --- a/packages/pockethost/src/common/now.ts +++ /dev/null @@ -1 +0,0 @@ -export const now = () => +new Date() diff --git a/packages/pockethost/src/common/plugin.ts b/packages/pockethost/src/common/plugin.ts deleted file mode 100644 index 0b0dc5fa..00000000 --- a/packages/pockethost/src/common/plugin.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { isString } from '@s-libs/micro-dash' - -export type PocketHostAction = string - -export type PocketHostFilter = string - -export type PocketHostPlugin = (api: PocketHostPluginApi) => Promise - -const filters: { [key in PocketHostFilter]: FilterHandler[] } = {} - -const actions: { - [key in PocketHostAction]: ActionHandler[] -} = {} - -export type FilterHandler = (carry: any) => any -export type ActionHandler = (...args: any[]) => void - -export async function registerFilter( - filter: PocketHostFilter, - handler: (carry: any) => any, -) { - if (!(filter in filters)) filters[filter] = [] - filters[filter]!.push(handler) -} - -export async function registerAction( - action: PocketHostAction, - handler: (...args: any[]) => Promise, -) { - if (!(action in actions)) actions[action] = [] - actions[action]!.push(handler) -} - -export async function filter(filterName: PocketHostFilter, initialValue: T) { - const filter = filters[filterName] - if (!filter) return initialValue - return filter.reduce( - (carry, handler) => carry.then((carryRes) => handler(carryRes)), - Promise.resolve(initialValue), - ) -} - -export async function action(actionName: PocketHostAction, ...rest: any[]) { - const action = actions[actionName] - if (!action) return - await Promise.all(action.map((handler) => handler(...rest))) -} - -export type PocketHostPluginApi = { - registerAction: typeof registerAction -} - -export const loadPlugins = async (plugins: (string | PocketHostPlugin)[]) => { - await Promise.all( - plugins.map(async (pluginPathOrModule) => { - const plugin = await (async () => { - if (!isString(pluginPathOrModule)) return pluginPathOrModule - const plugin = await import(pluginPathOrModule) - return plugin.default - })() - await plugin({ registerAction }) - }), - ) - return plugins -} diff --git a/packages/pockethost/src/common/plugin/action.ts b/packages/pockethost/src/common/plugin/action.ts new file mode 100644 index 00000000..1e2c3122 --- /dev/null +++ b/packages/pockethost/src/common/plugin/action.ts @@ -0,0 +1,127 @@ +import { Express, Request, Response } from 'express' +import { LogLevelName } from '../Logger' +import { DEBUG } from '../debug' +import { InstanceFields } from '../schema' + +enum CoreActions { + Init = 'core_init', + AppMounted = 'core_on_app_mount', + AfterServeStart = 'core_after_serve_start', + + Cli_Before_ServeCommand = 'core_before_serve', + Log = 'core_log', + InstanceLog = 'core_instance_log', + + StartInstance = 'core_start_instance', + + BeforeInstanceStarted = 'core_before_instance_started', + AfterInstanceStarted = 'core_after_instance_started', + + BeforeInstanceStopped = 'core_before_instance_stopped', + AfterInstanceStopped = 'core_after_instance_stopped', + + AfterInstanceFound = 'core_after_instance_found', + + RequestError = 'core_edge_on_request_error', + Request = 'core_edge_request', +} + +const actions: { + [key: string]: ActionHandler[] +} = {} + +export type ActionHandler = ( + context: TContext extends never ? [] : TContext, +) => Promise + +async function registerAction( + action: string, + handler: (...args: any[]) => Promise, +) { + if (!(action in actions)) actions[action] = [] + actions[action]!.push(handler) +} + +async function action(actionName: string, context: any) { + if (DEBUG() && actionName !== CoreActions.Log) { + console.log(`a:${actionName}`) + } + const action = actions[actionName] + if (!action) return false + await Promise.all(action.map((handler) => handler(context))) + return true +} + +export function createCustomActionWithContext( + actionName: CoreActions, +) { + return [ + async (context: TContext) => action(actionName, context), + async (handler: ActionHandler) => + registerAction(actionName, handler), + ] as const +} + +export function createCustomAction(actionName: CoreActions) { + return [ + async () => action(actionName, {}), + async (handler: ActionHandler) => registerAction(actionName, handler), + ] as const +} + +export const [doRequestErrorAction, onRequestErrorAction] = + createCustomActionWithContext<{ + err: Error + }>(CoreActions.RequestError) + +export const [doAfterServerStartAction, onAfterServerStartAction] = + createCustomAction(CoreActions.AfterServeStart) + +export const [doLogAction, onLogAction] = createCustomActionWithContext<{ + currentLevel: LogLevelName + levelIn: LogLevelName + args: any[] +}>(CoreActions.Log) + +export const [doInstanceLogAction, onInstanceLogAction] = + createCustomActionWithContext<{ + instance: InstanceFields + type: 'stdout' | 'stderr' + data: string + }>(CoreActions.InstanceLog) + +export const [doAppMountedAction, onAppMountedAction] = + createCustomActionWithContext<{ app: Express }>(CoreActions.AppMounted) + +export const [doIncomingRequestAction, onIncomingRequestAction] = + createCustomActionWithContext<{ req: Request; res: Response; host: string }>( + CoreActions.Request, + ) + +export const [doAfterInstanceFoundAction, onAfterInstanceFoundAction] = + createCustomActionWithContext<{ + req: Request + res: Response + host: string + instance: InstanceFields + }>(CoreActions.AfterInstanceFound) + +export const [doBeforeInstanceStartedAction, onBeforeInstanceStartedAction] = + createCustomActionWithContext<{ instance: InstanceFields }>( + CoreActions.BeforeInstanceStarted, + ) + +export const [doAfterInstanceStartedAction, onAfterInstanceStartedAction] = + createCustomActionWithContext<{ instance: InstanceFields; url: string }>( + CoreActions.AfterInstanceStarted, + ) + +export const [doBeforeInstanceStoppedAction, onBeforeInstanceStoppedAction] = + createCustomActionWithContext<{ instance: InstanceFields; url: string }>( + CoreActions.BeforeInstanceStopped, + ) + +export const [doAfterInstanceStoppedAction, onAfterInstanceStoppedAction] = + createCustomActionWithContext<{ instance: InstanceFields; url: string }>( + CoreActions.AfterInstanceStopped, + ) diff --git a/packages/pockethost/src/common/plugin/filter.ts b/packages/pockethost/src/common/plugin/filter.ts new file mode 100644 index 00000000..445f5b85 --- /dev/null +++ b/packages/pockethost/src/common/plugin/filter.ts @@ -0,0 +1,115 @@ +import { Command } from 'commander' +import { Request, Response } from 'express' +import { DEBUG } from '../debug' +import { InstanceFields, InstanceId } from '../schema' + +export enum CoreFilters { + CliCommands = 'core_cli_commands', + SpawnConfig = 'core_spawn_config', + GetInstanceByRequestInfo = 'core_get_instance_by_request_info', + GetInstanceById = 'core_get_instance_by_id', + ErrorSpawningInstanceMessage = 'core_error_spawning_instance_message', + FailedToLaunchInstanceMessage = 'core_failed_to_launch_instance_message', + AuthenticateRequest = 'core_authenticate_request', + RequestError_Message = 'core_request_error_message', + GetOrProvisionInstanceUrl = 'core_get_or_provision_instance_url', + PocketBaseLaunchHandler = 'core_pocket_base_launch_handler', + NewInstanceRecord = 'core_new_instance_record', +} + +export type FilterHandler = ( + carry: TCarry, + context: TContext, +) => TCarry | Promise +type FilterEntry = { + priority: number + handler: FilterHandler +} +const filters: { + [key: string]: FilterEntry[] +} = {} + +async function registerFilter( + filter: string, + handler: FilterHandler, + priority = 10, +) { + if (!(filter in filters)) filters[filter] = [] + filters[filter]!.push({ priority, handler }) + filters[filter]!.sort((a, b) => a.priority - b.priority) +} + +async function filter( + filterName: string, + initialValue: TCarry, + context: TContext, +) { + if (DEBUG()) { + console.log(`f:${filterName}`) + } + const filter = filters[filterName] + if (!filter) return initialValue + return filter.reduce( + (carry, entry) => + carry.then((carryRes) => entry.handler(carryRes, context)), + Promise.resolve(initialValue), + ) as TCarry +} + +function createCustomFilterWithContext( + filterName: CoreFilters, +) { + return [ + async (initialValue: TCarry, context: TContext) => + filter(filterName, initialValue, context), + async (handler: FilterHandler, priority = 10) => + registerFilter(filterName, handler, priority), + ] as const +} + +function createCustomFilter(filterName: string) { + return [ + async (initialValue: TCarry) => + filter(filterName, initialValue, {}), + async (handler: FilterHandler, priority = 10) => + registerFilter(filterName, handler, priority), + ] as const +} + +export const [ + doGetInstanceByRequestInfoFilter, + onGetInstanceByRequestInfoFilter, +] = createCustomFilterWithContext< + InstanceFields | undefined, + { req: Request; res: Response; host: string; subdomain: string } +>(CoreFilters.GetInstanceByRequestInfo) + +export const [doGetInstanceByIdFilter, onGetInstanceByIdFilter] = + createCustomFilterWithContext< + InstanceFields | undefined, + { instanceId: InstanceId } + >(CoreFilters.GetInstanceById) + +export const [doCliCommandsFilter, onCliCommandsFilter] = createCustomFilter< + Command[] +>(CoreFilters.CliCommands) + +export const [doNewInstanceRecordFilter, onNewInstanceRecordFilter] = + createCustomFilter(CoreFilters.NewInstanceRecord) + +export const [doRequestErrorMessageFilter, onRequestErrorMessageFilter] = + createCustomFilter(CoreFilters.RequestError_Message) + +export const [ + doGetOrProvisionInstanceUrlFilter, + onGetOrProvisionInstanceUrlFilter, +] = createCustomFilterWithContext< + string, + { + req: Request + res: Response + host: string + subdomain: string + instance: InstanceFields + } +>(CoreFilters.GetOrProvisionInstanceUrl) diff --git a/packages/pockethost/src/common/plugin/index.ts b/packages/pockethost/src/common/plugin/index.ts new file mode 100644 index 00000000..1d957eb4 --- /dev/null +++ b/packages/pockethost/src/common/plugin/index.ts @@ -0,0 +1,21 @@ +import { isString } from '@s-libs/micro-dash' +export * from './action' +export * from './filter' + +export type PocketHostPlugin = (api: PocketHostPluginApi) => Promise + +export type PocketHostPluginApi = {} + +export const loadPlugins = async (plugins: (string | PocketHostPlugin)[]) => { + await Promise.all( + plugins.map(async (pluginPathOrModule) => { + const plugin = await (async () => { + if (!isString(pluginPathOrModule)) return pluginPathOrModule + const plugin = await import(pluginPathOrModule) + return plugin.default + })() + await plugin({}) + }), + ) + return plugins +} diff --git a/packages/pockethost/src/common/pocketbase.ts b/packages/pockethost/src/common/pocketbase.ts deleted file mode 100644 index 04ba941c..00000000 --- a/packages/pockethost/src/common/pocketbase.ts +++ /dev/null @@ -1,14 +0,0 @@ -import PocketBase, { - BaseAuthStore, - ClientResponseError, - type AuthModel, - type UnsubscribeFunc, -} from 'pocketbase' - -export { - AuthModel, - BaseAuthStore, - ClientResponseError, - PocketBase, - UnsubscribeFunc, -} diff --git a/packages/pockethost/src/common/promiseSerializer.ts b/packages/pockethost/src/common/promiseSerializer.ts new file mode 100644 index 00000000..7153572a --- /dev/null +++ b/packages/pockethost/src/common/promiseSerializer.ts @@ -0,0 +1,22 @@ +type JobQueue = { + [key: string]: Promise | undefined +} + +const jobQueue: JobQueue = {} + +export function enqueueJob( + key: string, + promiseFn: () => Promise, +): Promise { + const currentJob = jobQueue[key] + + const chainedPromise = currentJob ? currentJob.then(promiseFn) : promiseFn() + + jobQueue[key] = chainedPromise.finally(() => { + if (jobQueue[key] === chainedPromise) { + delete jobQueue[key] + } + }) + + return chainedPromise +} diff --git a/packages/pockethost/src/common/schema/Instance.ts b/packages/pockethost/src/common/schema/Instance.ts index 9f062874..2e1eb651 100644 --- a/packages/pockethost/src/common/schema/Instance.ts +++ b/packages/pockethost/src/common/schema/Instance.ts @@ -1,4 +1,4 @@ -import { BaseFields, RecordId, Subdomain, UserFields, UserId } from '.' +import { doNewInstanceRecordFilter } from '../plugin' export type VersionId = string @@ -13,33 +13,24 @@ export enum InstanceStatus { Failed = 'failed', } +export type InstanceId = string export type InstanceSecretKey = string export type InstanceSecretValue = string export type InstanceSecretCollection = { [name: InstanceSecretKey]: InstanceSecretValue } -export type InstanceFields = BaseFields & { - subdomain: Subdomain - uid: UserId - status: InstanceStatus +export type InstanceFields = { + subdomain: string version: VersionId - secrets: InstanceSecretCollection | null - maintenance: boolean - suspension: string - syncAdmin: boolean - cname: string - dev: boolean - cname_active: boolean - notifyMaintenanceMode: boolean + secrets: InstanceSecretCollection + dev: boolean // Should instance run in --dev mode } -export type WithUser = { - expand: { uid: UserFields } -} - -export type InstanceFields_WithUser = InstanceFields & WithUser - -export type InstanceFields_Create = Omit - -export type InstanceRecordsById = { [_: RecordId]: InstanceFields } +export const mkInstance = (subdomain: string) => + doNewInstanceRecordFilter({ + subdomain, + version: '*', + secrets: {}, + dev: false, + }) diff --git a/packages/pockethost/src/common/schema/index.ts b/packages/pockethost/src/common/schema/index.ts index ee0e2f89..be849248 100644 --- a/packages/pockethost/src/common/schema/index.ts +++ b/packages/pockethost/src/common/schema/index.ts @@ -1,6 +1,3 @@ export * from './Instance' export * from './InstanceLog' -export * from './Rest' -export * from './User' -export * from './types' export * from './util' diff --git a/packages/pockethost/src/common/stringify.ts b/packages/pockethost/src/common/stringify.ts deleted file mode 100644 index 3ede98ee..00000000 --- a/packages/pockethost/src/common/stringify.ts +++ /dev/null @@ -1,3 +0,0 @@ -import stringify from 'json-stringify-safe' - -export { stringify } diff --git a/packages/pockethost/src/constants.ts b/packages/pockethost/src/constants.ts index fbfcda12..81c94a92 100644 --- a/packages/pockethost/src/constants.ts +++ b/packages/pockethost/src/constants.ts @@ -1,285 +1,75 @@ import { forEach } from '@s-libs/micro-dash' -import devcert from 'devcert' +import { config } from 'dotenv' import envPaths from 'env-paths' -import { mkdirSync, realpathSync, writeFileSync } from 'fs' import { dirname, join } from 'path' +import { cwd } from 'process' import { fileURLToPath } from 'url' -import { LogEntry } from 'winston' import { - InstanceFields, InstanceId, - IoCManager, - SettingsHandlerFactory, - SettingsService, - UserFields, mkBoolean, mkCsvString, mkNumber, mkPath, - mkSingleton, mkString, } from '../core' +import { DEBUG, IS_DEV } from './common/debug' +import { Settings } from './core/Settings' const __dirname = dirname(fileURLToPath(import.meta.url)) -const realScriptPath = realpathSync(process.argv[1]!) - export const _PH_HOME = process.env.PH_HOME || envPaths(`pockethost`).data -export const _SSL_HOME = join(_PH_HOME, `ssl`) +config({ path: [join(_PH_HOME, '.env'), join(cwd(), `.env`)] }) -export const _IS_DEV = process.env.NODE_ENV === 'development' -export const _PH_PROJECT_ROOT = join(__dirname, '..') +export const _PH_PROJECT_DIR = join(__dirname, '..') export const _APEX_DOMAIN = process.env.APEX_DOMAIN || 'pockethost.lvh.me' export const _HTTP_PROTOCOL = process.env.HTTP_PROTOCOL || `https:` -export const _APP_NAME = process.env.APP_NAME || 'app' -export const _MOTHERSHIP_NAME = - process.env.MOTHERSHIP_NAME || 'pockethost-central' -export const _MOTHERSHIP_APP_ROOT = (...paths: string[]) => - join( - process.env.PH_MOTHERSHIP_APP_ROOT || join(__dirname, 'mothership-app'), - ...paths, - ) - -export const _INSTANCE_APP_ROOT = (...paths: string[]) => - join( - process.env.PH_INSTANCE_APP_ROOT || join(__dirname, 'instance-app'), - ...paths, - ) - -const TLS_PFX = `tls` - -if (_IS_DEV) { - mkdirSync(_SSL_HOME, { recursive: true }) - const { key, cert } = await devcert.certificateFor(_APEX_DOMAIN, {}) - writeFileSync(join(_SSL_HOME, `${TLS_PFX}.key`), key) - writeFileSync(join(_SSL_HOME, `${TLS_PFX}.cert`), cert) +export function isSettingKey(key: string): key is keyof typeof settings { + return key in settings } - -export const SETTINGS = { - PH_PLUGINS: mkCsvString([`@pockethost/plugin-console-logger`]), - UPGRADE_MODE: mkBoolean(false), +export const settings = Settings({ + PH_PLUGINS: mkCsvString([ + `@pockethost/plugin-console-logger`, + `@pockethost/plugin-launcher-spawn`, + `@pockethost/plugin-auto-admin`, + ]), PH_HOME: mkPath(_PH_HOME), - PH_PROJECT_ROOT: mkPath(_PH_PROJECT_ROOT), + PH_PROJECT_DIR: mkPath(_PH_PROJECT_DIR), - DEBUG: mkBoolean(_IS_DEV), + PH_APEX_DOMAIN: mkString(_APEX_DOMAIN), - HTTP_PROTOCOL: mkString(_HTTP_PROTOCOL), - APP_NAME: mkString(_APP_NAME), - APP_URL: mkString(`${_HTTP_PROTOCOL}//${_APP_NAME}.${_APEX_DOMAIN}`), - BLOG_URL: mkString(`${_HTTP_PROTOCOL}//${_APEX_DOMAIN}`), - APEX_DOMAIN: mkString(_APEX_DOMAIN), + PH_PORT: mkNumber(3000), - IPCIDR_LIST: mkCsvString([]), - DAEMON_PORT: mkNumber(3000), - DAEMON_PB_IDLE_TTL: mkNumber(1000 * 60 * 5), // 5 minutes - - MOTHERSHIP_URL: mkString( - `${_HTTP_PROTOCOL}//${_MOTHERSHIP_NAME}.${_APEX_DOMAIN}`, - ), - MOTHERSHIP_NAME: mkString(_MOTHERSHIP_NAME), - MOTHERSHIP_INTERNAL_HOST: mkString(`localhost`), - MOTHERSHIP_ADMIN_USERNAME: mkString(), - MOTHERSHIP_ADMIN_PASSWORD: mkString(), - PH_MOTHERSHIP_APP_ROOT: mkString(_MOTHERSHIP_APP_ROOT()), - MOTHERSHIP_MIGRATIONS_DIR: mkPath(_MOTHERSHIP_APP_ROOT(`migrations`)), - MOTHERSHIP_HOOKS_DIR: mkPath(_MOTHERSHIP_APP_ROOT(`pb_hooks`, `src`)), - MOTHERSHIP_APP_DIR: mkPath(_MOTHERSHIP_APP_ROOT(`ph_app`), { - required: false, - }), - MOTHERSHIP_SEMVER: mkString('*'), - MOTHERSHIP_PORT: mkNumber(8091), - - INITIAL_PORT_POOL_SIZE: mkNumber(20), - DATA_ROOT: mkPath(join(_PH_HOME, 'data')), - NODE_ENV: mkString(`production`), - IS_DEV: mkBoolean(_IS_DEV), - TRACE: mkBoolean(false), - - PH_FTP_PORT: mkNumber(21), - SSL_KEY: mkPath(join(_SSL_HOME, `${TLS_PFX}.key`)), - SSL_CERT: mkPath(join(_SSL_HOME, `${TLS_PFX}.cert`)), - PH_FTP_PASV_IP: mkString(`0.0.0.0`), - PH_FTP_PASV_PORT_MIN: mkNumber(10000), - PH_FTP_PASV_PORT_MAX: mkNumber(20000), - - EDGE_APEX_DOMAIN: mkString(_APEX_DOMAIN), - EDGE_MAX_ACTIVE_INSTANCES: mkNumber(20), - - PH_INSTANCE_APP_ROOT: mkString(_INSTANCE_APP_ROOT()), - INSTANCE_APP_HOOKS_DIR: mkPath(_INSTANCE_APP_ROOT(`pb_hooks`), { - create: true, - }), - INSTANCE_APP_MIGRATIONS_DIR: mkPath(_INSTANCE_APP_ROOT(`migrations`), { - create: true, - }), - - DISCORD_POCKETSTREAM_URL: mkString(''), - DISCORD_ALERT_CHANNEL_URL: mkString(''), - - TEST_EMAIL: mkString(), - - LS_WEBHOOK_SECRET: mkString(''), - - SYSLOGD_PORT: mkNumber(6514), - - DISCORD_HEALTH_CHANNEL_URL: mkString(''), - - DOCKER_CONTAINER_HOST: mkString(`host.docker.internal`), -} - -export type Settings = ReturnType -export type SettingsDefinition = { - [_ in keyof Settings]: SettingsHandlerFactory -} - -export const DefaultSettingsService = mkSingleton( - (settings: typeof SETTINGS) => { - const _settings = SettingsService(settings) - - ioc.register('settings', _settings) - - if (ioc.service('settings').DEBUG) { - logConstants() - } - - return _settings - }, -) - -export type MothershipProvider = { - getAllInstances(): Promise - getInstanceById(id: InstanceId): Promise<[InstanceFields, UserFields] | []> - getInstanceBySubdomain( - subdomain: InstanceFields['subdomain'], - ): Promise<[InstanceFields, UserFields] | []> - updateInstance(id: InstanceId, fields: Partial): Promise -} - -type UnsubFunc = () => void - -export type InstanceLogProvider = ( - instanceId: InstanceId, - target: string, -) => { - info(msg: string): void - error(msg: string): void - tail(linesBack: number, data: (line: LogEntry) => void): UnsubFunc -} - -export const ioc = new IoCManager<{ - settings: Settings - mothership: MothershipProvider - instanceLogger: InstanceLogProvider -}>() - -export const settings = () => ioc.service('settings') -export const mothership = () => ioc.service('mothership') -export const instanceLogger = () => ioc.service('instanceLogger') + PH_DATA_DIR: mkPath(join(_PH_HOME, 'data'), { create: true }), + PH_DEV: mkBoolean(IS_DEV()), + PH_DEBUG: mkBoolean(DEBUG()), +}) /** Accessors */ -export const PH_PLUGINS = () => settings().PH_PLUGINS -export const UPGRADE_MODE = () => settings().UPGRADE_MODE +export const PH_PLUGINS = () => settings.PH_PLUGINS -export const PH_HOME = () => settings().PH_HOME -export const PH_PROJECT_ROOT = () => settings().PH_PROJECT_ROOT +export const PH_HOME = (...paths: string[]) => join(settings.PH_HOME, ...paths) +export const PH_PROJECT_DIR = (...paths: string[]) => + join(settings.PH_PROJECT_DIR, ...paths) -export const DEBUG = () => settings().DEBUG +export const APEX_DOMAIN = () => settings.PH_APEX_DOMAIN -export const HTTP_PROTOCOL = () => settings().HTTP_PROTOCOL -export const APP_URL = () => settings().APP_URL -export const APP_NAME = () => settings().APP_NAME -export const BLOG_URL = (...path: string[]) => - join(settings().BLOG_URL, ...path) -export const DOCS_URL = (...path: string[]) => BLOG_URL(`docs`, ...path) +export const PORT = () => settings.PH_PORT -export const APEX_DOMAIN = () => settings().APEX_DOMAIN - -export const IPCIDR_LIST = () => settings().IPCIDR_LIST -export const DAEMON_PORT = () => settings().DAEMON_PORT -export const DAEMON_PB_IDLE_TTL = () => settings().DAEMON_PB_IDLE_TTL - -export const MOTHERSHIP_URL = () => settings().MOTHERSHIP_URL -export const MOTHERSHIP_INTERNAL_HOST = () => - settings().MOTHERSHIP_INTERNAL_HOST -export const MOTHERSHIP_NAME = () => settings().MOTHERSHIP_NAME -export const MOTHERSHIP_ADMIN_USERNAME = () => - settings().MOTHERSHIP_ADMIN_USERNAME -export const MOTHERSHIP_ADMIN_PASSWORD = () => - settings().MOTHERSHIP_ADMIN_PASSWORD -export const MOTHERSHIP_MIGRATIONS_DIR = (...paths: string[]) => - join(settings().MOTHERSHIP_MIGRATIONS_DIR, ...paths) -export const MOTHERSHIP_HOOKS_DIR = (...paths: string[]) => - join(settings().MOTHERSHIP_HOOKS_DIR, ...paths) -export const MOTHERSHIP_APP_DIR = () => settings().MOTHERSHIP_APP_DIR -export const MOTHERSHIP_SEMVER = () => settings().MOTHERSHIP_SEMVER -export const MOTHERSHIP_PORT = () => settings().MOTHERSHIP_PORT - -export const INITIAL_PORT_POOL_SIZE = () => settings().INITIAL_PORT_POOL_SIZE -export const DATA_ROOT = () => settings().DATA_ROOT -export const NODE_ENV = () => settings().NODE_ENV -export const IS_DEV = () => settings().IS_DEV -export const TRACE = () => settings().TRACE - -export const PH_FTP_PORT = () => settings().PH_FTP_PORT -export const SSL_KEY = () => settings().SSL_KEY -export const SSL_CERT = () => settings().SSL_CERT -export const PH_FTP_PASV_IP = () => settings().PH_FTP_PASV_IP -export const PH_FTP_PASV_PORT_MIN = () => settings().PH_FTP_PASV_PORT_MIN -export const PH_FTP_PASV_PORT_MAX = () => settings().PH_FTP_PASV_PORT_MAX - -export const EDGE_APEX_DOMAIN = () => settings().EDGE_APEX_DOMAIN -export const EDGE_MAX_ACTIVE_INSTANCES = () => - settings().EDGE_MAX_ACTIVE_INSTANCES - -export const INSTANCE_APP_HOOK_DIR = () => settings().INSTANCE_APP_HOOKS_DIR -export const INSTANCE_APP_MIGRATIONS_DIR = () => - settings().INSTANCE_APP_MIGRATIONS_DIR - -export const DISCORD_POCKETSTREAM_URL = () => - settings().DISCORD_POCKETSTREAM_URL - -export const DISCORD_ALERT_CHANNEL_URL = () => - settings().DISCORD_ALERT_CHANNEL_URL - -export const TEST_EMAIL = () => settings().TEST_EMAIL - -export const LS_WEBHOOK_SECRET = () => settings().LS_WEBHOOK_SECRET - -export const SYSLOGD_PORT = () => settings().SYSLOGD_PORT - -export const DISCORD_HEALTH_CHANNEL_URL = () => - settings().DISCORD_HEALTH_CHANNEL_URL - -export const DOCKER_CONTAINER_HOST = () => settings().DOCKER_CONTAINER_HOST - -/** Helpers */ - -export const MOTHERSHIP_DATA_ROOT = (...paths: string[]) => - join(INSTANCE_DATA_ROOT(MOTHERSHIP_NAME()), ...paths) -export const MOTHERSHIP_DATA_DB = () => - join(MOTHERSHIP_DATA_ROOT(), `pb_data`, `data.db`) -export const MOTHERSHIP_INTERNAL_URL = (path = '') => - `http://${MOTHERSHIP_INTERNAL_HOST()}:${MOTHERSHIP_PORT()}${path}` -export const INSTANCE_DATA_ROOT = (id: InstanceId) => join(DATA_ROOT(), id) -export const INSTANCE_DATA_DB = (id: InstanceId) => - join(DATA_ROOT(), id, `pb_data`, `data.db`) -export const mkContainerHomePath = (...path: string[]) => - join(`/home/pockethost`, ...path.filter((v) => !!v)) -export const mkAppUrl = (path = '') => `${APP_URL()}${path}` -export const mkBlogUrl = (path = '') => `${BLOG_URL()}${path}` -export const mkDocUrl = (path = '') => mkBlogUrl(join('/docs', path)) -export const mkEdgeSubdomain = (subdomain: string) => - `${settings().HTTP_PROTOCOL}//${subdomain}.${settings().EDGE_APEX_DOMAIN}` -export const mkEdgeUrl = (subdomain: string, path = '') => - `${mkEdgeSubdomain(subdomain)}${path}` -export const mkInstanceDataPath = (instanceId: string, ...path: string[]) => - join(settings().DATA_ROOT, instanceId, ...path) +export const DATA_DIR = (...paths: string[]) => + join(settings.PH_DATA_DIR, ...paths) +export const NODE_ENV = () => process.env.NODE_ENV +export const INSTANCE_DATA_DIR = (id: InstanceId, ...paths: string[]) => + join(DATA_DIR(), id, ...paths) export const logConstants = () => { - forEach(settings(), (v, k) => { + forEach(settings, (v, k) => { console.log(`${k}: ${v}`) }) } + +if (DEBUG()) { + logConstants() +} diff --git a/packages/pockethost/src/core/Settings.ts b/packages/pockethost/src/core/Settings.ts index f5fd4346..81d6a3d7 100644 --- a/packages/pockethost/src/core/Settings.ts +++ b/packages/pockethost/src/core/Settings.ts @@ -1,6 +1,5 @@ import { boolean as castToBoolean } from 'boolean' import { existsSync, mkdirSync } from 'fs' -import { mkSingleton } from '../common' export type SettingsCaster = { stringToType: (value: string, config?: Partial) => TValue @@ -103,22 +102,18 @@ type Config = { [K in keyof T]: SettingsHandlerFactory } -export const SettingsService = (config: Config) => { - const singleton = mkSingleton, T>((config) => { - const lookup: Partial = {} +export const Settings = (config: Config) => { + const lookup: Partial = {} - for (const key in config) { - const handler = config[key as keyof T](key) - Object.defineProperty(lookup, key, { - get: () => handler.get(), - set: (value) => handler.set(value), - enumerable: true, - }) - handler.get() // Initialize process.env - } + for (const key in config) { + const handler = config[key as keyof T](key) + Object.defineProperty(lookup, key, { + get: () => handler.get(), + set: (value) => handler.set(value), + enumerable: true, + }) + handler.get() // Initialize process.env + } - return lookup as T - }) - - return singleton(config) + return lookup as T } diff --git a/packages/pockethost/src/core/discordAlert.ts b/packages/pockethost/src/core/discordAlert.ts deleted file mode 100644 index 8bbd7617..00000000 --- a/packages/pockethost/src/core/discordAlert.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { DISCORD_ALERT_CHANNEL_URL } from '.' -import { stringify } from '../common' - -const cache: { [_: string]: NodeJS.Timeout } = {} - -export const discordAlert = (message: { toString: () => string }) => { - const url = DISCORD_ALERT_CHANNEL_URL() - if (!url) return - const m = message.toString() - const isCached = !!cache[m] - if (isCached) { - clearTimeout(cache[m]) - } - cache[m] = setTimeout(() => { - delete cache[message.toString()] - }, 60 * 1000) - if (isCached) return - - fetch(url, { - method: 'POST', - body: stringify({ - content: message.toString(), - }), - headers: { 'Content-Type': 'application/json' }, - }).catch(console.error) -} diff --git a/packages/pockethost/src/core/env.ts b/packages/pockethost/src/core/env.ts deleted file mode 100644 index f8e14164..00000000 --- a/packages/pockethost/src/core/env.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { boolean } from 'boolean' -import { existsSync } from 'fs' -import { env as _env } from 'process' - -export const env = (name: string, _default = '') => { - const v = _env[name] - if (!v) return _default - return v -} - -export const envi = (name: string, _default: number) => - parseInt(env(name, _default.toString())) - -export const envb = (name: string, _default: boolean) => - boolean(env(name, _default.toString())) - -export const envfile = (name: string, _default = '') => { - const v = env(name, _default) - if (!v) { - throw new Error(`${name} environment variable must be specified`) - } - if (!existsSync(v)) { - throw new Error(`${name} (${v}) path must exist`) - } - return v -} - -export const envrequired = (name: string, _default = '') => { - const v = env(name, _default) - if (!v) { - throw new Error(`${name} environment variable must be specified`) - } - return v -} diff --git a/packages/pockethost/src/core/index.ts b/packages/pockethost/src/core/index.ts index 8912f593..c915fda8 100644 --- a/packages/pockethost/src/core/index.ts +++ b/packages/pockethost/src/core/index.ts @@ -1,12 +1,7 @@ export * from '../constants' -export * from './PromiseAllocator' export * from './Settings' -export * from './SyslogLogger' export * from './asyncExecutionGuard' -export * from './discordAlert' -export * from './env' export * from './exit' export * from './internal' -export * from './process' export * from './smartFetch' export * from './tryFetch' diff --git a/packages/pockethost/src/core/pexec.ts b/packages/pockethost/src/core/pexec.ts deleted file mode 100644 index f06e4829..00000000 --- a/packages/pockethost/src/core/pexec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { exec } from 'child_process' -import { Logger } from '../common' - -export const pexec = (logger: Logger) => (cmd: string) => { - const { dbg, error } = logger.create('pexec') - return new Promise((resolve, reject) => { - dbg(cmd) - exec(cmd, (err, stdout, stderr) => { - dbg(stdout) - if (err) { - error(`${err}`) - error(stderr) - reject(err) - return - } - resolve() - }) - }) -} diff --git a/packages/pockethost/src/core/process.ts b/packages/pockethost/src/core/process.ts deleted file mode 100644 index 9cfa132c..00000000 --- a/packages/pockethost/src/core/process.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ioc } from '.' -import { discordAlert } from './discordAlert' -import { gracefulExit } from './exit' -;['unhandledRejection', 'uncaughtException'].forEach((type) => { - process.on(type, (e) => { - console.error(e) - try { - discordAlert(e) - } catch (e) { - console.error(e) - } - const debug = (() => { - try { - return ioc.service('settings').DEBUG - } catch { - return true - } - })() - if (debug) { - console.error(e.stack) - gracefulExit() - } - }) -}) diff --git a/packages/pockethost/src/core/tryFetch.ts b/packages/pockethost/src/core/tryFetch.ts index d06e0525..ad7e1c68 100644 --- a/packages/pockethost/src/core/tryFetch.ts +++ b/packages/pockethost/src/core/tryFetch.ts @@ -13,11 +13,11 @@ export type TryFetchConfig = { * @param config { preflight: ()=>Promise, retryMs: number} * @returns Promise * - * TryFetch will contiously try to fetch a URL every `retryMs`, with an optinoal - * `preflight`. If `preflight` is specificed, it must resolve to `true` before - * tryFetch will attempt to fetch the URL. If `preflight` resolves to `false`, - * tryFetch will delay by `retryMs` and then check again. If `preflight` - * rejects, then tryFetch rejects and exits. + * TryFetch will continuously try to fetch a URL every `retryMs`, with an + * optional `preflight`. If `preflight` is specified, it must resolve to + * `true` before tryFetch will attempt to fetch the URL. If `preflight` + * resolves to `false`, tryFetch will delay by `retryMs` and then check again. + * If `preflight` rejects, then tryFetch rejects and exits. * * Note: tryFetch exits ONLY on success or a rejected preflight. */ diff --git a/packages/pockethost/src/index.ts b/packages/pockethost/src/index.ts deleted file mode 100644 index 46d458ad..00000000 --- a/packages/pockethost/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './core' diff --git a/packages/pockethost/src/server.ts b/packages/pockethost/src/server.ts new file mode 100644 index 00000000..124539ff --- /dev/null +++ b/packages/pockethost/src/server.ts @@ -0,0 +1,115 @@ +import express, { ErrorRequestHandler } from 'express' +import 'express-async-errors' +import { default as httpProxy } from 'http-proxy' +import { + APEX_DOMAIN, + LoggerService, + PORT, + asyncExitHook, + doAfterInstanceFoundAction, + doAfterServerStartAction, + doAppMountedAction, + doGetInstanceByRequestInfoFilter, + doGetOrProvisionInstanceUrlFilter, + doIncomingRequestAction, + doRequestErrorAction, + doRequestErrorMessageFilter, + onInstanceLogAction, +} from '../core' + +export const serve = async () => { + const _proxyLogger = LoggerService().create('ProxyService') + const { dbg, error, info, trace, warn } = _proxyLogger + + onInstanceLogAction(async ({ instance, type, data }) => { + dbg(data.toString()) + }) + + // registerFilter( + // CoreFilters.Waf_VHosts, + // async (routes: { [_: string]: string }) => { + // return { ...routes, '*': `http://localhost:${PORT()}` } + // }, + // 99, + // ) + + const proxy = httpProxy.createProxyServer({}) + proxy.on('error', (err, req, res, target) => { + warn(`Proxy error ${err} on ${req.url} (${req.headers.host})`) + console.log(err) + }) + + const app = express() + + app.get('/_api/health', (req, res, next) => { + res.json({ status: 'ok' }) + res.end + }) + + const errorHandler: ErrorRequestHandler = async (err, req, res, next) => { + doRequestErrorAction({ err }) + res.status(500).send(await doRequestErrorMessageFilter(err.toString())) + } + app.use(errorHandler) + + doAppMountedAction({ app }) + + app.all(`*`, async (req, res, next) => { + const method = req.method + const fullUrl = new URL( + req.protocol + '://' + req.get('host') + req.originalUrl, + ) + const host = fullUrl.hostname + if (!host) { + throw new Error(`Host not found`) + } + const subdomain = host.slice(0, -`.${APEX_DOMAIN()}`.length) + + dbg( + `${method} ${fullUrl} (${subdomain}) -> ${`http://localhost:${PORT()}`}`, + ) + + await doIncomingRequestAction({ req, res, host }) + + const instance = await doGetInstanceByRequestInfoFilter(undefined, { + req, + res, + host, + subdomain, + }) + if (!instance) { + res.status(404).end(`${host} not found`) + return + } + + await doAfterInstanceFoundAction({ + instance, + req, + res, + host, + }) + + const url = await doGetOrProvisionInstanceUrlFilter('', { + req, + res, + instance, + host, + subdomain, + }) + + dbg(`Forwarding request for ${req.url} to instance ${url}`) + + proxy.web(req, res, { target: url }) + + // next() + }) + + app.listen(PORT(), () => { + info(`pockethost listening on port ${PORT()}`) + doAfterServerStartAction() + }) + + asyncExitHook(async () => { + info(`Shutting down pockethost`) + }) +} diff --git a/packages/pockethost/src/services/PortService.ts b/packages/pockethost/src/services/PortService.ts deleted file mode 100644 index 95ef43ec..00000000 --- a/packages/pockethost/src/services/PortService.ts +++ /dev/null @@ -1,12 +0,0 @@ -import getPort from 'get-port' -import { INITIAL_PORT_POOL_SIZE, mergeConfig, mkSingleton } from '../../core' -import { ResourceAllocator } from '../common/ResourceAllocator' - -export type Config = { maxPorts: number } -export const PortService = mkSingleton((config: Partial = {}) => { - const { maxPorts } = mergeConfig( - { maxPorts: INITIAL_PORT_POOL_SIZE() }, - config, - ) - return ResourceAllocator(maxPorts, getPort) -}) diff --git a/packages/pockethost/src/services/ProxyService.ts b/packages/pockethost/src/services/ProxyService.ts deleted file mode 100644 index 1fe96087..00000000 --- a/packages/pockethost/src/services/ProxyService.ts +++ /dev/null @@ -1,98 +0,0 @@ -import cors from 'cors' -import express, { Request, Response } from 'express' -import 'express-async-errors' -import { default as Server, default as httpProxy } from 'http-proxy' -import { AsyncReturnType } from 'type-fest' -import { - DAEMON_PORT, - Logger, - LoggerService, - SingletonBaseConfig, - asyncExitHook, - mkSingleton, -} from '../../core' - -export type ProxyServiceApi = AsyncReturnType - -export type ProxyMiddleware = ( - req: Request, - res: Response, - meta: { - subdomain: string - coreInternalUrl: string - proxy: Server - host: string - }, - logger: Logger, -) => boolean | Promise - -export type ProxyServiceConfig = SingletonBaseConfig & { - coreInternalUrl: string -} -export const proxyService = mkSingleton(async (config: ProxyServiceConfig) => { - const _proxyLogger = LoggerService().create('ProxyService') - const { dbg, error, info, trace, warn } = _proxyLogger - - const { coreInternalUrl } = config - - const proxy = httpProxy.createProxyServer({}) - proxy.on('error', (err, req, res, target) => { - warn(`Proxy error ${err} on ${req.url} (${req.headers.host})`) - }) - - const server = express() - - server.use(cors()) - - server.get('/_api/health', (req, res, next) => { - res.json({ status: 'ok' }) - res.end - }) - - server.use((req, res, next) => { - const host = req.headers.host - if (!host) { - throw new Error(`Host not found`) - } - res.locals.host = host - next() - }) - - server.use((req, res, next) => { - res.locals.coreInternalUrl = coreInternalUrl - next() - }) - - server.use((req, res, next) => { - const url = new URL(`http://${req.headers.host}${req.url}`) - const country = (req.headers['cf-ipcountry'] as string) || '' - const ip = (req.headers['x-forwarded-for'] as string) || '' - const method = req.method || '' - const sig = [ - method.padStart(10), - country.padStart(5), - ip.padEnd(45), - url.toString(), - ].join(' ') - info(`Incoming request ${sig}`) - res.locals.sig = sig - next() - }) - - server.use((req, res, next) => { - res.locals.proxy = proxy - next() - }) - - server.listen(DAEMON_PORT(), () => { - info(`daemon listening on port ${DAEMON_PORT()}`) - }) - - asyncExitHook(async () => { - info(`Shutting down proxy server`) - }) - - const use = server.use.bind(server) - - return { use } -}) diff --git a/packages/pockethost/src/services/RealtimeLog.ts b/packages/pockethost/src/services/RealtimeLog.ts deleted file mode 100644 index c0cb7fa5..00000000 --- a/packages/pockethost/src/services/RealtimeLog.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { text } from 'node:stream/consumers' -import { JsonifiableObject } from 'type-fest/source/jsonifiable' -import { - InstanceFields, - LoggerService, - mkSingleton, - PocketBase, - SingletonBaseConfig, - stringify, -} from '../../core' -import { InstanceLogger } from './InstanceLoggerService' -import { proxyService } from './ProxyService' - -export type RealtimeLogConfig = SingletonBaseConfig & {} - -const mkEvent = (name: string, data: JsonifiableObject) => { - return `event: ${name}\ndata: ${stringify(data)}\n\n` -} - -export type RealtimeLog = ReturnType -export const realtimeLog = mkSingleton(async (config: RealtimeLogConfig) => { - ;(await proxyService()).use('/logs', async (req, res, next) => { - const logger = LoggerService().create(`RealtimeLogger`) - const { dbg, error, trace } = logger - dbg(`Got a logging request`) - - const { coreInternalUrl } = res.locals - - dbg(`Got a log request`) - const parsed = new URL(req.url, `https://${req.headers.host}`) - - const json = await text(req) - dbg(`JSON payload is`, json) - const payload = JSON.parse(json) - dbg(`Parsed payload is`, parsed) - const { instanceId, auth, n: nInitialRecords } = payload - - if (!instanceId) { - throw new Error(`instanceId query param required in ${req.url}`) - } - if (!auth) { - throw new Error(`Expected 'auth' query param, but found ${req.url}`) - } - - /** Validate auth token */ - const client = new PocketBase(coreInternalUrl) - client.authStore.loadFromCookie(auth) - dbg(`Cookie here is`, client.authStore.isValid) - await client.collection('users').authRefresh() - if (!client.authStore.isValid) { - throw new Error(`Cookie is invalid her`) - } - const user = client.authStore.model - if (!user) { - throw new Error(`Valid user expected here`) - } - dbg(`Cookie auth passed)`) - - /** Validate instance and ownership */ - dbg(`Got a log request for instance ID ${instanceId}`) - const instance = await client - .collection('instances') - .getOne(instanceId) - if (!instance) { - throw new Error(`instanceId ${instanceId} not found for user ${user.id}`) - } - dbg(`Instance is `, instance) - - /** Get a database connection */ - const instanceLogger = InstanceLogger(instanceId, `exec`) - - /** Start the stream */ - res.writeHead(200, { - 'Content-Type': 'text/event-stream; charset=UTF-8', - Connection: 'keep-alive', - 'Cache-Control': 'no-store', - }) - - const unsub = instanceLogger.tail(100, (entry) => { - const evt = mkEvent(`log`, entry) - res.write(evt) - }) - - res.on('close', () => { - unsub() - instanceLogger.shutdown() - }) - }) - - return {} -}) diff --git a/packages/pockethost/src/services/index.ts b/packages/pockethost/src/services/index.ts deleted file mode 100644 index 8c11c7ed..00000000 --- a/packages/pockethost/src/services/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './InstanceLoggerService' -export * from './InstanceService' -export * from './MothershipAdminClientService' -export * from './PocketBaseService' -export * from './PortService' -export * from './ProxyService' -export * from './RealtimeLog' diff --git a/packages/pockethost/tsconfig.json b/packages/pockethost/tsconfig.json index 0f098a71..3cc7d053 100644 --- a/packages/pockethost/tsconfig.json +++ b/packages/pockethost/tsconfig.json @@ -16,6 +16,9 @@ "strictNullChecks": true, "noEmit": true }, - "include": ["**/*.ts"], - "exclude": ["./src/mothership-app/**/*", "./src/instance-app/**/*"] + "include": [ + "**/*.ts", + "../pending/mothership-dashboard/User.ts", + "../pending/mothership-dashboard/types.ts" + ] } diff --git a/plop-templates/plugin/.npmignore b/plop-templates/plugin/.npmignore new file mode 100644 index 00000000..f7130f53 --- /dev/null +++ b/plop-templates/plugin/.npmignore @@ -0,0 +1,6 @@ +* +!**/*.ts +!package.json +!readme.md +!LICENSE.md +!CHANGELOG.md diff --git a/plop-templates/plugin/LICENSE.md b/plop-templates/plugin/LICENSE.md new file mode 100644 index 00000000..6f385987 --- /dev/null +++ b/plop-templates/plugin/LICENSE.md @@ -0,0 +1,16 @@ +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/plop-templates/plugin/package.json b/plop-templates/plugin/package.json new file mode 100644 index 00000000..8f402835 --- /dev/null +++ b/plop-templates/plugin/package.json @@ -0,0 +1,31 @@ +{ + "name": "@pockethost/plugin-{{dashCase name}}", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "http://github.com/pockethost/pockethost/packages/plugin-{{dashCase name}}" + }, + "description": "A pockethost plugin.", + "main": "src/index.ts", + "module": "src/index.ts", + "types": "src/index.ts", + "type": "module", + "scripts": { + "check-types": "tsc --noEmit " + }, + "keywords": [ + "pockethost" + ], + "author": { + "name": "Ben Allfree", + "url": "https://github.com/benallfree" + }, + "license": "MIT", + "dependencies": { + "pockethost": "workspace:^1.0.0" + }, + "devDependencies": { + "@types/node": "^20.8.10", + "typescript": "^5.4.5" + } +} diff --git a/plop-templates/plugin/readme.md b/plop-templates/plugin/readme.md new file mode 100644 index 00000000..e9c2bf1b --- /dev/null +++ b/plop-templates/plugin/readme.md @@ -0,0 +1,33 @@ +# plugin-{{dashCase name}} + +A plugin for [pockethost](https://www.npmjs.com/package/pockethost). + +## Quickstart + +```bash +npx pockethost plugin install @pockethost/plugin-{{dashCase name}} + +npx pockethost {{dashCase name}} --help +``` + +## Variables + +The following variables will be used if they are found in the shell environment. PocketHost will also load them from an `.env` file if found at load time. + +| Name | Default | Discussion | +| ------------------------------- | -------------------------------------- | ------------------------------------------------------------- | +| PH\_{{constantCase name}}\_HOME | `.pockethost/plugin-{{dashCase name}}` | The home directory for any data storage needs of this plugin. | + +## Actions + +## Filters + +## Support + +PocketHost has a thriving [Discord community](https://discord.gg/nVTxCMEcGT). + +--- + +### Sponsored by https://pockethost.io. Instantly host your PocketBase projects. + +--- diff --git a/plop-templates/plugin/src/constants.ts b/plop-templates/plugin/src/constants.ts new file mode 100644 index 00000000..faf08309 --- /dev/null +++ b/plop-templates/plugin/src/constants.ts @@ -0,0 +1,11 @@ +import { join } from 'path' +import { PH_HOME, Settings, mkPath } from 'pockethost/core' + +export const PLUGIN_NAME = `plugin-{{dashCase name}}` + +export const HOME_DIR = + process.env.PH_{{constantCase name}}_HOME || join(PH_HOME(),PLUGIN_NAME) + +const settings = Settings({ + PH_{{constantCase name}}_HOME: mkPath(HOME_DIR, { create: true }), +}) diff --git a/plop-templates/plugin/src/index.ts b/plop-templates/plugin/src/index.ts new file mode 100644 index 00000000..3dd0c785 --- /dev/null +++ b/plop-templates/plugin/src/index.ts @@ -0,0 +1,9 @@ +import { PocketHostPlugin } from 'pockethost/core' +import { PLUGIN_NAME } from './constants' +import { dbg } from './log' + +const plugin: PocketHostPlugin = async ({}) => { + dbg(`initializing ${PLUGIN_NAME}`) +} + +export default plugin diff --git a/plop-templates/plugin/src/log.ts b/plop-templates/plugin/src/log.ts new file mode 100644 index 00000000..e7c80336 --- /dev/null +++ b/plop-templates/plugin/src/log.ts @@ -0,0 +1,4 @@ +import { LoggerService } from 'pockethost/core' + +const logger = LoggerService().create('plugin-{{dashCase name}}') +export const { dbg, info } = logger diff --git a/plop-templates/plugin/tsconfig.json b/plop-templates/plugin/tsconfig.json new file mode 100644 index 00000000..d0035bbf --- /dev/null +++ b/plop-templates/plugin/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "lib": ["ES2021.String"], + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "noUncheckedIndexedAccess": true, + "strictNullChecks": true, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/plopfile.mjs b/plopfile.mjs index b1f3179b..886f817a 100644 --- a/plopfile.mjs +++ b/plopfile.mjs @@ -7,6 +7,8 @@ import ora from 'ora' import { join } from 'path' import { cwd } from 'process' import factory from 'rizzdown' +import pkg from './package.json' assert { type: 'json' } +const { version } = pkg /** @typedef {import('plop').NodePlopAPI} Plop */ @@ -183,4 +185,29 @@ export default function (/** @type {Plop} */ plop) { ] }, }) + + plop.setGenerator('plugin', { + description: 'Generate a new plugin', + prompts: [ + { + type: 'input', + name: 'name', + message: 'Plugin Name (dash case)', + }, + ], + actions: (data) => { + data.version = version + return [ + { + type: 'addMany', + destination: 'packages/plugin-{{dashCase name}}', + base: 'plop-templates/plugin', + templateFiles: `plop-templates/plugin/**/*`, + }, + async () => { + console.log(execSync(`pnpm i`).toString()) + }, + ] + }, + }) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af2446af..3fcb7901 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,144 +8,24 @@ importers: .: devDependencies: - '@changesets/cli': - specifier: ^2.27.5 - version: 2.27.5 - '@commitlint/cli': - specifier: ^19.3.0 - version: 19.3.0(@types/node@20.8.10)(typescript@5.2.2) '@commitlint/config-conventional': specifier: ^19.2.2 version: 19.2.2 - '@swc/cli': - specifier: ^0.1.62 - version: 0.1.62(@swc/core@1.3.95)(chokidar@3.5.3) - '@swc/core': - specifier: ^1.3.95 - version: 1.3.95 - '@types/bootstrap': - specifier: ^5.2.8 - version: 5.2.8 - '@types/copyfiles': - specifier: ^2.4.4 - version: 2.4.4 - '@types/cors': - specifier: ^2.8.17 - version: 2.8.17 - '@types/d3-scale': - specifier: ^4.0.6 - version: 4.0.6 - '@types/d3-scale-chromatic': - specifier: ^3.0.1 - version: 3.0.1 - '@types/decompress': - specifier: ^4.2.6 - version: 4.2.6 - '@types/dockerode': - specifier: ^3.3.21 - version: 3.3.21 - '@types/eventsource': - specifier: ^1.1.14 - version: 1.1.14 - '@types/express': - specifier: ^4.17.21 - version: 4.17.21 - '@types/express-sslify': - specifier: ^1.2.5 - version: 1.2.5 - '@types/http-proxy': - specifier: ^1.17.13 - version: 1.17.13 - '@types/inquirer': - specifier: ^9.0.7 - version: 9.0.7 - '@types/js-cookie': - specifier: ^3.0.5 - version: 3.0.5 - '@types/js-yaml': - specifier: ^4.0.9 - version: 4.0.9 - '@types/json-stringify-safe': - specifier: ^5.0.2 - version: 5.0.2 - '@types/marked': - specifier: ^4.3.2 - version: 4.3.2 - '@types/memorystream': - specifier: ^0.3.3 - version: 0.3.3 - '@types/ncp': - specifier: ^2.0.8 - version: 2.0.8 - '@types/node': - specifier: ^20.8.10 - version: 20.8.10 - '@types/node-os-utils': - specifier: ^1.3.4 - version: 1.3.4 - '@types/semver': - specifier: ^7.5.4 - version: 7.5.4 - '@types/tail': - specifier: ^2.2.2 - version: 2.2.2 - '@types/tmp': - specifier: ^0.2.5 - version: 0.2.5 - '@types/unzipper': - specifier: ^0.10.8 - version: 0.10.8 - '@types/vhost': - specifier: ^3.0.9 - version: 3.0.9 - '@types/winston-syslog': - specifier: ^2.4.3 - version: 2.4.3 - chokidar-cli: - specifier: ^3.0.0 - version: 3.0.0 - concurrently: - specifier: ^8.2.2 - version: 8.2.2 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 - date-fns: - specifier: ^2.30.0 - version: 2.30.0 - dotenv-cli: - specifier: ^7.3.0 - version: 7.3.0 - esbuild: - specifier: ^0.20.0 - version: 0.20.0 - esbuild-node-externals: - specifier: ^1.13.0 - version: 1.13.0(esbuild@0.20.0) - express: - specifier: ^4.18.2 - version: 4.18.2 - http-proxy-middleware: - specifier: ^2.0.6 - version: 2.0.6(@types/express@4.17.21) + chalk: + specifier: ^5.3.0 + version: 5.3.0 + commitlint: + specifier: ^19.3.0 + version: 19.3.0(@types/node@20.14.2)(typescript@5.2.2) husky: specifier: ^9.0.11 version: 9.0.11 inquirer: specifier: ^9.2.15 version: 9.2.15 - ip-cidr: - specifier: ^3.1.0 - version: 3.1.0 js-yaml: specifier: ^4.1.0 version: 4.1.0 - ncp: - specifier: ^2.0.0 - version: 2.0.0 - nodemon: - specifier: ^3.0.3 - version: 3.0.3 ora: specifier: ^7.0.1 version: 7.0.1 @@ -170,184 +50,105 @@ importers: rizzdown: specifier: ^0.0.7 version: 0.0.7(encoding@0.1.13) - svelte: - specifier: ^4.2.2 - version: 4.2.2 + sherif: + specifier: ^0.8.4 + version: 0.8.4 tslib: specifier: ^2.6.2 version: 2.6.2 - tsx: - specifier: ^3.14.0 - version: 3.14.0 - type-fest: - specifier: ^4.6.0 - version: 4.6.0 + turbo: + specifier: ^2.0.4 + version: 2.0.4 typescript: specifier: ^5.2.2 version: 5.2.2 - packages/dashboard: - devDependencies: - '@microsoft/fetch-event-source': - specifier: https://github.com/pockethost/fetch-event-source.git#ebe3b7122647b48b93fd11effbbfb915d98956b0 - version: https://codeload.github.com/pockethost/fetch-event-source/tar.gz/ebe3b7122647b48b93fd11effbbfb915d98956b0 - '@pockethost/plugin-console-logger': - specifier: link:../plugin-console-logger - version: link:../plugin-console-logger - '@s-libs/micro-dash': - specifier: ^16.1.0 - version: 16.1.0 - '@sveltejs/adapter-static': - specifier: ^2.0.3 - version: 2.0.3(@sveltejs/kit@1.27.2(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5))) - '@sveltejs/kit': - specifier: ^1.25.2 - version: 1.27.2(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)) - '@tailwindcss/typography': - specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.3.5) - '@types/bootstrap': - specifier: ^5.2.6 - version: 5.2.8 - '@types/d3-scale': - specifier: ^4.0.3 - version: 4.0.6 - '@types/d3-scale-chromatic': - specifier: ^3.0.0 - version: 3.0.1 - '@types/js-cookie': - specifier: ^3.0.2 - version: 3.0.5 - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.31) - boolean: - specifier: ^3.2.0 - version: 3.2.0 - chart.js: - specifier: 4.4.0 - version: 4.4.0 - d3-scale: - specifier: ^4.0.2 - version: 4.0.2 - d3-scale-chromatic: - specifier: ^3.0.0 - version: 3.0.0 - daisyui: - specifier: ^4.4.23 - version: 4.4.23(postcss@8.4.31) - date-fns: - specifier: ^2.30.0 - version: 2.30.0 - highlight.js: - specifier: ^11.8.0 - version: 11.9.0 - pockethost: - specifier: workspace:../pockethost - version: link:../pockethost - sass: - specifier: ^1.68.0 - version: 1.69.5 - svelte: - specifier: ^4.2.1 - version: 4.2.2 - svelte-chartjs: - specifier: 3.1.2 - version: 3.1.2(chart.js@4.4.0)(svelte@4.2.2) - svelte-check: - specifier: ^3.5.2 - version: 3.5.2(postcss-load-config@4.0.1(postcss@8.4.31))(postcss@8.4.31)(pug@3.0.2)(sass@1.69.5)(svelte@4.2.2) - svelte-highlight: - specifier: ^7.3.0 - version: 7.4.1 - svelte-preprocess: - specifier: ^5.0.4 - version: 5.0.4(postcss-load-config@4.0.1(postcss@8.4.31))(postcss@8.4.31)(pug@3.0.2)(sass@1.69.5)(svelte@4.2.2)(typescript@5.2.2) - tailwindcss: - specifier: ^3.3.3 - version: 3.3.5 - vite: - specifier: ^4.4.9 - version: 4.5.0(@types/node@20.14.2)(sass@1.69.5) - - packages/lander: + packages/plugin-auto-admin: dependencies: - '@tailwindcss/typography': - specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.3.5) - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.31) - boolean: - specifier: ^3.2.0 - version: 3.2.0 - daisyui: - specifier: ^3.7.7 - version: 3.9.4 - dotenv: - specifier: ^16.3.1 - version: 16.3.1 + '@types/json-stringify-safe': + specifier: ^5.0.2 + version: 5.0.2 + json-stringify-safe: + specifier: ^5.0.1 + version: 5.0.1 + pocketbase: + specifier: ^0.21.3 + version: 0.21.3 pockethost: - specifier: workspace:../pockethost + specifier: workspace:^1.0.0 version: link:../pockethost - postcss: - specifier: ^8.4.30 - version: 8.4.31 - tailwindcss: - specifier: ^3.3.3 - version: 3.3.5 devDependencies: - '@11ty/eleventy': - specifier: ^2.0.1 - version: 2.0.1 - '@11ty/eleventy-img': - specifier: ^3.1.0 - version: 3.1.8(encoding@0.1.13) - '@11ty/eleventy-navigation': - specifier: ^0.3.5 - version: 0.3.5 - '@11ty/eleventy-plugin-bundle': - specifier: ^1.0.4 - version: 1.0.4 - '@11ty/eleventy-plugin-rss': - specifier: ^1.2.0 - version: 1.2.0 - '@11ty/eleventy-plugin-syntaxhighlight': - specifier: ^5.0.0 - version: 5.0.0 - luxon: - specifier: ^3.3.0 - version: 3.4.3 - markdown-it-anchor: - specifier: ^8.6.7 - version: 8.6.7(@types/markdown-it@13.0.5)(markdown-it@13.0.2) - prettier: - specifier: ^3.0.3 - version: 3.0.3 + '@types/node': + specifier: ^20.8.10 + version: 20.14.2 + typescript: + specifier: ^5.4.5 + version: 5.4.5 packages/plugin-console-logger: dependencies: + json-stringify-safe: + specifier: ^5.0.1 + version: 5.0.1 pockethost: - specifier: workspace:../pockethost + specifier: workspace:^1.3.0 version: link:../pockethost + devDependencies: + '@types/json-stringify-safe': + specifier: ^5.0.2 + version: 5.0.2 + '@types/node': + specifier: ^20.8.10 + version: 20.14.2 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + + packages/plugin-launcher-spawn: + dependencies: + '@types/node': + specifier: ^20.8.10 + version: 20.14.2 + '@types/semver': + specifier: ^7.5.4 + version: 7.5.4 + async-mutex: + specifier: ^0.5.0 + version: 0.5.0 + bottleneck: + specifier: ^2.19.5 + version: 2.19.5 + get-port: + specifier: ^6.1.2 + version: 6.1.2 + gobot: + specifier: 1.0.0-alpha.40 + version: 1.0.0-alpha.40 + pockethost: + specifier: workspace:^1.3.0 + version: link:../pockethost + semver: + specifier: ^7.6.2 + version: 7.6.2 + devDependencies: + typescript: + specifier: ^5.4.5 + version: 5.4.5 packages/pockethost: dependencies: - '@dotenvx/dotenvx': - specifier: ^0.44.1 - version: 0.44.1 + '@pockethost/plugin-auto-admin': + specifier: workspace:^ + version: link:../plugin-auto-admin '@pockethost/plugin-console-logger': - specifier: workspace:../plugin-console-logger + specifier: workspace:^ version: link:../plugin-console-logger + '@pockethost/plugin-launcher-spawn': + specifier: workspace:^ + version: link:../plugin-launcher-spawn '@s-libs/micro-dash': specifier: ^16.1.0 version: 16.1.0 - '@types/node-os-utils': - specifier: ^1.3.4 - version: 1.3.4 - '@types/winston-syslog': - specifier: ^2.4.3 - version: 2.4.3 ajv: specifier: ^8.12.0 version: 8.12.0 @@ -363,30 +164,12 @@ importers: commander: specifier: ^11.1.0 version: 11.1.0 - cors: - specifier: ^2.8.5 - version: 2.8.5 - decompress: - specifier: ^4.2.1 - version: 4.2.1 - decompress-unzip: - specifier: https://github.com/pockethost/decompress-unzip.git#6ef397b9a2df11d39c7b26ce779e123833844751 - version: https://codeload.github.com/pockethost/decompress-unzip/tar.gz/6ef397b9a2df11d39c7b26ce779e123833844751 - devcert: - specifier: ^1.2.2 - version: 1.2.2 - dockerode: - specifier: ^3.3.5 - version: 3.3.5 + dotenv: + specifier: ^16.3.1 + version: 16.4.5 env-paths: specifier: ^3.0.0 version: 3.0.0 - event-source-polyfill: - specifier: ^1.0.31 - version: 1.0.31 - eventsource: - specifier: ^2.0.2 - version: 2.0.2 exit-hook: specifier: ^4.0.0 version: 4.0.0 @@ -396,415 +179,92 @@ importers: express-async-errors: specifier: ^3.1.1 version: 3.1.1(express@4.18.2) - express-sslify: - specifier: ^1.2.0 - version: 1.2.0 - ftp-srv: - specifier: github:pockethost/ftp-srv#0fc708bae0d5d7a55ce948767f082d6fcfb2af59 - version: https://codeload.github.com/pockethost/ftp-srv/tar.gz/0fc708bae0d5d7a55ce948767f082d6fcfb2af59 get-port: specifier: ^6.1.2 version: 6.1.2 - glob: - specifier: ^10.3.10 - version: 10.3.10 - gobot: - specifier: 1.0.0-alpha.40 - version: 1.0.0-alpha.40 - gobot-pocketbase: - specifier: 0.22.8-alpha.22 - version: 0.22.8-alpha.22 http-proxy: specifier: ^1.18.1 version: 1.18.1 - http-proxy-middleware: - specifier: ^2.0.6 - version: 2.0.6(@types/express@4.17.21) - ip-cidr: - specifier: ^3.1.0 - version: 3.1.0 json-stringify-safe: specifier: ^5.0.1 version: 5.0.1 - knex: - specifier: ^2.5.1 - version: 2.5.1(sqlite3@5.1.6(encoding@0.1.13)) - memorystream: - specifier: ^0.3.1 - version: 0.3.1 + listr2: + specifier: ^8.2.3 + version: 8.2.3 nanoid: specifier: ^5.0.2 version: 5.0.7 node-fetch: specifier: ^3.3.2 version: 3.3.2 - node-os-utils: - specifier: ^1.3.7 - version: 1.3.7 pocketbase: specifier: ^0.21.3 version: 0.21.3 - pockethost: - specifier: workspace:../pockethost - version: 'link:' rimraf: specifier: ^5.0.5 version: 5.0.5 semver: - specifier: ^7.5.4 + specifier: ^7.6.2 version: 7.6.2 - sqlite3: - specifier: ^5.1.6 - version: 5.1.6(encoding@0.1.13) - syslog-parse: - specifier: ^2.0.0 - version: 2.0.0 - tail: - specifier: ^2.2.6 - version: 2.2.6 tmp: specifier: ^0.2.1 version: 0.2.3 + tsx: + specifier: ^4.15.7 + version: 4.15.7 + type-fest: + specifier: ^4.6.0 + version: 4.6.0 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + update-notifier: + specifier: ^7.0.0 + version: 7.0.0 url-pattern: specifier: ^1.0.3 version: 1.0.3 - vhost: - specifier: ^3.0.2 - version: 3.0.2 - winston: - specifier: ^3.11.0 - version: 3.11.0 - winston-syslog: - specifier: ^2.7.0 - version: 2.7.0(winston@3.11.0) devDependencies: - '@types/cors': - specifier: ^2.8.17 - version: 2.8.17 - '@types/d3-scale': - specifier: ^4.0.6 - version: 4.0.6 - '@types/d3-scale-chromatic': - specifier: ^3.0.1 - version: 3.0.1 - '@types/decompress': - specifier: ^4.2.6 - version: 4.2.6 - '@types/dockerode': - specifier: ^3.3.21 - version: 3.3.21 - '@types/eventsource': - specifier: ^1.1.14 - version: 1.1.14 '@types/express': specifier: ^4.17.21 version: 4.17.21 - '@types/express-sslify': - specifier: ^1.2.5 - version: 1.2.5 '@types/http-proxy': specifier: ^1.17.13 version: 1.17.13 - '@types/inquirer': - specifier: ^9.0.7 - version: 9.0.7 - '@types/js-cookie': - specifier: ^3.0.5 - version: 3.0.5 - '@types/js-yaml': - specifier: ^4.0.9 - version: 4.0.9 '@types/json-stringify-safe': specifier: ^5.0.2 version: 5.0.2 - '@types/memorystream': - specifier: ^0.3.3 - version: 0.3.3 - '@types/ncp': - specifier: ^2.0.8 - version: 2.0.8 '@types/node': specifier: ^20.8.10 version: 20.8.10 '@types/semver': specifier: ^7.5.4 version: 7.5.4 - '@types/tail': - specifier: ^2.2.2 - version: 2.2.2 '@types/tmp': specifier: ^0.2.5 version: 0.2.5 - '@types/unzipper': - specifier: ^0.10.8 - version: 0.10.8 - '@types/vhost': - specifier: ^3.0.9 - version: 3.0.9 - chokidar-cli: - specifier: ^3.0.0 - version: 3.0.0 - concurrently: - specifier: ^8.2.2 - version: 8.2.2 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 - date-fns: - specifier: ^2.30.0 - version: 2.30.0 - inquirer: - specifier: ^9.2.15 - version: 9.2.15 - js-yaml: - specifier: ^4.1.0 - version: 4.1.0 - ncp: - specifier: ^2.0.0 - version: 2.0.0 - nodemon: - specifier: ^3.0.3 - version: 3.0.3 - ora: - specifier: ^7.0.1 - version: 7.0.1 - postinstall-postinstall: - specifier: ^2.1.0 - version: 2.1.0 - type-fest: - specifier: ^4.6.0 - version: 4.6.0 - - packages/pockethost-instance: {} - - packages/superadmin: - dependencies: - '@pockethost/plugin-console-logger': - specifier: link:../plugin-console-logger - version: link:../plugin-console-logger - devDependencies: - '@microsoft/fetch-event-source': - specifier: https://github.com/pockethost/fetch-event-source.git#ebe3b7122647b48b93fd11effbbfb915d98956b0 - version: https://codeload.github.com/pockethost/fetch-event-source/tar.gz/ebe3b7122647b48b93fd11effbbfb915d98956b0 - '@s-libs/micro-dash': - specifier: ^16.1.0 - version: 16.1.0 - '@sveltejs/adapter-static': - specifier: ^2.0.3 - version: 2.0.3(@sveltejs/kit@1.27.2(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5))) - '@sveltejs/kit': - specifier: ^1.25.2 - version: 1.27.2(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)) - '@tailwindcss/typography': - specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.3.5) - '@types/bootstrap': - specifier: ^5.2.6 - version: 5.2.8 - '@types/d3-scale': - specifier: ^4.0.3 - version: 4.0.6 - '@types/d3-scale-chromatic': - specifier: ^3.0.0 - version: 3.0.1 - '@types/js-cookie': - specifier: ^3.0.2 - version: 3.0.5 - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.31) - boolean: - specifier: ^3.2.0 - version: 3.2.0 - chart.js: - specifier: 4.4.0 - version: 4.4.0 - d3-scale: - specifier: ^4.0.2 - version: 4.0.2 - d3-scale-chromatic: - specifier: ^3.0.0 - version: 3.0.0 - daisyui: - specifier: ^3.8.1 - version: 3.9.4 - date-fns: - specifier: ^2.30.0 - version: 2.30.0 - highlight.js: - specifier: ^11.8.0 - version: 11.9.0 - pockethost: - specifier: workspace:../pockethost - version: link:../pockethost - sass: - specifier: ^1.68.0 - version: 1.69.5 - svelte: - specifier: ^4.2.1 - version: 4.2.2 - svelte-chartjs: - specifier: 3.1.2 - version: 3.1.2(chart.js@4.4.0)(svelte@4.2.2) - svelte-check: - specifier: ^3.5.2 - version: 3.5.2(postcss-load-config@4.0.1(postcss@8.4.31))(postcss@8.4.31)(pug@3.0.2)(sass@1.69.5)(svelte@4.2.2) - svelte-highlight: - specifier: ^7.3.0 - version: 7.4.1 - svelte-preprocess: - specifier: ^5.0.4 - version: 5.0.4(postcss-load-config@4.0.1(postcss@8.4.31))(postcss@8.4.31)(pug@3.0.2)(sass@1.69.5)(svelte@4.2.2)(typescript@5.2.2) - tailwindcss: - specifier: ^3.3.3 - version: 3.3.5 - vite: - specifier: ^4.4.9 - version: 4.5.0(@types/node@20.14.2)(sass@1.69.5) + '@types/update-notifier': + specifier: ^6.0.8 + version: 6.0.8 packages: - '@11ty/dependency-tree@2.0.1': - resolution: {integrity: sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==} - - '@11ty/eleventy-dev-server@1.0.4': - resolution: {integrity: sha512-qVBmV2G1KF/0o5B/3fITlrrDHy4bONUI2YuN3/WJ3BNw4NU1d/we8XhKrlgq13nNvHoBx5czYp3LZt8qRG53Fg==} - engines: {node: '>=14'} - hasBin: true - - '@11ty/eleventy-fetch@4.0.0': - resolution: {integrity: sha512-wGAd0r+8DUWr22fK5r07dOKuNY6ltA7hX+sJzngGZL1yJmuUVdM/xPQZ+iq0BFgf/ZeRdpVEzf2D0cpVZUuiTg==} - engines: {node: '>=14'} - - '@11ty/eleventy-img@3.1.8': - resolution: {integrity: sha512-9xVqbykggQAHTSiZEo6nUayS8l8nkM7RU8dCjGzikCc8FXSW/E17ytq7SaDngo24D3LZdD+3Gheh4zSeidrImA==} - engines: {node: '>=14.15.0'} - - '@11ty/eleventy-navigation@0.3.5': - resolution: {integrity: sha512-4aKW5aIQDFed8xs1G1pWcEiFPcDSwZtA4IH1eERtoJ+Xy+/fsoe0pzbDmw84bHZ9ACny5jblENhfZhcCxklqQw==} - - '@11ty/eleventy-plugin-bundle@1.0.4': - resolution: {integrity: sha512-3qk7I95/hiTdvLEzitHfiK00heF2qtDq3T+N89SbbcNing31fq6A0suK/f6AOK5xdp/VpxfjWg3bqky+0XD+1Q==} - engines: {node: '>=14'} - - '@11ty/eleventy-plugin-rss@1.2.0': - resolution: {integrity: sha512-YzFnSH/5pObcFnqZ2sAQ782WmpOZHj1+xB9ydY/0j7BZ2jUNahn53VmwCB/sBRwXA/Fbwwj90q1MLo01Ru0UaQ==} - - '@11ty/eleventy-plugin-syntaxhighlight@5.0.0': - resolution: {integrity: sha512-y9BUmP1GofmbJgxM1+ky/UpFCpD8JSOeLeKItUs0WApgnrHk9haHziW7lS86lbArX5SiCVo4zTTw9x53gvRCaA==} - - '@11ty/eleventy-utils@1.0.2': - resolution: {integrity: sha512-Zy2leMK1DQR6Q6ZPSagv7QpJaAz9uVbb+RmVetYFp3foMeQtOSZx7w2u5daRFmP+PeNq9vO9H4xtBToYFWZwHA==} - engines: {node: '>=12'} - - '@11ty/eleventy@2.0.1': - resolution: {integrity: sha512-t8XVUbCJByhVEa1RzO0zS2QzbL3wPY8ot1yUw9noqiSHxJWUwv6jiwm1/MZDPTYtkZH2ZHvdQIRQ5/SjG9XmLw==} - engines: {node: '>=14'} - hasBin: true - - '@11ty/lodash-custom@4.17.21': - resolution: {integrity: sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==} - engines: {node: '>=14'} - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.24.6': - resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.22.5': - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.6': - resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.6': - resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.23.0': - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/runtime@7.23.2': - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.23.0': - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} - engines: {node: '>=6.9.0'} - - '@balena/dockerignore@1.0.2': - resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} - - '@changesets/apply-release-plan@7.0.3': - resolution: {integrity: sha512-klL6LCdmfbEe9oyfLxnidIf/stFXmrbFO/3gT5LU5pcyoZytzJe4gWpTBx3BPmyNPl16dZ1xrkcW7b98e3tYkA==} - - '@changesets/assemble-release-plan@6.0.2': - resolution: {integrity: sha512-n9/Tdq+ze+iUtjmq0mZO3pEhJTKkku9hUxtUadW30jlN7kONqJG3O6ALeXrmc6gsi/nvoCuKjqEJ68Hk8RbMTQ==} - - '@changesets/changelog-git@0.2.0': - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} - - '@changesets/cli@2.27.5': - resolution: {integrity: sha512-UVppOvzCjjylBenFcwcZNG5IaZ8jsIaEVraV/pbXgukYNb0Oqa0d8UWb0LkYzA1Bf1HmUrOfccFcRLheRuA7pA==} - hasBin: true - - '@changesets/config@3.0.1': - resolution: {integrity: sha512-nCr8pOemUjvGJ8aUu8TYVjqnUL+++bFOQHBVmtNbLvKzIDkN/uiP/Z4RKmr7NNaiujIURHySDEGFPftR4GbTUA==} - - '@changesets/errors@0.2.0': - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - - '@changesets/get-dependents-graph@2.1.0': - resolution: {integrity: sha512-QOt6pQq9RVXKGHPVvyKimJDYJumx7p4DO5MO9AhRJYgAPgv0emhNqAqqysSVKHBm4sxKlGN4S1zXOIb5yCFuhQ==} - - '@changesets/get-release-plan@4.0.2': - resolution: {integrity: sha512-rOalz7nMuMV2vyeP7KBeAhqEB7FM2GFPO5RQSoOoUKKH9L6wW3QyPA2K+/rG9kBrWl2HckPVES73/AuwPvbH3w==} - - '@changesets/get-version-range-type@0.4.0': - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - - '@changesets/git@3.0.0': - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} - - '@changesets/logger@0.1.0': - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} - - '@changesets/parse@0.4.0': - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - - '@changesets/pre@2.0.0': - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} - - '@changesets/read@0.6.0': - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} - - '@changesets/should-skip-package@0.1.0': - resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} - - '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - - '@changesets/types@6.0.0': - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - - '@changesets/write@0.3.1': - resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} - - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - '@commitlint/cli@19.3.0': resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} engines: {node: '>=v18'} @@ -874,15 +334,8 @@ packages: resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} engines: {node: '>=v18'} - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - - '@dotenvx/dotenvx@0.44.1': - resolution: {integrity: sha512-OmOU7CRwhXydZUHeTP46GNZsGpwQ3mwrr3cUAWod+FmrKW3ib4GYe1jU++ZFyEEUNvg532QvvM7hQ44YyJrgfw==} - hasBin: true - - '@esbuild/aix-ppc64@0.20.0': - resolution: {integrity: sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -893,8 +346,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.20.0': - resolution: {integrity: sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==} + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -905,8 +358,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.20.0': - resolution: {integrity: sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==} + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -917,8 +370,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.20.0': - resolution: {integrity: sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==} + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -929,8 +382,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.20.0': - resolution: {integrity: sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==} + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -941,8 +394,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.20.0': - resolution: {integrity: sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==} + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -953,8 +406,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.20.0': - resolution: {integrity: sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==} + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -965,8 +418,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.20.0': - resolution: {integrity: sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==} + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -977,8 +430,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.20.0': - resolution: {integrity: sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==} + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -989,8 +442,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.20.0': - resolution: {integrity: sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==} + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1001,8 +454,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.20.0': - resolution: {integrity: sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==} + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1013,8 +466,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.20.0': - resolution: {integrity: sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==} + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1025,8 +478,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.20.0': - resolution: {integrity: sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==} + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1037,8 +490,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.20.0': - resolution: {integrity: sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==} + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1049,8 +502,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.20.0': - resolution: {integrity: sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==} + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1061,8 +514,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.20.0': - resolution: {integrity: sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==} + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1073,8 +526,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.20.0': - resolution: {integrity: sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==} + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1085,8 +538,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.20.0': - resolution: {integrity: sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==} + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1097,8 +550,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.20.0': - resolution: {integrity: sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==} + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1109,8 +562,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.20.0': - resolution: {integrity: sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==} + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1121,8 +574,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.20.0': - resolution: {integrity: sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==} + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1133,8 +586,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.20.0': - resolution: {integrity: sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==} + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1145,34 +598,12 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.20.0': - resolution: {integrity: sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==} + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@fastify/busboy@2.0.0': - resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} - engines: {node: '>=14'} - - '@gar/promisify@1.1.3': - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - - '@iarna/toml@2.2.5': - resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - - '@inquirer/confirm@2.0.17': - resolution: {integrity: sha512-EqzhGryzmGpy2aJf6LxJVhndxYmFs+m8cxXzf8nejb1DE3sabf6mUgBcp4J0jAUEiAcYzqmkqRr7LPFh/WdnXA==} - engines: {node: '>=14.18.0'} - - '@inquirer/core@6.0.0': - resolution: {integrity: sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw==} - engines: {node: '>=14.18.0'} - - '@inquirer/type@1.3.3': - resolution: {integrity: sha512-xTUt0NulylX27/zMx04ZYar/kr1raaiFTVvQ5feljQsiAgdm0WPj4S73/ye0fbslh+15QrIuDvfCXTek7pMY5A==} - engines: {node: '>=18'} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1195,41 +626,10 @@ packages: '@jridgewell/trace-mapping@0.3.20': resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - '@kurkle/color@0.3.2': - resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} - '@ljharb/through@2.3.12': resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==} engines: {node: '>= 0.4'} - '@manypkg/find-root@1.1.0': - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} - - '@manypkg/get-packages@1.1.3': - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - - '@mapbox/node-pre-gyp@1.0.11': - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true - - '@microsoft/fetch-event-source@https://codeload.github.com/pockethost/fetch-event-source/tar.gz/ebe3b7122647b48b93fd11effbbfb915d98956b0': - resolution: {tarball: https://codeload.github.com/pockethost/fetch-event-source/tar.gz/ebe3b7122647b48b93fd11effbbfb915d98956b0} - version: 2.0.3 - - '@mole-inc/bin-wrapper@8.0.1': - resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - '@noble/ciphers@0.4.1': - resolution: {integrity: sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==} - - '@noble/curves@1.4.0': - resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} - - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1242,14 +642,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/fs@1.1.1': - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} - - '@npmcli/move-file@1.1.2': - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1266,179 +658,28 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} - '@polka/url@1.0.0-next.23': - resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} - - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@s-libs/micro-dash@16.1.0': resolution: {integrity: sha512-GmmtRb/vNl1RxErvm/d+ITfjbo4og/CXyYdqs4vpeFrJla0uSEbXwf9aJUXYvgORQDgXV6h9tdgDY6T88FRU3Q==} '@s-libs/micro-dash@17.1.0': resolution: {integrity: sha512-vnrChv6KQG/kgRSNmxH0IqcGx4gYlvnmkfzuKotQNZZMBTnDZOzHYr487LPRq1Rr0ohRDuDsz6WssSolyoowQg==} - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - '@sindresorhus/slugify@1.1.2': - resolution: {integrity: sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==} - engines: {node: '>=10'} - - '@sindresorhus/transliterate@0.1.2': - resolution: {integrity: sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==} - engines: {node: '>=10'} - - '@sveltejs/adapter-static@2.0.3': - resolution: {integrity: sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==} - peerDependencies: - '@sveltejs/kit': ^1.5.0 - - '@sveltejs/kit@1.27.2': - resolution: {integrity: sha512-2w2VbPpK8DI3QCSVa2UNAv5sKNks1LT8GsEdpk41ffOyO2znGx2ZwcRWacsqlvh3d9lncZuDdANvCbTbuKvy3Q==} - engines: {node: ^16.14 || >=18} - hasBin: true - peerDependencies: - svelte: ^3.54.0 || ^4.0.0-next.0 - vite: ^4.0.0 - - '@sveltejs/vite-plugin-svelte-inspector@1.0.4': - resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} - engines: {node: ^14.18.0 || >= 16} - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^2.2.0 - svelte: ^3.54.0 || ^4.0.0 - vite: ^4.0.0 - - '@sveltejs/vite-plugin-svelte@2.4.6': - resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==} - engines: {node: ^14.18.0 || >= 16} - peerDependencies: - svelte: ^3.54.0 || ^4.0.0 - vite: ^4.0.0 - - '@swc/cli@0.1.62': - resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==} - engines: {node: '>= 12.13'} - hasBin: true - peerDependencies: - '@swc/core': ^1.2.66 - chokidar: ^3.5.1 - peerDependenciesMeta: - chokidar: - optional: true - - '@swc/core-darwin-arm64@1.3.95': - resolution: {integrity: sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.3.95': - resolution: {integrity: sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.3.95': - resolution: {integrity: sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.3.95': - resolution: {integrity: sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.3.95': - resolution: {integrity: sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.3.95': - resolution: {integrity: sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.3.95': - resolution: {integrity: sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.3.95': - resolution: {integrity: sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.3.95': - resolution: {integrity: sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.3.95': - resolution: {integrity: sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.3.95': - resolution: {integrity: sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': ^0.5.0 - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.2': - resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} - - '@swc/types@0.1.5': - resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tailwindcss/typography@0.5.10': - resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - '@types/bootstrap@5.2.8': - resolution: {integrity: sha512-14do+aWZPc1w3G+YevSsy8eas1XEPhTOUNBhQX/r12YKn7ySssATJusBQ/HCQAd2nq54U8vvrftHSb1YpeJUXg==} - - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - - '@types/configstore@2.1.1': - resolution: {integrity: sha512-YY+hm3afkDHeSM2rsFXxeZtu0garnusBWNG1+7MknmDWQHqcH2w21/xOU9arJUi8ch4qyFklidANLCu3ihhVwQ==} + '@types/configstore@6.0.2': + resolution: {integrity: sha512-OS//b51j9uyR3zvwD04Kfs5kHpve2qalQ18JhY/ho3voGYUTPLEG90/ocfKPI48hyHH8T04f7KEEbK6Ue60oZQ==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -1446,66 +687,21 @@ packages: '@types/conventional-commits-parser@5.0.0': resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} - '@types/cookie@0.5.3': - resolution: {integrity: sha512-SLg07AS9z1Ab2LU+QxzU8RCmzsja80ywjf/t5oqw+4NSH20gIGlhLOrBDm1L3PBWzPa4+wkgFQVZAjE6Ioj2ug==} - - '@types/copyfiles@2.4.4': - resolution: {integrity: sha512-2PhDCltCORlPrpM3gxZ0XuYaDcCOU46SQ7E89uzgbJ4jhpzpya/ssIY0jBA/gHtvh3SE4dxW8aMitQk0/ewlIw==} - - '@types/cors@2.8.17': - resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} - - '@types/d3-scale-chromatic@3.0.1': - resolution: {integrity: sha512-Ob7OrwiTeQXY/WBBbRHGZBOn6rH1h7y3jjpTSKYqDEeqFjktql6k2XSgNwLrLDmAsXhEn8P9NHDY4VTuo0ZY1w==} - - '@types/d3-scale@4.0.6': - resolution: {integrity: sha512-lo3oMLSiqsQUovv8j15X4BNEDOsnHuGjeVg7GRbAuB2PUa1prK5BNSOu6xixgNf3nqxPl4I1BqJWrPvFGlQoGQ==} - - '@types/d3-time@3.0.2': - resolution: {integrity: sha512-kbdRXTmUgNfw5OTE3KZnFQn6XdIc4QGroN5UixgdrXATmYsdlPQS6pEut9tVlIojtzuFD4txs/L+Rq41AHtLpg==} - - '@types/debug@0.0.30': - resolution: {integrity: sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==} - '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/decompress@4.2.6': - resolution: {integrity: sha512-ULmsMkKxU7aIGbnxP4Rz28hLdRZ4q0cdy6kcb8dx+UgDGOn+id5fibvoeTnjuolhrRM7f7TOtGADeKEk60SSsQ==} - - '@types/docker-modem@3.0.5': - resolution: {integrity: sha512-LDkftannOJFknJDWDGbuBrT1Xu6TN28SKxsWIjbM/MHHJCO20mnuHnkkZl0YMSo7cTxvfV7V7mMkdd9ZziuSGA==} - - '@types/dockerode@3.3.21': - resolution: {integrity: sha512-1d4GSWFpOnqu2rbpz+YR97txVVouHE4/HJm7CU9JTCs/IigNO8AhVOYh+6Rqv/IRznUycMR4MVBnTHrf39Es7g==} - '@types/estree@1.0.4': resolution: {integrity: sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==} - '@types/eventsource@1.1.14': - resolution: {integrity: sha512-WiPIkZ5fuhTkeaVaPKbaP6vHuTX9FHnFNTrkSbm+Uf6g4TH3YNbdfw5/1oLzKIWsQRbrvSiByO2nPSxjr5/cgQ==} - '@types/express-serve-static-core@4.17.41': resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} - '@types/express-sslify@1.2.5': - resolution: {integrity: sha512-SxezXJqojxyTkkemmPQ9bUZQ3xLpzasA/I7bSTqt7tF6L4KNvfOlmcwjZ38tSolkf3oeQu20UVXh74ZBb8IUZA==} - '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} '@types/fined@1.1.4': resolution: {integrity: sha512-mZ0onxTS5OyfSwBNecTKT0h79e4XXHrc9RI5tQfEAf+Fp6NbBmNnc0kg59HO+97V+y3opS+sfo4k4qpYwLt6NQ==} - '@types/get-port@3.2.0': - resolution: {integrity: sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q==} - - '@types/glob@5.0.38': - resolution: {integrity: sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw==} - - '@types/glossy@0.1.3': - resolution: {integrity: sha512-CrdAR+ZgRf0MQnDAW4tUm2LpPmfC6sAWlrBwcX0O2oUKyZvseb6wlHZ0alo++DyaLckxqM4CUa+EfzyITJM7mA==} - '@types/http-cache-semantics@4.0.3': resolution: {integrity: sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==} @@ -1518,75 +714,27 @@ packages: '@types/inquirer@9.0.7': resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} - '@types/js-cookie@3.0.5': - resolution: {integrity: sha512-dtLshqoiGRDHbHueIT9sjkd2F4tW1qPSX2xKAQK8p1e6pM+Z913GM1shv7dOqqasEMYbC5zEaClJomQe8OtQLA==} - - '@types/js-yaml@4.0.9': - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - '@types/json-stringify-safe@5.0.2': resolution: {integrity: sha512-NJdNTdatSiYvxdPLwgQImChxTfPECXYkdB6wC71dO3GCz2z/s/ZkkHXHaUlSVvnbsRUQg8Al3cT8Wp08wMF3zA==} - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/liftoff@4.0.3': resolution: {integrity: sha512-UgbL2kR5pLrWICvr8+fuSg0u43LY250q7ZMkC+XKC3E+rs/YBDEnQIzsnhU5dYsLlwMi3R75UvCL87pObP1sxw==} - '@types/linkify-it@3.0.4': - resolution: {integrity: sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==} - - '@types/lodash@4.14.202': - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - - '@types/markdown-it@13.0.5': - resolution: {integrity: sha512-QhJP7hkq3FCrFNx0szMNCT/79CXfcEgUIA3jc5GBfeXqoKsk3R8JZm2wRXJ2DiyjbPE4VMFOSDemLFcUTZmHEQ==} - - '@types/marked@4.3.2': - resolution: {integrity: sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==} - '@types/mdast@4.0.3': resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} - '@types/mdurl@1.0.4': - resolution: {integrity: sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==} - - '@types/memorystream@0.3.3': - resolution: {integrity: sha512-SFn96k5aJVld1vz9yKTd7dOo6+l5aZuNkMGu7aigeqQXpYOZaRhXU1eDIgWQFAC0MZvrXnYgma1870MMLbaMyw==} - '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} '@types/mime@3.0.4': resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - '@types/minimatch@3.0.5': - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - - '@types/mkdirp@0.5.2': - resolution: {integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==} - '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/mute-stream@0.0.4': - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} - - '@types/ncp@2.0.8': - resolution: {integrity: sha512-pLNWVLCVWBLVM4F2OPjjK6FWFtByFKD7LhHryF+MbVLws7ENj09mKxRFlhkGPOXfJuaBAG+2iADKJsZwnAbYDw==} - '@types/node-fetch@2.6.8': resolution: {integrity: sha512-nnH5lV9QCMPsbEVdTb5Y+F3GQxLSw1xQgIydrb2gSfEavRPs50FnMr+KUaa+LoPSqibm2N+ZZxH7lavZlAT4GA==} - '@types/node-os-utils@1.3.4': - resolution: {integrity: sha512-BCUYrbdoO4FUbx6MB9atLNFnkxdliFaxdiTJMIPPiecXIApc5zf4NIqV5G1jWv/ReZvtYyHLs40RkBjHX+vykA==} - - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.18.8': resolution: {integrity: sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ==} @@ -1596,27 +744,12 @@ packages: '@types/node@20.8.10': resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==} - '@types/node@8.10.66': - resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - - '@types/pug@2.0.8': - resolution: {integrity: sha512-QzhsZ1dMGyJbn/D9V80zp4GIA4J4rfAjCCxc3MP+new0E8dyVdSkR735Lx+n3LIaHNFcjHL5+TbziccuT+fdoQ==} - '@types/qs@6.9.11': resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/responselike@1.0.2': - resolution: {integrity: sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==} - - '@types/rimraf@2.0.5': - resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} - '@types/semver@7.5.4': resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} @@ -1626,49 +759,22 @@ packages: '@types/serve-static@1.15.5': resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - '@types/ssh2@1.11.15': - resolution: {integrity: sha512-QFPpT9Gamh+oOKWH6uDUxe8izo8NaCJaN5HdYcbCIiS3hs7fB65KAfyGWBVXaXxXLj7IhFam5Q/ZxQ4eIPc/1Q==} - - '@types/tail@2.2.2': - resolution: {integrity: sha512-+CjjgMFjIVgTYsJXWNpAKVRerFWc9c+GTMzY/336fSW6BhY5TJwo2CNYJiNq7mO9rBHmtmpceKf2DnkrnaR3Vg==} - '@types/through@0.0.32': resolution: {integrity: sha512-7XsfXIsjdfJM2wFDRAtEWp3zb2aVPk5QeyZxGlVK57q4u26DczMHhJmlhr0Jqv0THwxam/L8REXkj8M2I/lcvw==} - '@types/tmp@0.0.33': - resolution: {integrity: sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==} - '@types/tmp@0.2.5': resolution: {integrity: sha512-KodRrjqWrk/3VyzfR4aeXkf2n5Ssg+bvVUhXlvHVffLiIHriLlrO3vYobB+Kvnr9DkNzMiyWHT3G6hT/xX0ryQ==} - '@types/triple-beam@1.3.4': - resolution: {integrity: sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==} - '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@types/unzipper@0.10.8': - resolution: {integrity: sha512-Cior/4Y78R1ZVF6tnWEHWIkAMDqKxU5pPCbaC62826oEfchPGg90fKdi3sLZ2D7oB7GrFu3+PW2elEMBOtd27w==} - - '@types/vhost@3.0.9': - resolution: {integrity: sha512-1XtvjHU2Y/ULSFsh7GT3mfTQa7dh8vfN48quUlFJdbh4nSM5BgjK+extSErJvmOueWqtXA30ACDha7aApx7Pvw==} - - '@types/winston-syslog@2.4.3': - resolution: {integrity: sha512-z9mO5hxDls4lSTth76sddIETonCMLguppeudk1YxBz4Y/OmdRkeKMfrOTfH74T9gN5WllLnF8XbHdiM8K6EL7A==} - - '@types/wrap-ansi@3.0.0': - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + '@types/update-notifier@6.0.8': + resolution: {integrity: sha512-IlDFnfSVfYQD+cKIg63DEXn3RFmd7W1iYtKQsJodcHK9R1yr8aKbKaPKfBxzPpcHCq2DU8zUq4PIPmy19Thjfg==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true - a-sync-waterfall@1.0.1: - resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} - - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1677,40 +783,19 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - aggregate-error@4.0.1: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -1725,9 +810,9 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} + ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -1749,36 +834,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - any-promise@0.1.0: - resolution: {integrity: sha512-lqzY9o+BbeGHRCOyxQkt/Tgvz0IZhTmQiA+LxQW8wSNpcTbj8K+0cZiSEvbpNZZP9/11Gy7dnLO3GNWUXO4d1g==} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - application-config-path@0.1.1: - resolution: {integrity: sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==} - - aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - - arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - - are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - - are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1788,18 +843,6 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - array-differ@1.0.0: - resolution: {integrity: sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==} - engines: {node: '>=0.10.0'} - - array-differ@3.0.0: - resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} - engines: {node: '>=8'} - array-each@1.0.1: resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==} engines: {node: '>=0.10.0'} @@ -1814,78 +857,19 @@ packages: resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==} engines: {node: '>=0.10.0'} - array-union@1.0.2: - resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} - engines: {node: '>=0.10.0'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - - arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - - assert-never@1.2.1: - resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} - async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + async-mutex@0.5.0: + resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - atomically@1.7.0: - resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} - engines: {node: '>=10.12.0'} - - autoprefixer@10.4.16: - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - b4a@1.6.4: - resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} - - babel-walk@3.0.0-canary-5: - resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} - engines: {node: '>= 10.0.0'} - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1895,44 +879,9 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - bcp-47-match@1.0.3: - resolution: {integrity: sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==} - - bcp-47-normalize@1.1.1: - resolution: {integrity: sha512-jWZ1Jdu3cs0EZdfCkS0UE9Gg01PtxnChjEBySeB+Zo6nkqtFfnvtoQQgP1qU1Oo4qgJgxhTI6Sf9y/pZIhPs0A==} - - bcp-47@1.0.8: - resolution: {integrity: sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==} - - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - - better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} - - bin-check@4.1.0: - resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} - engines: {node: '>=4'} - - bin-version-check@5.1.0: - resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} - engines: {node: '>=12'} - - bin-version@6.0.0: - resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} - engines: {node: '>=12'} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - binary-searching@2.0.5: resolution: {integrity: sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA==} - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bl@1.2.3: resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} @@ -1942,9 +891,6 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -1969,18 +915,6 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - breakword@1.0.6: - resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} - - brotli-size@4.0.0: - resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} - engines: {node: '>= 10.16.0'} - - browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} @@ -2002,27 +936,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - buildcheck@0.0.6: - resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} - engines: {node: '>=10.0.0'} - - bunyan@1.8.15: - resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==} - engines: {'0': node >=0.10.0} - hasBin: true - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -2031,17 +948,9 @@ packages: resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2049,25 +958,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - camelcase@7.0.1: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001559: - resolution: {integrity: sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==} - capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -2093,48 +987,21 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - character-parser@2.2.0: - resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} - chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - chart.js@4.4.0: - resolution: {integrity: sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==} - engines: {pnpm: '>=7'} - check-node-version@4.2.1: resolution: {integrity: sha512-YYmFYHV/X7kSJhuN/QYHUu998n/TRuDe8UenM3+m5NrkiH670lb9ILqHIvBencvJc4SDh+XcbXMR4b+TtubJiw==} engines: {node: '>=8.3.0'} hasBin: true - chokidar-cli@3.0.0: - resolution: {integrity: sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==} - engines: {node: '>= 8.10.0'} - hasBin: true - - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - clean-stack@4.2.0: resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} engines: {node: '>=12'} @@ -2159,26 +1026,18 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} - cliui@5.0.0: - resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} - - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -2199,40 +1058,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - command-exists@1.2.9: - resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -2244,37 +1076,21 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} + commitlint@19.3.0: + resolution: {integrity: sha512-B8eUVQCjz+1ZAjR3LC3+vzKg7c4/qN4QhSxkjp0u0v7Pi79t9CsnGAluvveKmFh56e885zgToPL5ax+l8BHTPg==} + engines: {node: '>=v18'} + hasBin: true + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concurrently@8.2.2: - resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} - engines: {node: ^14.13.0 || >=16.0.0} - hasBin: true - - conf@10.2.0: - resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} - engines: {node: '>=12'} - config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2282,15 +1098,9 @@ packages: resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} engines: {node: '>=12'} - console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - constantinople@4.0.1: - resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} - content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -2319,17 +1129,9 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - copyfiles@2.4.1: - resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} - hasBin: true - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - cosmiconfig-typescript-loader@5.0.0: resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} engines: {node: '>=v16'} @@ -2347,13 +1149,6 @@ packages: typescript: optional: true - cpu-features@0.0.9: - resolution: {integrity: sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==} - engines: {node: '>=10.0.0'} - - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2365,78 +1160,10 @@ packages: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} - css-selector-tokenizer@0.8.0: - resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} - css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - - csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - - csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - - csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} - - cuint@0.2.2: - resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==} - - culori@3.3.0: - resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - daisyui@3.9.4: - resolution: {integrity: sha512-fvi2RGH4YV617/6DntOVGcOugOPym9jTGWW2XySb5ZpvdWO4L7bEG77VHirrnbRUEWvIEVXkBpxUz2KFj0rVnA==} - engines: {node: '>=16.9.0'} - - daisyui@4.4.23: - resolution: {integrity: sha512-IFQRGoGoAke8chxPcDqQJFldVVd51JL7b4mRA3LqsLexW/6xicZzz9X3GXdGdnYsu8QPxZN4uzQZ5fwRNYXOSg==} - engines: {node: '>=16.9.0'} - dargs@8.1.0: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} @@ -2445,26 +1172,6 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} - - debounce-fn@4.0.0: - resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} - engines: {node: '>=10'} - debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -2473,14 +1180,6 @@ packages: supports-color: optional: true - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -2490,14 +1189,6 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -2542,10 +1233,6 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -2557,18 +1244,6 @@ packages: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - del@7.1.0: resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==} engines: {node: '>=14.16'} @@ -2577,17 +1252,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2600,35 +1268,9 @@ packages: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} engines: {node: '>=0.10.0'} - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - - detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - - dev-ip@1.0.1: - resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==} - engines: {node: '>= 0.8.0'} - hasBin: true - - devalue@4.3.2: - resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} - - devcert@1.2.2: - resolution: {integrity: sha512-UsLqvtJGPiGwsIZnJINUnFYaWgK7CroreGRndWHZkRD58tPFr3pVbbSyHR8lbh41+azR4jKvuNZ+eCoBZGA5kA==} - devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - digest-fetch@1.3.0: resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} @@ -2636,33 +1278,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - docker-modem@3.0.8: - resolution: {integrity: sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==} - engines: {node: '>= 8.0'} - - dockerode@3.3.5: - resolution: {integrity: sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==} - engines: {node: '>= 8.0'} - - doctypes@1.1.0: - resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -2674,66 +1289,25 @@ packages: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} - dotenv-cli@7.3.0: - resolution: {integrity: sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==} - hasBin: true - - dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - - dotenv-expand@11.0.6: - resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==} - engines: {node: '>=12'} - - dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dtrace-provider@0.8.8: - resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} - engines: {node: '>=0.10'} - - duplexer@0.1.1: - resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - eciesjs@0.4.6: - resolution: {integrity: sha512-t0qLzGVKeATAA6X19hIeToxBVG8yvn/be/4XyJvTCBD53m2CK22cgzk+WW+pNYjEw5FGWZLNFoJte8lyZS/A/w==} - engines: {node: '>=16.0.0'} - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.4.575: - resolution: {integrity: sha512-kY2BGyvgAHiX899oF6xLXSIf99bAvvdPhDoJwG77nxCSyWYuRH6e9a9a3gpXBvCs6lj4dQZJkfnW2hdKWHEISg==} - emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -2748,17 +1322,6 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2767,67 +1330,21 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - eol@0.9.1: - resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - - esbuild-node-externals@1.13.0: - resolution: {integrity: sha512-EAd32LMfUajIbLZphERyDVltTn/jir55B40xND5ro6VpCiv5/pum+s51cQf3LBFSVgEFznVJYMJtfVCJiSb32w==} - engines: {node: '>=12'} - peerDependencies: - esbuild: 0.12 - 0.20 - esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true - esbuild@0.20.0: - resolution: {integrity: sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} escape-goat@4.0.0: @@ -2841,25 +1358,10 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - esm-env@1.0.0: - resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -2872,9 +1374,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - event-source-polyfill@1.0.31: - resolution: {integrity: sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA==} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -2882,34 +1381,17 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - eventsource@2.0.2: - resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} - engines: {node: '>=12.0.0'} - - execa@0.7.0: - resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} - engines: {node: '>=4'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - executable@4.1.1: - resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} - engines: {node: '>=4'} - exit-hook@4.0.0: resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} engines: {node: '>=18'} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} @@ -2922,31 +1404,13 @@ packages: peerDependencies: express: ^4.16.2 - express-sslify@1.2.0: - resolution: {integrity: sha512-OOf2B3MxAVjEXPPWl4Z19wA2oMH+RCULJVhejPwuhiDDClr9QczZz5ycABLSnnN+oY8JcLs32ghs9cxOj0vi+w==} - express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} - ext-list@2.2.2: - resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} - engines: {node: '>=0.10.0'} - - ext-name@5.0.0: - resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} - engines: {node: '>=4'} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -2954,9 +1418,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -2964,18 +1425,12 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fastparse@1.1.2: - resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} - fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -2989,10 +1444,6 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-type@17.1.6: - resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - file-type@19.0.0: resolution: {integrity: sha512-s7cxa7/leUWLiXO78DVVfBVse+milos9FitauDLG1pI7lNaJ2+5lzPnr2N24ym+84HVwJL6hVuGfgVE+ALvU8Q==} engines: {node: '>=18'} @@ -3013,20 +1464,6 @@ packages: resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} engines: {node: '>=4'} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - filename-reserved-regex@3.0.0: - resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - filenamify@5.1.1: - resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==} - engines: {node: '>=12.20'} - fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3035,18 +1472,6 @@ packages: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - find-up@6.3.0: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3055,13 +1480,6 @@ packages: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - find-versions@5.1.0: - resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} - engines: {node: '>=12'} - - find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - findup-sync@5.0.0: resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} engines: {node: '>= 10.13.0'} @@ -3074,16 +1492,6 @@ packages: resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==} engines: {node: '>= 10.13.0'} - flat-cache@3.1.1: - resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} - engines: {node: '>=12.0.0'} - - flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.15.3: resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} engines: {node: '>=4.0'} @@ -3093,9 +1501,6 @@ packages: debug: optional: true - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} @@ -3131,9 +1536,6 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -3144,18 +1546,6 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -3164,30 +1554,9 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - ftp-srv@https://codeload.github.com/pockethost/ftp-srv/tar.gz/0fc708bae0d5d7a55ce948767f082d6fcfb2af59: - resolution: {tarball: https://codeload.github.com/pockethost/ftp-srv/tar.gz/0fc708bae0d5d7a55ce948767f082d6fcfb2af59} - version: 0.0.0 - engines: {node: '>=12'} - hasBin: true - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - - gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3199,18 +1568,6 @@ packages: get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-port@3.2.0: - resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} - engines: {node: '>=4'} - get-port@6.1.2: resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3223,10 +1580,6 @@ packages: resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} engines: {node: '>=4'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3235,45 +1588,26 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - get-tsconfig@4.7.2: resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - getopts@2.3.0: - resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} git-raw-commits@4.0.0: resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} engines: {node: '>=16'} hasBin: true - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@6.0.4: - resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} - deprecated: Glob versions prior to v9 are no longer supported - - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -3293,32 +1627,10 @@ packages: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - globby@13.2.2: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - - glossy@0.1.7: - resolution: {integrity: sha512-mTCC51QFadK75MvAhrL5nPVIP291NjML1guo10Sa7Yj04tJU4V++Vgm780NIddg9etQD9D8FM67hFGqM8EE2HQ==} - engines: {node: '>= 0.2.5'} - - gobot-pocketbase@0.22.8-alpha.22: - resolution: {integrity: sha512-beNLlDjonodEiNNcPIxAY4yYAzxcNC0i4KUrinYboR2KtAfbeMb0zijeswVKkZBnopDYQAWqasBEFhsFO7oiUg==} - hasBin: true - gobot@1.0.0-alpha.40: resolution: {integrity: sha512-bV+QO3VZamsnKLH5Pqt0tFZ2CD90JT2QjQIs6tvMP1H2w8QJApbRPVkpJ4O56nXGgyj6f0udelDrsd4tm1F6CQ==} hasBin: true @@ -3326,10 +1638,6 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -3340,28 +1648,11 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - - hamljs@0.6.2: - resolution: {integrity: sha512-/chXRp4WpL47I+HX1vCCdSbEXAljEG2FBMmgO7Am0bYsqgnEjreeWzUdX1onXqwZtcfgxbCg5WtEYYvuZ5muBg==} - handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3373,32 +1664,14 @@ packages: has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - has-yarn@3.0.0: resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3407,74 +1680,28 @@ packages: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - header-case@2.0.4: resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - highlight.js@11.9.0: - resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} - engines: {node: '>=12.0.0'} - homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - htmlparser2@7.2.0: - resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - http-equiv-refresh@1.0.0: - resolution: {integrity: sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==} - engines: {node: '>= 0.10'} - http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - - http-proxy-middleware@2.0.6: - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - http2-wrapper@2.2.0: resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} engines: {node: '>=10.19.0'} - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -3498,25 +1725,10 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore-by-default@1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - - image-size@1.0.2: - resolution: {integrity: sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==} - engines: {node: '>=14.0.0'} - hasBin: true - - immutable@4.3.4: - resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} - import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -3532,17 +1744,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -3564,36 +1769,10 @@ packages: resolution: {integrity: sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==} engines: {node: '>=18'} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - interpret@2.2.0: - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} - engines: {node: '>= 0.10'} - interpret@3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} - ip-address@7.1.0: - resolution: {integrity: sha512-V9pWC/VJf2lsXqP7IWJ+pe3P1/HCYGBMZrrnT62niLGjAfCbeiwXMUxaeHvnVlz19O27pvXP4azs+Pj/A0x+SQ==} - engines: {node: '>= 10'} - - ip-cidr@3.1.0: - resolution: {integrity: sha512-HUCn4snshEX1P8cja/IyU3qk8FVDW8T5zZcegDFbu4w7NojmAhk5NcOgj3M8+0fmumo1afJTPDtJlzsxLdOjtg==} - engines: {node: '>=10.0.0'} - - ip@1.1.8: - resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} - - ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -3602,40 +1781,12 @@ packages: resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} engines: {node: '>=0.10.0'} - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true @@ -3643,45 +1794,31 @@ packages: is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-expression@4.0.0: - resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-in-ci@0.1.0: + resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==} + engines: {node: '>=18'} + hasBin: true + is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -3694,27 +1831,13 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-json@2.0.1: - resolution: {integrity: sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==} - - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - is-natural-number@4.0.1: resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - is-npm@6.0.0: resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3735,44 +1858,21 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - is-relative@1.0.0: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} engines: {node: '>=0.10.0'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3781,26 +1881,10 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - is-text-path@2.0.0: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -3820,33 +1904,17 @@ packages: resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} engines: {node: '>=18'} - is-valid-domain@0.1.6: - resolution: {integrity: sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - is-yarn-global@0.4.1: resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} engines: {node: '>=12'} - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbinaryfile@5.0.0: resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} @@ -3854,14 +1922,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - iso-639-1@2.1.15: - resolution: {integrity: sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==} - engines: {node: '>=6.0'} - isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} @@ -3870,18 +1930,10 @@ packages: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} - jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - - js-stringify@1.0.2: - resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3893,9 +1945,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -3905,26 +1954,13 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema-typed@7.0.3: - resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} - json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jstransformer@1.0.0: - resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} - - junk@1.0.3: - resolution: {integrity: sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==} - engines: {node: '>=0.10.0'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3932,41 +1968,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - knex@2.5.1: - resolution: {integrity: sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==} - engines: {node: '>=12'} - hasBin: true - peerDependencies: - better-sqlite3: '*' - mysql: '*' - mysql2: '*' - pg: '*' - pg-native: '*' - sqlite3: '*' - tedious: '*' - peerDependenciesMeta: - better-sqlite3: - optional: true - mysql: - optional: true - mysql2: - optional: true - pg: - optional: true - pg-native: - optional: true - sqlite3: - optional: true - tedious: - optional: true - - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -3975,43 +1976,16 @@ packages: resolution: {integrity: sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==} engines: {node: '>=10.13.0'} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@4.0.1: - resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} - - liquidjs@10.9.3: - resolution: {integrity: sha512-vG8fLPSBtf0C6FJg0DwzxwWF0sPE+wIRrrGsNoe0DP3Pg4HOPqycGDT14V4UfyskUXsum7DkhUuZQ9tBRjbX+g==} - engines: {node: '>=14'} - hasBin: true - - list-to-array@1.1.0: - resolution: {integrity: sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==} - - load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} + listr2@8.2.3: + resolution: {integrity: sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==} + engines: {node: '>=18.0.0'} locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - locate-path@7.2.0: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4019,15 +1993,6 @@ packages: lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.deburr@4.1.0: - resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} - lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} @@ -4049,9 +2014,6 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lodash.throttle@4.1.1: - resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} @@ -4076,17 +2038,13 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} - logform@2.6.0: - resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} - engines: {node: '>= 12.0.0'} + log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4095,26 +2053,11 @@ packages: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - luxon@3.4.3: - resolution: {integrity: sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==} - engines: {node: '>=12'} - lzma-native@8.0.6: resolution: {integrity: sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA==} engines: {node: '>=10.0.0'} hasBin: true - magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -4123,14 +2066,6 @@ packages: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - - make-fetch-happen@9.1.0: - resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} - engines: {node: '>= 10'} - make-iterator@1.0.1: resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==} engines: {node: '>=0.10.0'} @@ -4139,27 +2074,9 @@ packages: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - map-values@1.0.1: resolution: {integrity: sha512-BbShUnr5OartXJe1GeccAWtfro11hhgNJg6G9/UtWKjVGvV5U4C09cg5nk8JUevhXODaXY+hQ3xxMUKSs62ONQ==} - markdown-it-anchor@8.6.7: - resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==} - peerDependencies: - '@types/markdown-it': '*' - markdown-it: '*' - - markdown-it@13.0.2: - resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} - hasBin: true - markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} @@ -4168,10 +2085,6 @@ packages: engines: {node: '>= 16'} hasBin: true - maximatch@0.1.0: - resolution: {integrity: sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==} - engines: {node: '>=0.10.0'} - md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} @@ -4184,25 +2097,14 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} - meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} - merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} @@ -4297,27 +2199,14 @@ packages: engines: {node: '>=4'} hasBin: true - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@3.1.0: - resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} - engines: {node: '>=8'} - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -4326,102 +2215,25 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mixme@0.5.10: - resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} - engines: {node: '>= 8.0.0'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true - moment@2.29.4: - resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} - - moo@0.5.2: - resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} - - morphdom@2.7.1: - resolution: {integrity: sha512-LwrrjplMolniWtOGluKF1EHZ0y78Fa4sq7f/MXCydyNkDof+POf+ruCn+k08l7H7b/JISfRo8Zd0HazuqySY9w==} - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -4431,45 +2243,15 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multimatch@5.0.0: - resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} - engines: {node: '>=10'} - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - mute-stream@1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - mv@2.1.1: - resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} - engines: {node: '>=0.8.0'} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nan@2.18.0: - resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} - - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@5.0.7: resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} engines: {node: ^18 || >=20} hasBin: true - napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - - ncp@2.0.0: - resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} - hasBin: true - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -4480,19 +2262,9 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-abi@3.51.0: - resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} - engines: {node: '>=10'} - node-addon-api@3.2.1: resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - node-addon-api@4.3.0: - resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} - - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -4514,86 +2286,18 @@ packages: resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true - node-gyp@8.4.1: - resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} - engines: {node: '>= 10.12.0'} - hasBin: true - - node-os-utils@1.3.7: - resolution: {integrity: sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==} - node-plop@0.32.0: resolution: {integrity: sha512-lKFSRSRuDHhwDKMUobdsvaWCbbDRbV3jMUSMiajQSQux1aNUevAZVxUHc2JERI//W8ABPRbi3ebYuSuIzkNIpQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - - nodemon@3.0.3: - resolution: {integrity: sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==} - engines: {node: '>=10'} - hasBin: true - - noms@0.0.0: - resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} - - nopt@1.0.10: - resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} - hasBin: true - - nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - - npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - nunjucks@3.2.4: - resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} - engines: {node: '>= 6.9.0'} - hasBin: true - peerDependencies: - chokidar: ^3.3.0 - peerDependenciesMeta: - chokidar: - optional: true - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4601,25 +2305,9 @@ packages: object-filter@1.0.2: resolution: {integrity: sha512-NahvP2vZcy1ZiiYah30CEPw0FpDcSkSePJBMpzl5EQgCmISijiGuJm3SPYp7U+Lf2TljyaIw3E5EgkEx/TNEVA==} - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - object.defaults@1.1.0: resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==} engines: {node: '>=0.10.0'} @@ -4639,9 +2327,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -4650,10 +2335,6 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - openai@4.14.2: resolution: {integrity: sha512-JGlm7mMC7J+cyQZnQMOH7daD9cBqqWqLtlBsejElEkgoehPrYfdyxSxIGICz5xk4YimbwI5FlLATSVojLtCKXQ==} hasBin: true @@ -4670,85 +2351,26 @@ packages: resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} engines: {node: '>=18'} - os-filter-obj@2.0.0: - resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} - engines: {node: '>=4'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} - p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - p-map@5.5.0: resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} engines: {node: '>=12'} - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - package-json@8.1.1: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} @@ -4772,9 +2394,6 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} - parse-srcset@1.0.2: - resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4782,20 +2401,9 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - password-prompt@1.1.3: - resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} - path-case@3.0.4: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4804,10 +2412,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4834,9 +2438,6 @@ packages: path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4851,11 +2452,8 @@ packages: periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - pg-connection-string@2.6.1: - resolution: {integrity: sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -4869,10 +2467,6 @@ packages: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} @@ -4881,21 +2475,6 @@ packages: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - - please-upgrade-node@3.2.0: - resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} - plop@4.0.1: resolution: {integrity: sha512-5n8QU93kvL/ObOzBcPAB1siVFtAH1TZM6TntJ3JK5kXT0jIgnQV+j+uaOWWFJlg1cNkzLYm8klgASF65K36q9w==} engines: {node: '>=18'} @@ -4904,83 +2483,9 @@ packages: pocketbase@0.21.3: resolution: {integrity: sha512-bsQRZ1mj4dhPJ4P5iSrDqWQtBX2NtuBkf6IOZwTv27zZOw6zrISgo963i5JD/99qKKD5aMSMDPGk1BE9ZyI7Cg==} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.1: - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - - postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - posthtml-parser@0.11.0: - resolution: {integrity: sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==} - engines: {node: '>=12'} - - posthtml-render@3.0.0: - resolution: {integrity: sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==} - engines: {node: '>=12'} - - posthtml-urls@1.0.0: - resolution: {integrity: sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==} - engines: {node: '>= 4'} - - posthtml@0.16.6: - resolution: {integrity: sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==} - engines: {node: '>=12.0.0'} - postinstall-postinstall@2.1.0: resolution: {integrity: sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==} - prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} - engines: {node: '>=10'} - hasBin: true - - preferred-pm@3.1.3: - resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} - engines: {node: '>=10'} - prettier-plugin-jsdoc@1.3.0: resolution: {integrity: sha512-cQm8xIa0fN9ieJFMXACQd6JPycl+8ouOijAqUqu44EF/s4fXL3Wi9sKXuEaodsEWgCN42Xby/bNhqgM1iWx4uw==} engines: {node: '>=14.13.1 || >=16.0.0'} @@ -5006,41 +2511,14 @@ packages: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - prettier@3.0.3: resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} engines: {node: '>=14'} hasBin: true - prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - promise-each@2.2.0: - resolution: {integrity: sha512-67roqt1k3QDA41DZ8xi0V+rF3GoaMiX7QilbXu0vXimut+9RcKBNZ/t60xCRgcsihmNUsEjh48xLfNqOrKblUg==} - - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} - proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -5048,54 +2526,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - - pstree.remy@1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - - pug-attrs@3.0.0: - resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} - - pug-code-gen@3.0.2: - resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} - - pug-error@2.0.0: - resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} - - pug-filters@4.0.0: - resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} - - pug-lexer@5.0.1: - resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} - - pug-linker@4.0.0: - resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} - - pug-load@3.0.0: - resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} - - pug-parser@6.0.0: - resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} - - pug-runtime@3.0.1: - resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} - - pug-strip-comments@2.0.0: - resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} - - pug-walk@2.0.0: - resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} - - pug@3.0.2: - resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} - - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -5111,16 +2541,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - - queue@6.0.2: - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -5137,24 +2557,6 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - - read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} - - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -5166,28 +2568,10 @@ packages: resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} engines: {node: '>=8'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} - recursive-copy@2.0.14: - resolution: {integrity: sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==} - - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - - regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -5204,9 +2588,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -5232,9 +2613,6 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} @@ -5247,25 +2625,16 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@2.4.5: - resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@5.0.5: @@ -5278,11 +2647,6 @@ packages: engines: {node: '>=16'} hasBin: true - rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - run-async@3.0.0: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} @@ -5293,78 +2657,27 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-json-stringify@1.2.0: - resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} - engines: {node: '>=10'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sander@0.5.1: - resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} - - sass@1.69.5: - resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} - engines: {node: '>=14.0.0'} - hasBin: true - - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - seek-bzip@1.0.6: resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} hasBin: true - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver-diff@4.0.0: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} - semver-regex@4.0.5: - resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} - engines: {node: '>=12'} - - semver-truncate@3.0.0: - resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} - engines: {node: '>=12'} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} @@ -5381,49 +2694,54 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - set-cookie-parser@2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sharp@0.32.6: - resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} - engines: {node: '>=14.15.0'} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + sherif-darwin-arm64@0.8.4: + resolution: {integrity: sha512-mFJO9BjwjXnzn7UQ0moLyJzDWu68g71E1jNKujkuS8a4UQ8jV2O6gosOqfqPMHLLiZjZwuVZNnp59ecqP4rVpg==} + cpu: [arm64] + os: [darwin] + + sherif-darwin-x64@0.8.4: + resolution: {integrity: sha512-71keXqkH27FvN5q3OmddS7FXaAVk0iBXGlfZhsuuNSR00CnSndM+AS8ibUH2okvF55HdPK6x6VovoEG3PvqCmw==} + cpu: [x64] + os: [darwin] + + sherif-linux-arm64@0.8.4: + resolution: {integrity: sha512-hQwFHQ6cGDOkKSa1zuEAc8WIsSgY0a4MFXEiHIPfRbJdE+leDcAVDovvpPIQZRUgbSe96mQ5QJg5fw52+eySrw==} + cpu: [arm64] + os: [linux] + + sherif-linux-x64@0.8.4: + resolution: {integrity: sha512-S2BK9YLc12JMxg8ODIcceRW7Y4rmgrIEzUBOqp6NSeOz4Wq/34YdtimNRHzwrDOgjTpgUA/pt+TwPsGPXr+gNA==} + cpu: [x64] + os: [linux] + + sherif-windows-arm64@0.8.4: + resolution: {integrity: sha512-9IBeX13AeCQ9ETRqfGR7GQqcyRxu4jlXyO7TNQVKU/kBrMjWjYYic/VKwHB37q0xealXUNmB9nD08hfMmdnidg==} + cpu: [arm64] + os: [win32] + + sherif-windows-x64@0.8.4: + resolution: {integrity: sha512-PR1tjnCLxcdYaC8FRM3K6ldIwaJDEJn0tOt6e2V6R7OFMDwF8CJOSq24RzGgSmJRBFtlLqU94sXTDPfUCR0YPw==} + cpu: [x64] + os: [win32] + + sherif@0.8.4: + resolution: {integrity: sha512-L2tNE60i5gRNe5eFNSjUAqt2rCIbKj9jp/50zCfsw8bSBX6noHamR7FDhaecyrNBk6ZgGEEAjxGe4C6iqelwZw==} + hasBin: true side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -5435,31 +2753,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - sirv@2.0.3: - resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} - engines: {node: '>= 10'} - - slash@1.0.0: - resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} - engines: {node: '>=0.10.0'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} @@ -5468,42 +2761,17 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} - engines: {node: '>=8.0.0'} + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} - hasBin: true + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - socks-proxy-agent@6.2.1: - resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} - engines: {node: '>= 10'} - - socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - - sorcery@0.11.0: - resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} - hasBin: true - - sort-keys-length@1.0.1: - resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} - engines: {node: '>=0.10.0'} - - sort-keys@1.1.2: - resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} - engines: {node: '>=0.10.0'} - source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -5515,31 +2783,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - spawn-command@0.0.2: - resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} - - spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - - split-ca@1.0.1: - resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} - split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -5547,23 +2790,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.2: - resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} - - sqlite3@5.1.6: - resolution: {integrity: sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==} - - ssh2@1.14.0: - resolution: {integrity: sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==} - engines: {node: '>=10.16.0'} - - ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -5576,16 +2802,6 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} - stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} - - streamx@2.15.2: - resolution: {integrity: sha512-b62pAV/aeMjUoRN2C/9F0n+G8AfcJjNC0zw/ZmOHeFsIe4m4GzjVW9m6VHXVjk536NbdU9JRwKMJRfkc+zUFTg==} - - string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -5602,30 +2818,12 @@ packages: resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} engines: {node: '>=18'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -5634,53 +2832,21 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-dirs@2.1.0: resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} - strip-outer@2.0.0: - resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - strtok3@7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} engines: {node: '>=14.16'} - sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - - sudo-prompt@8.2.5: - resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5689,149 +2855,29 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte-chartjs@3.1.2: - resolution: {integrity: sha512-3+6gY2IJ9Ua8R9pk3iS1ypa7Z9OoXCJb9oPwIfTp7caJM+X+RrWnH2CTkGAq7FeSxc2nnmW08tYN88Q8Y+5M+w==} - peerDependencies: - chart.js: ^3.5.0 || ^4.0.0 - svelte: ^3.45.0 - - svelte-check@3.5.2: - resolution: {integrity: sha512-5a/YWbiH4c+AqAUP+0VneiV5bP8YOk9JL3jwvN+k2PEPLgpu85bjQc5eE67+eIZBBwUEJzmO3I92OqKcqbp3fw==} - hasBin: true - peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 - - svelte-highlight@7.4.1: - resolution: {integrity: sha512-ZjPUQn16bESqmzXzrQXfWKidwUabHNxysGIOUdbsxqBtDe8s33V9z6K697sszQITQ9k6hrMUpTICWLm2GIW5xQ==} - - svelte-hmr@0.15.3: - resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - - svelte-preprocess@5.0.4: - resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} - engines: {node: '>= 14.10.0'} - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - svelte@4.2.2: resolution: {integrity: sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==} engines: {node: '>=16'} - syslog-parse@2.0.0: - resolution: {integrity: sha512-FI6xGyKM9dRdNCrCWiEy1QhRZskDYkW+lUNAIXkFeht0/XCsSdZ7UsPANFLk0h8b+8Is6Ll8bllUNjME+XCANA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - table@6.8.2: resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} - tail@2.2.6: - resolution: {integrity: sha512-IQ6G4wK/t8VBauYiGPLx+d3fA5XjSVagjWV5SIYzvEvglbQjwEcukeYI68JOPpdydjxhZ9sIgzRlSmwSpphHyw==} - engines: {node: '>= 6.0.0'} - - tailwindcss@3.3.5: - resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} - engines: {node: '>=14.0.0'} - hasBin: true - - tar-fs@2.0.1: - resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} - - tar-fs@3.0.4: - resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} - tar-stream@1.6.2: resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} engines: {node: '>= 0.8.0'} - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar-stream@3.1.6: - resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} - - tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} - engines: {node: '>=10'} - - tarn@3.0.2: - resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} - engines: {node: '>=8.0.0'} - - term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tildify@2.0.0: - resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} - engines: {node: '>=8'} - - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} @@ -5846,10 +2892,6 @@ packages: to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5858,46 +2900,13 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-stream@1.0.0: - resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} - token-types@5.0.1: resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} engines: {node: '>=14.16'} - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - touch@3.1.0: - resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} - hasBin: true - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - - trim-repeated@2.0.0: - resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} - engines: {node: '>=12'} - - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -5905,33 +2914,49 @@ packages: resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} hasBin: true - tty-table@4.2.3: - resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} - engines: {node: '>=8.0.0'} + tsx@4.15.7: + resolution: {integrity: sha512-u3H0iSFDZM3za+VxkZ1kywdCeHCn+8/qHQS1MNoO2sONDgD95HlWtt8aB23OzeTmFP9IU4/8bZUdg58Uu5J4cg==} + engines: {node: '>=18.0.0'} hasBin: true - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + turbo-darwin-64@2.0.4: + resolution: {integrity: sha512-x9mvmh4wudBstML8Z8IOmokLWglIhSfhQwnh2gBCSqabgVBKYvzl8Y+i+UCNPxheCGTgtsPepTcIaKBIyFIcvw==} + cpu: [x64] + os: [darwin] - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + turbo-darwin-arm64@2.0.4: + resolution: {integrity: sha512-/B1Ih8zPRGVw5vw4SlclOf3C/woJ/2T6ieH6u54KT4wypoaVyaiyMqBcziIXycdObIYr7jQ+raHO7q3mhay9/A==} + cpu: [arm64] + os: [darwin] - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} + turbo-linux-64@2.0.4: + resolution: {integrity: sha512-6aG670e5zOWu6RczEYcB81nEl8EhiGJEvWhUrnAfNEUIMBEH1pR5SsMmG2ol5/m3PgiRM12r13dSqTxCLcHrVg==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.0.4: + resolution: {integrity: sha512-AXfVOjst+mCtPDFT4tCu08Qrfv12Nj7NDd33AjGwV79NYN1Y1rcFY59UQ4nO3ij3rbcvV71Xc+TZJ4csEvRCSg==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.0.4: + resolution: {integrity: sha512-QOnUR9hKl0T5gq5h1fAhVEqBSjpcBi/BbaO71YGQNgsr6pAnCQdbG8/r3MYXet53efM0KTdOhieWeO3KLNKybA==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.0.4: + resolution: {integrity: sha512-3v8WpdZy1AxZw0gha0q3caZmm+0gveBQ40OspD6mxDBIS+oBtO5CkxhIXkFJJW+jDKmDlM7wXDIGfMEq+QyNCQ==} + cpu: [arm64] + os: [win32] + + turbo@2.0.4: + resolution: {integrity: sha512-Ilme/2Q5kYw0AeRr+aw3s02+WrEYaY7U8vPnqSZU/jaDG/qd6jHVN6nRWyd/9KXvJGYM69vE6JImoGoyNjLwaw==} + hasBin: true type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -5948,22 +2973,6 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -5972,17 +2981,16 @@ packages: engines: {node: '>=14.17'} hasBin: true - uc.micro@1.0.6: - resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} @@ -5990,30 +2998,13 @@ packages: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} - undefsafe@2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici@5.26.5: - resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} - engines: {node: '>=14.0'} - - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} - unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} - - unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} - unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -6021,32 +3012,18 @@ packages: unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - unix-dgram@2.0.6: - resolution: {integrity: sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==} - engines: {node: '>=0.10.48'} - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-notifier@6.0.2: resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} engines: {node: '>=14.16'} + update-notifier@7.0.0: + resolution: {integrity: sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==} + engines: {node: '>=18'} + upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -6071,65 +3048,14 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - v8flags@4.0.1: resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==} engines: {node: '>= 10.13.0'} - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vhost@3.0.2: - resolution: {integrity: sha512-S3pJdWrpFWrKMboRU4dLYgMrTgoPALsmYwOvyebK2M6X95b9kQrjZy5rwl3uzzpfpENe/XrNYu/2U+e7/bmT5g==} - engines: {node: '>= 0.8.0'} - - vite@4.5.0: - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - - void-elements@3.1.0: - resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} - engines: {node: '>=0.10.0'} - wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -6147,20 +3073,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - - which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -6170,43 +3082,13 @@ packages: engines: {node: '>= 8'} hasBin: true - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - - wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} - winston-syslog@2.7.0: - resolution: {integrity: sha512-w+V0lHO2W6XqcYlvVi4DrblwJShvQbAaruRvUlMPzH1Z+dYvUvo4ra2hhoF6UNTFmC9LBltcTG05ypYL6S/B8A==} - engines: {node: '>= 8'} - peerDependencies: - winston: ^3.8.2 - - winston-transport@4.6.0: - resolution: {integrity: sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==} - engines: {node: '>= 12.0.0'} - - winston@3.11.0: - resolution: {integrity: sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==} - engines: {node: '>= 12.0.0'} - - with@7.0.2: - resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} - engines: {node: '>= 10.0.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wrap-ansi@5.1.0: - resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} - engines: {node: '>=6'} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -6219,24 +3101,16 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -6245,52 +3119,18 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - xxhashjs@0.2.2: - resolution: {integrity: sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==} - - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - yargs-parser@13.1.2: - resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} - - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@13.3.2: - resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} - - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -6298,335 +3138,36 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} snapshots: - '@11ty/dependency-tree@2.0.1': {} - - '@11ty/eleventy-dev-server@1.0.4': - dependencies: - '@11ty/eleventy-utils': 1.0.2 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@5.5.0) - dev-ip: 1.0.1 - finalhandler: 1.2.0 - mime: 3.0.0 - minimist: 1.2.8 - morphdom: 2.7.1 - please-upgrade-node: 3.2.0 - ssri: 8.0.1 - ws: 8.14.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@11ty/eleventy-fetch@4.0.0(encoding@0.1.13)': - dependencies: - debug: 4.3.4(supports-color@5.5.0) - flat-cache: 3.1.1 - node-fetch: 2.7.0(encoding@0.1.13) - p-queue: 6.6.2 - transitivePeerDependencies: - - encoding - - supports-color - - '@11ty/eleventy-img@3.1.8(encoding@0.1.13)': - dependencies: - '@11ty/eleventy-fetch': 4.0.0(encoding@0.1.13) - brotli-size: 4.0.0 - debug: 4.3.4(supports-color@5.5.0) - entities: 4.5.0 - image-size: 1.0.2 - p-queue: 6.6.2 - sharp: 0.32.6 - transitivePeerDependencies: - - encoding - - supports-color - - '@11ty/eleventy-navigation@0.3.5': - dependencies: - dependency-graph: 0.11.0 - - '@11ty/eleventy-plugin-bundle@1.0.4': - dependencies: - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - - '@11ty/eleventy-plugin-rss@1.2.0': - dependencies: - debug: 4.3.4(supports-color@5.5.0) - posthtml: 0.16.6 - posthtml-urls: 1.0.0 - transitivePeerDependencies: - - supports-color - - '@11ty/eleventy-plugin-syntaxhighlight@5.0.0': - dependencies: - prismjs: 1.29.0 - - '@11ty/eleventy-utils@1.0.2': - dependencies: - normalize-path: 3.0.0 - - '@11ty/eleventy@2.0.1': - dependencies: - '@11ty/dependency-tree': 2.0.1 - '@11ty/eleventy-dev-server': 1.0.4 - '@11ty/eleventy-utils': 1.0.2 - '@11ty/lodash-custom': 4.17.21 - '@iarna/toml': 2.2.5 - '@sindresorhus/slugify': 1.1.2 - bcp-47-normalize: 1.1.1 - chokidar: 3.5.3 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) - dependency-graph: 0.11.0 - ejs: 3.1.9 - fast-glob: 3.3.1 - graceful-fs: 4.2.11 - gray-matter: 4.0.3 - hamljs: 0.6.2 - handlebars: 4.7.8 - is-glob: 4.0.3 - iso-639-1: 2.1.15 - kleur: 4.1.5 - liquidjs: 10.9.3 - luxon: 3.4.3 - markdown-it: 13.0.2 - micromatch: 4.0.5 - minimist: 1.2.8 - moo: 0.5.2 - multimatch: 5.0.0 - mustache: 4.2.0 - normalize-path: 3.0.0 - nunjucks: 3.2.4(chokidar@3.5.3) - path-to-regexp: 6.2.1 - please-upgrade-node: 3.2.0 - posthtml: 0.16.6 - posthtml-urls: 1.0.0 - pug: 3.0.2 - recursive-copy: 2.0.14 - semver: 7.6.2 - slugify: 1.6.6 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@11ty/lodash-custom@4.17.21': {} - - '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.2.1': dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 - '@babel/code-frame@7.24.6': + '@babel/code-frame@7.24.7': dependencies: - '@babel/highlight': 7.24.6 - picocolors: 1.0.0 + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 - '@babel/helper-string-parser@7.22.5': {} + '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.24.6': {} - - '@babel/highlight@7.24.6': + '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.6 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 - '@babel/parser@7.23.0': - dependencies: - '@babel/types': 7.23.0 - - '@babel/runtime@7.23.2': - dependencies: - regenerator-runtime: 0.14.0 - - '@babel/types@7.23.0': - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.24.6 - to-fast-properties: 2.0.0 - - '@balena/dockerignore@1.0.2': {} - - '@changesets/apply-release-plan@7.0.3': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/config': 3.0.1 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.0 - '@changesets/should-skip-package': 0.1.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.6.2 - - '@changesets/assemble-release-plan@6.0.2': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.0 - '@changesets/should-skip-package': 0.1.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.6.2 - - '@changesets/changelog-git@0.2.0': - dependencies: - '@changesets/types': 6.0.0 - - '@changesets/cli@2.27.5': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/apply-release-plan': 7.0.3 - '@changesets/assemble-release-plan': 6.0.2 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.1 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.0 - '@changesets/get-release-plan': 4.0.2 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 - '@changesets/should-skip-package': 0.1.0 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.1 - '@manypkg/get-packages': 1.1.3 - '@types/semver': 7.5.4 - ansi-colors: 4.1.3 - chalk: 2.4.2 - ci-info: 3.9.0 - enquirer: 2.4.1 - external-editor: 3.1.0 - fs-extra: 7.0.1 - human-id: 1.0.2 - meow: 6.1.1 - outdent: 0.5.0 - p-limit: 2.3.0 - preferred-pm: 3.1.3 - resolve-from: 5.0.0 - semver: 7.6.2 - spawndamnit: 2.0.0 - term-size: 2.2.1 - tty-table: 4.2.3 - - '@changesets/config@3.0.1': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.0 - '@changesets/logger': 0.1.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.5 - - '@changesets/errors@0.2.0': - dependencies: - extendable-error: 0.1.7 - - '@changesets/get-dependents-graph@2.1.0': - dependencies: - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - chalk: 2.4.2 - fs-extra: 7.0.1 - semver: 7.6.2 - - '@changesets/get-release-plan@4.0.2': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/assemble-release-plan': 6.0.2 - '@changesets/config': 3.0.1 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - - '@changesets/get-version-range-type@0.4.0': {} - - '@changesets/git@3.0.0': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.5 - spawndamnit: 2.0.0 - - '@changesets/logger@0.1.0': - dependencies: - chalk: 2.4.2 - - '@changesets/parse@0.4.0': - dependencies: - '@changesets/types': 6.0.0 - js-yaml: 3.14.1 - - '@changesets/pre@2.0.0': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - - '@changesets/read@0.6.0': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 - chalk: 2.4.2 - fs-extra: 7.0.1 - p-filter: 2.1.0 - - '@changesets/should-skip-package@0.1.0': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - - '@changesets/types@4.1.0': {} - - '@changesets/types@6.0.0': {} - - '@changesets/write@0.3.1': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - human-id: 1.0.2 - prettier: 2.8.8 - - '@colors/colors@1.6.0': {} - - '@commitlint/cli@19.3.0(@types/node@20.8.10)(typescript@5.2.2)': + '@commitlint/cli@19.3.0(@types/node@20.14.2)(typescript@5.2.2)': dependencies: '@commitlint/format': 19.3.0 '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@20.8.10)(typescript@5.2.2) + '@commitlint/load': 19.2.0(@types/node@20.14.2)(typescript@5.2.2) '@commitlint/read': 19.2.1 '@commitlint/types': 19.0.3 execa: 8.0.1 @@ -6673,7 +3214,7 @@ snapshots: '@commitlint/rules': 19.0.3 '@commitlint/types': 19.0.3 - '@commitlint/load@19.2.0(@types/node@20.8.10)(typescript@5.2.2)': + '@commitlint/load@19.2.0(@types/node@20.14.2)(typescript@5.2.2)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 @@ -6681,7 +3222,7 @@ snapshots: '@commitlint/types': 19.0.3 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.2.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.8.10)(cosmiconfig@9.0.0(typescript@5.2.2))(typescript@5.2.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.2)(cosmiconfig@9.0.0(typescript@5.2.2))(typescript@5.2.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -6733,203 +3274,141 @@ snapshots: '@types/conventional-commits-parser': 5.0.0 chalk: 5.3.0 - '@dabh/diagnostics@2.0.3': - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - - '@dotenvx/dotenvx@0.44.1': - dependencies: - '@inquirer/confirm': 2.0.17 - arch: 2.2.0 - chalk: 4.1.2 - commander: 11.1.0 - conf: 10.2.0 - diff: 5.2.0 - dotenv: 16.4.5 - dotenv-expand: 11.0.6 - eciesjs: 0.4.6 - execa: 5.1.1 - glob: 10.3.10 - ignore: 5.3.1 - is-wsl: 2.2.0 - object-treeify: 1.1.33 - open: 8.4.2 - ora: 5.4.1 - semver: 7.6.2 - undici: 5.28.4 - which: 4.0.0 - winston: 3.11.0 - xxhashjs: 0.2.2 - - '@esbuild/aix-ppc64@0.20.0': + '@esbuild/aix-ppc64@0.21.5': optional: true '@esbuild/android-arm64@0.18.20': optional: true - '@esbuild/android-arm64@0.20.0': + '@esbuild/android-arm64@0.21.5': optional: true '@esbuild/android-arm@0.18.20': optional: true - '@esbuild/android-arm@0.20.0': + '@esbuild/android-arm@0.21.5': optional: true '@esbuild/android-x64@0.18.20': optional: true - '@esbuild/android-x64@0.20.0': + '@esbuild/android-x64@0.21.5': optional: true '@esbuild/darwin-arm64@0.18.20': optional: true - '@esbuild/darwin-arm64@0.20.0': + '@esbuild/darwin-arm64@0.21.5': optional: true '@esbuild/darwin-x64@0.18.20': optional: true - '@esbuild/darwin-x64@0.20.0': + '@esbuild/darwin-x64@0.21.5': optional: true '@esbuild/freebsd-arm64@0.18.20': optional: true - '@esbuild/freebsd-arm64@0.20.0': + '@esbuild/freebsd-arm64@0.21.5': optional: true '@esbuild/freebsd-x64@0.18.20': optional: true - '@esbuild/freebsd-x64@0.20.0': + '@esbuild/freebsd-x64@0.21.5': optional: true '@esbuild/linux-arm64@0.18.20': optional: true - '@esbuild/linux-arm64@0.20.0': + '@esbuild/linux-arm64@0.21.5': optional: true '@esbuild/linux-arm@0.18.20': optional: true - '@esbuild/linux-arm@0.20.0': + '@esbuild/linux-arm@0.21.5': optional: true '@esbuild/linux-ia32@0.18.20': optional: true - '@esbuild/linux-ia32@0.20.0': + '@esbuild/linux-ia32@0.21.5': optional: true '@esbuild/linux-loong64@0.18.20': optional: true - '@esbuild/linux-loong64@0.20.0': + '@esbuild/linux-loong64@0.21.5': optional: true '@esbuild/linux-mips64el@0.18.20': optional: true - '@esbuild/linux-mips64el@0.20.0': + '@esbuild/linux-mips64el@0.21.5': optional: true '@esbuild/linux-ppc64@0.18.20': optional: true - '@esbuild/linux-ppc64@0.20.0': + '@esbuild/linux-ppc64@0.21.5': optional: true '@esbuild/linux-riscv64@0.18.20': optional: true - '@esbuild/linux-riscv64@0.20.0': + '@esbuild/linux-riscv64@0.21.5': optional: true '@esbuild/linux-s390x@0.18.20': optional: true - '@esbuild/linux-s390x@0.20.0': + '@esbuild/linux-s390x@0.21.5': optional: true '@esbuild/linux-x64@0.18.20': optional: true - '@esbuild/linux-x64@0.20.0': + '@esbuild/linux-x64@0.21.5': optional: true '@esbuild/netbsd-x64@0.18.20': optional: true - '@esbuild/netbsd-x64@0.20.0': + '@esbuild/netbsd-x64@0.21.5': optional: true '@esbuild/openbsd-x64@0.18.20': optional: true - '@esbuild/openbsd-x64@0.20.0': + '@esbuild/openbsd-x64@0.21.5': optional: true '@esbuild/sunos-x64@0.18.20': optional: true - '@esbuild/sunos-x64@0.20.0': + '@esbuild/sunos-x64@0.21.5': optional: true '@esbuild/win32-arm64@0.18.20': optional: true - '@esbuild/win32-arm64@0.20.0': + '@esbuild/win32-arm64@0.21.5': optional: true '@esbuild/win32-ia32@0.18.20': optional: true - '@esbuild/win32-ia32@0.20.0': + '@esbuild/win32-ia32@0.21.5': optional: true '@esbuild/win32-x64@0.18.20': optional: true - '@esbuild/win32-x64@0.20.0': + '@esbuild/win32-x64@0.21.5': optional: true - '@fastify/busboy@2.0.0': {} - - '@gar/promisify@1.1.3': - optional: true - - '@iarna/toml@2.2.5': {} - - '@inquirer/confirm@2.0.17': - dependencies: - '@inquirer/core': 6.0.0 - '@inquirer/type': 1.3.3 - chalk: 4.1.2 - - '@inquirer/core@6.0.0': - dependencies: - '@inquirer/type': 1.3.3 - '@types/mute-stream': 0.0.4 - '@types/node': 20.14.2 - '@types/wrap-ansi': 3.0.0 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-spinners: 2.9.2 - cli-width: 4.1.0 - figures: 3.2.0 - mute-stream: 1.0.0 - run-async: 3.0.0 - signal-exit: 4.1.0 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - - '@inquirer/type@1.3.3': {} - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -6956,64 +3435,10 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@kurkle/color@0.3.2': {} - '@ljharb/through@2.3.12': dependencies: call-bind: 1.0.5 - '@manypkg/find-root@1.1.0': - dependencies: - '@babel/runtime': 7.23.2 - '@types/node': 12.20.55 - find-up: 4.1.0 - fs-extra: 8.1.0 - - '@manypkg/get-packages@1.1.3': - dependencies: - '@babel/runtime': 7.23.2 - '@changesets/types': 4.1.0 - '@manypkg/find-root': 1.1.0 - fs-extra: 8.1.0 - globby: 11.1.0 - read-yaml-file: 1.1.0 - - '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': - dependencies: - detect-libc: 2.0.2 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.7.0(encoding@0.1.13) - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.6.2 - tar: 6.2.0 - transitivePeerDependencies: - - encoding - - supports-color - - '@microsoft/fetch-event-source@https://codeload.github.com/pockethost/fetch-event-source/tar.gz/ebe3b7122647b48b93fd11effbbfb915d98956b0': {} - - '@mole-inc/bin-wrapper@8.0.1': - dependencies: - bin-check: 4.1.0 - bin-version-check: 5.1.0 - content-disposition: 0.5.4 - ext-name: 5.0.0 - file-type: 17.1.6 - filenamify: 5.1.1 - got: 11.8.6 - os-filter-obj: 2.0.0 - - '@noble/ciphers@0.4.1': {} - - '@noble/curves@1.4.0': - dependencies: - '@noble/hashes': 1.4.0 - - '@noble/hashes@1.4.0': {} - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7026,18 +3451,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@npmcli/fs@1.1.1': - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.6.2 - optional: true - - '@npmcli/move-file@1.1.2': - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - optional: true - '@pkgjs/parseargs@0.11.0': optional: true @@ -7053,10 +3466,6 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@polka/url@1.0.0-next.23': {} - - '@popperjs/core@2.11.8': {} - '@s-libs/micro-dash@16.1.0': dependencies: tslib: 2.6.2 @@ -7067,227 +3476,42 @@ snapshots: tslib: 2.6.2 utility-types: 3.10.0 - '@sindresorhus/is@4.6.0': {} - '@sindresorhus/is@5.6.0': {} - '@sindresorhus/slugify@1.1.2': - dependencies: - '@sindresorhus/transliterate': 0.1.2 - escape-string-regexp: 4.0.0 - - '@sindresorhus/transliterate@0.1.2': - dependencies: - escape-string-regexp: 2.0.0 - lodash.deburr: 4.1.0 - - '@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.27.2(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)))': - dependencies: - '@sveltejs/kit': 1.27.2(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)) - - '@sveltejs/kit@1.27.2(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5))': - dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)) - '@types/cookie': 0.5.3 - cookie: 0.5.0 - devalue: 4.3.2 - esm-env: 1.0.0 - kleur: 4.1.5 - magic-string: 0.30.5 - mrmime: 1.0.1 - sade: 1.8.1 - set-cookie-parser: 2.6.0 - sirv: 2.0.3 - svelte: 4.2.2 - tiny-glob: 0.2.9 - undici: 5.26.5 - vite: 4.5.0(@types/node@20.14.2)(sass@1.69.5) - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)))(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5))': - dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)) - debug: 4.3.4(supports-color@5.5.0) - svelte: 4.2.2 - vite: 4.5.0(@types/node@20.14.2)(sass@1.69.5) - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5))': - dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)))(svelte@4.2.2)(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)) - debug: 4.3.4(supports-color@5.5.0) - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.5 - svelte: 4.2.2 - svelte-hmr: 0.15.3(svelte@4.2.2) - vite: 4.5.0(@types/node@20.14.2)(sass@1.69.5) - vitefu: 0.2.5(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)) - transitivePeerDependencies: - - supports-color - - '@swc/cli@0.1.62(@swc/core@1.3.95)(chokidar@3.5.3)': - dependencies: - '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.3.95 - commander: 7.2.0 - fast-glob: 3.3.1 - semver: 7.5.4 - slash: 3.0.0 - source-map: 0.7.4 - optionalDependencies: - chokidar: 3.5.3 - - '@swc/core-darwin-arm64@1.3.95': - optional: true - - '@swc/core-darwin-x64@1.3.95': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.3.95': - optional: true - - '@swc/core-linux-arm64-gnu@1.3.95': - optional: true - - '@swc/core-linux-arm64-musl@1.3.95': - optional: true - - '@swc/core-linux-x64-gnu@1.3.95': - optional: true - - '@swc/core-linux-x64-musl@1.3.95': - optional: true - - '@swc/core-win32-arm64-msvc@1.3.95': - optional: true - - '@swc/core-win32-ia32-msvc@1.3.95': - optional: true - - '@swc/core-win32-x64-msvc@1.3.95': - optional: true - - '@swc/core@1.3.95': - dependencies: - '@swc/counter': 0.1.2 - '@swc/types': 0.1.5 - optionalDependencies: - '@swc/core-darwin-arm64': 1.3.95 - '@swc/core-darwin-x64': 1.3.95 - '@swc/core-linux-arm-gnueabihf': 1.3.95 - '@swc/core-linux-arm64-gnu': 1.3.95 - '@swc/core-linux-arm64-musl': 1.3.95 - '@swc/core-linux-x64-gnu': 1.3.95 - '@swc/core-linux-x64-musl': 1.3.95 - '@swc/core-win32-arm64-msvc': 1.3.95 - '@swc/core-win32-ia32-msvc': 1.3.95 - '@swc/core-win32-x64-msvc': 1.3.95 - - '@swc/counter@0.1.2': {} - - '@swc/types@0.1.5': {} - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/typography@0.5.10(tailwindcss@3.3.5)': - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.5 - '@tokenizer/token@0.3.0': {} - '@tootallnate/once@1.1.2': - optional: true - '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.8.10 + '@types/node': 20.14.2 - '@types/bootstrap@5.2.8': - dependencies: - '@popperjs/core': 2.11.8 - - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.3 - '@types/keyv': 3.1.4 - '@types/node': 20.8.10 - '@types/responselike': 1.0.2 - - '@types/configstore@2.1.1': {} + '@types/configstore@6.0.2': {} '@types/connect@3.4.38': dependencies: - '@types/node': 20.8.10 + '@types/node': 20.14.2 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 20.8.10 - - '@types/cookie@0.5.3': {} - - '@types/copyfiles@2.4.4': {} - - '@types/cors@2.8.17': - dependencies: - '@types/node': 20.8.10 - - '@types/d3-scale-chromatic@3.0.1': {} - - '@types/d3-scale@4.0.6': - dependencies: - '@types/d3-time': 3.0.2 - - '@types/d3-time@3.0.2': {} - - '@types/debug@0.0.30': {} + '@types/node': 20.14.2 '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 - '@types/decompress@4.2.6': - dependencies: - '@types/node': 20.8.10 - - '@types/docker-modem@3.0.5': - dependencies: - '@types/node': 20.8.10 - '@types/ssh2': 1.11.15 - - '@types/dockerode@3.3.21': - dependencies: - '@types/docker-modem': 3.0.5 - '@types/node': 20.8.10 - '@types/estree@1.0.4': {} - '@types/eventsource@1.1.14': {} - '@types/express-serve-static-core@4.17.41': dependencies: - '@types/node': 20.8.10 + '@types/node': 20.14.2 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express-sslify@1.2.5': - dependencies: - '@types/express': 4.17.21 - '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 @@ -7297,97 +3521,41 @@ snapshots: '@types/fined@1.1.4': {} - '@types/get-port@3.2.0': {} - - '@types/glob@5.0.38': - dependencies: - '@types/minimatch': 3.0.5 - '@types/node': 20.8.10 - - '@types/glossy@0.1.3': - dependencies: - '@types/node': 20.8.10 - '@types/http-cache-semantics@4.0.3': {} '@types/http-errors@2.0.4': {} '@types/http-proxy@1.17.13': dependencies: - '@types/node': 20.8.10 + '@types/node': 20.14.2 '@types/inquirer@9.0.7': dependencies: '@types/through': 0.0.32 rxjs: 7.8.1 - '@types/js-cookie@3.0.5': {} - - '@types/js-yaml@4.0.9': {} - '@types/json-stringify-safe@5.0.2': {} - '@types/keyv@3.1.4': - dependencies: - '@types/node': 20.8.10 - '@types/liftoff@4.0.3': dependencies: '@types/fined': 1.1.4 - '@types/node': 20.8.10 - - '@types/linkify-it@3.0.4': {} - - '@types/lodash@4.14.202': {} - - '@types/markdown-it@13.0.5': - dependencies: - '@types/linkify-it': 3.0.4 - '@types/mdurl': 1.0.4 - - '@types/marked@4.3.2': {} + '@types/node': 20.14.2 '@types/mdast@4.0.3': dependencies: '@types/unist': 3.0.2 - '@types/mdurl@1.0.4': {} - - '@types/memorystream@0.3.3': - dependencies: - '@types/node': 20.8.10 - '@types/mime@1.3.5': {} '@types/mime@3.0.4': {} - '@types/minimatch@3.0.5': {} - - '@types/minimist@1.2.5': {} - - '@types/mkdirp@0.5.2': - dependencies: - '@types/node': 20.8.10 - '@types/ms@0.7.34': {} - '@types/mute-stream@0.0.4': - dependencies: - '@types/node': 20.14.2 - - '@types/ncp@2.0.8': - dependencies: - '@types/node': 20.8.10 - '@types/node-fetch@2.6.8': dependencies: - '@types/node': 20.8.10 + '@types/node': 20.14.2 form-data: 4.0.0 - '@types/node-os-utils@1.3.4': {} - - '@types/node@12.20.55': {} - '@types/node@18.18.8': dependencies: undici-types: 5.26.5 @@ -7400,82 +3568,41 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@8.10.66': {} - - '@types/normalize-package-data@2.4.4': {} - - '@types/pug@2.0.8': {} - '@types/qs@6.9.11': {} '@types/range-parser@1.2.7': {} - '@types/responselike@1.0.2': - dependencies: - '@types/node': 20.8.10 - - '@types/rimraf@2.0.5': - dependencies: - '@types/glob': 5.0.38 - '@types/node': 20.8.10 - '@types/semver@7.5.4': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.8.10 + '@types/node': 20.14.2 '@types/serve-static@1.15.5': dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.8.10 - - '@types/ssh2@1.11.15': - dependencies: - '@types/node': 18.18.8 - - '@types/tail@2.2.2': {} + '@types/node': 20.14.2 '@types/through@0.0.32': dependencies: - '@types/node': 20.8.10 - - '@types/tmp@0.0.33': {} + '@types/node': 20.14.2 '@types/tmp@0.2.5': {} - '@types/triple-beam@1.3.4': {} - '@types/unist@3.0.2': {} - '@types/unzipper@0.10.8': + '@types/update-notifier@6.0.8': dependencies: - '@types/node': 20.8.10 - - '@types/vhost@3.0.9': - dependencies: - '@types/connect': 3.4.38 - - '@types/winston-syslog@2.4.3': - dependencies: - '@types/glossy': 0.1.3 - '@types/node': 20.8.10 - winston: 3.11.0 - winston-transport: 4.6.0 - - '@types/wrap-ansi@3.0.0': {} + '@types/configstore': 6.0.2 + boxen: 7.1.1 JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - a-sync-waterfall@1.0.1: {} - - abbrev@1.1.1: {} - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -7485,35 +3612,17 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn@7.4.1: {} - acorn@8.11.2: {} - agent-base@6.0.2: - dependencies: - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - optional: true - aggregate-error@4.0.1: dependencies: clean-stack: 4.2.0 indent-string: 5.0.0 - ajv-formats@2.1.1(ajv@8.12.0): - optionalDependencies: - ajv: 8.12.0 - ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 @@ -7531,7 +3640,7 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-regex@4.1.1: {} + ansi-escapes@6.2.1: {} ansi-regex@5.0.1: {} @@ -7547,34 +3656,6 @@ snapshots: ansi-styles@6.2.1: {} - any-promise@0.1.0: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - application-config-path@0.1.1: {} - - aproba@2.0.0: {} - - arch@2.2.0: {} - - are-we-there-yet@2.0.0: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - - are-we-there-yet@3.0.1: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - optional: true - - arg@5.0.2: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -7585,15 +3666,6 @@ snapshots: dependencies: dequal: 2.0.3 - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - array-differ@1.0.0: {} - - array-differ@3.0.0: {} - array-each@1.0.1: {} array-flatten@1.1.1: {} @@ -7602,128 +3674,26 @@ snapshots: array-slice@1.1.0: {} - array-union@1.0.2: - dependencies: - array-uniq: 1.0.3 - - array-union@2.1.0: {} - - array-uniq@1.0.3: {} - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - arrify@1.0.1: {} - - arrify@2.0.1: {} - - asap@2.0.6: {} - - asn1@0.2.6: - dependencies: - safer-buffer: 2.1.2 - - assert-never@1.2.1: {} - astral-regex@2.0.0: {} - async@3.2.4: {} + async-mutex@0.5.0: + dependencies: + tslib: 2.6.2 asynckit@0.4.0: {} - atomically@1.7.0: {} - - autoprefixer@10.4.16(postcss@8.4.31): - dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001559 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - axobject-query@3.2.1: dependencies: dequal: 2.0.3 - b4a@1.6.4: {} - - babel-walk@3.0.0-canary-5: - dependencies: - '@babel/types': 7.23.0 - balanced-match@1.0.2: {} base-64@0.1.0: {} base64-js@1.5.1: {} - bcp-47-match@1.0.3: {} - - bcp-47-normalize@1.1.1: - dependencies: - bcp-47: 1.0.8 - bcp-47-match: 1.0.3 - - bcp-47@1.0.8: - dependencies: - is-alphabetical: 1.0.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 - - better-path-resolve@1.0.0: - dependencies: - is-windows: 1.0.2 - - bin-check@4.1.0: - dependencies: - execa: 0.7.0 - executable: 4.1.1 - - bin-version-check@5.1.0: - dependencies: - bin-version: 6.0.0 - semver: 7.6.2 - semver-truncate: 3.0.0 - - bin-version@6.0.0: - dependencies: - execa: 5.1.1 - find-versions: 5.1.0 - - binary-extensions@2.2.0: {} - binary-searching@2.0.5: {} - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - optional: true - bl@1.2.3: dependencies: readable-stream: 2.3.8 @@ -7741,8 +3711,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - bluebird@3.7.2: {} - body-parser@1.20.1: dependencies: bytes: 3.1.2 @@ -7788,21 +3756,6 @@ snapshots: dependencies: fill-range: 7.0.1 - breakword@1.0.6: - dependencies: - wcwidth: 1.0.1 - - brotli-size@4.0.0: - dependencies: - duplexer: 0.1.1 - - browserslist@4.22.1: - dependencies: - caniuse-lite: 1.0.30001559 - electron-to-chromium: 1.4.575 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - buffer-alloc-unsafe@1.1.0: {} buffer-alloc@1.2.0: @@ -7826,44 +3779,8 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - buildcheck@0.0.6: - optional: true - - bunyan@1.8.15: - optionalDependencies: - dtrace-provider: 0.8.8 - moment: 2.29.4 - mv: 2.1.1 - safe-json-stringify: 1.2.0 - bytes@3.1.2: {} - cacache@15.3.0: - dependencies: - '@npmcli/fs': 1.1.1 - '@npmcli/move-file': 1.1.2 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 7.2.3 - infer-owner: 1.0.4 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.2.0 - unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird - optional: true - - cacheable-lookup@5.0.4: {} - cacheable-lookup@7.0.0: {} cacheable-request@10.2.14: @@ -7876,30 +3793,12 @@ snapshots: normalize-url: 8.0.0 responselike: 3.0.0 - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - call-bind@1.0.5: dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.1.1 - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - callsites@3.1.0: {} camel-case@4.1.2: @@ -7907,20 +3806,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.2 - camelcase-css@2.0.1: {} - - camelcase-keys@6.2.2: - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - - camelcase@5.3.1: {} - camelcase@7.0.1: {} - caniuse-lite@1.0.30001559: {} - capital-case@1.0.4: dependencies: no-case: 3.0.4 @@ -7962,18 +3849,10 @@ snapshots: character-entities@2.0.2: {} - character-parser@2.2.0: - dependencies: - is-regex: 1.1.4 - chardet@0.7.0: {} charenc@0.0.2: {} - chart.js@4.4.0: - dependencies: - '@kurkle/color': 0.3.2 - check-node-version@4.2.1: dependencies: chalk: 3.0.0 @@ -7983,34 +3862,8 @@ snapshots: run-parallel: 1.2.0 semver: 6.3.1 - chokidar-cli@3.0.0: - dependencies: - chokidar: 3.5.3 - lodash.debounce: 4.0.8 - lodash.throttle: 4.1.1 - yargs: 13.3.2 - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - 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 - - chownr@1.1.4: {} - - chownr@2.0.0: {} - ci-info@3.9.0: {} - clean-stack@2.2.0: - optional: true - clean-stack@4.2.0: dependencies: escape-string-regexp: 5.0.0 @@ -8029,36 +3882,19 @@ snapshots: cli-spinners@2.9.2: {} + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.1.0 + cli-width@4.1.0: {} - cliui@5.0.0: - dependencies: - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi: 5.1.0 - - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - clone@1.0.4: {} code-red@1.0.4: @@ -8081,54 +3917,28 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color-support@1.1.3: {} - - color@3.2.1: - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - - colord@2.9.3: {} - - colorette@2.0.19: {} - - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 + colorette@2.0.20: {} combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - command-exists@1.2.9: {} - - commander@10.0.1: {} - commander@11.1.0: {} commander@12.1.0: {} commander@2.20.3: {} - commander@4.1.1: {} - - commander@5.1.0: {} - - commander@7.2.0: {} - comment-parser@1.4.1: {} + commitlint@19.3.0(@types/node@20.14.2)(typescript@5.2.2): + dependencies: + '@commitlint/cli': 19.3.0(@types/node@20.14.2)(typescript@5.2.2) + '@commitlint/types': 19.0.3 + transitivePeerDependencies: + - '@types/node' + - typescript + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -8136,31 +3946,6 @@ snapshots: concat-map@0.0.1: {} - concurrently@8.2.2: - dependencies: - chalk: 4.1.2 - date-fns: 2.30.0 - lodash: 4.17.21 - rxjs: 7.8.1 - shell-quote: 1.8.1 - spawn-command: 0.0.2 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.7.2 - - conf@10.2.0: - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - atomically: 1.7.0 - debounce-fn: 4.0.0 - dot-prop: 6.0.1 - env-paths: 2.2.1 - json-schema-typed: 7.0.3 - onetime: 5.1.2 - pkg-up: 3.1.0 - semver: 7.6.2 - config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -8174,19 +3959,12 @@ snapshots: write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 - console-control-strings@1.1.0: {} - constant-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case: 2.0.2 - constantinople@4.0.1: - dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -8212,28 +3990,13 @@ snapshots: cookie@0.5.0: {} - copyfiles@2.4.1: - dependencies: - glob: 7.2.3 - minimatch: 3.1.2 - mkdirp: 1.0.4 - noms: 0.0.0 - through2: 2.0.5 - untildify: 4.0.0 - yargs: 16.2.0 - core-util-is@1.0.3: {} - cors@2.8.5: + cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.2)(cosmiconfig@9.0.0(typescript@5.2.2))(typescript@5.2.2): dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig-typescript-loader@5.0.0(@types/node@20.8.10)(cosmiconfig@9.0.0(typescript@5.2.2))(typescript@5.2.2): - dependencies: - '@types/node': 20.8.10 + '@types/node': 20.14.2 cosmiconfig: 9.0.0(typescript@5.2.2) - jiti: 1.21.0 + jiti: 1.21.6 typescript: 5.2.2 cosmiconfig@9.0.0(typescript@5.2.2): @@ -8245,18 +4008,6 @@ snapshots: optionalDependencies: typescript: 5.2.2 - cpu-features@0.0.9: - dependencies: - buildcheck: 0.0.6 - nan: 2.18.0 - optional: true - - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -8269,137 +4020,22 @@ snapshots: dependencies: type-fest: 1.4.0 - css-selector-tokenizer@0.8.0: - dependencies: - cssesc: 3.0.0 - fastparse: 1.1.2 - css-tree@2.3.1: dependencies: mdn-data: 2.0.30 source-map-js: 1.0.2 - cssesc@3.0.0: {} - - csv-generate@3.4.3: {} - - csv-parse@4.16.3: {} - - csv-stringify@5.6.5: {} - - csv@5.5.3: - dependencies: - csv-generate: 3.4.3 - csv-parse: 4.16.3 - csv-stringify: 5.6.5 - stream-transform: 2.1.3 - - cuint@0.2.2: {} - - culori@3.3.0: {} - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-color@3.1.0: {} - - d3-format@3.1.0: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-scale-chromatic@3.0.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - daisyui@3.9.4: - dependencies: - colord: 2.9.3 - css-selector-tokenizer: 0.8.0 - postcss: 8.4.31 - postcss-js: 4.0.1(postcss@8.4.31) - tailwindcss: 3.3.5 - transitivePeerDependencies: - - ts-node - - daisyui@4.4.23(postcss@8.4.31): - dependencies: - css-selector-tokenizer: 0.8.0 - culori: 3.3.0 - picocolors: 1.0.0 - postcss-js: 4.0.1(postcss@8.4.31) - transitivePeerDependencies: - - postcss - dargs@8.1.0: {} data-uri-to-buffer@4.0.1: {} - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - date-fns@2.30.0: - dependencies: - '@babel/runtime': 7.23.2 - - debounce-fn@4.0.0: - dependencies: - mimic-fn: 3.1.0 - debug@2.6.9: dependencies: ms: 2.0.0 - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.4(supports-color@5.5.0): + debug@4.3.4: dependencies: ms: 2.1.2 - optionalDependencies: - supports-color: 5.5.0 - - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} decode-named-character-reference@1.0.2: dependencies: @@ -8465,8 +4101,6 @@ snapshots: deep-extend@0.6.0: {} - deepmerge@4.3.1: {} - defaults@1.0.4: dependencies: clone: 1.0.4 @@ -8479,20 +4113,6 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.1 - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-lazy-prop@2.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - del@7.1.0: dependencies: globby: 13.2.2 @@ -8506,62 +4126,18 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: {} - depd@2.0.0: {} - dependency-graph@0.11.0: {} - dequal@2.0.3: {} destroy@1.2.0: {} detect-file@1.0.0: {} - detect-indent@6.1.0: {} - - detect-libc@2.0.2: {} - - dev-ip@1.0.1: {} - - devalue@4.3.2: {} - - devcert@1.2.2: - dependencies: - '@types/configstore': 2.1.1 - '@types/debug': 0.0.30 - '@types/get-port': 3.2.0 - '@types/glob': 5.0.38 - '@types/lodash': 4.14.202 - '@types/mkdirp': 0.5.2 - '@types/node': 8.10.66 - '@types/rimraf': 2.0.5 - '@types/tmp': 0.0.33 - application-config-path: 0.1.1 - command-exists: 1.2.9 - debug: 3.2.7 - eol: 0.9.1 - get-port: 3.2.0 - glob: 7.2.3 - is-valid-domain: 0.1.6 - lodash: 4.17.21 - mkdirp: 0.5.6 - password-prompt: 1.1.3 - rimraf: 2.7.1 - sudo-prompt: 8.2.5 - tmp: 0.0.33 - tslib: 1.14.1 - transitivePeerDependencies: - - supports-color - devlop@1.1.0: dependencies: dequal: 2.0.3 - didyoumean@1.2.2: {} - - diff@5.2.0: {} - digest-fetch@1.3.0: dependencies: base-64: 0.1.0 @@ -8571,45 +4147,6 @@ snapshots: dependencies: path-type: 4.0.0 - dlv@1.1.3: {} - - docker-modem@3.0.8: - dependencies: - debug: 4.3.4(supports-color@5.5.0) - readable-stream: 3.6.2 - split-ca: 1.0.1 - ssh2: 1.14.0 - transitivePeerDependencies: - - supports-color - - dockerode@3.3.5: - dependencies: - '@balena/dockerignore': 1.0.2 - docker-modem: 3.0.8 - tar-fs: 2.0.1 - transitivePeerDependencies: - - supports-color - - doctypes@1.1.0: {} - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -8623,56 +4160,18 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv-cli@7.3.0: - dependencies: - cross-spawn: 7.0.3 - dotenv: 16.3.1 - dotenv-expand: 10.0.0 - minimist: 1.2.8 - - dotenv-expand@10.0.0: {} - - dotenv-expand@11.0.6: - dependencies: - dotenv: 16.4.5 - - dotenv@16.3.1: {} - dotenv@16.4.5: {} - dtrace-provider@0.8.8: - dependencies: - nan: 2.18.0 - optional: true - - duplexer@0.1.1: {} - eastasianwidth@0.2.0: {} - eciesjs@0.4.6: - dependencies: - '@noble/ciphers': 0.4.1 - '@noble/curves': 1.4.0 - '@noble/hashes': 1.4.0 - ee-first@1.1.1: {} - ejs@3.1.9: - dependencies: - jake: 10.8.7 - - electron-to-chromium@1.4.575: {} - emoji-regex@10.3.0: {} - emoji-regex@7.0.3: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - enabled@2.0.0: {} - encodeurl@1.0.2: {} encoding@0.1.13: @@ -8689,112 +4188,14 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - entities@2.2.0: {} - - entities@3.0.1: {} - - entities@4.5.0: {} - env-paths@2.2.1: {} env-paths@3.0.0: {} - eol@0.9.1: {} - - err-code@2.0.3: - optional: true - - errno@0.1.8: - dependencies: - prr: 1.0.1 - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.0 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - es6-promise@3.3.1: {} - - esbuild-node-externals@1.13.0(esbuild@0.20.0): - dependencies: - esbuild: 0.20.0 - find-up: 5.0.0 - tslib: 2.6.2 - esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -8820,33 +4221,33 @@ snapshots: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - esbuild@0.20.0: + esbuild@0.21.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.20.0 - '@esbuild/android-arm': 0.20.0 - '@esbuild/android-arm64': 0.20.0 - '@esbuild/android-x64': 0.20.0 - '@esbuild/darwin-arm64': 0.20.0 - '@esbuild/darwin-x64': 0.20.0 - '@esbuild/freebsd-arm64': 0.20.0 - '@esbuild/freebsd-x64': 0.20.0 - '@esbuild/linux-arm': 0.20.0 - '@esbuild/linux-arm64': 0.20.0 - '@esbuild/linux-ia32': 0.20.0 - '@esbuild/linux-loong64': 0.20.0 - '@esbuild/linux-mips64el': 0.20.0 - '@esbuild/linux-ppc64': 0.20.0 - '@esbuild/linux-riscv64': 0.20.0 - '@esbuild/linux-s390x': 0.20.0 - '@esbuild/linux-x64': 0.20.0 - '@esbuild/netbsd-x64': 0.20.0 - '@esbuild/openbsd-x64': 0.20.0 - '@esbuild/sunos-x64': 0.20.0 - '@esbuild/win32-arm64': 0.20.0 - '@esbuild/win32-ia32': 0.20.0 - '@esbuild/win32-x64': 0.20.0 + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 - escalade@3.1.1: {} + escalade@3.1.2: {} escape-goat@4.0.0: {} @@ -8854,16 +4255,8 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} - esm-env@1.0.0: {} - - esm@3.2.25: {} - esprima@4.0.1: {} estree-walker@3.0.3: @@ -8872,35 +4265,11 @@ snapshots: etag@1.8.1: {} - event-source-polyfill@1.0.31: {} - event-target-shim@5.0.1: {} eventemitter3@4.0.7: {} - eventsource@2.0.2: {} - - execa@0.7.0: - dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 + eventemitter3@5.0.1: {} execa@8.0.1: dependencies: @@ -8914,14 +4283,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - executable@4.1.1: - dependencies: - pify: 2.3.0 - exit-hook@4.0.0: {} - expand-template@2.0.3: {} - expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 @@ -8932,8 +4295,6 @@ snapshots: dependencies: express: 4.18.2 - express-sslify@1.2.0: {} - express@4.18.2: dependencies: accepts: 1.3.8 @@ -8970,23 +4331,8 @@ snapshots: transitivePeerDependencies: - supports-color - ext-list@2.2.2: - dependencies: - mime-db: 1.52.0 - - ext-name@5.0.0: - dependencies: - ext-list: 2.2.2 - sort-keys-length: 1.0.1 - - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - extend@3.0.2: {} - extendable-error@0.1.7: {} - external-editor@3.1.0: dependencies: chardet: 0.7.0 @@ -8995,8 +4341,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-fifo@1.3.2: {} - fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9007,8 +4351,6 @@ snapshots: fast-safe-stringify@2.1.1: {} - fastparse@1.1.2: {} - fastq@1.15.0: dependencies: reusify: 1.0.4 @@ -9017,8 +4359,6 @@ snapshots: dependencies: pend: 1.2.0 - fecha@4.2.3: {} - fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -9030,12 +4370,6 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-type@17.1.6: - dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 7.0.0 - token-types: 5.0.1 - file-type@19.0.0: dependencies: readable-web-to-node-stream: 3.0.2 @@ -9050,21 +4384,6 @@ snapshots: file-type@6.2.0: {} - file-uri-to-path@1.0.0: - optional: true - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - filename-reserved-regex@3.0.0: {} - - filenamify@5.1.1: - dependencies: - filename-reserved-regex: 3.0.0 - strip-outer: 2.0.0 - trim-repeated: 2.0.0 - fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 @@ -9081,20 +4400,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - find-up@6.3.0: dependencies: locate-path: 7.2.0 @@ -9106,15 +4411,6 @@ snapshots: path-exists: 5.0.0 unicorn-magic: 0.1.0 - find-versions@5.1.0: - dependencies: - semver-regex: 4.0.5 - - find-yarn-workspace-root2@1.2.16: - dependencies: - micromatch: 4.0.5 - pkg-dir: 4.2.0 - findup-sync@5.0.0: dependencies: detect-file: 1.0.0 @@ -9132,22 +4428,8 @@ snapshots: flagged-respawn@2.0.0: {} - flat-cache@3.1.1: - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - - flatted@3.2.9: {} - - fn.name@1.1.0: {} - follow-redirects@1.15.3: {} - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - for-in@1.0.2: {} for-own@1.0.0: @@ -9180,8 +4462,6 @@ snapshots: forwarded@0.2.0: {} - fraction.js@4.3.7: {} - fresh@0.5.2: {} front-matter@4.0.2: @@ -9190,72 +4470,13 @@ snapshots: fs-constants@1.0.0: {} - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - fs.realpath@1.0.0: {} fsevents@2.3.3: optional: true - ftp-srv@https://codeload.github.com/pockethost/ftp-srv/tar.gz/0fc708bae0d5d7a55ce948767f082d6fcfb2af59: - dependencies: - bluebird: 3.7.2 - bunyan: 1.8.15 - ip: 1.1.8 - lodash: 4.17.21 - moment: 2.29.4 - uuid: 9.0.1 - yargs: 15.4.1 - function-bind@1.1.2: {} - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - gauge@3.0.2: - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - - gauge@4.0.4: - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - optional: true - get-caller-file@2.0.5: {} get-east-asian-width@1.2.0: {} @@ -9267,18 +4488,6 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.0 - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-package-type@0.1.0: {} - - get-port@3.2.0: {} - get-port@6.1.2: {} get-stream@2.3.1: @@ -9288,25 +4497,17 @@ snapshots: get-stream@3.0.0: {} - get-stream@5.2.0: - dependencies: - pump: 3.0.0 - get-stream@6.0.1: {} get-stream@8.0.1: {} - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - get-tsconfig@4.7.2: dependencies: resolve-pkg-maps: 1.0.0 - getopts@2.3.0: {} + get-tsconfig@4.7.5: + dependencies: + resolve-pkg-maps: 1.0.0 git-raw-commits@4.0.0: dependencies: @@ -9314,16 +4515,10 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - github-from-package@0.0.0: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob@10.3.10: dependencies: foreground-child: 3.1.1 @@ -9332,24 +4527,6 @@ snapshots: minipass: 7.0.4 path-scurry: 1.10.1 - glob@6.0.4: - dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - optional: true - - glob@7.1.6: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -9381,22 +4558,6 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - globalyzer@0.1.0: {} - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - globby@13.2.2: dependencies: dir-glob: 3.0.1 @@ -9405,14 +4566,6 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 - globrex@0.1.2: {} - - glossy@0.1.7: {} - - gobot-pocketbase@0.22.8-alpha.22: - dependencies: - gobot: 1.0.0-alpha.40 - gobot@1.0.0-alpha.40: dependencies: '@s-libs/micro-dash': 17.1.0 @@ -9446,20 +4599,6 @@ snapshots: dependencies: get-intrinsic: 1.2.2 - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.2 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - got@12.6.1: dependencies: '@sindresorhus/is': 5.6.0 @@ -9478,17 +4617,6 @@ snapshots: graceful-fs@4.2.11: {} - grapheme-splitter@1.0.4: {} - - gray-matter@4.0.3: - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - - hamljs@0.6.2: {} - handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -9498,10 +4626,6 @@ snapshots: optionalDependencies: uglify-js: 3.17.4 - hard-rejection@2.1.0: {} - - has-bigints@1.0.2: {} - has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -9510,60 +4634,27 @@ snapshots: dependencies: get-intrinsic: 1.2.2 - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - has-proto@1.0.1: {} - has-proto@1.0.3: {} - has-symbols@1.0.3: {} - has-tostringtag@1.0.0: - dependencies: - has-symbols: 1.0.3 - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - has-unicode@2.0.1: {} - has-yarn@3.0.0: {} hasown@2.0.0: dependencies: function-bind: 1.1.2 - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - header-case@2.0.4: dependencies: capital-case: 1.0.4 tslib: 2.6.2 - highlight.js@11.9.0: {} - homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 - hosted-git-info@2.8.9: {} - - htmlparser2@7.2.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 3.0.1 - http-cache-semantics@4.1.1: {} - http-equiv-refresh@1.0.0: {} - http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -9572,27 +4663,6 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@4.0.1: - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - optional: true - - http-proxy-middleware@2.0.6(@types/express@4.17.21): - dependencies: - '@types/http-proxy': 1.17.13 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - optionalDependencies: - '@types/express': 4.17.21 - transitivePeerDependencies: - - debug - http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 @@ -9601,27 +4671,11 @@ snapshots: transitivePeerDependencies: - debug - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - http2-wrapper@2.2.0: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - - human-id@1.0.2: {} - - human-signals@2.1.0: {} - human-signals@5.0.0: {} humanize-ms@1.2.1: @@ -9641,18 +4695,8 @@ snapshots: ieee754@1.2.1: {} - ignore-by-default@1.0.1: {} - ignore@5.2.4: {} - ignore@5.3.1: {} - - image-size@1.0.2: - dependencies: - queue: 6.0.2 - - immutable@4.3.4: {} - import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -9664,13 +4708,8 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - indent-string@5.0.0: {} - infer-owner@1.0.4: - optional: true - inflight@1.0.6: dependencies: once: 1.4.0 @@ -9702,33 +4741,8 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.4 - - internmap@2.0.3: {} - - interpret@2.2.0: {} - interpret@3.1.1: {} - ip-address@7.1.0: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.2 - - ip-cidr@3.1.0: - dependencies: - ip-address: 7.1.0 - jsbn: 1.1.0 - - ip@1.1.8: {} - - ip@2.0.0: - optional: true - ipaddr.js@1.9.1: {} is-absolute@1.0.0: @@ -9736,39 +4750,10 @@ snapshots: is-relative: 1.0.0 is-windows: 1.0.2 - is-alphabetical@1.0.4: {} - - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.0 - is-buffer@1.1.6: {} - is-callable@1.2.7: {} - is-ci@3.0.1: dependencies: ci-info: 3.9.0 @@ -9777,35 +4762,22 @@ snapshots: dependencies: hasown: 2.0.0 - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.0 - - is-decimal@1.0.4: {} - - is-docker@2.2.1: {} - - is-expression@4.0.0: - dependencies: - acorn: 7.4.1 - object-assign: 4.1.1 - - is-extendable@0.1.1: {} - is-extglob@2.1.1: {} - is-fullwidth-code-point@2.0.0: {} - is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.2.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-in-ci@0.1.0: {} + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 @@ -9815,21 +4787,10 @@ snapshots: is-interactive@2.0.0: {} - is-json@2.0.1: {} - - is-lambda@1.0.1: - optional: true - is-natural-number@4.0.1: {} - is-negative-zero@2.0.3: {} - is-npm@6.0.0: {} - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.0 - is-number@7.0.0: {} is-obj@2.0.0: {} @@ -9840,59 +4801,26 @@ snapshots: is-path-inside@4.0.0: {} - is-plain-obj@1.1.0: {} - - is-plain-obj@3.0.0: {} - is-plain-object@5.0.0: {} - is-promise@2.2.2: {} - is-reference@3.0.2: dependencies: '@types/estree': 1.0.4 - is-regex@1.1.4: - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - is-relative@1.0.0: dependencies: is-unc-path: 1.0.0 - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - is-stream@1.1.0: {} - is-stream@2.0.1: {} - is-stream@3.0.0: {} is-stream@4.0.1: {} - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.0 - - is-subdir@1.2.0: - dependencies: - better-path-resolve: 1.0.0 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - is-typedarray@1.0.0: {} is-unc-path@1.0.0: @@ -9905,36 +4833,16 @@ snapshots: is-unicode-supported@2.0.0: {} - is-valid-domain@0.1.6: - dependencies: - punycode: 2.3.1 - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - is-windows@1.0.2: {} - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - is-yarn-global@0.4.1: {} - isarray@0.0.1: {} - isarray@1.0.0: {} - isarray@2.0.5: {} - isbinaryfile@5.0.0: {} isexe@2.0.0: {} - isexe@3.1.1: {} - - iso-639-1@2.1.15: {} - isobject@3.0.1: {} jackspeak@2.3.6: @@ -9943,16 +4851,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.8.7: - dependencies: - async: 3.2.4 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jiti@1.21.0: {} - - js-stringify@1.0.2: {} + jiti@1.21.6: {} js-tokens@4.0.0: {} @@ -9965,62 +4864,22 @@ snapshots: dependencies: argparse: 2.0.1 - jsbn@1.1.0: {} - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} json-schema-traverse@1.0.0: {} - json-schema-typed@7.0.3: {} - json-stringify-safe@5.0.1: {} - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - jsonparse@1.3.1: {} - jstransformer@1.0.0: - dependencies: - is-promise: 2.2.2 - promise: 7.3.1 - - junk@1.0.3: {} - keyv@4.5.4: dependencies: json-buffer: 3.0.1 kind-of@6.0.3: {} - kleur@4.1.5: {} - - knex@2.5.1(sqlite3@5.1.6(encoding@0.1.13)): - dependencies: - colorette: 2.0.19 - commander: 10.0.1 - debug: 4.3.4(supports-color@5.5.0) - escalade: 3.1.1 - esm: 3.2.25 - get-package-type: 0.1.0 - getopts: 2.3.0 - interpret: 2.2.0 - lodash: 4.17.21 - pg-connection-string: 2.6.1 - rechoir: 0.8.0 - resolve-from: 5.0.0 - tarn: 3.0.2 - tildify: 2.0.0 - optionalDependencies: - sqlite3: 5.1.6(encoding@0.1.13) - transitivePeerDependencies: - - supports-color - - kuler@2.0.0: {} - latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -10036,54 +4895,25 @@ snapshots: rechoir: 0.8.0 resolve: 1.22.8 - lilconfig@2.1.0: {} - lines-and-columns@1.2.4: {} - linkify-it@4.0.1: + listr2@8.2.3: dependencies: - uc.micro: 1.0.6 - - liquidjs@10.9.3: - dependencies: - commander: 10.0.1 - - list-to-array@1.1.0: {} - - load-yaml-file@0.2.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.0.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 locate-character@3.0.0: {} - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - locate-path@7.2.0: dependencies: p-locate: 6.0.0 lodash.camelcase@4.3.0: {} - lodash.castarray@4.4.0: {} - - lodash.debounce@4.0.8: {} - - lodash.deburr@4.1.0: {} - lodash.get@4.4.2: {} lodash.isplainobject@4.0.6: {} @@ -10098,8 +4928,6 @@ snapshots: lodash.startcase@4.4.0: {} - lodash.throttle@4.1.1: {} - lodash.truncate@4.4.2: {} lodash.uniq@4.5.0: {} @@ -10123,46 +4951,28 @@ snapshots: chalk: 5.3.0 is-unicode-supported: 1.3.0 - logform@2.6.0: + log-update@6.0.0: dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.4 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.4.3 - triple-beam: 1.4.1 + ansi-escapes: 6.2.1 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 lower-case@2.0.2: dependencies: tslib: 2.6.2 - lowercase-keys@2.0.0: {} - lowercase-keys@3.0.0: {} lru-cache@10.0.1: {} - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - luxon@3.4.3: {} - lzma-native@8.0.6: dependencies: node-addon-api: 3.2.1 node-gyp-build: 4.8.1 readable-stream: 3.6.2 - magic-string@0.27.0: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - magic-string@0.30.5: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -10171,69 +4981,18 @@ snapshots: dependencies: pify: 3.0.0 - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - - make-fetch-happen@9.1.0: - dependencies: - agentkeepalive: 4.5.0 - cacache: 15.3.0 - http-cache-semantics: 4.1.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 1.4.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 6.2.1 - ssri: 8.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - make-iterator@1.0.1: dependencies: kind-of: 6.0.3 map-cache@0.2.2: {} - map-obj@1.0.1: {} - - map-obj@4.3.0: {} - map-values@1.0.1: {} - markdown-it-anchor@8.6.7(@types/markdown-it@13.0.5)(markdown-it@13.0.2): - dependencies: - '@types/markdown-it': 13.0.5 - markdown-it: 13.0.2 - - markdown-it@13.0.2: - dependencies: - argparse: 2.0.1 - entities: 3.0.1 - linkify-it: 4.0.1 - mdurl: 1.0.1 - uc.micro: 1.0.6 - markdown-table@3.0.3: {} marked@9.1.5: {} - maximatch@0.1.0: - dependencies: - array-differ: 1.0.0 - array-union: 1.0.2 - arrify: 1.0.1 - minimatch: 3.1.2 - md5@2.3.0: dependencies: charenc: 0.0.2 @@ -10263,28 +5022,10 @@ snapshots: mdn-data@2.0.30: {} - mdurl@1.0.1: {} - media-typer@0.3.0: {} - memorystream@0.3.1: {} - meow@12.1.1: {} - meow@6.1.1: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - merge-descriptors@1.0.1: {} merge-stream@2.0.0: {} @@ -10407,7 +5148,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -10439,148 +5180,38 @@ snapshots: mime@1.6.0: {} - mime@3.0.0: {} - mimic-fn@2.1.0: {} - mimic-fn@3.1.0: {} - mimic-fn@4.0.0: {} - mimic-response@1.0.1: {} - mimic-response@3.1.0: {} mimic-response@4.0.0: {} - min-indent@1.0.1: {} - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - minimist@1.2.8: {} - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-fetch@1.4.1: - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - optional: true - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - optional: true - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - minipass@7.0.4: {} - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mixme@0.5.10: {} - - mkdirp-classic@0.5.3: {} - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mkdirp@1.0.4: {} - mkdirp@3.0.1: {} - moment@2.29.4: {} - - moo@0.5.2: {} - - morphdom@2.7.1: {} - - mri@1.2.0: {} - - mrmime@1.0.1: {} - ms@2.0.0: {} ms@2.1.2: {} ms@2.1.3: {} - multimatch@5.0.0: - dependencies: - '@types/minimatch': 3.0.5 - array-differ: 3.0.0 - array-union: 2.1.0 - arrify: 2.0.1 - minimatch: 3.1.2 - - mustache@4.2.0: {} - mute-stream@1.0.0: {} - mv@2.1.1: - dependencies: - mkdirp: 0.5.6 - ncp: 2.0.0 - rimraf: 2.4.5 - optional: true - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nan@2.18.0: - optional: true - - nanoid@3.3.6: {} - nanoid@5.0.7: {} - napi-build-utils@1.0.2: {} - - ncp@2.0.0: {} - negotiator@0.6.3: {} neo-async@2.6.2: {} @@ -10590,16 +5221,8 @@ snapshots: lower-case: 2.0.2 tslib: 2.6.2 - node-abi@3.51.0: - dependencies: - semver: 7.6.2 - node-addon-api@3.2.1: {} - node-addon-api@4.3.0: {} - - node-addon-api@6.1.0: {} - node-domexception@1.0.0: {} node-fetch@2.7.0(encoding@0.1.13): @@ -10616,25 +5239,6 @@ snapshots: node-gyp-build@4.8.1: {} - node-gyp@8.4.1: - dependencies: - env-paths: 2.2.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - make-fetch-happen: 9.1.0 - nopt: 5.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.6.2 - tar: 6.2.0 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - - node-os-utils@1.3.7: {} - node-plop@0.32.0: dependencies: '@types/inquirer': 9.0.7 @@ -10651,103 +5255,18 @@ snapshots: title-case: 3.0.3 upper-case: 2.0.2 - node-releases@2.0.13: {} - - nodemon@3.0.3: - dependencies: - chokidar: 3.5.3 - debug: 4.3.4(supports-color@5.5.0) - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 7.5.4 - simple-update-notifier: 2.0.0 - supports-color: 5.5.0 - touch: 3.1.0 - undefsafe: 2.0.5 - - noms@0.0.0: - dependencies: - inherits: 2.0.4 - readable-stream: 1.0.34 - - nopt@1.0.10: - dependencies: - abbrev: 1.1.1 - - nopt@5.0.0: - dependencies: - abbrev: 1.1.1 - - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - normalize-url@6.1.0: {} - normalize-url@8.0.0: {} - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 - npmlog@5.0.1: - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - - npmlog@6.0.2: - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - optional: true - - nunjucks@3.2.4(chokidar@3.5.3): - dependencies: - a-sync-waterfall: 1.0.1 - asap: 2.0.6 - commander: 5.1.0 - optionalDependencies: - chokidar: 3.5.3 - object-assign@4.1.1: {} object-filter@1.0.2: {} - object-hash@3.0.0: {} - object-inspect@1.13.1: {} - object-keys@1.1.1: {} - - object-treeify@1.1.33: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - object.defaults@1.1.0: dependencies: array-each: 1.0.1 @@ -10772,10 +5291,6 @@ snapshots: dependencies: wrappy: 1.0.2 - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -10784,12 +5299,6 @@ snapshots: dependencies: mimic-fn: 4.0.0 - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - openai@4.14.2(encoding@0.1.13): dependencies: '@types/node': 18.18.8 @@ -10840,74 +5349,22 @@ snapshots: string-width: 7.1.0 strip-ansi: 7.1.0 - os-filter-obj@2.0.0: - dependencies: - arch: 2.2.0 - os-tmpdir@1.0.2: {} - outdent@0.5.0: {} - - p-cancelable@2.1.1: {} - p-cancelable@3.0.0: {} - p-filter@2.1.0: - dependencies: - p-map: 2.1.0 - - p-finally@1.0.0: {} - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - p-limit@4.0.0: dependencies: yocto-queue: 1.0.0 - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-locate@6.0.0: dependencies: p-limit: 4.0.0 - p-map@2.1.0: {} - - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - optional: true - p-map@5.5.0: dependencies: aggregate-error: 4.0.1 - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - - p-try@2.2.0: {} - package-json@8.1.1: dependencies: got: 12.6.1 @@ -10932,15 +5389,13 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.6 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-passwd@1.0.0: {} - parse-srcset@1.0.2: {} - parseurl@1.3.3: {} pascal-case@3.1.2: @@ -10948,26 +5403,15 @@ snapshots: no-case: 3.0.4 tslib: 2.6.2 - password-prompt@1.1.3: - dependencies: - ansi-escapes: 4.3.2 - cross-spawn: 7.0.3 - path-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - path-exists@3.0.0: {} - - path-exists@4.0.0: {} - path-exists@5.0.0: {} path-is-absolute@1.0.1: {} - path-key@2.0.1: {} - path-key@3.1.1: {} path-key@4.0.0: {} @@ -10987,8 +5431,6 @@ snapshots: path-to-regexp@0.1.7: {} - path-to-regexp@6.2.1: {} - path-type@4.0.0: {} peek-readable@5.0.0: {} @@ -11001,9 +5443,7 @@ snapshots: estree-walker: 3.0.3 is-reference: 3.0.2 - pg-connection-string@2.6.1: {} - - picocolors@1.0.0: {} + picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -11011,28 +5451,12 @@ snapshots: pify@3.0.0: {} - pify@4.0.1: {} - pinkie-promise@2.0.1: dependencies: pinkie: 2.0.4 pinkie@2.0.4: {} - pirates@4.0.6: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - pkg-up@3.1.0: - dependencies: - find-up: 3.0.0 - - please-upgrade-node@3.2.0: - dependencies: - semver-compare: 1.0.0 - plop@4.0.1: dependencies: '@types/liftoff': 4.0.3 @@ -11046,94 +5470,8 @@ snapshots: pocketbase@0.21.3: {} - possible-typed-array-names@1.0.0: {} - - postcss-import@15.1.0(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - postcss-js@4.0.1(postcss@8.4.31): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.31 - - postcss-load-config@4.0.1(postcss@8.4.31): - dependencies: - lilconfig: 2.1.0 - yaml: 2.3.4 - optionalDependencies: - postcss: 8.4.31 - - postcss-nested@6.0.1(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 - - postcss-selector-parser@6.0.10: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-selector-parser@6.0.13: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.4.31: - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - posthtml-parser@0.11.0: - dependencies: - htmlparser2: 7.2.0 - - posthtml-render@3.0.0: - dependencies: - is-json: 2.0.1 - - posthtml-urls@1.0.0: - dependencies: - http-equiv-refresh: 1.0.0 - list-to-array: 1.1.0 - parse-srcset: 1.0.2 - promise-each: 2.2.0 - - posthtml@0.16.6: - dependencies: - posthtml-parser: 0.11.0 - posthtml-render: 3.0.0 - postinstall-postinstall@2.1.0: {} - prebuild-install@7.1.1: - dependencies: - detect-libc: 2.0.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 - node-abi: 3.51.0 - pump: 3.0.0 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.0.1 - tunnel-agent: 0.6.0 - - preferred-pm@3.1.3: - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - prettier-plugin-jsdoc@1.3.0(prettier@3.0.3): dependencies: binary-searching: 2.0.5 @@ -11153,31 +5491,10 @@ snapshots: prettier: 3.0.3 svelte: 4.2.2 - prettier@2.8.8: {} - prettier@3.0.3: {} - prismjs@1.29.0: {} - process-nextick-args@2.0.1: {} - promise-each@2.2.0: - dependencies: - any-promise: 0.1.0 - - promise-inflight@1.0.1: - optional: true - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - optional: true - - promise@7.3.1: - dependencies: - asap: 2.0.6 - proto-list@1.2.4: {} proxy-addr@2.0.7: @@ -11185,84 +5502,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - prr@1.0.1: {} - - pseudomap@1.0.2: {} - - pstree.remy@1.1.8: {} - - pug-attrs@3.0.0: - dependencies: - constantinople: 4.0.1 - js-stringify: 1.0.2 - pug-runtime: 3.0.1 - - pug-code-gen@3.0.2: - dependencies: - constantinople: 4.0.1 - doctypes: 1.1.0 - js-stringify: 1.0.2 - pug-attrs: 3.0.0 - pug-error: 2.0.0 - pug-runtime: 3.0.1 - void-elements: 3.1.0 - with: 7.0.2 - - pug-error@2.0.0: {} - - pug-filters@4.0.0: - dependencies: - constantinople: 4.0.1 - jstransformer: 1.0.0 - pug-error: 2.0.0 - pug-walk: 2.0.0 - resolve: 1.22.8 - - pug-lexer@5.0.1: - dependencies: - character-parser: 2.2.0 - is-expression: 4.0.0 - pug-error: 2.0.0 - - pug-linker@4.0.0: - dependencies: - pug-error: 2.0.0 - pug-walk: 2.0.0 - - pug-load@3.0.0: - dependencies: - object-assign: 4.1.1 - pug-walk: 2.0.0 - - pug-parser@6.0.0: - dependencies: - pug-error: 2.0.0 - token-stream: 1.0.0 - - pug-runtime@3.0.1: {} - - pug-strip-comments@2.0.0: - dependencies: - pug-error: 2.0.0 - - pug-walk@2.0.0: {} - - pug@3.0.2: - dependencies: - pug-code-gen: 3.0.2 - pug-filters: 4.0.0 - pug-lexer: 5.0.1 - pug-linker: 4.0.0 - pug-load: 3.0.0 - pug-parser: 6.0.0 - pug-runtime: 3.0.1 - pug-strip-comments: 2.0.0 - - pump@3.0.0: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - punycode@2.3.1: {} pupa@3.1.0: @@ -11275,14 +5514,6 @@ snapshots: queue-microtask@1.2.3: {} - queue-tick@1.0.1: {} - - queue@6.0.2: - dependencies: - inherits: 2.0.4 - - quick-lru@4.0.1: {} - quick-lru@5.1.1: {} range-parser@1.2.1: {} @@ -11301,37 +5532,6 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - - read-yaml-file@1.1.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - - readable-stream@1.0.34: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -11352,40 +5552,10 @@ snapshots: dependencies: readable-stream: 3.6.2 - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - rechoir@0.8.0: dependencies: resolve: 1.22.8 - recursive-copy@2.0.14: - dependencies: - errno: 0.1.8 - graceful-fs: 4.2.11 - junk: 1.0.3 - maximatch: 0.1.0 - mkdirp: 0.5.6 - pify: 2.3.0 - promise: 7.3.1 - rimraf: 2.7.1 - slash: 1.0.0 - - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - - regenerator-runtime@0.14.0: {} - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.2.2 @@ -11398,8 +5568,6 @@ snapshots: require-from-string@2.0.2: {} - require-main-filename@2.0.0: {} - requires-port@1.0.0: {} resolve-alpn@1.2.1: {} @@ -11421,10 +5589,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 @@ -11439,19 +5603,9 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - retry@0.12.0: - optional: true - reusify@1.0.4: {} - rimraf@2.4.5: - dependencies: - glob: 6.0.4 - optional: true - - rimraf@2.7.1: - dependencies: - glob: 7.2.3 + rfdc@1.4.1: {} rimraf@3.0.2: dependencies: @@ -11482,10 +5636,6 @@ snapshots: transitivePeerDependencies: - encoding - rollup@3.29.4: - optionalDependencies: - fsevents: 2.3.3 - run-async@3.0.0: {} run-parallel@1.2.0: @@ -11496,76 +5646,22 @@ snapshots: dependencies: tslib: 2.6.2 - sade@1.8.1: - dependencies: - mri: 1.2.0 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-json-stringify@1.2.0: - optional: true - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - safe-stable-stringify@2.4.3: {} - safer-buffer@2.1.2: {} - sander@0.5.1: - dependencies: - es6-promise: 3.3.1 - graceful-fs: 4.2.11 - mkdirp: 0.5.6 - rimraf: 2.7.1 - - sass@1.69.5: - dependencies: - chokidar: 3.5.3 - immutable: 4.3.4 - source-map-js: 1.0.2 - - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - seek-bzip@1.0.6: dependencies: commander: 2.20.3 - semver-compare@1.0.0: {} - semver-diff@4.0.0: dependencies: semver: 7.6.2 - semver-regex@4.0.5: {} - - semver-truncate@3.0.0: - dependencies: - semver: 7.6.2 - - semver@5.7.2: {} - semver@6.3.1: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - semver@7.6.2: {} send@0.18.0: @@ -11601,10 +5697,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-blocking@2.0.0: {} - - set-cookie-parser@2.6.0: {} - set-function-length@1.1.1: dependencies: define-data-property: 1.1.1 @@ -11612,48 +5704,40 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.1 - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - setprototypeof@1.2.0: {} - sharp@0.32.6: - dependencies: - color: 4.2.3 - detect-libc: 2.0.2 - node-addon-api: 6.1.0 - prebuild-install: 7.1.1 - semver: 7.6.2 - simple-get: 4.0.1 - tar-fs: 3.0.4 - tunnel-agent: 0.6.0 - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} - shell-quote@1.8.1: {} + sherif-darwin-arm64@0.8.4: + optional: true + + sherif-darwin-x64@0.8.4: + optional: true + + sherif-linux-arm64@0.8.4: + optional: true + + sherif-linux-x64@0.8.4: + optional: true + + sherif-windows-arm64@0.8.4: + optional: true + + sherif-windows-x64@0.8.4: + optional: true + + sherif@0.8.4: + optionalDependencies: + sherif-darwin-arm64: 0.8.4 + sherif-darwin-x64: 0.8.4 + sherif-linux-arm64: 0.8.4 + sherif-linux-x64: 0.8.4 + sherif-windows-arm64: 0.8.4 + sherif-windows-x64: 0.8.4 side-channel@1.0.4: dependencies: @@ -11665,32 +5749,6 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.6.2 - - sirv@2.0.3: - dependencies: - '@polka/url': 1.0.0-next.23 - mrmime: 1.0.1 - totalist: 3.0.1 - - slash@1.0.0: {} - - slash@3.0.0: {} - slash@4.0.0: {} slice-ansi@4.0.0: @@ -11699,55 +5757,21 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - slugify@1.6.6: {} - - smart-buffer@4.2.0: - optional: true - - smartwrap@2.0.2: + slice-ansi@5.0.0: dependencies: - array.prototype.flat: 1.3.2 - breakword: 1.0.6 - grapheme-splitter: 1.0.4 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 15.4.1 + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - socks-proxy-agent@6.2.1: - dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - optional: true - - socks@2.7.1: - dependencies: - ip: 2.0.0 - smart-buffer: 4.2.0 - optional: true - - sorcery@0.11.0: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - buffer-crc32: 0.2.13 - minimist: 1.2.8 - sander: 0.5.1 - - sort-keys-length@1.0.1: - dependencies: - sort-keys: 1.1.2 - - sort-keys@1.1.2: - dependencies: - is-plain-obj: 1.1.0 - source-map-js@1.0.2: {} source-map-support@0.5.21: @@ -11757,63 +5781,10 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} - - spawn-command@0.0.2: {} - - spawndamnit@2.0.0: - dependencies: - cross-spawn: 5.1.0 - signal-exit: 3.0.7 - - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - - spdx-license-ids@3.0.18: {} - - split-ca@1.0.1: {} - split2@4.2.0: {} sprintf-js@1.0.3: {} - sprintf-js@1.1.2: {} - - sqlite3@5.1.6(encoding@0.1.13): - dependencies: - '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) - node-addon-api: 4.3.0 - tar: 6.2.0 - optionalDependencies: - node-gyp: 8.4.1 - transitivePeerDependencies: - - bluebird - - encoding - - supports-color - - ssh2@1.14.0: - dependencies: - asn1: 0.2.6 - bcrypt-pbkdf: 1.0.2 - optionalDependencies: - cpu-features: 0.0.9 - nan: 2.18.0 - - ssri@8.0.1: - dependencies: - minipass: 3.3.6 - - stack-trace@0.0.10: {} - statuses@2.0.1: {} stdin-discarder@0.1.0: @@ -11822,21 +5793,6 @@ snapshots: stdin-discarder@0.2.2: {} - stream-transform@2.1.3: - dependencies: - mixme: 0.5.10 - - streamx@2.15.2: - dependencies: - fast-fifo: 1.3.2 - queue-tick: 1.0.1 - - string-width@3.1.0: - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -11861,27 +5817,6 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string_decoder@0.10.31: {} - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -11890,10 +5825,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -11902,45 +5833,19 @@ snapshots: dependencies: ansi-regex: 6.0.1 - strip-bom-string@1.0.0: {} - - strip-bom@3.0.0: {} - strip-dirs@2.1.0: dependencies: is-natural-number: 4.0.1 - strip-eof@1.0.0: {} - - strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@2.0.1: {} - strip-outer@2.0.0: {} - strtok3@7.0.0: dependencies: '@tokenizer/token': 0.3.0 peek-readable: 5.0.0 - sucrase@3.34.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - sudo-prompt@8.2.5: {} - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -11949,62 +5854,8 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - svelte-chartjs@3.1.2(chart.js@4.4.0)(svelte@4.2.2): - dependencies: - chart.js: 4.4.0 - svelte: 4.2.2 - - svelte-check@3.5.2(postcss-load-config@4.0.1(postcss@8.4.31))(postcss@8.4.31)(pug@3.0.2)(sass@1.69.5)(svelte@4.2.2): - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - chokidar: 3.5.3 - fast-glob: 3.3.1 - import-fresh: 3.3.0 - picocolors: 1.0.0 - sade: 1.8.1 - svelte: 4.2.2 - svelte-preprocess: 5.0.4(postcss-load-config@4.0.1(postcss@8.4.31))(postcss@8.4.31)(pug@3.0.2)(sass@1.69.5)(svelte@4.2.2)(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss - - svelte-highlight@7.4.1: - dependencies: - highlight.js: 11.9.0 - - svelte-hmr@0.15.3(svelte@4.2.2): - dependencies: - svelte: 4.2.2 - - svelte-preprocess@5.0.4(postcss-load-config@4.0.1(postcss@8.4.31))(postcss@8.4.31)(pug@3.0.2)(sass@1.69.5)(svelte@4.2.2)(typescript@5.2.2): - dependencies: - '@types/pug': 2.0.8 - detect-indent: 6.1.0 - magic-string: 0.27.0 - sorcery: 0.11.0 - strip-indent: 3.0.0 - svelte: 4.2.2 - optionalDependencies: - postcss: 8.4.31 - postcss-load-config: 4.0.1(postcss@8.4.31) - pug: 3.0.2 - sass: 1.69.5 - typescript: 5.2.2 - svelte@4.2.2: dependencies: '@ampproject/remapping': 2.2.1 @@ -12021,8 +5872,6 @@ snapshots: magic-string: 0.30.5 periscopic: 3.1.0 - syslog-parse@2.0.0: {} - table@6.8.2: dependencies: ajv: 8.12.0 @@ -12031,48 +5880,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tail@2.2.6: {} - - tailwindcss@3.3.5: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.1 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31) - postcss-nested: 6.0.1(postcss@8.4.31) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - - tar-fs@2.0.1: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.0 - tar-stream: 2.2.0 - - tar-fs@3.0.4: - dependencies: - mkdirp-classic: 0.5.3 - pump: 3.0.0 - tar-stream: 3.1.6 - tar-stream@1.6.2: dependencies: bl: 1.2.3 @@ -12083,59 +5890,10 @@ snapshots: to-buffer: 1.1.1 xtend: 4.0.2 - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar-stream@3.1.6: - dependencies: - b4a: 1.6.4 - fast-fifo: 1.3.2 - streamx: 2.15.2 - - tar@6.2.0: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - tarn@3.0.2: {} - - term-size@2.2.1: {} - text-extensions@2.4.0: {} - text-hex@1.0.0: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - through2@2.0.5: - dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 - through@2.3.8: {} - tildify@2.0.0: {} - - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - title-case@3.0.3: dependencies: tslib: 2.6.2 @@ -12148,43 +5906,19 @@ snapshots: to-buffer@1.1.1: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 toidentifier@1.0.1: {} - token-stream@1.0.0: {} - token-types@5.0.1: dependencies: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - totalist@3.0.1: {} - - touch@3.1.0: - dependencies: - nopt: 1.0.10 - tr46@0.0.3: {} - tree-kill@1.2.2: {} - - trim-newlines@3.0.1: {} - - trim-repeated@2.0.0: - dependencies: - escape-string-regexp: 5.0.0 - - triple-beam@1.4.1: {} - - ts-interface-checker@0.1.13: {} - - tslib@1.14.1: {} - tslib@2.6.2: {} tsx@3.14.0: @@ -12195,30 +5929,42 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - tty-table@4.2.3: + tsx@4.15.7: dependencies: - chalk: 4.1.2 - csv: 5.5.3 - kleur: 4.1.5 - smartwrap: 2.0.2 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 17.7.2 + esbuild: 0.21.5 + get-tsconfig: 4.7.5 + optionalDependencies: + fsevents: 2.3.3 - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 + turbo-darwin-64@2.0.4: + optional: true - tweetnacl@0.14.5: {} + turbo-darwin-arm64@2.0.4: + optional: true - type-fest@0.13.1: {} + turbo-linux-64@2.0.4: + optional: true + + turbo-linux-arm64@2.0.4: + optional: true + + turbo-windows-64@2.0.4: + optional: true + + turbo-windows-arm64@2.0.4: + optional: true + + turbo@2.0.4: + optionalDependencies: + turbo-darwin-64: 2.0.4 + turbo-darwin-arm64: 2.0.4 + turbo-linux-64: 2.0.4 + turbo-linux-arm64: 2.0.4 + turbo-windows-64: 2.0.4 + turbo-windows-arm64: 2.0.4 type-fest@0.21.3: {} - type-fest@0.6.0: {} - - type-fest@0.8.1: {} - type-fest@1.4.0: {} type-fest@2.19.0: {} @@ -12230,56 +5976,17 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 typescript@5.2.2: {} - uc.micro@1.0.6: {} + typescript@5.4.5: {} uglify-js@3.17.4: optional: true - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 @@ -12287,30 +5994,10 @@ snapshots: unc-path-regex@0.1.2: {} - undefsafe@2.0.5: {} - undici-types@5.26.5: {} - undici@5.26.5: - dependencies: - '@fastify/busboy': 2.0.0 - - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.0.0 - unicorn-magic@0.1.0: {} - unique-filename@1.1.1: - dependencies: - unique-slug: 2.0.2 - optional: true - - unique-slug@2.0.2: - dependencies: - imurmurhash: 0.1.4 - optional: true - unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -12319,24 +6006,8 @@ snapshots: dependencies: '@types/unist': 3.0.2 - universalify@0.1.2: {} - - unix-dgram@2.0.6: - dependencies: - bindings: 1.5.0 - nan: 2.18.0 - optional: true - unpipe@1.0.0: {} - untildify@4.0.0: {} - - update-browserslist-db@1.0.13(browserslist@4.22.1): - dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - update-notifier@6.0.2: dependencies: boxen: 7.1.1 @@ -12354,6 +6025,21 @@ snapshots: semver-diff: 4.0.0 xdg-basedir: 5.1.0 + update-notifier@7.0.0: + dependencies: + boxen: 7.1.1 + chalk: 5.3.0 + configstore: 6.0.0 + import-lazy: 4.0.0 + is-in-ci: 0.1.0 + is-installed-globally: 0.4.0 + is-npm: 6.0.0 + latest-version: 7.0.0 + pupa: 3.1.0 + semver: 7.6.2 + semver-diff: 4.0.0 + xdg-basedir: 5.1.0 + upper-case-first@2.0.2: dependencies: tslib: 2.6.2 @@ -12374,35 +6060,10 @@ snapshots: utils-merge@1.0.1: {} - uuid@9.0.1: {} - v8flags@4.0.1: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - vary@1.1.2: {} - vhost@3.0.2: {} - - vite@4.5.0(@types/node@20.14.2)(sass@1.69.5): - dependencies: - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - '@types/node': 20.14.2 - fsevents: 2.3.3 - sass: 1.69.5 - - vitefu@0.2.5(vite@4.5.0(@types/node@20.14.2)(sass@1.69.5)): - optionalDependencies: - vite: 4.5.0(@types/node@20.14.2)(sass@1.69.5) - - void-elements@3.1.0: {} - wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -12418,29 +6079,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-module@2.0.1: {} - - which-pm@2.0.0: - dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - which@1.3.1: dependencies: isexe: 2.0.0 @@ -12449,60 +6087,12 @@ snapshots: dependencies: isexe: 2.0.0 - which@4.0.0: - dependencies: - isexe: 3.1.1 - - wide-align@1.1.5: - dependencies: - string-width: 4.2.3 - widest-line@4.0.1: dependencies: string-width: 5.1.2 - winston-syslog@2.7.0(winston@3.11.0): - dependencies: - glossy: 0.1.7 - winston: 3.11.0 - optionalDependencies: - unix-dgram: 2.0.6 - - winston-transport@4.6.0: - dependencies: - logform: 2.6.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.11.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 - async: 3.2.4 - is-stream: 2.0.1 - logform: 2.6.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.4.3 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.6.0 - - with@7.0.2: - dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - assert-never: 1.2.1 - babel-walk: 3.0.0-canary-5 - wordwrap@1.0.0: {} - wrap-ansi@5.1.0: - dependencies: - ansi-styles: 3.2.1 - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -12521,6 +6111,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.1.0 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} write-file-atomic@3.0.3: @@ -12530,81 +6126,20 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - ws@8.14.2: {} - xdg-basedir@5.1.0: {} xtend@4.0.2: {} - xxhashjs@0.2.2: - dependencies: - cuint: 0.2.2 - - y18n@4.0.3: {} - y18n@5.0.8: {} - yallist@2.1.2: {} - - yallist@4.0.0: {} - yaml@2.3.4: {} - yargs-parser@13.1.2: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - - yargs-parser@20.2.9: {} - yargs-parser@21.1.1: {} - yargs@13.3.2: - dependencies: - cliui: 5.0.0 - find-up: 3.0.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 3.1.0 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 13.1.2 - - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -12616,6 +6151,4 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} diff --git a/turbo.json b/turbo.json new file mode 100644 index 00000000..f11ece7f --- /dev/null +++ b/turbo.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build", "^check-types"], + "outputs": [".next/**", "!.next/cache/**"] + }, + "check-types": { + "dependsOn": ["^sherif", "^lint", "^check-types"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "lint-fix": { + "dependsOn": ["^lint-fix"] + }, + "sherif": { + "dependsOn": ["^sherif"] + }, + "dev": { + "persistent": true, + "cache": false + } + } +}