diff --git a/.prettierignore b/.prettierignore index fda850b6..cc44befc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,4 +8,5 @@ build *.njk _site forks +src/mothership-app/migrations src/mothership-app/pb_hooks/src/versions.pb.js \ No newline at end of file diff --git a/frontends/dashboard/src/components/cards/CardHeader.svelte b/frontends/dashboard/src/components/cards/CardHeader.svelte index 7d88e9b6..f1257ca0 100644 --- a/frontends/dashboard/src/components/cards/CardHeader.svelte +++ b/frontends/dashboard/src/components/cards/CardHeader.svelte @@ -6,7 +6,10 @@

- Full documentation `${PUBLIC_BLOG_URL}/${path}` -export const BLOG_URL = (path = '') => LANDER_URL(`blog/${path}`) -export const DOCS_URL = (path = '') => LANDER_URL(`docs/${path}`) -export const APP_URL = (path = '') => `${PUBLIC_APP_URL}/${path}` -export const INSTANCE_URL = (name: string, path = '') => - `${PUBLIC_HTTP_PROTOCOL}//${name}.${PUBLIC_APEX_DOMAIN}/${path}` -export const INSTANCE_ADMIN_URL = (name: string, path = '') => - INSTANCE_URL(name, `_/${path}`) +const mkPath = (...paths: string[]) => + paths + .flatMap((path) => path.split('/')) + .filter((v) => !!v) + .join('/') +export const LANDER_URL = (...paths: string[]) => + `${PUBLIC_BLOG_URL}/${mkPath(...paths)}` +export const BLOG_URL = (...paths: string[]) => LANDER_URL(`blog`, ...paths) +export const DOCS_URL = (...paths: string[]) => LANDER_URL(`docs`, ...paths) +export const APP_URL = (...paths: string[]) => + `${PUBLIC_APP_URL}/${mkPath(...paths)}` +export const INSTANCE_URL = (name: string, ...paths: string[]) => + `${PUBLIC_HTTP_PROTOCOL}//${name}.${PUBLIC_APEX_DOMAIN}/${mkPath(...paths)}` +export const INSTANCE_ADMIN_URL = (name: string, ...paths: string[]) => + INSTANCE_URL(name, `_/${mkPath(...paths)}`) export const FTP_URL = (email: string) => `ftp://${encodeURIComponent(email)}@ftp.sfo-1.${PUBLIC_APEX_DOMAIN}` diff --git a/frontends/dashboard/src/pocketbase-client/PocketbaseClient.ts b/frontends/dashboard/src/pocketbase-client/PocketbaseClient.ts index 976d0222..e5ec19c2 100644 --- a/frontends/dashboard/src/pocketbase-client/PocketbaseClient.ts +++ b/frontends/dashboard/src/pocketbase-client/PocketbaseClient.ts @@ -8,7 +8,6 @@ import { UpdateInstanceResult, assertExists, createRestHelper, - createWatchHelper, type CreateInstancePayload, type CreateInstanceResult, type InstanceFields, @@ -23,8 +22,6 @@ import PocketBase, { BaseAuthStore, ClientResponseError, type AuthModel, - type RecordSubscription, - type UnsubscribeFunc, } from 'pocketbase' export type AuthChangeHandler = (user: BaseAuthStore) => void @@ -98,20 +95,18 @@ export const createPocketbaseClient = (config: PocketbaseClientConfig) => { const refreshAuthToken = () => client.collection('users').authRefresh() - const watchHelper = createWatchHelper({ client }) - const { watchById, watchAllById } = watchHelper - const restMixin = createRestHelper({ client, watchHelper }) + const restMixin = createRestHelper({ client }) const { mkRest } = restMixin const createInstance = mkRest( RestCommands.Instance, - RestMethods.Create, + RestMethods.Post, CreateInstancePayloadSchema, ) const updateInstance = mkRest( RestCommands.Instance, - RestMethods.Update, + RestMethods.Put, UpdateInstancePayloadSchema, ) @@ -120,11 +115,6 @@ export const createPocketbaseClient = (config: PocketbaseClientConfig) => { ): Promise => client.collection('instances').getOne(id) - const watchInstanceById = async ( - id: InstanceId, - cb: (data: RecordSubscription) => void, - ): Promise => watchById('instances', id, cb) - const getAllInstancesById = async () => (await client.collection('instances').getFullList()).reduce( (c, v) => { @@ -287,7 +277,6 @@ export const createPocketbaseClient = (config: PocketbaseClientConfig) => { onAuthChange, isLoggedIn, user, - watchInstanceById, getAllInstancesById, resendVerificationEmail, updateInstance, diff --git a/frontends/dashboard/src/routes/+layout.svelte b/frontends/dashboard/src/routes/+layout.svelte index 05533429..d9c62c3b 100644 --- a/frontends/dashboard/src/routes/+layout.svelte +++ b/frontends/dashboard/src/routes/+layout.svelte @@ -27,9 +27,7 @@
-
+
diff --git a/frontends/dashboard/src/routes/app/instances/[instanceId]/+page.svelte b/frontends/dashboard/src/routes/app/instances/[instanceId]/+page.svelte index 36c5bd20..2a63b262 100644 --- a/frontends/dashboard/src/routes/app/instances/[instanceId]/+page.svelte +++ b/frontends/dashboard/src/routes/app/instances/[instanceId]/+page.svelte @@ -4,6 +4,7 @@ import { INSTANCE_ADMIN_URL } from '$src/env' import { slide } from 'svelte/transition' import Code from './Code.svelte' + import AdminSync from './Danger/AdminSync.svelte' import DangerZoneTitle from './Danger/DangerZoneTitle.svelte' import Maintenance from './Danger/Maintenance.svelte' import RenameInstance from './Danger/RenameInstance.svelte' @@ -11,7 +12,6 @@ import Ftp from './Ftpx.svelte' import Logging from './Logging.svelte' import Secrets from './Secrets/Secrets.svelte' - import UsageChart from './UsageChart.svelte' import { instance } from './store' const { instanceId } = $page.params @@ -67,16 +67,13 @@ {/if}
- - +
-
+
- -
@@ -88,4 +85,6 @@ + +
diff --git a/frontends/dashboard/src/routes/app/instances/[instanceId]/Code.svelte b/frontends/dashboard/src/routes/app/instances/[instanceId]/Code.svelte index c8fd3a51..7fed448f 100644 --- a/frontends/dashboard/src/routes/app/instances/[instanceId]/Code.svelte +++ b/frontends/dashboard/src/routes/app/instances/[instanceId]/Code.svelte @@ -2,7 +2,7 @@ import CodeSample from '$components/CodeSample.svelte' import Card from '$components/cards/Card.svelte' import CardHeader from '$components/cards/CardHeader.svelte' - import { DOCS_URL, INSTANCE_URL } from '$src/env' + import { INSTANCE_URL } from '$src/env' import { instance } from './store' let installSnippet = `npm i pocketbase` @@ -39,8 +39,10 @@

Additional Resources:

  • - PocketBase Web APIsPocketBase Web APIs
  • diff --git a/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/AdminSync.svelte b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/AdminSync.svelte new file mode 100644 index 00000000..10a9391e --- /dev/null +++ b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/AdminSync.svelte @@ -0,0 +1,40 @@ + + + + + Admin Sync + + +

    + Your instance will have an admin login that matches your pockethost.io + login. +

    + + +
    diff --git a/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/Maintenance.svelte b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/Maintenance.svelte index 2a1104b3..a3be5441 100644 --- a/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/Maintenance.svelte +++ b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/Maintenance.svelte @@ -14,7 +14,7 @@ const isChecked = target.checked // Update the database with the new value - updateInstance({ instanceId: id, fields: { maintenance: isChecked } }).then( + updateInstance({ id, fields: { maintenance: isChecked } }).then( () => 'saved', ) } diff --git a/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/RenameInstance.svelte b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/RenameInstance.svelte index b096a57f..4aaa7c8b 100644 --- a/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/RenameInstance.svelte +++ b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/RenameInstance.svelte @@ -40,7 +40,7 @@ // If they select yes, then update the version in pocketbase if (confirmVersionChange) { updateInstance({ - instanceId: id, + id, fields: { subdomain: instanceNameValidation, }, diff --git a/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/VersionChange.svelte b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/VersionChange.svelte index e71ab08a..146c1604 100644 --- a/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/VersionChange.svelte +++ b/frontends/dashboard/src/routes/app/instances/[instanceId]/Danger/VersionChange.svelte @@ -39,7 +39,7 @@ errorMessage = '' client() .updateInstance({ - instanceId: id, + id, fields: { version: selectedVersion }, }) .then(() => { diff --git a/frontends/dashboard/src/routes/app/instances/[instanceId]/Secrets/Form.svelte b/frontends/dashboard/src/routes/app/instances/[instanceId]/Secrets/Form.svelte index 451f28c4..48ba734f 100644 --- a/frontends/dashboard/src/routes/app/instances/[instanceId]/Secrets/Form.svelte +++ b/frontends/dashboard/src/routes/app/instances/[instanceId]/Secrets/Form.svelte @@ -44,7 +44,7 @@ // Save to the database items.upsert({ name: secretKey, value: secretValue }) await client().updateInstance({ - instanceId: $instance.id, + id: $instance.id, fields: { secrets: reduce( $items, diff --git a/frontends/dashboard/src/routes/login/password-reset/+page.svelte b/frontends/dashboard/src/routes/login/password-reset/+page.svelte index 3a34a154..9e5df8f4 100644 --- a/frontends/dashboard/src/routes/login/password-reset/+page.svelte +++ b/frontends/dashboard/src/routes/login/password-reset/+page.svelte @@ -1,6 +1,6 @@