jazz-vue 0.14.18 → 0.14.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +10 -30
- package/CHANGELOG.md +18 -0
- package/biome.json +15 -0
- package/dist/index.js +7 -8
- package/dist/index.js.map +1 -1
- package/dist/{provider-CkA-a4Og.js → provider-DT2kaCMV.js} +2 -1
- package/dist/provider-DT2kaCMV.js.map +1 -0
- package/dist/provider.d.ts +5 -5
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/tests/testUtils.d.ts +1 -1
- package/package.json +7 -6
- package/src/ProgressiveImg.vue +1 -1
- package/src/auth/DemoAuthBasicUI.vue +1 -0
- package/src/composables.ts +20 -22
- package/src/provider.ts +21 -11
- package/src/testing.ts +2 -2
- package/src/tests/testUtils.ts +4 -2
- package/src/tests/useAcceptInvite.test.ts +1 -1
- package/src/tests/useCoState.test.ts +8 -2
- package/vite.config.ts +1 -1
- package/dist/provider-CkA-a4Og.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
@@ -1,41 +1,21 @@
|
|
1
1
|
|
2
|
-
> jazz-vue@0.14.
|
3
|
-
> rm -rf ./dist && vite build
|
2
|
+
> jazz-vue@0.14.20 build /home/runner/_work/jazz/jazz/packages/jazz-vue
|
3
|
+
> pnpm typecheck && rm -rf ./dist && vite build
|
4
4
|
|
5
|
-
[36mvite v6.0.11 [32mbuilding for production...[36m[39m
|
6
|
-
[96msrc/ProgressiveImg.vue[0m:[93m27[0m:[93m28[0m - [91merror[0m[90m TS1361: [0m'ImageDefinition' cannot be used as a value because it was imported using 'import type'.
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
[96msrc/ProgressiveImg.vue[0m:[93m2[0m:[93m15[0m
|
12
|
-
[7m2[0m import type { ImageDefinition, Loaded } from "jazz-tools";
|
13
|
-
[7m [0m [96m ~~~~~~~~~~~~~~~[0m
|
14
|
-
'ImageDefinition' was imported here.
|
15
|
-
[96msrc/provider.ts[0m:[93m67[0m:[93m58[0m - [91merror[0m[90m TS2344: [0mType 'AccountSchema' does not satisfy the constraint '(CoValueClass<Account> & { fromNode: <A extends Account>(this: CoValueClass<A>, node: LocalNode) => A; } & CoValueFromRaw<Account>) | AnyAccountSchema'.
|
16
|
-
|
17
|
-
[7m67[0m const contextManager = new JazzBrowserContextManager<RegisteredAccount>();
|
18
|
-
[7m [0m [91m ~~~~~~~~~~~~~~~~~[0m
|
19
|
-
[96msrc/provider.ts[0m:[93m86[0m:[93m13[0m - [91merror[0m[90m TS2322: [0mType 'AccountClass<AccountSchema> | undefined' is not assignable to type 'AccountSchema | undefined'.
|
20
|
-
Type 'AccountClass<AccountSchema>' is not assignable to type 'AccountSchema | undefined'.
|
21
|
-
|
22
|
-
[7m86[0m AccountSchema: props.AccountSchema,
|
23
|
-
[7m [0m [91m ~~~~~~~~~~~~~[0m
|
24
|
-
|
25
|
-
[96m../jazz-browser/dist/BrowserContextManager.d.ts[0m:[93m12[0m:[93m5[0m
|
26
|
-
[7m12[0m AccountSchema?: S;
|
27
|
-
[7m [0m [96m ~~~~~~~~~~~~~[0m
|
28
|
-
The expected type comes from property 'AccountSchema' which is declared here on type 'JazzContextManagerProps<AccountSchema>'
|
6
|
+
> jazz-vue@0.14.20 typecheck /home/runner/_work/jazz/jazz/packages/jazz-vue
|
7
|
+
> vue-tsc --noEmit
|
29
8
|
|
9
|
+
[36mvite v6.3.5 [32mbuilding for production...[36m[39m
|
30
10
|
transforming...
|
31
11
|
[32m✓[39m 12 modules transformed.
|
32
12
|
rendering chunks...
|
33
13
|
|
34
14
|
[vite:dts] Start generate declaration files...
|
35
15
|
computing gzip size...
|
36
|
-
[2mdist/[22m[36mtesting.js [39m[1m[2m 1.19 kB[22m[1m[22m[2m │ gzip: 0.52 kB[22m[2m │ map: 1.
|
37
|
-
[2mdist/[22m[36mprovider-
|
38
|
-
[2mdist/[22m[36mindex.js [39m[1m[2m13.97 kB[22m[1m[22m[2m │ gzip: 3.53 kB[22m[2m │ map: 23.
|
39
|
-
[vite:dts] Declaration files built in
|
16
|
+
[2mdist/[22m[36mtesting.js [39m[1m[2m 1.19 kB[22m[1m[22m[2m │ gzip: 0.52 kB[22m[2m │ map: 1.71 kB[22m
|
17
|
+
[2mdist/[22m[36mprovider-DT2kaCMV.js [39m[1m[2m 2.43 kB[22m[1m[22m[2m │ gzip: 0.88 kB[22m[2m │ map: 4.85 kB[22m
|
18
|
+
[2mdist/[22m[36mindex.js [39m[1m[2m13.97 kB[22m[1m[22m[2m │ gzip: 3.53 kB[22m[2m │ map: 23.09 kB[22m
|
19
|
+
[vite:dts] Declaration files built in 3735ms.
|
40
20
|
|
41
|
-
[32m✓ built in
|
21
|
+
[32m✓ built in 3.94s[39m
|
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
# jazz-react
|
2
2
|
|
3
|
+
## 0.14.20
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- Updated dependencies [6f72419]
|
8
|
+
- Updated dependencies [04b20c2]
|
9
|
+
- jazz-tools@0.14.20
|
10
|
+
- jazz-browser@0.14.20
|
11
|
+
- cojson@0.14.20
|
12
|
+
|
13
|
+
## 0.14.19
|
14
|
+
|
15
|
+
### Patch Changes
|
16
|
+
|
17
|
+
- cojson@0.14.19
|
18
|
+
- jazz-browser@0.14.19
|
19
|
+
- jazz-tools@0.14.19
|
20
|
+
|
3
21
|
## 0.14.18
|
4
22
|
|
5
23
|
### Patch Changes
|
package/biome.json
ADDED
package/dist/index.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
import { consumeInviteLinkFromWindowLocation, BrowserPasskeyAuth } from "jazz-browser";
|
2
2
|
import { createInviteLink, parseInviteLink } from "jazz-browser";
|
3
|
-
import { subscribeToCoValue, DemoAuth, PassphraseAuth } from "jazz-tools";
|
4
|
-
import { ref, inject, computed, toRaw, shallowRef, watch, unref, onUnmounted, onMounted, watchEffect, defineComponent, renderSlot,
|
5
|
-
import { J as JazzContextSymbol, a as JazzAuthContextSymbol } from "./provider-
|
6
|
-
import { b } from "./provider-
|
3
|
+
import { subscribeToCoValue, DemoAuth, PassphraseAuth, ImageDefinition } from "jazz-tools";
|
4
|
+
import { ref, inject, computed, toRaw, shallowRef, watch, unref, onUnmounted, onMounted, watchEffect, defineComponent, renderSlot, createElementBlock, openBlock, createElementVNode, createCommentVNode, normalizeStyle, toDisplayString, withDirectives, vModelText, Fragment, renderList, toRef } from "vue";
|
5
|
+
import { J as JazzContextSymbol, a as JazzAuthContextSymbol } from "./provider-DT2kaCMV.js";
|
6
|
+
import { b } from "./provider-DT2kaCMV.js";
|
7
7
|
const logoutHandler = ref();
|
8
8
|
function useJazzContext() {
|
9
9
|
const context = inject(JazzContextSymbol);
|
@@ -63,11 +63,10 @@ function useAccountOrGuest(options) {
|
|
63
63
|
() => (options == null ? void 0 : options.resolve) === void 0 ? me.value || toRaw(context.value.me) : me.value
|
64
64
|
)
|
65
65
|
};
|
66
|
-
} else {
|
67
|
-
return {
|
68
|
-
me: computed(() => toRaw(context.value.guest))
|
69
|
-
};
|
70
66
|
}
|
67
|
+
return {
|
68
|
+
me: computed(() => toRaw(context.value.guest))
|
69
|
+
};
|
71
70
|
}
|
72
71
|
function useCoState(Schema, id, options) {
|
73
72
|
const state = shallowRef(void 0);
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/composables.ts","../src/auth/useIsAuthenticated.ts","../src/auth/useDemoAuth.ts","../src/auth/usePassphraseAuth.ts","../src/auth/usePasskeyAuth.ts","../src/auth/DemoAuthBasicUI.vue","../src/ProgressiveImg.vue"],"sourcesContent":["import { consumeInviteLinkFromWindowLocation } from \"jazz-browser\";\nimport {\n Account,\n AnonymousJazzAgent,\n AuthSecretStorage,\n CoValue,\n CoValueClass,\n ID,\n JazzAuthContext,\n JazzContextType,\n JazzGuestContext,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n subscribeToCoValue,\n} from \"jazz-tools\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ComputedRef,\n MaybeRef,\n Ref,\n ShallowRef,\n computed,\n inject,\n onMounted,\n onUnmounted,\n ref,\n shallowRef,\n toRaw,\n unref,\n watch,\n} from \"vue\";\nimport {\n JazzAuthContextSymbol,\n JazzContextSymbol,\n RegisteredAccount,\n} from \"./provider.js\";\n\nexport const logoutHandler = ref<() => void>();\n\nexport function useJazzContext(): Ref<\n JazzContextType<RegisteredAccount>,\n JazzContextType<RegisteredAccount>\n> {\n const context =\n inject<Ref<JazzContextType<RegisteredAccount>>>(JazzContextSymbol);\n if (!context?.value) {\n throw new Error(\"useJazzContext must be used within a JazzProvider\");\n }\n return context;\n}\n\nexport function useAuthSecretStorage() {\n const context = inject<AuthSecretStorage>(JazzAuthContextSymbol);\n if (!context) {\n throw new Error(\"useAuthSecretStorage must be used within a JazzProvider\");\n }\n return context;\n}\n\nexport function useAccount(): {\n me: ComputedRef<RegisteredAccount>;\n logOut: () => void;\n};\nexport function useAccount<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<Resolved<RegisteredAccount, R> | undefined | null>;\n logOut: () => void;\n};\nexport function useAccount<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<\n RegisteredAccount | Resolved<RegisteredAccount, R> | undefined | null\n >;\n logOut: () => void;\n} {\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useAccount must be used within a JazzProvider\");\n }\n\n if (!(\"me\" in context.value)) {\n throw new Error(\n \"useAccount can't be used in a JazzProvider with auth === 'guest' - consider using useAccountOrGuest()\",\n );\n }\n\n const contextMe = context.value.me as RegisteredAccount;\n\n const me = useCoState<RegisteredAccount, R>(\n contextMe.constructor as CoValueClass<RegisteredAccount>,\n contextMe.id,\n options,\n );\n\n return {\n me: computed(() => {\n const value =\n options?.resolve === undefined\n ? me.value ||\n toRaw((context.value as JazzAuthContext<RegisteredAccount>).me)\n : me.value;\n\n return value ? toRaw(value) : value;\n }),\n logOut: context.value.logOut,\n };\n}\n\nexport function useAccountOrGuest(): {\n me: ComputedRef<RegisteredAccount | AnonymousJazzAgent>;\n};\nexport function useAccountOrGuest<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<\n Resolved<RegisteredAccount, R> | undefined | null | AnonymousJazzAgent\n >;\n};\nexport function useAccountOrGuest<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<\n | RegisteredAccount\n | Resolved<RegisteredAccount, R>\n | undefined\n | null\n | AnonymousJazzAgent\n >;\n} {\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useAccountOrGuest must be used within a JazzProvider\");\n }\n\n const contextMe = computed(() =>\n \"me\" in context.value ? (context.value.me as RegisteredAccount) : undefined,\n );\n\n const me = useCoState<RegisteredAccount, R>(\n contextMe.value?.constructor as CoValueClass<RegisteredAccount>,\n contextMe.value?.id,\n options,\n );\n\n if (\"me\" in context.value) {\n return {\n me: computed(() =>\n options?.resolve === undefined\n ? me.value ||\n toRaw((context.value as JazzAuthContext<RegisteredAccount>).me)\n : me.value,\n ),\n };\n } else {\n return {\n me: computed(() => toRaw((context.value as JazzGuestContext).guest)),\n };\n }\n}\n\nexport function useCoState<V extends CoValue, const R extends RefsToResolve<V>>(\n Schema: CoValueClass<V>,\n id: MaybeRef<ID<CoValue> | undefined>,\n options?: { resolve?: RefsToResolveStrict<V, R> },\n): Ref<Resolved<V, R> | undefined | null> {\n const state: ShallowRef<Resolved<V, R> | undefined | null> =\n shallowRef(undefined);\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useCoState must be used within a JazzProvider\");\n }\n\n let unsubscribe: (() => void) | undefined;\n\n watch(\n [() => unref(id), () => context, () => Schema, () => options],\n () => {\n if (unsubscribe) unsubscribe();\n\n const idValue = unref(id);\n if (!idValue) return;\n\n unsubscribe = subscribeToCoValue(\n Schema,\n idValue,\n {\n resolve: options?.resolve,\n loadAs:\n \"me\" in context.value\n ? toRaw(context.value.me)\n : toRaw(context.value.guest),\n onUnavailable: () => {\n state.value = null;\n },\n onUnauthorized: () => {\n state.value = null;\n },\n syncResolution: true,\n },\n (value) => {\n state.value = value;\n },\n );\n },\n { deep: true, immediate: true },\n );\n\n onUnmounted(() => {\n if (unsubscribe) unsubscribe();\n });\n\n const computedState = computed(() => state.value);\n\n return computedState;\n}\n\nexport function useAcceptInvite<V extends CoValue>({\n invitedObjectSchema,\n onAccept,\n forValueHint,\n}: {\n invitedObjectSchema: CoValueClass<V>;\n onAccept: (projectID: ID<V>) => void;\n forValueHint?: string;\n}): void {\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useAcceptInvite must be used within a JazzProvider\");\n }\n\n if (!(\"me\" in context.value)) {\n throw new Error(\n \"useAcceptInvite can't be used in a JazzProvider with auth === 'guest'.\",\n );\n }\n\n const runInviteAcceptance = () => {\n const result = consumeInviteLinkFromWindowLocation({\n as: toRaw((context.value as JazzAuthContext<RegisteredAccount>).me),\n invitedObjectSchema,\n forValueHint,\n });\n\n result\n .then((res) => res && onAccept(res.valueID))\n .catch((e) => {\n console.error(\"Failed to accept invite\", e);\n });\n };\n\n onMounted(() => {\n runInviteAcceptance();\n });\n\n watch(\n () => onAccept,\n (newOnAccept, oldOnAccept) => {\n if (newOnAccept !== oldOnAccept) {\n runInviteAcceptance();\n }\n },\n );\n}\n","import { onMounted, onUnmounted, ref } from \"vue\";\nimport { useAuthSecretStorage } from \"../composables.js\";\n\nexport function useIsAuthenticated() {\n const authSecretStorage = useAuthSecretStorage();\n const isAuthenticated = ref(authSecretStorage.isAuthenticated);\n\n const handleUpdate = () => {\n isAuthenticated.value = authSecretStorage.isAuthenticated;\n };\n\n onMounted(() => {\n const cleanup = authSecretStorage.onUpdate(handleUpdate);\n onUnmounted(cleanup);\n });\n\n return isAuthenticated;\n}\n","import { DemoAuth } from \"jazz-tools\";\nimport { computed, ref, watch } from \"vue\";\nimport { useAuthSecretStorage, useJazzContext } from \"../composables.js\";\nimport { useIsAuthenticated } from \"./useIsAuthenticated.js\";\n\nexport function useDemoAuth() {\n const context = useJazzContext();\n const authSecretStorage = useAuthSecretStorage();\n\n if (\"guest\" in context.value) {\n throw new Error(\"Demo auth is not supported in guest mode\");\n }\n\n const authMethod = computed(\n () => new DemoAuth(context.value.authenticate, authSecretStorage),\n );\n\n const existingUsers = ref<string[]>([]);\n const isAuthenticated = useIsAuthenticated();\n\n watch(authMethod, () => {\n authMethod.value.getExistingUsers().then((users) => {\n existingUsers.value = users;\n });\n });\n\n return computed(() => ({\n state: isAuthenticated.value ? \"signedIn\" : \"anonymous\",\n logIn(username: string) {\n authMethod.value.logIn(username);\n },\n signUp(username: string) {\n authMethod.value.signUp(username);\n },\n existingUsers: existingUsers.value,\n }));\n}\n","import { PassphraseAuth } from \"jazz-tools\";\nimport { computed, ref, watchEffect } from \"vue\";\nimport { useAuthSecretStorage, useJazzContext } from \"../composables.js\";\nimport { useIsAuthenticated } from \"./useIsAuthenticated.js\";\n\n/**\n * `usePassphraseAuth` composable provides a `JazzAuth` object for passphrase authentication.\n *\n * @example\n * ```ts\n * const auth = usePassphraseAuth({ wordlist });\n * ```\n *\n * @category Auth Providers\n */\nexport function usePassphraseAuth({\n wordlist,\n}: {\n wordlist: string[];\n}) {\n const context = useJazzContext();\n const authSecretStorage = useAuthSecretStorage();\n const isAuthenticated = useIsAuthenticated();\n\n if (\"guest\" in context.value) {\n throw new Error(\"Passphrase auth is not supported in guest mode\");\n }\n\n const authMethod = computed(() => {\n return new PassphraseAuth(\n context.value.node.crypto,\n context.value.authenticate,\n context.value.register,\n authSecretStorage,\n wordlist,\n );\n });\n\n const passphrase = ref(authMethod.value.passphrase);\n\n watchEffect((onCleanup) => {\n authMethod.value.loadCurrentAccountPassphrase();\n\n const unsubscribe = authMethod.value.subscribe(() => {\n passphrase.value = authMethod.value.passphrase;\n });\n\n onCleanup(unsubscribe);\n });\n\n return computed(() => ({\n state: isAuthenticated.value ? \"signedIn\" : \"anonymous\",\n logIn: authMethod.value.logIn,\n signUp: authMethod.value.signUp,\n registerNewAccount: authMethod.value.registerNewAccount,\n generateRandomPassphrase: authMethod.value.generateRandomPassphrase,\n passphrase: passphrase.value,\n }));\n}\n","import { BrowserPasskeyAuth } from \"jazz-browser\";\nimport { computed } from \"vue\";\nimport { useAuthSecretStorage, useJazzContext } from \"../composables.js\";\nimport { useIsAuthenticated } from \"./useIsAuthenticated.js\";\n\n/**\n * `usePasskeyAuth` composable provides a `JazzAuth` object for passkey authentication.\n *\n * @example\n * ```ts\n * const auth = usePasskeyAuth({ appName, appHostname });\n * ```\n *\n * @category Auth Providers\n */\nexport function usePasskeyAuth({\n appName,\n appHostname,\n}: {\n appName: string;\n appHostname?: string;\n}) {\n const context = useJazzContext();\n const authSecretStorage = useAuthSecretStorage();\n const isAuthenticated = useIsAuthenticated();\n\n if (\"guest\" in context.value) {\n throw new Error(\"Passkey auth is not supported in guest mode\");\n }\n\n const authMethod = computed(() => {\n return new BrowserPasskeyAuth(\n context.value.node.crypto,\n context.value.authenticate,\n authSecretStorage,\n appName,\n appHostname,\n );\n });\n\n return computed(() => ({\n state: isAuthenticated.value ? \"signedIn\" : \"anonymous\",\n logIn: authMethod.value.logIn,\n signUp: authMethod.value.signUp,\n }));\n}\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { useDemoAuth } from \"./useDemoAuth.js\";\n\ninterface Props {\n appName: string;\n}\n\ndefineProps<Props>();\ndefineSlots<{\n default?: () => any;\n}>();\n\nconst auth = useDemoAuth();\nconst username = ref(\"\");\n\nconst darkMode =\n typeof window !== \"undefined\"\n ? window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n : false;\n\nconst handleSubmit = (e: Event) => {\n e.preventDefault();\n auth.value.signUp(username.value);\n};\n</script>\n\n<template>\n <slot v-if=\"auth.state === 'signedIn'\" />\n <div\n v-else\n :style=\"{\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n width: '18rem',\n maxWidth: 'calc(100vw - 2rem)',\n gap: '2rem',\n margin: '0 auto'\n }\"\n >\n <h1\n :style=\"{\n color: darkMode ? '#fff' : '#000',\n textAlign: 'center',\n fontSize: '1.5rem',\n fontWeight: 'bold'\n }\"\n >\n {{ appName }}\n </h1>\n\n <form\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem'\n }\"\n @submit=\"handleSubmit\"\n >\n <input\n v-model=\"username\"\n placeholder=\"Display name\"\n autocomplete=\"webauthn\"\n :style=\"{\n border: darkMode ? '1px solid #444' : '1px solid #ddd',\n padding: '11px 8px',\n borderRadius: '6px',\n background: darkMode ? '#000' : '#fff',\n color: darkMode ? '#fff' : '#000'\n }\"\n >\n <input\n type=\"submit\"\n value=\"Sign up\"\n :style=\"{\n padding: '13px 5px',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n background: darkMode ? '#444' : '#ddd',\n color: darkMode ? '#fff' : '#000'\n }\"\n >\n </form>\n\n <div\n v-if=\"auth.existingUsers.length > 0\"\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem'\n }\"\n >\n <p\n :style=\"{\n color: darkMode ? '#e2e2e2' : '#000',\n textAlign: 'center',\n paddingTop: '0.5rem',\n borderTop: '1px solid',\n borderColor: darkMode ? '#111' : '#e2e2e2'\n }\"\n >\n Log in as\n </p>\n <button\n v-for=\"user in auth.existingUsers\"\n :key=\"user\"\n @click=\"auth.logIn(user)\"\n type=\"button\"\n :aria-label=\"`Log in as ${user}`\"\n :style=\"{\n background: darkMode ? '#0d0d0d' : '#eee',\n color: darkMode ? '#fff' : '#000',\n padding: '0.5rem',\n border: 'none',\n borderRadius: '6px'\n }\"\n >\n {{ user }}\n </button>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport type { ImageDefinition, Loaded } from \"jazz-tools\";\nimport { type Ref, onUnmounted, ref, toRef, watch } from \"vue\";\n\ninterface ImageState {\n src?: string;\n res?: `${number}x${number}` | \"placeholder\";\n originalSize?: readonly [number, number];\n}\n\nfunction useProgressiveImg(\n image: Ref<Loaded<typeof ImageDefinition> | null | undefined>,\n maxWidth?: number,\n targetWidth?: number,\n) {\n const current = ref<ImageState>({});\n\n let cleanup: (() => void) | undefined;\n const unsubscribe = watch(\n () => [image.value?.id, maxWidth],\n () => {\n let lastHighestRes: string | undefined;\n\n if (!image.value) return;\n\n const unsub = image.value.subscribe({}, (update) => {\n const highestRes = ImageDefinition.highestResAvailable(update, {\n maxWidth,\n targetWidth,\n });\n\n if (highestRes) {\n if (highestRes.res !== lastHighestRes) {\n lastHighestRes = highestRes.res;\n const blob = highestRes.stream.toBlob();\n\n if (blob) {\n const blobURI = URL.createObjectURL(blob);\n current.value = {\n src: blobURI,\n res: highestRes.res,\n originalSize: image.value?.originalSize,\n };\n\n if (cleanup) cleanup();\n cleanup = () => {\n setTimeout(() => URL.revokeObjectURL(blobURI), 200);\n };\n }\n }\n } else {\n current.value = {\n src: update?.placeholderDataURL,\n res: \"placeholder\",\n originalSize: image.value?.originalSize,\n };\n }\n });\n\n return unsub;\n },\n );\n\n onUnmounted(() => {\n unsubscribe();\n if (cleanup) cleanup();\n });\n\n return current;\n}\n\nconst props = defineProps<{\n image: Loaded<typeof ImageDefinition> | null | undefined;\n maxWidth?: number;\n}>();\n\nconst current = useProgressiveImg(toRef(props, \"image\"), props.maxWidth);\n</script>\n\n<template>\n <slot\n :src=\"current.src\"\n :res=\"current.res\"\n :original-size=\"current.originalSize\"\n />\n</template>"],"names":["current"],"mappings":";;;;;;AAsCO,MAAM,gBAAgB,IAAgB;AAEtC,SAAS,iBAGd;AACM,QAAA,UACJ,OAAgD,iBAAiB;AAC/D,MAAA,EAAC,mCAAS,QAAO;AACb,UAAA,IAAI,MAAM,mDAAmD;AAAA,EAAA;AAE9D,SAAA;AACT;AAEO,SAAS,uBAAuB;AAC/B,QAAA,UAAU,OAA0B,qBAAqB;AAC/D,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,yDAAyD;AAAA,EAAA;AAEpE,SAAA;AACT;AAcO,SAAS,WAEd,SAOA;AACA,QAAM,UAAU,eAAe;AAE3B,MAAA,CAAC,QAAQ,OAAO;AACZ,UAAA,IAAI,MAAM,+CAA+C;AAAA,EAAA;AAG7D,MAAA,EAAE,QAAQ,QAAQ,QAAQ;AAC5B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,YAAY,QAAQ,MAAM;AAEhC,QAAM,KAAK;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV;AAAA,EACF;AAEO,SAAA;AAAA,IACL,IAAI,SAAS,MAAM;AACX,YAAA,SACJ,mCAAS,aAAY,SACjB,GAAG,SACH,MAAO,QAAQ,MAA6C,EAAE,IAC9D,GAAG;AAEF,aAAA,QAAQ,MAAM,KAAK,IAAI;AAAA,IAAA,CAC/B;AAAA,IACD,QAAQ,QAAQ,MAAM;AAAA,EACxB;AACF;AAcO,SAAS,kBAEd,SAUA;;AACA,QAAM,UAAU,eAAe;AAE3B,MAAA,CAAC,QAAQ,OAAO;AACZ,UAAA,IAAI,MAAM,sDAAsD;AAAA,EAAA;AAGxE,QAAM,YAAY;AAAA,IAAS,MACzB,QAAQ,QAAQ,QAAS,QAAQ,MAAM,KAA2B;AAAA,EACpE;AAEA,QAAM,KAAK;AAAA,KACT,eAAU,UAAV,mBAAiB;AAAA,KACjB,eAAU,UAAV,mBAAiB;AAAA,IACjB;AAAA,EACF;AAEI,MAAA,QAAQ,QAAQ,OAAO;AAClB,WAAA;AAAA,MACL,IAAI;AAAA,QAAS,OACX,mCAAS,aAAY,SACjB,GAAG,SACH,MAAO,QAAQ,MAA6C,EAAE,IAC9D,GAAG;AAAA,MAAA;AAAA,IAEX;AAAA,EAAA,OACK;AACE,WAAA;AAAA,MACL,IAAI,SAAS,MAAM,MAAO,QAAQ,MAA2B,KAAK,CAAC;AAAA,IACrE;AAAA,EAAA;AAEJ;AAEgB,SAAA,WACd,QACA,IACA,SACwC;AAClC,QAAA,QACJ,WAAW,MAAS;AACtB,QAAM,UAAU,eAAe;AAE3B,MAAA,CAAC,QAAQ,OAAO;AACZ,UAAA,IAAI,MAAM,+CAA+C;AAAA,EAAA;AAG7D,MAAA;AAEJ;AAAA,IACE,CAAC,MAAM,MAAM,EAAE,GAAG,MAAM,SAAS,MAAM,QAAQ,MAAM,OAAO;AAAA,IAC5D,MAAM;AACJ,UAAI,YAAyB,aAAA;AAEvB,YAAA,UAAU,MAAM,EAAE;AACxB,UAAI,CAAC,QAAS;AAEA,oBAAA;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,UACE,SAAS,mCAAS;AAAA,UAClB,QACE,QAAQ,QAAQ,QACZ,MAAM,QAAQ,MAAM,EAAE,IACtB,MAAM,QAAQ,MAAM,KAAK;AAAA,UAC/B,eAAe,MAAM;AACnB,kBAAM,QAAQ;AAAA,UAChB;AAAA,UACA,gBAAgB,MAAM;AACpB,kBAAM,QAAQ;AAAA,UAChB;AAAA,UACA,gBAAgB;AAAA,QAClB;AAAA,QACA,CAAC,UAAU;AACT,gBAAM,QAAQ;AAAA,QAAA;AAAA,MAElB;AAAA,IACF;AAAA,IACA,EAAE,MAAM,MAAM,WAAW,KAAK;AAAA,EAChC;AAEA,cAAY,MAAM;AAChB,QAAI,YAAyB,aAAA;AAAA,EAAA,CAC9B;AAED,QAAM,gBAAgB,SAAS,MAAM,MAAM,KAAK;AAEzC,SAAA;AACT;AAEO,SAAS,gBAAmC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AACF,GAIS;AACP,QAAM,UAAU,eAAe;AAE3B,MAAA,CAAC,QAAQ,OAAO;AACZ,UAAA,IAAI,MAAM,oDAAoD;AAAA,EAAA;AAGlE,MAAA,EAAE,QAAQ,QAAQ,QAAQ;AAC5B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGF,QAAM,sBAAsB,MAAM;AAChC,UAAM,SAAS,oCAAoC;AAAA,MACjD,IAAI,MAAO,QAAQ,MAA6C,EAAE;AAAA,MAClE;AAAA,MACA;AAAA,IAAA,CACD;AAGE,WAAA,KAAK,CAAC,QAAQ,OAAO,SAAS,IAAI,OAAO,CAAC,EAC1C,MAAM,CAAC,MAAM;AACJ,cAAA,MAAM,2BAA2B,CAAC;AAAA,IAAA,CAC3C;AAAA,EACL;AAEA,YAAU,MAAM;AACM,wBAAA;AAAA,EAAA,CACrB;AAED;AAAA,IACE,MAAM;AAAA,IACN,CAAC,aAAa,gBAAgB;AAC5B,UAAI,gBAAgB,aAAa;AACX,4BAAA;AAAA,MAAA;AAAA,IACtB;AAAA,EAEJ;AACF;AClRO,SAAS,qBAAqB;AACnC,QAAM,oBAAoB,qBAAqB;AACzC,QAAA,kBAAkB,IAAI,kBAAkB,eAAe;AAE7D,QAAM,eAAe,MAAM;AACzB,oBAAgB,QAAQ,kBAAkB;AAAA,EAC5C;AAEA,YAAU,MAAM;AACR,UAAA,UAAU,kBAAkB,SAAS,YAAY;AACvD,gBAAY,OAAO;AAAA,EAAA,CACpB;AAEM,SAAA;AACT;ACZO,SAAS,cAAc;AAC5B,QAAM,UAAU,eAAe;AAC/B,QAAM,oBAAoB,qBAAqB;AAE3C,MAAA,WAAW,QAAQ,OAAO;AACtB,UAAA,IAAI,MAAM,0CAA0C;AAAA,EAAA;AAG5D,QAAM,aAAa;AAAA,IACjB,MAAM,IAAI,SAAS,QAAQ,MAAM,cAAc,iBAAiB;AAAA,EAClE;AAEM,QAAA,gBAAgB,IAAc,EAAE;AACtC,QAAM,kBAAkB,mBAAmB;AAE3C,QAAM,YAAY,MAAM;AACtB,eAAW,MAAM,iBAAmB,EAAA,KAAK,CAAC,UAAU;AAClD,oBAAc,QAAQ;AAAA,IAAA,CACvB;AAAA,EAAA,CACF;AAED,SAAO,SAAS,OAAO;AAAA,IACrB,OAAO,gBAAgB,QAAQ,aAAa;AAAA,IAC5C,MAAM,UAAkB;AACX,iBAAA,MAAM,MAAM,QAAQ;AAAA,IACjC;AAAA,IACA,OAAO,UAAkB;AACZ,iBAAA,MAAM,OAAO,QAAQ;AAAA,IAClC;AAAA,IACA,eAAe,cAAc;AAAA,EAAA,EAC7B;AACJ;ACrBO,SAAS,kBAAkB;AAAA,EAChC;AACF,GAEG;AACD,QAAM,UAAU,eAAe;AAC/B,QAAM,oBAAoB,qBAAqB;AAC/C,QAAM,kBAAkB,mBAAmB;AAEvC,MAAA,WAAW,QAAQ,OAAO;AACtB,UAAA,IAAI,MAAM,gDAAgD;AAAA,EAAA;AAG5D,QAAA,aAAa,SAAS,MAAM;AAChC,WAAO,IAAI;AAAA,MACT,QAAQ,MAAM,KAAK;AAAA,MACnB,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EAAA,CACD;AAED,QAAM,aAAa,IAAI,WAAW,MAAM,UAAU;AAElD,cAAY,CAAC,cAAc;AACzB,eAAW,MAAM,6BAA6B;AAE9C,UAAM,cAAc,WAAW,MAAM,UAAU,MAAM;AACxC,iBAAA,QAAQ,WAAW,MAAM;AAAA,IAAA,CACrC;AAED,cAAU,WAAW;AAAA,EAAA,CACtB;AAED,SAAO,SAAS,OAAO;AAAA,IACrB,OAAO,gBAAgB,QAAQ,aAAa;AAAA,IAC5C,OAAO,WAAW,MAAM;AAAA,IACxB,QAAQ,WAAW,MAAM;AAAA,IACzB,oBAAoB,WAAW,MAAM;AAAA,IACrC,0BAA0B,WAAW,MAAM;AAAA,IAC3C,YAAY,WAAW;AAAA,EAAA,EACvB;AACJ;AC3CO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AACF,GAGG;AACD,QAAM,UAAU,eAAe;AAC/B,QAAM,oBAAoB,qBAAqB;AAC/C,QAAM,kBAAkB,mBAAmB;AAEvC,MAAA,WAAW,QAAQ,OAAO;AACtB,UAAA,IAAI,MAAM,6CAA6C;AAAA,EAAA;AAGzD,QAAA,aAAa,SAAS,MAAM;AAChC,WAAO,IAAI;AAAA,MACT,QAAQ,MAAM,KAAK;AAAA,MACnB,QAAQ,MAAM;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA,CACD;AAED,SAAO,SAAS,OAAO;AAAA,IACrB,OAAO,gBAAgB,QAAQ,aAAa;AAAA,IAC5C,OAAO,WAAW,MAAM;AAAA,IACxB,QAAQ,WAAW,MAAM;AAAA,EAAA,EACzB;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCA,UAAM,OAAO,YAAY;AACnB,UAAA,WAAW,IAAI,EAAE;AAEjB,UAAA,WACJ,OAAO,WAAW,cACd,OAAO,WAAW,8BAA8B,EAAE,UAClD;AAEA,UAAA,eAAe,CAAC,MAAa;AACjC,QAAE,eAAe;AACZ,WAAA,MAAM,OAAO,SAAS,KAAK;AAAA,IAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdS,aAAA,kBACP,OACA,UACA,aACA;AACMA,YAAAA,WAAU,IAAgB,EAAE;AAE9B,UAAA;AACJ,YAAM,cAAc;AAAA,QAClB,MAAA;;AAAM,mBAAC,WAAM,UAAN,mBAAa,IAAI,QAAQ;AAAA;AAAA,QAChC,MAAM;AACA,cAAA;AAEA,cAAA,CAAC,MAAM,MAAO;AAElB,gBAAM,QAAQ,MAAM,MAAM,UAAU,CAAA,GAAI,CAAC,WAAW;;AAC5C,kBAAA,aAAa,gBAAgB,oBAAoB,QAAQ;AAAA,cAC7D;AAAA,cACA;AAAA,YAAA,CACD;AAED,gBAAI,YAAY;AACV,kBAAA,WAAW,QAAQ,gBAAgB;AACrC,iCAAiB,WAAW;AACtB,sBAAA,OAAO,WAAW,OAAO,OAAO;AAEtC,oBAAI,MAAM;AACF,wBAAA,UAAU,IAAI,gBAAgB,IAAI;AACxCA,2BAAQ,QAAQ;AAAA,oBACd,KAAK;AAAA,oBACL,KAAK,WAAW;AAAA,oBAChB,eAAc,WAAM,UAAN,mBAAa;AAAA,kBAC7B;AAEA,sBAAI,QAAiB,SAAA;AACrB,4BAAU,MAAM;AACd,+BAAW,MAAM,IAAI,gBAAgB,OAAO,GAAG,GAAG;AAAA,kBACpD;AAAA,gBAAA;AAAA,cACF;AAAA,YACF,OACK;AACLA,uBAAQ,QAAQ;AAAA,gBACd,KAAK,iCAAQ;AAAA,gBACb,KAAK;AAAA,gBACL,eAAc,WAAM,UAAN,mBAAa;AAAA,cAC7B;AAAA,YAAA;AAAA,UACF,CACD;AAEM,iBAAA;AAAA,QAAA;AAAA,MAEX;AAEA,kBAAY,MAAM;AACJ,oBAAA;AACZ,YAAI,QAAiB,SAAA;AAAA,MAAA,CACtB;AAEMA,aAAAA;AAAAA,IAAA;AAGT,UAAM,QAAQ;AAKd,UAAM,UAAU,kBAAkB,MAAM,OAAO,OAAO,GAAG,MAAM,QAAQ;;;;;;;;;;"}
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/composables.ts","../src/auth/useIsAuthenticated.ts","../src/auth/useDemoAuth.ts","../src/auth/usePassphraseAuth.ts","../src/auth/usePasskeyAuth.ts","../src/auth/DemoAuthBasicUI.vue","../src/ProgressiveImg.vue"],"sourcesContent":["import { consumeInviteLinkFromWindowLocation } from \"jazz-browser\";\nimport {\n type AnonymousJazzAgent,\n type AuthSecretStorage,\n type CoValue,\n type CoValueClass,\n type ID,\n type JazzAuthContext,\n type JazzContextType,\n type JazzGuestContext,\n type RefsToResolve,\n type RefsToResolveStrict,\n type Resolved,\n subscribeToCoValue,\n} from \"jazz-tools\";\nimport {\n type ComputedRef,\n type MaybeRef,\n type Ref,\n type ShallowRef,\n computed,\n inject,\n onMounted,\n onUnmounted,\n ref,\n shallowRef,\n toRaw,\n unref,\n watch,\n} from \"vue\";\nimport {\n JazzAuthContextSymbol,\n JazzContextSymbol,\n type RegisteredAccount,\n} from \"./provider.js\";\n\nexport const logoutHandler = ref<() => void>();\n\nexport function useJazzContext(): Ref<\n JazzContextType<RegisteredAccount>,\n JazzContextType<RegisteredAccount>\n> {\n const context =\n inject<Ref<JazzContextType<RegisteredAccount>>>(JazzContextSymbol);\n if (!context?.value) {\n throw new Error(\"useJazzContext must be used within a JazzProvider\");\n }\n return context;\n}\n\nexport function useAuthSecretStorage() {\n const context = inject<AuthSecretStorage>(JazzAuthContextSymbol);\n if (!context) {\n throw new Error(\"useAuthSecretStorage must be used within a JazzProvider\");\n }\n return context;\n}\n\nexport function useAccount(): {\n me: ComputedRef<RegisteredAccount>;\n logOut: () => void;\n};\nexport function useAccount<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<Resolved<RegisteredAccount, R> | undefined | null>;\n logOut: () => void;\n};\nexport function useAccount<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<\n RegisteredAccount | Resolved<RegisteredAccount, R> | undefined | null\n >;\n logOut: () => void;\n} {\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useAccount must be used within a JazzProvider\");\n }\n\n if (!(\"me\" in context.value)) {\n throw new Error(\n \"useAccount can't be used in a JazzProvider with auth === 'guest' - consider using useAccountOrGuest()\",\n );\n }\n\n const contextMe = context.value.me as RegisteredAccount;\n\n const me = useCoState<RegisteredAccount, R>(\n contextMe.constructor as CoValueClass<RegisteredAccount>,\n contextMe.id,\n options,\n );\n\n return {\n me: computed(() => {\n const value =\n options?.resolve === undefined\n ? me.value ||\n toRaw((context.value as JazzAuthContext<RegisteredAccount>).me)\n : me.value;\n\n return value ? toRaw(value) : value;\n }),\n logOut: context.value.logOut,\n };\n}\n\nexport function useAccountOrGuest(): {\n me: ComputedRef<RegisteredAccount | AnonymousJazzAgent>;\n};\nexport function useAccountOrGuest<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<\n Resolved<RegisteredAccount, R> | undefined | null | AnonymousJazzAgent\n >;\n};\nexport function useAccountOrGuest<\n const R extends RefsToResolve<RegisteredAccount>,\n>(options?: {\n resolve?: RefsToResolveStrict<RegisteredAccount, R>;\n}): {\n me: ComputedRef<\n | RegisteredAccount\n | Resolved<RegisteredAccount, R>\n | undefined\n | null\n | AnonymousJazzAgent\n >;\n} {\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useAccountOrGuest must be used within a JazzProvider\");\n }\n\n const contextMe = computed(() =>\n \"me\" in context.value ? (context.value.me as RegisteredAccount) : undefined,\n );\n\n const me = useCoState<RegisteredAccount, R>(\n contextMe.value?.constructor as CoValueClass<RegisteredAccount>,\n contextMe.value?.id,\n options,\n );\n\n if (\"me\" in context.value) {\n return {\n me: computed(() =>\n options?.resolve === undefined\n ? me.value ||\n toRaw((context.value as JazzAuthContext<RegisteredAccount>).me)\n : me.value,\n ),\n };\n }\n\n return {\n me: computed(() => toRaw((context.value as JazzGuestContext).guest)),\n };\n}\n\nexport function useCoState<V extends CoValue, const R extends RefsToResolve<V>>(\n Schema: CoValueClass<V>,\n id: MaybeRef<ID<CoValue> | undefined>,\n options?: { resolve?: RefsToResolveStrict<V, R> },\n): Ref<Resolved<V, R> | undefined | null> {\n const state: ShallowRef<Resolved<V, R> | undefined | null> =\n shallowRef(undefined);\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useCoState must be used within a JazzProvider\");\n }\n\n let unsubscribe: (() => void) | undefined;\n\n watch(\n [() => unref(id), () => context, () => Schema, () => options],\n () => {\n if (unsubscribe) unsubscribe();\n\n const idValue = unref(id);\n if (!idValue) return;\n\n unsubscribe = subscribeToCoValue(\n Schema,\n idValue,\n {\n resolve: options?.resolve,\n loadAs:\n \"me\" in context.value\n ? toRaw(context.value.me)\n : toRaw(context.value.guest),\n onUnavailable: () => {\n state.value = null;\n },\n onUnauthorized: () => {\n state.value = null;\n },\n syncResolution: true,\n },\n (value) => {\n state.value = value;\n },\n );\n },\n { deep: true, immediate: true },\n );\n\n onUnmounted(() => {\n if (unsubscribe) unsubscribe();\n });\n\n const computedState = computed(() => state.value);\n\n return computedState;\n}\n\nexport function useAcceptInvite<V extends CoValue>({\n invitedObjectSchema,\n onAccept,\n forValueHint,\n}: {\n invitedObjectSchema: CoValueClass<V>;\n onAccept: (projectID: ID<V>) => void;\n forValueHint?: string;\n}): void {\n const context = useJazzContext();\n\n if (!context.value) {\n throw new Error(\"useAcceptInvite must be used within a JazzProvider\");\n }\n\n if (!(\"me\" in context.value)) {\n throw new Error(\n \"useAcceptInvite can't be used in a JazzProvider with auth === 'guest'.\",\n );\n }\n\n const runInviteAcceptance = () => {\n const result = consumeInviteLinkFromWindowLocation({\n as: toRaw((context.value as JazzAuthContext<RegisteredAccount>).me),\n invitedObjectSchema,\n forValueHint,\n });\n\n result\n .then((res) => res && onAccept(res.valueID))\n .catch((e) => {\n console.error(\"Failed to accept invite\", e);\n });\n };\n\n onMounted(() => {\n runInviteAcceptance();\n });\n\n watch(\n () => onAccept,\n (newOnAccept, oldOnAccept) => {\n if (newOnAccept !== oldOnAccept) {\n runInviteAcceptance();\n }\n },\n );\n}\n","import { onMounted, onUnmounted, ref } from \"vue\";\nimport { useAuthSecretStorage } from \"../composables.js\";\n\nexport function useIsAuthenticated() {\n const authSecretStorage = useAuthSecretStorage();\n const isAuthenticated = ref(authSecretStorage.isAuthenticated);\n\n const handleUpdate = () => {\n isAuthenticated.value = authSecretStorage.isAuthenticated;\n };\n\n onMounted(() => {\n const cleanup = authSecretStorage.onUpdate(handleUpdate);\n onUnmounted(cleanup);\n });\n\n return isAuthenticated;\n}\n","import { DemoAuth } from \"jazz-tools\";\nimport { computed, ref, watch } from \"vue\";\nimport { useAuthSecretStorage, useJazzContext } from \"../composables.js\";\nimport { useIsAuthenticated } from \"./useIsAuthenticated.js\";\n\nexport function useDemoAuth() {\n const context = useJazzContext();\n const authSecretStorage = useAuthSecretStorage();\n\n if (\"guest\" in context.value) {\n throw new Error(\"Demo auth is not supported in guest mode\");\n }\n\n const authMethod = computed(\n () => new DemoAuth(context.value.authenticate, authSecretStorage),\n );\n\n const existingUsers = ref<string[]>([]);\n const isAuthenticated = useIsAuthenticated();\n\n watch(authMethod, () => {\n authMethod.value.getExistingUsers().then((users) => {\n existingUsers.value = users;\n });\n });\n\n return computed(() => ({\n state: isAuthenticated.value ? \"signedIn\" : \"anonymous\",\n logIn(username: string) {\n authMethod.value.logIn(username);\n },\n signUp(username: string) {\n authMethod.value.signUp(username);\n },\n existingUsers: existingUsers.value,\n }));\n}\n","import { PassphraseAuth } from \"jazz-tools\";\nimport { computed, ref, watchEffect } from \"vue\";\nimport { useAuthSecretStorage, useJazzContext } from \"../composables.js\";\nimport { useIsAuthenticated } from \"./useIsAuthenticated.js\";\n\n/**\n * `usePassphraseAuth` composable provides a `JazzAuth` object for passphrase authentication.\n *\n * @example\n * ```ts\n * const auth = usePassphraseAuth({ wordlist });\n * ```\n *\n * @category Auth Providers\n */\nexport function usePassphraseAuth({\n wordlist,\n}: {\n wordlist: string[];\n}) {\n const context = useJazzContext();\n const authSecretStorage = useAuthSecretStorage();\n const isAuthenticated = useIsAuthenticated();\n\n if (\"guest\" in context.value) {\n throw new Error(\"Passphrase auth is not supported in guest mode\");\n }\n\n const authMethod = computed(() => {\n return new PassphraseAuth(\n context.value.node.crypto,\n context.value.authenticate,\n context.value.register,\n authSecretStorage,\n wordlist,\n );\n });\n\n const passphrase = ref(authMethod.value.passphrase);\n\n watchEffect((onCleanup) => {\n authMethod.value.loadCurrentAccountPassphrase();\n\n const unsubscribe = authMethod.value.subscribe(() => {\n passphrase.value = authMethod.value.passphrase;\n });\n\n onCleanup(unsubscribe);\n });\n\n return computed(() => ({\n state: isAuthenticated.value ? \"signedIn\" : \"anonymous\",\n logIn: authMethod.value.logIn,\n signUp: authMethod.value.signUp,\n registerNewAccount: authMethod.value.registerNewAccount,\n generateRandomPassphrase: authMethod.value.generateRandomPassphrase,\n passphrase: passphrase.value,\n }));\n}\n","import { BrowserPasskeyAuth } from \"jazz-browser\";\nimport { computed } from \"vue\";\nimport { useAuthSecretStorage, useJazzContext } from \"../composables.js\";\nimport { useIsAuthenticated } from \"./useIsAuthenticated.js\";\n\n/**\n * `usePasskeyAuth` composable provides a `JazzAuth` object for passkey authentication.\n *\n * @example\n * ```ts\n * const auth = usePasskeyAuth({ appName, appHostname });\n * ```\n *\n * @category Auth Providers\n */\nexport function usePasskeyAuth({\n appName,\n appHostname,\n}: {\n appName: string;\n appHostname?: string;\n}) {\n const context = useJazzContext();\n const authSecretStorage = useAuthSecretStorage();\n const isAuthenticated = useIsAuthenticated();\n\n if (\"guest\" in context.value) {\n throw new Error(\"Passkey auth is not supported in guest mode\");\n }\n\n const authMethod = computed(() => {\n return new BrowserPasskeyAuth(\n context.value.node.crypto,\n context.value.authenticate,\n authSecretStorage,\n appName,\n appHostname,\n );\n });\n\n return computed(() => ({\n state: isAuthenticated.value ? \"signedIn\" : \"anonymous\",\n logIn: authMethod.value.logIn,\n signUp: authMethod.value.signUp,\n }));\n}\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { useDemoAuth } from \"./useDemoAuth.js\";\n\ninterface Props {\n appName: string;\n}\n\ndefineProps<Props>();\ndefineSlots<{\n // biome-ignore lint/suspicious/noExplicitAny: Complex type\n default?: () => any;\n}>();\n\nconst auth = useDemoAuth();\nconst username = ref(\"\");\n\nconst darkMode =\n typeof window !== \"undefined\"\n ? window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n : false;\n\nconst handleSubmit = (e: Event) => {\n e.preventDefault();\n auth.value.signUp(username.value);\n};\n</script>\n\n<template>\n <slot v-if=\"auth.state === 'signedIn'\" />\n <div\n v-else\n :style=\"{\n minHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n width: '18rem',\n maxWidth: 'calc(100vw - 2rem)',\n gap: '2rem',\n margin: '0 auto'\n }\"\n >\n <h1\n :style=\"{\n color: darkMode ? '#fff' : '#000',\n textAlign: 'center',\n fontSize: '1.5rem',\n fontWeight: 'bold'\n }\"\n >\n {{ appName }}\n </h1>\n\n <form\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem'\n }\"\n @submit=\"handleSubmit\"\n >\n <input\n v-model=\"username\"\n placeholder=\"Display name\"\n autocomplete=\"webauthn\"\n :style=\"{\n border: darkMode ? '1px solid #444' : '1px solid #ddd',\n padding: '11px 8px',\n borderRadius: '6px',\n background: darkMode ? '#000' : '#fff',\n color: darkMode ? '#fff' : '#000'\n }\"\n >\n <input\n type=\"submit\"\n value=\"Sign up\"\n :style=\"{\n padding: '13px 5px',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n background: darkMode ? '#444' : '#ddd',\n color: darkMode ? '#fff' : '#000'\n }\"\n >\n </form>\n\n <div\n v-if=\"auth.existingUsers.length > 0\"\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem'\n }\"\n >\n <p\n :style=\"{\n color: darkMode ? '#e2e2e2' : '#000',\n textAlign: 'center',\n paddingTop: '0.5rem',\n borderTop: '1px solid',\n borderColor: darkMode ? '#111' : '#e2e2e2'\n }\"\n >\n Log in as\n </p>\n <button\n v-for=\"user in auth.existingUsers\"\n :key=\"user\"\n @click=\"auth.logIn(user)\"\n type=\"button\"\n :aria-label=\"`Log in as ${user}`\"\n :style=\"{\n background: darkMode ? '#0d0d0d' : '#eee',\n color: darkMode ? '#fff' : '#000',\n padding: '0.5rem',\n border: 'none',\n borderRadius: '6px'\n }\"\n >\n {{ user }}\n </button>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport { ImageDefinition, type Loaded } from \"jazz-tools\";\nimport { type Ref, onUnmounted, ref, toRef, watch } from \"vue\";\n\ninterface ImageState {\n src?: string;\n res?: `${number}x${number}` | \"placeholder\";\n originalSize?: readonly [number, number];\n}\n\nfunction useProgressiveImg(\n image: Ref<Loaded<typeof ImageDefinition> | null | undefined>,\n maxWidth?: number,\n targetWidth?: number,\n) {\n const current = ref<ImageState>({});\n\n let cleanup: (() => void) | undefined;\n const unsubscribe = watch(\n () => [image.value?.id, maxWidth],\n () => {\n let lastHighestRes: string | undefined;\n\n if (!image.value) return;\n\n const unsub = image.value.subscribe({}, (update) => {\n const highestRes = ImageDefinition.highestResAvailable(update, {\n maxWidth,\n targetWidth,\n });\n\n if (highestRes) {\n if (highestRes.res !== lastHighestRes) {\n lastHighestRes = highestRes.res;\n const blob = highestRes.stream.toBlob();\n\n if (blob) {\n const blobURI = URL.createObjectURL(blob);\n current.value = {\n src: blobURI,\n res: highestRes.res,\n originalSize: image.value?.originalSize,\n };\n\n if (cleanup) cleanup();\n cleanup = () => {\n setTimeout(() => URL.revokeObjectURL(blobURI), 200);\n };\n }\n }\n } else {\n current.value = {\n src: update?.placeholderDataURL,\n res: \"placeholder\",\n originalSize: image.value?.originalSize,\n };\n }\n });\n\n return unsub;\n },\n );\n\n onUnmounted(() => {\n unsubscribe();\n if (cleanup) cleanup();\n });\n\n return current;\n}\n\nconst props = defineProps<{\n image: Loaded<typeof ImageDefinition> | null | undefined;\n maxWidth?: number;\n}>();\n\nconst current = useProgressiveImg(toRef(props, \"image\"), props.maxWidth);\n</script>\n\n<template>\n <slot\n :src=\"current.src\"\n :res=\"current.res\"\n :original-size=\"current.originalSize\"\n />\n</template>"],"names":["current"],"mappings":"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"}
|
@@ -27,6 +27,7 @@ const JazzProvider = defineComponent({
|
|
27
27
|
required: false
|
28
28
|
},
|
29
29
|
onAnonymousAccountDiscarded: {
|
30
|
+
// biome-ignore lint/suspicious/noExplicitAny: Complex generic typing with Jazz framework internals
|
30
31
|
type: Function,
|
31
32
|
required: false
|
32
33
|
},
|
@@ -83,4 +84,4 @@ export {
|
|
83
84
|
JazzAuthContextSymbol as a,
|
84
85
|
JazzProvider as b
|
85
86
|
};
|
86
|
-
//# sourceMappingURL=provider-
|
87
|
+
//# sourceMappingURL=provider-DT2kaCMV.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"provider-DT2kaCMV.js","sources":["../src/provider.ts"],"sourcesContent":["import { JazzBrowserContextManager } from \"jazz-browser\";\nimport type {\n Account,\n AccountClass,\n AnyAccountSchema,\n CoValueFromRaw,\n JazzContextType,\n SyncConfig,\n} from \"jazz-tools\";\nimport {\n type PropType,\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watch,\n} from \"vue\";\n\nexport const logoutHandler = ref<() => void>();\n\n// biome-ignore lint/suspicious/noEmptyInterface: This interface is meant to be module augmented by users\nexport interface Register {}\n\nexport type RegisteredAccount = Register extends { Account: infer Acc }\n ? Acc\n : Account;\n\ndeclare module \"jazz-tools\" {\n export interface Register {\n Account: RegisteredAccount;\n }\n}\n\nexport const JazzContextSymbol = Symbol(\"JazzContext\");\nexport const JazzAuthContextSymbol = Symbol(\"JazzAuthContext\");\n\nexport const JazzProvider = defineComponent({\n name: \"JazzProvider\",\n props: {\n guestMode: {\n type: Boolean,\n default: false,\n },\n sync: {\n type: Object as PropType<SyncConfig>,\n required: true,\n },\n AccountSchema: {\n type: Function as unknown as PropType<\n (AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema\n >,\n required: false,\n },\n storage: {\n type: String as PropType<\"indexedDB\">,\n default: undefined,\n },\n defaultProfileName: {\n type: String,\n required: false,\n },\n onAnonymousAccountDiscarded: {\n // biome-ignore lint/suspicious/noExplicitAny: Complex generic typing with Jazz framework internals\n type: Function as PropType<(anonymousAccount: any) => Promise<void>>,\n required: false,\n },\n onLogOut: {\n type: Function as PropType<() => void>,\n required: false,\n },\n },\n setup(props, { slots }) {\n const contextManager = new JazzBrowserContextManager<\n (AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema\n >();\n // biome-ignore lint/suspicious/noExplicitAny: Complex generic typing with Jazz framework internals\n const ctx = ref<JazzContextType<any>>();\n\n provide(JazzContextSymbol, ctx);\n provide(JazzAuthContextSymbol, contextManager.getAuthSecretStorage());\n\n watch(\n () => ({\n peer: props.sync.peer,\n syncWhen: props.sync.when,\n storage: props.storage,\n guestMode: props.guestMode,\n }),\n async () => {\n contextManager\n .createContext({\n sync: props.sync,\n storage: props.storage,\n guestMode: props.guestMode,\n AccountSchema: props.AccountSchema,\n defaultProfileName: props.defaultProfileName,\n onAnonymousAccountDiscarded: props.onAnonymousAccountDiscarded,\n onLogOut: props.onLogOut,\n })\n .catch((error) => {\n console.error(\"Error creating Jazz browser context:\", error);\n });\n },\n { immediate: true },\n );\n\n onMounted(() => {\n const cleanup = contextManager.subscribe(() => {\n ctx.value = contextManager.getCurrentValue();\n });\n onUnmounted(cleanup);\n });\n\n onUnmounted(() => {\n if (ctx.value) ctx.value.done?.();\n });\n\n return () => (ctx.value ? slots.default?.() : null);\n },\n});\n"],"names":[],"mappings":";;AAmB6B,IAAgB;AAehC,MAAA,oBAAoB,OAAO,aAAa;AACxC,MAAA,wBAAwB,OAAO,iBAAiB;AAEtD,MAAM,eAAe,gBAAgB;AAAA,EAC1C,MAAM;AAAA,EACN,OAAO;AAAA,IACL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,eAAe;AAAA,MACb,MAAM;AAAA,MAGN,UAAU;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,6BAA6B;AAAA;AAAA,MAE3B,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EAEd;AAAA,EACA,MAAM,OAAO,EAAE,SAAS;AAChB,UAAA,iBAAiB,IAAI,0BAEzB;AAEF,UAAM,MAAM,IAA0B;AAEtC,YAAQ,mBAAmB,GAAG;AACtB,YAAA,uBAAuB,eAAe,sBAAsB;AAEpE;AAAA,MACE,OAAO;AAAA,QACL,MAAM,MAAM,KAAK;AAAA,QACjB,UAAU,MAAM,KAAK;AAAA,QACrB,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,MAAA;AAAA,MAEnB,YAAY;AACV,uBACG,cAAc;AAAA,UACb,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,WAAW,MAAM;AAAA,UACjB,eAAe,MAAM;AAAA,UACrB,oBAAoB,MAAM;AAAA,UAC1B,6BAA6B,MAAM;AAAA,UACnC,UAAU,MAAM;AAAA,QAAA,CACjB,EACA,MAAM,CAAC,UAAU;AACR,kBAAA,MAAM,wCAAwC,KAAK;AAAA,QAAA,CAC5D;AAAA,MACL;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAEA,cAAU,MAAM;AACR,YAAA,UAAU,eAAe,UAAU,MAAM;AACzC,YAAA,QAAQ,eAAe,gBAAgB;AAAA,MAAA,CAC5C;AACD,kBAAY,OAAO;AAAA,IAAA,CACpB;AAED,gBAAY,MAAM;;AAChB,UAAI,IAAI,MAAW,iBAAA,OAAM,SAAN;AAAA,IAAa,CACjC;AAED,WAAO,MAAO;;AAAA,iBAAI,SAAQ,WAAM,YAAN,iCAAoB;AAAA;AAAA,EAAA;AAElD,CAAC;"}
|
package/dist/provider.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Account, AccountClass, SyncConfig } from 'jazz-tools';
|
1
|
+
import { Account, AccountClass, AnyAccountSchema, CoValueFromRaw, SyncConfig } from 'jazz-tools';
|
2
2
|
import { PropType } from 'vue';
|
3
3
|
export declare const logoutHandler: import('vue').Ref<(() => void) | undefined, (() => void) | undefined>;
|
4
4
|
export interface Register {
|
@@ -23,7 +23,7 @@ export declare const JazzProvider: import('vue').DefineComponent<import('vue').E
|
|
23
23
|
required: true;
|
24
24
|
};
|
25
25
|
AccountSchema: {
|
26
|
-
type: PropType<AccountClass<
|
26
|
+
type: PropType<(AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema>;
|
27
27
|
required: false;
|
28
28
|
};
|
29
29
|
storage: {
|
@@ -35,7 +35,7 @@ export declare const JazzProvider: import('vue').DefineComponent<import('vue').E
|
|
35
35
|
required: false;
|
36
36
|
};
|
37
37
|
onAnonymousAccountDiscarded: {
|
38
|
-
type: PropType<(anonymousAccount:
|
38
|
+
type: PropType<(anonymousAccount: any) => Promise<void>>;
|
39
39
|
required: false;
|
40
40
|
};
|
41
41
|
onLogOut: {
|
@@ -54,7 +54,7 @@ export declare const JazzProvider: import('vue').DefineComponent<import('vue').E
|
|
54
54
|
required: true;
|
55
55
|
};
|
56
56
|
AccountSchema: {
|
57
|
-
type: PropType<AccountClass<
|
57
|
+
type: PropType<(AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema>;
|
58
58
|
required: false;
|
59
59
|
};
|
60
60
|
storage: {
|
@@ -66,7 +66,7 @@ export declare const JazzProvider: import('vue').DefineComponent<import('vue').E
|
|
66
66
|
required: false;
|
67
67
|
};
|
68
68
|
onAnonymousAccountDiscarded: {
|
69
|
-
type: PropType<(anonymousAccount:
|
69
|
+
type: PropType<(anonymousAccount: any) => Promise<void>>;
|
70
70
|
required: false;
|
71
71
|
};
|
72
72
|
onLogOut: {
|
package/dist/testing.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { TestJazzContextManager } from "jazz-tools/testing";
|
2
2
|
import { createJazzTestAccount, createJazzTestGuest, linkAccounts, setActiveAccount, setupJazzTestSync } from "jazz-tools/testing";
|
3
3
|
import { defineComponent, provide, ref } from "vue";
|
4
|
-
import { J as JazzContextSymbol, a as JazzAuthContextSymbol } from "./provider-
|
4
|
+
import { J as JazzContextSymbol, a as JazzAuthContextSymbol } from "./provider-DT2kaCMV.js";
|
5
5
|
const JazzTestProvider = defineComponent({
|
6
6
|
name: "JazzTestProvider",
|
7
7
|
props: {
|
package/dist/testing.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testing.js","sources":["../src/testing.ts"],"sourcesContent":["import { Account, AnonymousJazzAgent } from \"jazz-tools\";\nimport { TestJazzContextManager } from \"jazz-tools/testing\";\nimport { provide } from \"vue\";\nimport { PropType, defineComponent, ref } from \"vue\";\nimport { JazzAuthContextSymbol, JazzContextSymbol } from \"./provider.js\";\n\nexport const JazzTestProvider = defineComponent({\n name: \"JazzTestProvider\",\n props: {\n account: {\n type: Object as PropType<Account | { guest: AnonymousJazzAgent }>,\n required: false,\n },\n isAuthenticated: {\n type: Boolean,\n required: false,\n },\n },\n setup(props, { slots }) {\n const contextManager = TestJazzContextManager.fromAccountOrGuest(\n props.account,\n {\n isAuthenticated: props.isAuthenticated,\n },\n );\n\n provide(JazzContextSymbol, ref(contextManager.getCurrentValue()));\n provide(JazzAuthContextSymbol, contextManager.getAuthSecretStorage());\n\n return () => slots.default?.();\n },\n});\n\nexport {\n createJazzTestAccount,\n createJazzTestGuest,\n linkAccounts,\n setActiveAccount,\n setupJazzTestSync,\n} from \"jazz-tools/testing\";\n"],"names":[],"mappings":";;;;AAMO,MAAM,mBAAmB,gBAAgB;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EAEd;AAAA,EACA,MAAM,OAAO,EAAE,SAAS;AACtB,UAAM,iBAAiB,uBAAuB;AAAA,MAC5C,MAAM;AAAA,MACN;AAAA,QACE,iBAAiB,MAAM;AAAA,MAAA;AAAA,IAE3B;AAEA,YAAQ,mBAAmB,IAAI,eAAe,gBAAiB,CAAA,CAAC;AACxD,YAAA,uBAAuB,eAAe,sBAAsB;AAE7D,WAAA,MAAA;;AAAM,yBAAM,YAAN;AAAA;AAAA,EAAgB;AAEjC,CAAC;"}
|
1
|
+
{"version":3,"file":"testing.js","sources":["../src/testing.ts"],"sourcesContent":["import type { Account, AnonymousJazzAgent } from \"jazz-tools\";\nimport { TestJazzContextManager } from \"jazz-tools/testing\";\nimport { provide } from \"vue\";\nimport { type PropType, defineComponent, ref } from \"vue\";\nimport { JazzAuthContextSymbol, JazzContextSymbol } from \"./provider.js\";\n\nexport const JazzTestProvider = defineComponent({\n name: \"JazzTestProvider\",\n props: {\n account: {\n type: Object as PropType<Account | { guest: AnonymousJazzAgent }>,\n required: false,\n },\n isAuthenticated: {\n type: Boolean,\n required: false,\n },\n },\n setup(props, { slots }) {\n const contextManager = TestJazzContextManager.fromAccountOrGuest(\n props.account,\n {\n isAuthenticated: props.isAuthenticated,\n },\n );\n\n provide(JazzContextSymbol, ref(contextManager.getCurrentValue()));\n provide(JazzAuthContextSymbol, contextManager.getAuthSecretStorage());\n\n return () => slots.default?.();\n },\n});\n\nexport {\n createJazzTestAccount,\n createJazzTestGuest,\n linkAccounts,\n setActiveAccount,\n setupJazzTestSync,\n} from \"jazz-tools/testing\";\n"],"names":[],"mappings":";;;;AAMO,MAAM,mBAAmB,gBAAgB;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EAEd;AAAA,EACA,MAAM,OAAO,EAAE,SAAS;AACtB,UAAM,iBAAiB,uBAAuB;AAAA,MAC5C,MAAM;AAAA,MACN;AAAA,QACE,iBAAiB,MAAM;AAAA,MAAA;AAAA,IAE3B;AAEA,YAAQ,mBAAmB,IAAI,eAAe,gBAAiB,CAAA,CAAC;AACxD,YAAA,uBAAuB,eAAe,sBAAsB;AAE7D,WAAA,MAAA;;AAAM,yBAAM,YAAN;AAAA;AAAA,EAAgB;AAEjC,CAAC;"}
|
@@ -6,4 +6,4 @@ export declare const withJazzTestSetup: <C extends (...args: any[]) => any>(comp
|
|
6
6
|
};
|
7
7
|
isAuthenticated?: boolean;
|
8
8
|
}) => [ReturnType<C>, ReturnType<typeof createApp>];
|
9
|
-
export declare function waitFor(callback: () =>
|
9
|
+
export declare function waitFor(callback: () => void): Promise<void>;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "jazz-vue",
|
3
|
-
"version": "0.14.
|
3
|
+
"version": "0.14.20",
|
4
4
|
"type": "module",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "src/index.ts",
|
@@ -16,16 +16,16 @@
|
|
16
16
|
}
|
17
17
|
},
|
18
18
|
"dependencies": {
|
19
|
-
"cojson": "0.14.
|
20
|
-
"jazz-tools": "0.14.
|
21
|
-
"jazz-browser": "0.14.
|
19
|
+
"cojson": "0.14.20",
|
20
|
+
"jazz-tools": "0.14.20",
|
21
|
+
"jazz-browser": "0.14.20"
|
22
22
|
},
|
23
23
|
"devDependencies": {
|
24
24
|
"@scure/bip39": "^1.3.0",
|
25
25
|
"@vitejs/plugin-vue": "^5.1.4",
|
26
26
|
"rollup-plugin-node-externals": "^8.0.0",
|
27
27
|
"typescript": "5.6.2",
|
28
|
-
"vite": "6.
|
28
|
+
"vite": "6.3.5",
|
29
29
|
"vite-plugin-dts": "^4.2.4",
|
30
30
|
"vue": "^3.5.11",
|
31
31
|
"vue-tsc": "^2.1.6"
|
@@ -37,6 +37,7 @@
|
|
37
37
|
"dev": "vite build --watch",
|
38
38
|
"format-and-lint": "biome check .",
|
39
39
|
"format-and-lint:fix": "biome check . --write",
|
40
|
-
"
|
40
|
+
"typecheck": "vue-tsc --noEmit",
|
41
|
+
"build": "pnpm typecheck && rm -rf ./dist && vite build"
|
41
42
|
}
|
42
43
|
}
|
package/src/ProgressiveImg.vue
CHANGED
package/src/composables.ts
CHANGED
@@ -1,25 +1,23 @@
|
|
1
1
|
import { consumeInviteLinkFromWindowLocation } from "jazz-browser";
|
2
2
|
import {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
Resolved,
|
3
|
+
type AnonymousJazzAgent,
|
4
|
+
type AuthSecretStorage,
|
5
|
+
type CoValue,
|
6
|
+
type CoValueClass,
|
7
|
+
type ID,
|
8
|
+
type JazzAuthContext,
|
9
|
+
type JazzContextType,
|
10
|
+
type JazzGuestContext,
|
11
|
+
type RefsToResolve,
|
12
|
+
type RefsToResolveStrict,
|
13
|
+
type Resolved,
|
15
14
|
subscribeToCoValue,
|
16
15
|
} from "jazz-tools";
|
17
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
18
16
|
import {
|
19
|
-
ComputedRef,
|
20
|
-
MaybeRef,
|
21
|
-
Ref,
|
22
|
-
ShallowRef,
|
17
|
+
type ComputedRef,
|
18
|
+
type MaybeRef,
|
19
|
+
type Ref,
|
20
|
+
type ShallowRef,
|
23
21
|
computed,
|
24
22
|
inject,
|
25
23
|
onMounted,
|
@@ -33,7 +31,7 @@ import {
|
|
33
31
|
import {
|
34
32
|
JazzAuthContextSymbol,
|
35
33
|
JazzContextSymbol,
|
36
|
-
RegisteredAccount,
|
34
|
+
type RegisteredAccount,
|
37
35
|
} from "./provider.js";
|
38
36
|
|
39
37
|
export const logoutHandler = ref<() => void>();
|
@@ -164,11 +162,11 @@ export function useAccountOrGuest<
|
|
164
162
|
: me.value,
|
165
163
|
),
|
166
164
|
};
|
167
|
-
} else {
|
168
|
-
return {
|
169
|
-
me: computed(() => toRaw((context.value as JazzGuestContext).guest)),
|
170
|
-
};
|
171
165
|
}
|
166
|
+
|
167
|
+
return {
|
168
|
+
me: computed(() => toRaw((context.value as JazzGuestContext).guest)),
|
169
|
+
};
|
172
170
|
}
|
173
171
|
|
174
172
|
export function useCoState<V extends CoValue, const R extends RefsToResolve<V>>(
|
package/src/provider.ts
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
import { JazzBrowserContextManager } from "jazz-browser";
|
2
|
-
import {
|
3
|
-
|
2
|
+
import type {
|
3
|
+
Account,
|
4
|
+
AccountClass,
|
5
|
+
AnyAccountSchema,
|
6
|
+
CoValueFromRaw,
|
7
|
+
JazzContextType,
|
8
|
+
SyncConfig,
|
9
|
+
} from "jazz-tools";
|
4
10
|
import {
|
5
|
-
PropType,
|
6
|
-
computed,
|
11
|
+
type PropType,
|
7
12
|
defineComponent,
|
8
13
|
onMounted,
|
9
14
|
onUnmounted,
|
@@ -14,7 +19,7 @@ import {
|
|
14
19
|
|
15
20
|
export const logoutHandler = ref<() => void>();
|
16
21
|
|
17
|
-
//
|
22
|
+
// biome-ignore lint/suspicious/noEmptyInterface: This interface is meant to be module augmented by users
|
18
23
|
export interface Register {}
|
19
24
|
|
20
25
|
export type RegisteredAccount = Register extends { Account: infer Acc }
|
@@ -29,6 +34,7 @@ declare module "jazz-tools" {
|
|
29
34
|
|
30
35
|
export const JazzContextSymbol = Symbol("JazzContext");
|
31
36
|
export const JazzAuthContextSymbol = Symbol("JazzAuthContext");
|
37
|
+
|
32
38
|
export const JazzProvider = defineComponent({
|
33
39
|
name: "JazzProvider",
|
34
40
|
props: {
|
@@ -41,7 +47,9 @@ export const JazzProvider = defineComponent({
|
|
41
47
|
required: true,
|
42
48
|
},
|
43
49
|
AccountSchema: {
|
44
|
-
type: Function as unknown as PropType<
|
50
|
+
type: Function as unknown as PropType<
|
51
|
+
(AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema
|
52
|
+
>,
|
45
53
|
required: false,
|
46
54
|
},
|
47
55
|
storage: {
|
@@ -53,9 +61,8 @@ export const JazzProvider = defineComponent({
|
|
53
61
|
required: false,
|
54
62
|
},
|
55
63
|
onAnonymousAccountDiscarded: {
|
56
|
-
|
57
|
-
|
58
|
-
>,
|
64
|
+
// biome-ignore lint/suspicious/noExplicitAny: Complex generic typing with Jazz framework internals
|
65
|
+
type: Function as PropType<(anonymousAccount: any) => Promise<void>>,
|
59
66
|
required: false,
|
60
67
|
},
|
61
68
|
onLogOut: {
|
@@ -64,8 +71,11 @@ export const JazzProvider = defineComponent({
|
|
64
71
|
},
|
65
72
|
},
|
66
73
|
setup(props, { slots }) {
|
67
|
-
const contextManager = new JazzBrowserContextManager<
|
68
|
-
|
74
|
+
const contextManager = new JazzBrowserContextManager<
|
75
|
+
(AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema
|
76
|
+
>();
|
77
|
+
// biome-ignore lint/suspicious/noExplicitAny: Complex generic typing with Jazz framework internals
|
78
|
+
const ctx = ref<JazzContextType<any>>();
|
69
79
|
|
70
80
|
provide(JazzContextSymbol, ctx);
|
71
81
|
provide(JazzAuthContextSymbol, contextManager.getAuthSecretStorage());
|
package/src/testing.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import { Account, AnonymousJazzAgent } from "jazz-tools";
|
1
|
+
import type { Account, AnonymousJazzAgent } from "jazz-tools";
|
2
2
|
import { TestJazzContextManager } from "jazz-tools/testing";
|
3
3
|
import { provide } from "vue";
|
4
|
-
import { PropType, defineComponent, ref } from "vue";
|
4
|
+
import { type PropType, defineComponent, ref } from "vue";
|
5
5
|
import { JazzAuthContextSymbol, JazzContextSymbol } from "./provider.js";
|
6
6
|
|
7
7
|
export const JazzTestProvider = defineComponent({
|
package/src/tests/testUtils.ts
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
import { Account, AnonymousJazzAgent } from "jazz-tools";
|
1
|
+
import type { Account, AnonymousJazzAgent } from "jazz-tools";
|
2
2
|
import { createApp, defineComponent, h } from "vue";
|
3
3
|
import { JazzTestProvider } from "../testing";
|
4
4
|
|
5
|
+
// biome-ignore lint/suspicious/noExplicitAny: Complex generic typing with Jazz framework internals
|
5
6
|
export const withJazzTestSetup = <C extends (...args: any[]) => any>(
|
6
7
|
composable: C,
|
7
8
|
{
|
@@ -12,6 +13,7 @@ export const withJazzTestSetup = <C extends (...args: any[]) => any>(
|
|
12
13
|
isAuthenticated?: boolean;
|
13
14
|
} = {},
|
14
15
|
) => {
|
16
|
+
// biome-ignore lint/suspicious/noImplicitAnyLet: Not sure what the type is
|
15
17
|
let result;
|
16
18
|
|
17
19
|
const wrapper = defineComponent({
|
@@ -44,7 +46,7 @@ export const withJazzTestSetup = <C extends (...args: any[]) => any>(
|
|
44
46
|
return [result, app] as [ReturnType<C>, ReturnType<typeof createApp>];
|
45
47
|
};
|
46
48
|
|
47
|
-
export function waitFor(callback: () =>
|
49
|
+
export function waitFor(callback: () => void) {
|
48
50
|
return new Promise<void>((resolve, reject) => {
|
49
51
|
const checkPassed = () => {
|
50
52
|
try {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// @vitest-environment happy-dom
|
2
2
|
|
3
|
-
import { CoMap, Group, ID, coField } from "jazz-tools";
|
3
|
+
import { CoMap, Group, type ID, coField } from "jazz-tools";
|
4
4
|
import { describe, expect, it } from "vitest";
|
5
5
|
import { createInviteLink, useAcceptInvite } from "../index.js";
|
6
6
|
import { createJazzTestAccount, linkAccounts } from "../testing.js";
|
@@ -1,9 +1,15 @@
|
|
1
1
|
// @vitest-environment happy-dom
|
2
2
|
|
3
|
-
import {
|
3
|
+
import {
|
4
|
+
CoMap,
|
5
|
+
type CoValue,
|
6
|
+
type ID,
|
7
|
+
coField,
|
8
|
+
cojsonInternals,
|
9
|
+
} from "jazz-tools";
|
4
10
|
import { createJazzTestAccount, setupJazzTestSync } from "jazz-tools/testing";
|
5
11
|
import { beforeEach, describe, expect, expectTypeOf, it } from "vitest";
|
6
|
-
import { Ref } from "vue";
|
12
|
+
import type { Ref } from "vue";
|
7
13
|
import { useCoState } from "../index.js";
|
8
14
|
import { waitFor, withJazzTestSetup } from "./testUtils.js";
|
9
15
|
|
package/vite.config.ts
CHANGED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"provider-CkA-a4Og.js","sources":["../src/provider.ts"],"sourcesContent":["import { JazzBrowserContextManager } from \"jazz-browser\";\nimport { Account, AccountClass, JazzContextType, SyncConfig } from \"jazz-tools\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n PropType,\n computed,\n defineComponent,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watch,\n} from \"vue\";\n\nexport const logoutHandler = ref<() => void>();\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface Register {}\n\nexport type RegisteredAccount = Register extends { Account: infer Acc }\n ? Acc\n : Account;\n\ndeclare module \"jazz-tools\" {\n export interface Register {\n Account: RegisteredAccount;\n }\n}\n\nexport const JazzContextSymbol = Symbol(\"JazzContext\");\nexport const JazzAuthContextSymbol = Symbol(\"JazzAuthContext\");\nexport const JazzProvider = defineComponent({\n name: \"JazzProvider\",\n props: {\n guestMode: {\n type: Boolean,\n default: false,\n },\n sync: {\n type: Object as PropType<SyncConfig>,\n required: true,\n },\n AccountSchema: {\n type: Function as unknown as PropType<AccountClass<RegisteredAccount>>,\n required: false,\n },\n storage: {\n type: String as PropType<\"indexedDB\">,\n default: undefined,\n },\n defaultProfileName: {\n type: String,\n required: false,\n },\n onAnonymousAccountDiscarded: {\n type: Function as PropType<\n (anonymousAccount: RegisteredAccount) => Promise<void>\n >,\n required: false,\n },\n onLogOut: {\n type: Function as PropType<() => void>,\n required: false,\n },\n },\n setup(props, { slots }) {\n const contextManager = new JazzBrowserContextManager<RegisteredAccount>();\n const ctx = ref<JazzContextType<RegisteredAccount>>();\n\n provide(JazzContextSymbol, ctx);\n provide(JazzAuthContextSymbol, contextManager.getAuthSecretStorage());\n\n watch(\n () => ({\n peer: props.sync.peer,\n syncWhen: props.sync.when,\n storage: props.storage,\n guestMode: props.guestMode,\n }),\n async () => {\n contextManager\n .createContext({\n sync: props.sync,\n storage: props.storage,\n guestMode: props.guestMode,\n AccountSchema: props.AccountSchema,\n defaultProfileName: props.defaultProfileName,\n onAnonymousAccountDiscarded: props.onAnonymousAccountDiscarded,\n onLogOut: props.onLogOut,\n })\n .catch((error) => {\n console.error(\"Error creating Jazz browser context:\", error);\n });\n },\n { immediate: true },\n );\n\n onMounted(() => {\n const cleanup = contextManager.subscribe(() => {\n ctx.value = contextManager.getCurrentValue();\n });\n onUnmounted(cleanup);\n });\n\n onUnmounted(() => {\n if (ctx.value) ctx.value.done?.();\n });\n\n return () => (ctx.value ? slots.default?.() : null);\n },\n});\n"],"names":[],"mappings":";;AAc6B,IAAgB;AAehC,MAAA,oBAAoB,OAAO,aAAa;AACxC,MAAA,wBAAwB,OAAO,iBAAiB;AACtD,MAAM,eAAe,gBAAgB;AAAA,EAC1C,MAAM;AAAA,EACN,OAAO;AAAA,IACL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,oBAAoB;AAAA,MAClB,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,6BAA6B;AAAA,MAC3B,MAAM;AAAA,MAGN,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EAEd;AAAA,EACA,MAAM,OAAO,EAAE,SAAS;AAChB,UAAA,iBAAiB,IAAI,0BAA6C;AACxE,UAAM,MAAM,IAAwC;AAEpD,YAAQ,mBAAmB,GAAG;AACtB,YAAA,uBAAuB,eAAe,sBAAsB;AAEpE;AAAA,MACE,OAAO;AAAA,QACL,MAAM,MAAM,KAAK;AAAA,QACjB,UAAU,MAAM,KAAK;AAAA,QACrB,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,MAAA;AAAA,MAEnB,YAAY;AACV,uBACG,cAAc;AAAA,UACb,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,WAAW,MAAM;AAAA,UACjB,eAAe,MAAM;AAAA,UACrB,oBAAoB,MAAM;AAAA,UAC1B,6BAA6B,MAAM;AAAA,UACnC,UAAU,MAAM;AAAA,QAAA,CACjB,EACA,MAAM,CAAC,UAAU;AACR,kBAAA,MAAM,wCAAwC,KAAK;AAAA,QAAA,CAC5D;AAAA,MACL;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAEA,cAAU,MAAM;AACR,YAAA,UAAU,eAAe,UAAU,MAAM;AACzC,YAAA,QAAQ,eAAe,gBAAgB;AAAA,MAAA,CAC5C;AACD,kBAAY,OAAO;AAAA,IAAA,CACpB;AAED,gBAAY,MAAM;;AAChB,UAAI,IAAI,MAAW,iBAAA,OAAM,SAAN;AAAA,IAAa,CACjC;AAED,WAAO,MAAO;;AAAA,iBAAI,SAAQ,WAAM,YAAN,iCAAoB;AAAA;AAAA,EAAA;AAElD,CAAC;"}
|