jazz-tools 0.18.10 → 0.18.11
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/.svelte-kit/__package__/jazz.svelte.d.ts +1 -1
- package/.svelte-kit/__package__/jazz.svelte.d.ts.map +1 -1
- package/.svelte-kit/__package__/jazz.svelte.js +19 -26
- package/.turbo/turbo-build.log +29 -29
- package/CHANGELOG.md +11 -0
- package/dist/svelte/jazz.svelte.d.ts +1 -1
- package/dist/svelte/jazz.svelte.d.ts.map +1 -1
- package/dist/svelte/jazz.svelte.js +19 -26
- package/dist/worker/index.d.ts +26 -0
- package/dist/worker/index.d.ts.map +1 -1
- package/dist/worker/index.js +29 -2
- package/dist/worker/index.js.map +1 -1
- package/package.json +4 -4
- package/src/svelte/jazz.svelte.ts +23 -27
- package/src/worker/index.ts +28 -1
@@ -32,7 +32,7 @@ export declare function getAuthSecretStorage(): AuthSecretStorage;
|
|
32
32
|
export declare class InviteListener<V extends CoValueClassOrSchema> {
|
33
33
|
constructor({ invitedObjectSchema, onAccept, forValueHint, }: {
|
34
34
|
invitedObjectSchema: V;
|
35
|
-
onAccept: (
|
35
|
+
onAccept: (coValueID: ID<V>) => void;
|
36
36
|
forValueHint?: string;
|
37
37
|
});
|
38
38
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jazz.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/jazz.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACpB,EAAE,EAEF,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,QAAQ,IAAK,CAAC;AAC3B,eAAO,MAAM,aAAa,IAAK,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,OAAO,IAAI;IAC7C,OAAO,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAS,OAAO,KAW9B;IAChB,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAC/B,CACF;AAED,wBAAgB,oBAAoB,sBAUnC;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,oBAAoB;gBAC5C,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,GACb,EAAE;QACD,mBAAmB,EAAE,CAAC,CAAC;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;
|
1
|
+
{"version":3,"file":"jazz.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/jazz.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACpB,EAAE,EAEF,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,QAAQ,IAAK,CAAC;AAC3B,eAAO,MAAM,aAAa,IAAK,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,OAAO,IAAI;IAC7C,OAAO,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAS,OAAO,KAW9B;IAChB,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAC/B,CACF;AAED,wBAAgB,oBAAoB,sBAUnC;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,oBAAoB;gBAC5C,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,GACb,EAAE;QACD,mBAAmB,EAAE,CAAC,CAAC;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;CA2BF"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { consumeInviteLinkFromWindowLocation } from "jazz-tools/browser";
|
2
|
-
import { getContext, untrack } from "svelte";
|
2
|
+
import { getContext, onDestroy, untrack } from "svelte";
|
3
3
|
import Provider from "./Provider.svelte";
|
4
4
|
export { Provider as JazzSvelteProvider };
|
5
5
|
/**
|
@@ -38,33 +38,26 @@ export function getAuthSecretStorage() {
|
|
38
38
|
*/
|
39
39
|
export class InviteListener {
|
40
40
|
constructor({ invitedObjectSchema, onAccept, forValueHint, }) {
|
41
|
-
// TODO Listen to the hashchange event
|
42
41
|
const _onAccept = onAccept;
|
43
|
-
|
42
|
+
const ctx = getJazzContext();
|
43
|
+
const tryConsume = () => {
|
44
|
+
if (!ctx.current || !("me" in ctx.current))
|
45
|
+
return;
|
46
|
+
consumeInviteLinkFromWindowLocation({
|
47
|
+
as: ctx.current.me,
|
48
|
+
invitedObjectSchema,
|
49
|
+
forValueHint,
|
50
|
+
})
|
51
|
+
.then((result) => result && _onAccept(result.valueID))
|
52
|
+
.catch((e) => console.error("Failed to accept invite", e));
|
53
|
+
};
|
54
|
+
// run once when instantiated
|
44
55
|
$effect(() => {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
// If there is no context, return.
|
51
|
-
if (!ctx.current)
|
52
|
-
return;
|
53
|
-
if (!("me" in ctx.current))
|
54
|
-
return;
|
55
|
-
// Consume the invite link from the window location.
|
56
|
-
const result = consumeInviteLinkFromWindowLocation({
|
57
|
-
as: ctx.current.me,
|
58
|
-
invitedObjectSchema,
|
59
|
-
forValueHint,
|
60
|
-
});
|
61
|
-
// If the result is valid, call the onAccept function.
|
62
|
-
result
|
63
|
-
.then((result) => result && _onAccept(result?.valueID))
|
64
|
-
.catch((e) => {
|
65
|
-
console.error("Failed to accept invite", e);
|
66
|
-
});
|
67
|
-
});
|
56
|
+
untrack(tryConsume);
|
57
|
+
});
|
58
|
+
window.addEventListener("hashchange", tryConsume);
|
59
|
+
onDestroy(() => {
|
60
|
+
window.removeEventListener("hashchange", tryConsume);
|
68
61
|
});
|
69
62
|
}
|
70
63
|
}
|
package/.turbo/turbo-build.log
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
> jazz-tools@0.18.
|
2
|
+
> jazz-tools@0.18.11 build /home/runner/_work/jazz/jazz/packages/jazz-tools
|
3
3
|
> tsup && pnpm types && pnpm build:svelte
|
4
4
|
|
5
5
|
[34mCLI[39m Building entry: {"index":"src/index.ts","testing":"src/testing.ts"}
|
@@ -107,22 +107,22 @@
|
|
107
107
|
[34mESM[39m Build start
|
108
108
|
[34mCLI[39m Cleaning output folder
|
109
109
|
[34mESM[39m Build start
|
110
|
-
[32mESM[39m [1mdist/react/ssr.js [22m[32m688.00 B[39m
|
111
|
-
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.12 KB[39m
|
112
|
-
[32mESM[39m ⚡️ Build success in 26ms
|
113
|
-
[32mESM[39m [1mdist/worker/index.js [22m[32m2.47 KB[39m
|
114
|
-
[32mESM[39m [1mdist/worker/index.js.map [22m[32m5.26 KB[39m
|
115
|
-
[32mESM[39m ⚡️ Build success in 22ms
|
116
110
|
[32mESM[39m [1mdist/tiptap/index.js [22m[32m564.00 B[39m
|
117
111
|
[32mESM[39m [1mdist/tiptap/index.js.map [22m[32m1.21 KB[39m
|
118
|
-
[32mESM[39m ⚡️ Build success in
|
112
|
+
[32mESM[39m ⚡️ Build success in 11ms
|
113
|
+
[32mESM[39m [1mdist/react/ssr.js [22m[32m688.00 B[39m
|
114
|
+
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.12 KB[39m
|
115
|
+
[32mESM[39m ⚡️ Build success in 14ms
|
116
|
+
[32mESM[39m [1mdist/worker/index.js [22m[32m3.19 KB[39m
|
117
|
+
[32mESM[39m [1mdist/worker/index.js.map [22m[32m6.17 KB[39m
|
118
|
+
[32mESM[39m ⚡️ Build success in 14ms
|
119
119
|
[32mESM[39m [1mdist/better-auth/auth/client.js [22m[32m4.44 KB[39m
|
120
120
|
[32mESM[39m [1mdist/better-auth/auth/server.js [22m[32m8.36 KB[39m
|
121
121
|
[32mESM[39m [1mdist/better-auth/auth/react.js [22m[32m799.00 B[39m
|
122
122
|
[32mESM[39m [1mdist/better-auth/auth/client.js.map [22m[32m8.24 KB[39m
|
123
123
|
[32mESM[39m [1mdist/better-auth/auth/server.js.map [22m[32m15.29 KB[39m
|
124
124
|
[32mESM[39m [1mdist/better-auth/auth/react.js.map [22m[32m2.04 KB[39m
|
125
|
-
[32mESM[39m ⚡️ Build success in
|
125
|
+
[32mESM[39m ⚡️ Build success in 18ms
|
126
126
|
[32mESM[39m [1mdist/media/index.js [22m[32m236.00 B[39m
|
127
127
|
[32mESM[39m [1mdist/media/index.browser.js [22m[32m2.79 KB[39m
|
128
128
|
[32mESM[39m [1mdist/media/index.native.js [22m[32m2.90 KB[39m
|
@@ -133,67 +133,67 @@
|
|
133
133
|
[32mESM[39m [1mdist/media/index.native.js.map [22m[32m6.09 KB[39m
|
134
134
|
[32mESM[39m [1mdist/media/index.server.js.map [22m[32m6.37 KB[39m
|
135
135
|
[32mESM[39m [1mdist/media/chunk-W3S526L3.js.map [22m[32m16.57 KB[39m
|
136
|
-
[32mESM[39m ⚡️ Build success in
|
136
|
+
[32mESM[39m ⚡️ Build success in 25ms
|
137
137
|
[32mESM[39m [1mdist/expo/index.js [22m[32m4.68 KB[39m
|
138
138
|
[32mESM[39m [1mdist/expo/testing.js [22m[32m112.00 B[39m
|
139
139
|
[32mESM[39m [1mdist/expo/crypto.js [22m[32m153.00 B[39m
|
140
140
|
[32mESM[39m [1mdist/expo/index.js.map [22m[32m10.23 KB[39m
|
141
141
|
[32mESM[39m [1mdist/expo/testing.js.map [22m[32m168.00 B[39m
|
142
142
|
[32mESM[39m [1mdist/expo/crypto.js.map [22m[32m189.00 B[39m
|
143
|
-
[32mESM[39m ⚡️ Build success in
|
143
|
+
[32mESM[39m ⚡️ Build success in 24ms
|
144
|
+
[32mESM[39m [1mdist/browser/index.js [22m[32m13.64 KB[39m
|
145
|
+
[32mESM[39m [1mdist/browser/index.js.map [22m[32m29.14 KB[39m
|
146
|
+
[32mESM[39m ⚡️ Build success in 34ms
|
144
147
|
[32mESM[39m [1mdist/react-native/index.js [22m[32m2.53 KB[39m
|
145
148
|
[32mESM[39m [1mdist/react-native/testing.js [22m[32m120.00 B[39m
|
146
149
|
[32mESM[39m [1mdist/react-native/crypto.js [22m[32m161.00 B[39m
|
147
150
|
[32mESM[39m [1mdist/react-native/index.js.map [22m[32m5.68 KB[39m
|
148
151
|
[32mESM[39m [1mdist/react-native/testing.js.map [22m[32m176.00 B[39m
|
149
152
|
[32mESM[39m [1mdist/react-native/crypto.js.map [22m[32m197.00 B[39m
|
150
|
-
[32mESM[39m ⚡️ Build success in
|
151
|
-
[32mESM[39m [1mdist/browser/index.js [22m[32m13.64 KB[39m
|
152
|
-
[32mESM[39m [1mdist/browser/index.js.map [22m[32m29.14 KB[39m
|
153
|
-
[32mESM[39m ⚡️ Build success in 41ms
|
153
|
+
[32mESM[39m ⚡️ Build success in 29ms
|
154
154
|
[32mESM[39m [1mdist/react-native-core/index.js [22m[32m18.00 KB[39m
|
155
155
|
[32mESM[39m [1mdist/react-native-core/testing.js [22m[32m119.00 B[39m
|
156
156
|
[32mESM[39m [1mdist/react-native-core/crypto.js [22m[32m2.10 KB[39m
|
157
157
|
[32mESM[39m [1mdist/react-native-core/index.js.map [22m[32m36.73 KB[39m
|
158
158
|
[32mESM[39m [1mdist/react-native-core/testing.js.map [22m[32m175.00 B[39m
|
159
159
|
[32mESM[39m [1mdist/react-native-core/crypto.js.map [22m[32m4.25 KB[39m
|
160
|
-
[32mESM[39m ⚡️ Build success in
|
161
|
-
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m77.63 KB[39m
|
162
|
-
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m306.98 KB[39m
|
163
|
-
[32mESM[39m ⚡️ Build success in 49ms
|
164
|
-
[32mESM[39m [1mdist/react/index.js [22m[32m24.76 KB[39m
|
160
|
+
[32mESM[39m ⚡️ Build success in 38ms
|
165
161
|
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
166
|
-
[32mESM[39m [1mdist/react/index.js
|
162
|
+
[32mESM[39m [1mdist/react/index.js [22m[32m24.76 KB[39m
|
167
163
|
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
168
|
-
[32mESM[39m
|
164
|
+
[32mESM[39m [1mdist/react/index.js.map [22m[32m53.56 KB[39m
|
165
|
+
[32mESM[39m ⚡️ Build success in 41ms
|
166
|
+
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m77.63 KB[39m
|
167
|
+
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m306.98 KB[39m
|
168
|
+
[32mESM[39m ⚡️ Build success in 43ms
|
169
169
|
[32mESM[39m [1mdist/inspector/index.js [22m[32m69.71 KB[39m
|
170
170
|
[32mESM[39m [1mdist/inspector/index.js.map [22m[32m121.38 KB[39m
|
171
|
-
[32mESM[39m ⚡️ Build success in
|
171
|
+
[32mESM[39m ⚡️ Build success in 54ms
|
172
172
|
[32mESM[39m [1mdist/testing.js [22m[32m7.17 KB[39m
|
173
173
|
[32mESM[39m [1mdist/index.js [22m[32m26.13 KB[39m
|
174
174
|
[32mESM[39m [1mdist/chunk-RQHJFPIB.js [22m[32m169.74 KB[39m
|
175
175
|
[32mESM[39m [1mdist/testing.js.map [22m[32m14.10 KB[39m
|
176
176
|
[32mESM[39m [1mdist/index.js.map [22m[32m52.92 KB[39m
|
177
177
|
[32mESM[39m [1mdist/chunk-RQHJFPIB.js.map [22m[32m402.59 KB[39m
|
178
|
-
[32mESM[39m ⚡️ Build success in
|
179
|
-
[32mESM[39m [1mdist/react-core/index.js [22m[32m146.19 KB[39m
|
178
|
+
[32mESM[39m ⚡️ Build success in 78ms
|
180
179
|
[32mESM[39m [1mdist/react-core/testing.js [22m[32m1.17 KB[39m
|
181
180
|
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js [22m[32m279.00 B[39m
|
181
|
+
[32mESM[39m [1mdist/react-core/index.js [22m[32m146.19 KB[39m
|
182
182
|
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.82 KB[39m
|
183
183
|
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js.map [22m[32m533.00 B[39m
|
184
184
|
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m404.45 KB[39m
|
185
|
-
[32mESM[39m ⚡️ Build success in
|
185
|
+
[32mESM[39m ⚡️ Build success in 77ms
|
186
186
|
[32mESM[39m [1mdist/inspector/register-custom-element.js [22m[32m218.00 B[39m
|
187
187
|
[32mESM[39m [1mdist/inspector/register-custom-element.js.map [22m[32m314.00 B[39m
|
188
188
|
[32mESM[39m [1mdist/inspector/custom-element-G6SPZEBR.js [22m[32m1.54 MB[39m
|
189
189
|
[32mESM[39m [1mdist/inspector/custom-element-G6SPZEBR.js.map [22m[32m2.36 MB[39m
|
190
|
-
[32mESM[39m ⚡️ Build success in
|
190
|
+
[32mESM[39m ⚡️ Build success in 109ms
|
191
191
|
|
192
|
-
> jazz-tools@0.18.
|
192
|
+
> jazz-tools@0.18.11 types /home/runner/_work/jazz/jazz/packages/jazz-tools
|
193
193
|
> tsc --outDir dist
|
194
194
|
|
195
195
|
|
196
|
-
> jazz-tools@0.18.
|
196
|
+
> jazz-tools@0.18.11 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
|
197
197
|
> rm -rf dist/svelte && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json
|
198
198
|
|
199
199
|
src/svelte -> dist/svelte
|
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# jazz-tools
|
2
2
|
|
3
|
+
## 0.18.11
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- 06b4617: Update the Svelte InviteListener to listen to hash change events
|
8
|
+
- 70eb465: Add docs to the worker API and deprecate done in favor of shutdownWorker
|
9
|
+
- Updated dependencies [a4a9a1e]
|
10
|
+
- cojson@0.18.11
|
11
|
+
- cojson-storage-indexeddb@0.18.11
|
12
|
+
- cojson-transport-ws@0.18.11
|
13
|
+
|
3
14
|
## 0.18.10
|
4
15
|
|
5
16
|
### Patch Changes
|
@@ -32,7 +32,7 @@ export declare function getAuthSecretStorage(): AuthSecretStorage;
|
|
32
32
|
export declare class InviteListener<V extends CoValueClassOrSchema> {
|
33
33
|
constructor({ invitedObjectSchema, onAccept, forValueHint, }: {
|
34
34
|
invitedObjectSchema: V;
|
35
|
-
onAccept: (
|
35
|
+
onAccept: (coValueID: ID<V>) => void;
|
36
36
|
forValueHint?: string;
|
37
37
|
});
|
38
38
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jazz.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/jazz.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACpB,EAAE,EAEF,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,QAAQ,IAAK,CAAC;AAC3B,eAAO,MAAM,aAAa,IAAK,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,OAAO,IAAI;IAC7C,OAAO,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAS,OAAO,KAW9B;IAChB,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAC/B,CACF;AAED,wBAAgB,oBAAoB,sBAUnC;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,oBAAoB;gBAC5C,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,GACb,EAAE;QACD,mBAAmB,EAAE,CAAC,CAAC;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;
|
1
|
+
{"version":3,"file":"jazz.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/jazz.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACpB,EAAE,EAEF,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,QAAQ,IAAK,CAAC;AAC3B,eAAO,MAAM,aAAa,IAAK,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,OAAO,IAAI;IAC7C,OAAO,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAS,OAAO,KAW9B;IAChB,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAC/B,CACF;AAED,wBAAgB,oBAAoB,sBAUnC;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,oBAAoB;gBAC5C,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,GACb,EAAE;QACD,mBAAmB,EAAE,CAAC,CAAC;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;CA2BF"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { consumeInviteLinkFromWindowLocation } from "jazz-tools/browser";
|
2
|
-
import { getContext, untrack } from "svelte";
|
2
|
+
import { getContext, onDestroy, untrack } from "svelte";
|
3
3
|
import Provider from "./Provider.svelte";
|
4
4
|
export { Provider as JazzSvelteProvider };
|
5
5
|
/**
|
@@ -38,33 +38,26 @@ export function getAuthSecretStorage() {
|
|
38
38
|
*/
|
39
39
|
export class InviteListener {
|
40
40
|
constructor({ invitedObjectSchema, onAccept, forValueHint, }) {
|
41
|
-
// TODO Listen to the hashchange event
|
42
41
|
const _onAccept = onAccept;
|
43
|
-
|
42
|
+
const ctx = getJazzContext();
|
43
|
+
const tryConsume = () => {
|
44
|
+
if (!ctx.current || !("me" in ctx.current))
|
45
|
+
return;
|
46
|
+
consumeInviteLinkFromWindowLocation({
|
47
|
+
as: ctx.current.me,
|
48
|
+
invitedObjectSchema,
|
49
|
+
forValueHint,
|
50
|
+
})
|
51
|
+
.then((result) => result && _onAccept(result.valueID))
|
52
|
+
.catch((e) => console.error("Failed to accept invite", e));
|
53
|
+
};
|
54
|
+
// run once when instantiated
|
44
55
|
$effect(() => {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
// If there is no context, return.
|
51
|
-
if (!ctx.current)
|
52
|
-
return;
|
53
|
-
if (!("me" in ctx.current))
|
54
|
-
return;
|
55
|
-
// Consume the invite link from the window location.
|
56
|
-
const result = consumeInviteLinkFromWindowLocation({
|
57
|
-
as: ctx.current.me,
|
58
|
-
invitedObjectSchema,
|
59
|
-
forValueHint,
|
60
|
-
});
|
61
|
-
// If the result is valid, call the onAccept function.
|
62
|
-
result
|
63
|
-
.then((result) => result && _onAccept(result?.valueID))
|
64
|
-
.catch((e) => {
|
65
|
-
console.error("Failed to accept invite", e);
|
66
|
-
});
|
67
|
-
});
|
56
|
+
untrack(tryConsume);
|
57
|
+
});
|
58
|
+
window.addEventListener("hashchange", tryConsume);
|
59
|
+
onDestroy(() => {
|
60
|
+
window.removeEventListener("hashchange", tryConsume);
|
68
61
|
});
|
69
62
|
}
|
70
63
|
}
|
package/dist/worker/index.d.ts
CHANGED
@@ -19,17 +19,43 @@ type WorkerOptions<S extends (AccountClass<Account> & CoValueFromRaw<Account>) |
|
|
19
19
|
};
|
20
20
|
/** @category Context Creation */
|
21
21
|
export declare function startWorker<S extends (AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema>(options: WorkerOptions<S>): Promise<{
|
22
|
+
/**
|
23
|
+
* The worker account instance.
|
24
|
+
*/
|
22
25
|
worker: Loaded<S>;
|
23
26
|
experimental: {
|
27
|
+
/**
|
28
|
+
* API to subscribe to the inbox messages.
|
29
|
+
*
|
30
|
+
* More info on the Inbox API: https://jazz.tools/docs/react/server-side/inbox
|
31
|
+
*/
|
24
32
|
inbox: {
|
25
33
|
subscribe: Inbox["subscribe"];
|
26
34
|
} | {
|
27
35
|
subscribe: () => void;
|
28
36
|
};
|
29
37
|
};
|
38
|
+
/**
|
39
|
+
* Wait for the connection to the sync server to be established.
|
40
|
+
*
|
41
|
+
* If already connected, it will resolve immediately.
|
42
|
+
*/
|
30
43
|
waitForConnection(): Promise<void>;
|
31
44
|
subscribeToConnectionChange(listener: (connected: boolean) => void): () => void;
|
45
|
+
/**
|
46
|
+
* Waits for all CoValues to sync and then shuts down the worker.
|
47
|
+
*
|
48
|
+
* To only wait for sync use worker.$jazz.waitForAllCoValuesSync()
|
49
|
+
*
|
50
|
+
* @deprecated Use shutdownWorker
|
51
|
+
*/
|
32
52
|
done: () => Promise<void>;
|
53
|
+
/**
|
54
|
+
* Waits for all CoValues to sync and then shuts down the worker.
|
55
|
+
*
|
56
|
+
* To only wait for sync use worker.$jazz.waitForAllCoValuesSync()
|
57
|
+
*/
|
58
|
+
shutdownWorker(): Promise<void>;
|
33
59
|
}>;
|
34
60
|
export {};
|
35
61
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,cAAc,EAAmB,MAAM,QAAQ,CAAC;AACtE,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,KAAK,EAEL,MAAM,EAGP,MAAM,YAAY,CAAC;AAEpB,KAAK,aAAa,CAChB,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,IAClB;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,iCAAiC;AACjC,wBAAsB,WAAW,CAC/B,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,EACpB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,cAAc,EAAmB,MAAM,QAAQ,CAAC;AACtE,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,KAAK,EAEL,MAAM,EAGP,MAAM,YAAY,CAAC;AAEpB,KAAK,aAAa,CAChB,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,IAClB;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,iCAAiC;AACjC,wBAAsB,WAAW,CAC/B,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,EACpB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IAgFvB;;OAEG;YACwB,MAAM,CAAC,CAAC,CAAC;;QAElC;;;;WAIG;;uBAhByC,KAAK,CAAC,WAAW,CAAC;;;;;IAmBhE;;;;OAIG;;0CAImC,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI;IAOlE;;;;;;OAMG;;IAEH;;;;OAIG;;GAKN"}
|
package/dist/worker/index.js
CHANGED
@@ -53,7 +53,6 @@ async function startWorker(options) {
|
|
53
53
|
secret: accountSecret
|
54
54
|
},
|
55
55
|
AccountSchema,
|
56
|
-
// TODO: locked sessions similar to browser
|
57
56
|
sessionProvider: randomSessionProvider,
|
58
57
|
peersToLoadFrom,
|
59
58
|
crypto: options.crypto ?? await WasmCrypto.create(),
|
@@ -77,10 +76,23 @@ async function startWorker(options) {
|
|
77
76
|
}
|
78
77
|
};
|
79
78
|
return {
|
79
|
+
/**
|
80
|
+
* The worker account instance.
|
81
|
+
*/
|
80
82
|
worker: context.account,
|
81
83
|
experimental: {
|
84
|
+
/**
|
85
|
+
* API to subscribe to the inbox messages.
|
86
|
+
*
|
87
|
+
* More info on the Inbox API: https://jazz.tools/docs/react/server-side/inbox
|
88
|
+
*/
|
82
89
|
inbox: inboxPublicApi
|
83
90
|
},
|
91
|
+
/**
|
92
|
+
* Wait for the connection to the sync server to be established.
|
93
|
+
*
|
94
|
+
* If already connected, it will resolve immediately.
|
95
|
+
*/
|
84
96
|
waitForConnection() {
|
85
97
|
return wsPeer.waitUntilConnected();
|
86
98
|
},
|
@@ -90,7 +102,22 @@ async function startWorker(options) {
|
|
90
102
|
wsPeer.unsubscribe(listener);
|
91
103
|
};
|
92
104
|
},
|
93
|
-
|
105
|
+
/**
|
106
|
+
* Waits for all CoValues to sync and then shuts down the worker.
|
107
|
+
*
|
108
|
+
* To only wait for sync use worker.$jazz.waitForAllCoValuesSync()
|
109
|
+
*
|
110
|
+
* @deprecated Use shutdownWorker
|
111
|
+
*/
|
112
|
+
done,
|
113
|
+
/**
|
114
|
+
* Waits for all CoValues to sync and then shuts down the worker.
|
115
|
+
*
|
116
|
+
* To only wait for sync use worker.$jazz.waitForAllCoValuesSync()
|
117
|
+
*/
|
118
|
+
shutdownWorker() {
|
119
|
+
return done();
|
120
|
+
}
|
94
121
|
};
|
95
122
|
}
|
96
123
|
export {
|
package/dist/worker/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/worker/index.ts"],"sourcesContent":["import { AgentSecret, CryptoProvider, LocalNode, Peer } from \"cojson\";\nimport {\n type AnyWebSocketConstructor,\n WebSocketPeerWithReconnection,\n} from \"cojson-transport-ws\";\nimport { WasmCrypto } from \"cojson/crypto/WasmCrypto\";\nimport {\n Account,\n AccountClass,\n AnyAccountSchema,\n CoValueFromRaw,\n Inbox,\n InstanceOfSchema,\n Loaded,\n createJazzContextFromExistingCredentials,\n randomSessionProvider,\n} from \"jazz-tools\";\n\ntype WorkerOptions<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n> = {\n accountID?: string;\n accountSecret?: string;\n syncServer?: string;\n WebSocket?: AnyWebSocketConstructor;\n AccountSchema?: S;\n crypto?: CryptoProvider;\n /**\n * If true, the inbox will not be loaded.\n */\n skipInboxLoad?: boolean;\n /**\n * If false, the worker will not set in the global account context\n */\n asActiveAccount?: boolean;\n};\n\n/** @category Context Creation */\nexport async function startWorker<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n>(options: WorkerOptions<S>) {\n const {\n accountID = process.env.JAZZ_WORKER_ACCOUNT,\n accountSecret = process.env.JAZZ_WORKER_SECRET,\n syncServer = \"wss://cloud.jazz.tools\",\n AccountSchema = Account as unknown as S,\n skipInboxLoad = false,\n asActiveAccount = true,\n } = options;\n\n let node: LocalNode | undefined = undefined;\n\n const peersToLoadFrom: Peer[] = [];\n\n const wsPeer = new WebSocketPeerWithReconnection({\n peer: syncServer,\n reconnectionTimeout: 100,\n addPeer: (peer) => {\n if (node) {\n node.syncManager.addPeer(peer);\n } else {\n peersToLoadFrom.push(peer);\n }\n },\n removePeer: () => {},\n WebSocketConstructor: options.WebSocket,\n });\n\n wsPeer.enable();\n\n if (!accountID) {\n throw new Error(\"No accountID provided\");\n }\n if (!accountSecret) {\n throw new Error(\"No accountSecret provided\");\n }\n if (!accountID.startsWith(\"co_\")) {\n throw new Error(\"Invalid accountID\");\n }\n if (!accountSecret?.startsWith(\"sealerSecret_\")) {\n throw new Error(\"Invalid accountSecret\");\n }\n\n const context = await createJazzContextFromExistingCredentials({\n credentials: {\n accountID: accountID,\n secret: accountSecret as AgentSecret,\n },\n AccountSchema,\n
|
1
|
+
{"version":3,"sources":["../../src/worker/index.ts"],"sourcesContent":["import { AgentSecret, CryptoProvider, LocalNode, Peer } from \"cojson\";\nimport {\n type AnyWebSocketConstructor,\n WebSocketPeerWithReconnection,\n} from \"cojson-transport-ws\";\nimport { WasmCrypto } from \"cojson/crypto/WasmCrypto\";\nimport {\n Account,\n AccountClass,\n AnyAccountSchema,\n CoValueFromRaw,\n Inbox,\n InstanceOfSchema,\n Loaded,\n createJazzContextFromExistingCredentials,\n randomSessionProvider,\n} from \"jazz-tools\";\n\ntype WorkerOptions<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n> = {\n accountID?: string;\n accountSecret?: string;\n syncServer?: string;\n WebSocket?: AnyWebSocketConstructor;\n AccountSchema?: S;\n crypto?: CryptoProvider;\n /**\n * If true, the inbox will not be loaded.\n */\n skipInboxLoad?: boolean;\n /**\n * If false, the worker will not set in the global account context\n */\n asActiveAccount?: boolean;\n};\n\n/** @category Context Creation */\nexport async function startWorker<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n>(options: WorkerOptions<S>) {\n const {\n accountID = process.env.JAZZ_WORKER_ACCOUNT,\n accountSecret = process.env.JAZZ_WORKER_SECRET,\n syncServer = \"wss://cloud.jazz.tools\",\n AccountSchema = Account as unknown as S,\n skipInboxLoad = false,\n asActiveAccount = true,\n } = options;\n\n let node: LocalNode | undefined = undefined;\n\n const peersToLoadFrom: Peer[] = [];\n\n const wsPeer = new WebSocketPeerWithReconnection({\n peer: syncServer,\n reconnectionTimeout: 100,\n addPeer: (peer) => {\n if (node) {\n node.syncManager.addPeer(peer);\n } else {\n peersToLoadFrom.push(peer);\n }\n },\n removePeer: () => {},\n WebSocketConstructor: options.WebSocket,\n });\n\n wsPeer.enable();\n\n if (!accountID) {\n throw new Error(\"No accountID provided\");\n }\n if (!accountSecret) {\n throw new Error(\"No accountSecret provided\");\n }\n if (!accountID.startsWith(\"co_\")) {\n throw new Error(\"Invalid accountID\");\n }\n if (!accountSecret?.startsWith(\"sealerSecret_\")) {\n throw new Error(\"Invalid accountSecret\");\n }\n\n const context = await createJazzContextFromExistingCredentials({\n credentials: {\n accountID: accountID,\n secret: accountSecret as AgentSecret,\n },\n AccountSchema,\n sessionProvider: randomSessionProvider,\n peersToLoadFrom,\n crypto: options.crypto ?? (await WasmCrypto.create()),\n asActiveAccount,\n });\n\n const account = context.account as InstanceOfSchema<S>;\n node = account.$jazz.localNode;\n\n if (!account.$jazz.refs.profile?.id) {\n throw new Error(\"Account has no profile\");\n }\n\n const inbox = skipInboxLoad ? undefined : await Inbox.load(account);\n\n async function done() {\n await context.account.$jazz.waitForAllCoValuesSync();\n\n wsPeer.disable();\n context.done();\n }\n\n const inboxPublicApi = inbox\n ? {\n subscribe: inbox.subscribe.bind(inbox) as Inbox[\"subscribe\"],\n }\n : {\n subscribe: () => {},\n };\n\n return {\n /**\n * The worker account instance.\n */\n worker: context.account as Loaded<S>,\n experimental: {\n /**\n * API to subscribe to the inbox messages.\n *\n * More info on the Inbox API: https://jazz.tools/docs/react/server-side/inbox\n */\n inbox: inboxPublicApi,\n },\n /**\n * Wait for the connection to the sync server to be established.\n *\n * If already connected, it will resolve immediately.\n */\n waitForConnection() {\n return wsPeer.waitUntilConnected();\n },\n subscribeToConnectionChange(listener: (connected: boolean) => void) {\n wsPeer.subscribe(listener);\n\n return () => {\n wsPeer.unsubscribe(listener);\n };\n },\n /**\n * Waits for all CoValues to sync and then shuts down the worker.\n *\n * To only wait for sync use worker.$jazz.waitForAllCoValuesSync()\n *\n * @deprecated Use shutdownWorker\n */\n done,\n /**\n * Waits for all CoValues to sync and then shuts down the worker.\n *\n * To only wait for sync use worker.$jazz.waitForAllCoValuesSync()\n */\n shutdownWorker() {\n return done();\n },\n };\n}\n"],"mappings":";AACA;AAAA,EAEE;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EAIA;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAwBP,eAAsB,YAIpB,SAA2B;AAC3B,QAAM;AAAA,IACJ,YAAY,QAAQ,IAAI;AAAA,IACxB,gBAAgB,QAAQ,IAAI;AAAA,IAC5B,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,EACpB,IAAI;AAEJ,MAAI,OAA8B;AAElC,QAAM,kBAA0B,CAAC;AAEjC,QAAM,SAAS,IAAI,8BAA8B;AAAA,IAC/C,MAAM;AAAA,IACN,qBAAqB;AAAA,IACrB,SAAS,CAAC,SAAS;AACjB,UAAI,MAAM;AACR,aAAK,YAAY,QAAQ,IAAI;AAAA,MAC/B,OAAO;AACL,wBAAgB,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,YAAY,MAAM;AAAA,IAAC;AAAA,IACnB,sBAAsB,QAAQ;AAAA,EAChC,CAAC;AAED,SAAO,OAAO;AAEd,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AACA,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACA,MAAI,CAAC,UAAU,WAAW,KAAK,GAAG;AAChC,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AACA,MAAI,CAAC,eAAe,WAAW,eAAe,GAAG;AAC/C,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AAEA,QAAM,UAAU,MAAM,yCAAyC;AAAA,IAC7D,aAAa;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,QAAQ,QAAQ,UAAW,MAAM,WAAW,OAAO;AAAA,IACnD;AAAA,EACF,CAAC;AAED,QAAM,UAAU,QAAQ;AACxB,SAAO,QAAQ,MAAM;AAErB,MAAI,CAAC,QAAQ,MAAM,KAAK,SAAS,IAAI;AACnC,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,QAAQ,gBAAgB,SAAY,MAAM,MAAM,KAAK,OAAO;AAElE,iBAAe,OAAO;AACpB,UAAM,QAAQ,QAAQ,MAAM,uBAAuB;AAEnD,WAAO,QAAQ;AACf,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,iBAAiB,QACnB;AAAA,IACE,WAAW,MAAM,UAAU,KAAK,KAAK;AAAA,EACvC,IACA;AAAA,IACE,WAAW,MAAM;AAAA,IAAC;AAAA,EACpB;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,QAAQ,QAAQ;AAAA,IAChB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,OAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,oBAAoB;AAClB,aAAO,OAAO,mBAAmB;AAAA,IACnC;AAAA,IACA,4BAA4B,UAAwC;AAClE,aAAO,UAAU,QAAQ;AAEzB,aAAO,MAAM;AACX,eAAO,YAAY,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,iBAAiB;AACf,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;","names":[]}
|
package/package.json
CHANGED
@@ -167,7 +167,7 @@
|
|
167
167
|
},
|
168
168
|
"type": "module",
|
169
169
|
"license": "MIT",
|
170
|
-
"version": "0.18.
|
170
|
+
"version": "0.18.11",
|
171
171
|
"dependencies": {
|
172
172
|
"@manuscripts/prosemirror-recreate-steps": "^0.1.4",
|
173
173
|
"@scure/base": "1.2.1",
|
@@ -184,9 +184,9 @@
|
|
184
184
|
"prosemirror-transform": "^1.9.0",
|
185
185
|
"use-sync-external-store": "^1.5.0",
|
186
186
|
"zod": "3.25.76",
|
187
|
-
"cojson": "0.18.
|
188
|
-
"cojson-storage-indexeddb": "0.18.
|
189
|
-
"cojson-transport-ws": "0.18.
|
187
|
+
"cojson": "0.18.11",
|
188
|
+
"cojson-storage-indexeddb": "0.18.11",
|
189
|
+
"cojson-transport-ws": "0.18.11"
|
190
190
|
},
|
191
191
|
"devDependencies": {
|
192
192
|
"@scure/bip39": "^1.3.0",
|
@@ -8,7 +8,7 @@ import type {
|
|
8
8
|
} from "jazz-tools";
|
9
9
|
import { Account } from "jazz-tools";
|
10
10
|
import { consumeInviteLinkFromWindowLocation } from "jazz-tools/browser";
|
11
|
-
import { getContext, untrack } from "svelte";
|
11
|
+
import { getContext, onDestroy, untrack } from "svelte";
|
12
12
|
import Provider from "./Provider.svelte";
|
13
13
|
|
14
14
|
export { Provider as JazzSvelteProvider };
|
@@ -73,37 +73,33 @@ export class InviteListener<V extends CoValueClassOrSchema> {
|
|
73
73
|
forValueHint,
|
74
74
|
}: {
|
75
75
|
invitedObjectSchema: V;
|
76
|
-
onAccept: (
|
76
|
+
onAccept: (coValueID: ID<V>) => void;
|
77
77
|
forValueHint?: string;
|
78
78
|
}) {
|
79
|
-
// TODO Listen to the hashchange event
|
80
79
|
const _onAccept = onAccept;
|
80
|
+
const ctx = getJazzContext<InstanceOfSchema<AccountClass<Account>>>();
|
81
81
|
|
82
|
-
|
82
|
+
const tryConsume = () => {
|
83
|
+
if (!ctx.current || !("me" in ctx.current)) return;
|
84
|
+
|
85
|
+
consumeInviteLinkFromWindowLocation({
|
86
|
+
as: ctx.current.me,
|
87
|
+
invitedObjectSchema,
|
88
|
+
forValueHint,
|
89
|
+
})
|
90
|
+
.then((result) => result && _onAccept(result.valueID))
|
91
|
+
.catch((e) => console.error("Failed to accept invite", e));
|
92
|
+
};
|
93
|
+
|
94
|
+
// run once when instantiated
|
83
95
|
$effect(() => {
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
if (!ctx.current) return;
|
92
|
-
if (!("me" in ctx.current)) return;
|
93
|
-
|
94
|
-
// Consume the invite link from the window location.
|
95
|
-
const result = consumeInviteLinkFromWindowLocation({
|
96
|
-
as: ctx.current.me,
|
97
|
-
invitedObjectSchema,
|
98
|
-
forValueHint,
|
99
|
-
});
|
100
|
-
// If the result is valid, call the onAccept function.
|
101
|
-
result
|
102
|
-
.then((result) => result && _onAccept(result?.valueID))
|
103
|
-
.catch((e) => {
|
104
|
-
console.error("Failed to accept invite", e);
|
105
|
-
});
|
106
|
-
});
|
96
|
+
untrack(tryConsume);
|
97
|
+
});
|
98
|
+
|
99
|
+
window.addEventListener("hashchange", tryConsume);
|
100
|
+
|
101
|
+
onDestroy(() => {
|
102
|
+
window.removeEventListener("hashchange", tryConsume);
|
107
103
|
});
|
108
104
|
}
|
109
105
|
}
|
package/src/worker/index.ts
CHANGED
@@ -91,7 +91,6 @@ export async function startWorker<
|
|
91
91
|
secret: accountSecret as AgentSecret,
|
92
92
|
},
|
93
93
|
AccountSchema,
|
94
|
-
// TODO: locked sessions similar to browser
|
95
94
|
sessionProvider: randomSessionProvider,
|
96
95
|
peersToLoadFrom,
|
97
96
|
crypto: options.crypto ?? (await WasmCrypto.create()),
|
@@ -123,10 +122,23 @@ export async function startWorker<
|
|
123
122
|
};
|
124
123
|
|
125
124
|
return {
|
125
|
+
/**
|
126
|
+
* The worker account instance.
|
127
|
+
*/
|
126
128
|
worker: context.account as Loaded<S>,
|
127
129
|
experimental: {
|
130
|
+
/**
|
131
|
+
* API to subscribe to the inbox messages.
|
132
|
+
*
|
133
|
+
* More info on the Inbox API: https://jazz.tools/docs/react/server-side/inbox
|
134
|
+
*/
|
128
135
|
inbox: inboxPublicApi,
|
129
136
|
},
|
137
|
+
/**
|
138
|
+
* Wait for the connection to the sync server to be established.
|
139
|
+
*
|
140
|
+
* If already connected, it will resolve immediately.
|
141
|
+
*/
|
130
142
|
waitForConnection() {
|
131
143
|
return wsPeer.waitUntilConnected();
|
132
144
|
},
|
@@ -137,6 +149,21 @@ export async function startWorker<
|
|
137
149
|
wsPeer.unsubscribe(listener);
|
138
150
|
};
|
139
151
|
},
|
152
|
+
/**
|
153
|
+
* Waits for all CoValues to sync and then shuts down the worker.
|
154
|
+
*
|
155
|
+
* To only wait for sync use worker.$jazz.waitForAllCoValuesSync()
|
156
|
+
*
|
157
|
+
* @deprecated Use shutdownWorker
|
158
|
+
*/
|
140
159
|
done,
|
160
|
+
/**
|
161
|
+
* Waits for all CoValues to sync and then shuts down the worker.
|
162
|
+
*
|
163
|
+
* To only wait for sync use worker.$jazz.waitForAllCoValuesSync()
|
164
|
+
*/
|
165
|
+
shutdownWorker() {
|
166
|
+
return done();
|
167
|
+
},
|
141
168
|
};
|
142
169
|
}
|