@party-stack/web-runtime 0.2.0 → 0.3.0

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.
@@ -8,5 +8,6 @@ export declare class OPFSBlobBytesStore implements BlobBytesStore {
8
8
  write(id: string, blob: Blob): Promise<void>;
9
9
  read(id: string): Promise<Blob>;
10
10
  delete(id: string): Promise<void>;
11
+ clear(): Promise<void>;
11
12
  }
12
13
  //# sourceMappingURL=OPFSBlobBytesStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OPFSBlobBytesStore.d.ts","sourceRoot":"","sources":["../src/OPFSBlobBytesStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,yBAAyB;IACtC,aAAa,EAAE,MAAM,CAAC;CACzB;AAMD,qBAAa,kBAAmB,YAAW,cAAc;;gBAGzC,OAAO,EAAE,yBAAyB;IAIxC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB1C"}
1
+ {"version":3,"file":"OPFSBlobBytesStore.d.ts","sourceRoot":"","sources":["../src/OPFSBlobBytesStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,yBAAyB;IACtC,aAAa,EAAE,MAAM,CAAC;CACzB;AAMD,qBAAa,kBAAmB,YAAW,cAAc;;gBAGzC,OAAO,EAAE,yBAAyB;IAIxC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB/B"}
@@ -36,6 +36,21 @@ export class OPFSBlobBytesStore {
36
36
  throw error;
37
37
  }
38
38
  }
39
+ async clear() {
40
+ const root = await navigator.storage.getDirectory();
41
+ try {
42
+ await root.removeEntry(this.#directoryName, {
43
+ recursive: true,
44
+ });
45
+ }
46
+ catch (error) {
47
+ if (error instanceof DOMException &&
48
+ error.name === "NotFoundError") {
49
+ return;
50
+ }
51
+ throw error;
52
+ }
53
+ }
39
54
  async #directory() {
40
55
  const root = await navigator.storage.getDirectory();
41
56
  return root.getDirectoryHandle(this.#directoryName, { create: true });
@@ -1 +1 @@
1
- {"version":3,"file":"OPFSBlobBytesStore.js","sourceRoot":"","sources":["../src/OPFSBlobBytesStore.ts"],"names":[],"mappings":"AAMA,SAAS,cAAc,CAAC,EAAU;IAC9B,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,kBAAkB;IAC3B,cAAc,CAAS;IAEvB,YAAY,OAAkC;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,IAAU;QAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;YACjE,MAAM,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;QACnD,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACP,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU;QACjB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC;YACD,MAAM,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAClE,OAAO;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;CACJ"}
1
+ {"version":3,"file":"OPFSBlobBytesStore.js","sourceRoot":"","sources":["../src/OPFSBlobBytesStore.ts"],"names":[],"mappings":"AAMA,SAAS,cAAc,CAAC,EAAU;IAC9B,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,kBAAkB;IAC3B,cAAc,CAAS;IAEvB,YAAY,OAAkC;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,IAAU;QAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;YACjE,MAAM,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;QACnD,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACP,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU;QACjB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC;YACD,MAAM,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAClE,OAAO;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,GACN,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC3C,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,WAAW,CAClB,IAAI,CAAC,cAAc,EACnB;gBACI,SAAS,EAAE,IAAI;aAClB,CACJ,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IACI,KAAK,YAAY,YAAY;gBAC7B,KAAK,CAAC,IAAI,KAAK,eAAe,EAChC,CAAC;gBACC,OAAO;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;CACJ"}
@@ -0,0 +1,6 @@
1
+ import { type BrowserAuthentication } from "@party-stack/runtime";
2
+ export declare function createWebBrowserAuthentication(options?: {
3
+ popupTarget?: string;
4
+ popupFeatures?: string;
5
+ }): BrowserAuthentication;
6
+ //# sourceMappingURL=createWebBrowserAuthentication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWebBrowserAuthentication.d.ts","sourceRoot":"","sources":["../src/createWebBrowserAuthentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,qBAAqB,EAE7B,MAAM,sBAAsB,CAAC;AA0B9B,wBAAgB,8BAA8B,CAAC,OAAO,GAAE;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,qBAAqB,CAsF7B"}
@@ -0,0 +1,79 @@
1
+ import { BrowserAuthenticationCancelledError, } from "@party-stack/runtime";
2
+ function matchesRedirectUrl(candidate, redirectUrl) {
3
+ const actual = new URL(candidate);
4
+ const expected = new URL(redirectUrl);
5
+ return (actual.origin === expected.origin &&
6
+ actual.pathname === expected.pathname);
7
+ }
8
+ function createRedirectSession() {
9
+ return {
10
+ open(authorizationUrl) {
11
+ location.assign(authorizationUrl);
12
+ return new Promise(() => undefined);
13
+ },
14
+ close() {
15
+ window.stop();
16
+ },
17
+ };
18
+ }
19
+ export function createWebBrowserAuthentication(options = {}) {
20
+ return {
21
+ start({ redirectUrl, presentation }) {
22
+ if (presentation !== "popup") {
23
+ return createRedirectSession();
24
+ }
25
+ const popup = window.open("about:blank", options.popupTarget ??
26
+ "party-stack-authentication", options.popupFeatures ??
27
+ "popup=yes,width=500,height=700");
28
+ if (!popup)
29
+ return createRedirectSession();
30
+ let stopWaiting;
31
+ let cancel;
32
+ return {
33
+ open(authorizationUrl) {
34
+ popup.location.assign(authorizationUrl);
35
+ return new Promise((resolve, reject) => {
36
+ cancel = () => {
37
+ stopWaiting?.();
38
+ cancel = undefined;
39
+ reject(new BrowserAuthenticationCancelledError());
40
+ };
41
+ const timer = window.setInterval(() => {
42
+ if (popup.closed) {
43
+ cancel?.();
44
+ return;
45
+ }
46
+ try {
47
+ const current = popup.location.href;
48
+ if (!matchesRedirectUrl(current, redirectUrl)) {
49
+ return;
50
+ }
51
+ stopWaiting?.();
52
+ cancel =
53
+ undefined;
54
+ popup.close();
55
+ resolve({
56
+ callbackUrl: current,
57
+ });
58
+ }
59
+ catch {
60
+ // Cross-origin access is expected until the provider returns.
61
+ }
62
+ }, 250);
63
+ stopWaiting = () => {
64
+ window.clearInterval(timer);
65
+ stopWaiting =
66
+ undefined;
67
+ };
68
+ });
69
+ },
70
+ close() {
71
+ stopWaiting?.();
72
+ popup.close();
73
+ cancel?.();
74
+ },
75
+ };
76
+ },
77
+ };
78
+ }
79
+ //# sourceMappingURL=createWebBrowserAuthentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWebBrowserAuthentication.js","sourceRoot":"","sources":["../src/createWebBrowserAuthentication.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mCAAmC,GAGtC,MAAM,sBAAsB,CAAC;AAE9B,SAAS,kBAAkB,CACvB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,CACH,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QACjC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CACxC,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB;IAC1B,OAAO;QACH,IAAI,CAAC,gBAAgB;YACjB,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAClC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,KAAK;YACD,MAAM,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,UAG3C,EAAE;IACF,OAAO;QACH,KAAK,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE;YAC/B,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;gBAC3B,OAAO,qBAAqB,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACrB,aAAa,EACb,OAAO,CAAC,WAAW;gBACf,4BAA4B,EAChC,OAAO,CAAC,aAAa;gBACjB,gCAAgC,CACvC,CAAC;YACF,IAAI,CAAC,KAAK;gBAAE,OAAO,qBAAqB,EAAE,CAAC;YAE3C,IAAI,WAEW,CAAC;YAChB,IAAI,MAEW,CAAC;YAChB,OAAO;gBACH,IAAI,CAAC,gBAAgB;oBACjB,KAAK,CAAC,QAAQ,CAAC,MAAM,CACjB,gBAAgB,CACnB,CAAC;oBACF,OAAO,IAAI,OAAO,CAGd,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAChB,MAAM,GAAG,GAAG,EAAE;4BACV,WAAW,EAAE,EAAE,CAAC;4BAChB,MAAM,GAAG,SAAS,CAAC;4BACnB,MAAM,CACF,IAAI,mCAAmC,EAAE,CAC5C,CAAC;wBACN,CAAC,CAAC;wBACF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC5B,GAAG,EAAE;4BACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gCACf,MAAM,EAAE,EAAE,CAAC;gCACX,OAAO;4BACX,CAAC;4BACD,IAAI,CAAC;gCACD,MAAM,OAAO,GACT,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gCACxB,IACI,CAAC,kBAAkB,CACf,OAAO,EACP,WAAW,CACd,EACH,CAAC;oCACC,OAAO;gCACX,CAAC;gCACD,WAAW,EAAE,EAAE,CAAC;gCAChB,MAAM;oCACF,SAAS,CAAC;gCACd,KAAK,CAAC,KAAK,EAAE,CAAC;gCACd,OAAO,CAAC;oCACJ,WAAW,EACP,OAAO;iCACd,CAAC,CAAC;4BACP,CAAC;4BAAC,MAAM,CAAC;gCACL,8DAA8D;4BAClE,CAAC;wBACL,CAAC,EACD,GAAG,CACN,CAAC;wBACF,WAAW,GAAG,GAAG,EAAE;4BACf,MAAM,CAAC,aAAa,CAChB,KAAK,CACR,CAAC;4BACF,WAAW;gCACP,SAAS,CAAC;wBAClB,CAAC,CAAC;oBACN,CAAC,CACJ,CAAC;gBACN,CAAC;gBACD,KAAK;oBACD,WAAW,EAAE,EAAE,CAAC;oBAChB,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM,EAAE,EAAE,CAAC;gBACf,CAAC;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createWebBrowserAuthentication.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWebBrowserAuthentication.test.d.ts","sourceRoot":"","sources":["../src/createWebBrowserAuthentication.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { BrowserAuthenticationCancelledError } from "@party-stack/runtime";
2
+ import { afterEach, describe, expect, it, vi } from "vitest";
3
+ import { createWebBrowserAuthentication } from "./createWebBrowserAuthentication.js";
4
+ describe("createWebBrowserAuthentication", () => {
5
+ afterEach(() => {
6
+ vi.useRealTimers();
7
+ vi.unstubAllGlobals();
8
+ });
9
+ it("reserves a popup and resolves its return URL", async () => {
10
+ vi.useFakeTimers();
11
+ const popup = {
12
+ closed: false,
13
+ location: {
14
+ href: "about:blank",
15
+ assign(url) {
16
+ this.href = url;
17
+ },
18
+ },
19
+ close() {
20
+ this.closed = true;
21
+ },
22
+ };
23
+ vi.stubGlobal("window", {
24
+ open: vi.fn(() => popup),
25
+ setInterval,
26
+ clearInterval,
27
+ });
28
+ const authentication = createWebBrowserAuthentication();
29
+ const session = authentication.start({
30
+ redirectUrl: "https://app.example/auth/callback",
31
+ presentation: "popup",
32
+ });
33
+ const result = session.open("https://auth.example/authorize");
34
+ popup.location.href =
35
+ "https://app.example/auth/callback?code=code";
36
+ await vi.advanceTimersByTimeAsync(250);
37
+ await expect(result).resolves.toEqual({
38
+ callbackUrl: "https://app.example/auth/callback?code=code",
39
+ });
40
+ expect(popup.closed).toBe(true);
41
+ });
42
+ it("rejects the pending operation when closed", async () => {
43
+ vi.useFakeTimers();
44
+ const popup = {
45
+ closed: false,
46
+ location: {
47
+ href: "about:blank",
48
+ assign(url) {
49
+ this.href = url;
50
+ },
51
+ },
52
+ close() {
53
+ this.closed = true;
54
+ },
55
+ };
56
+ vi.stubGlobal("window", {
57
+ open: vi.fn(() => popup),
58
+ setInterval,
59
+ clearInterval,
60
+ });
61
+ const authentication = createWebBrowserAuthentication();
62
+ const session = authentication.start({
63
+ redirectUrl: "https://app.example/auth/callback",
64
+ presentation: "popup",
65
+ });
66
+ const result = session.open("https://auth.example/authorize");
67
+ await session.close();
68
+ await expect(result).rejects.toBeInstanceOf(BrowserAuthenticationCancelledError);
69
+ });
70
+ });
71
+ //# sourceMappingURL=createWebBrowserAuthentication.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWebBrowserAuthentication.test.js","sourceRoot":"","sources":["../src/createWebBrowserAuthentication.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC5C,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC1D,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG;YACV,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE;gBACN,IAAI,EAAE,aAAa;gBACnB,MAAM,CAAC,GAAW;oBACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;gBACpB,CAAC;aACJ;YACD,KAAK;gBACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,CAAC;SACJ,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;YACpB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACxB,WAAW;YACX,aAAa;SAChB,CAAC,CAAC;QACH,MAAM,cAAc,GAChB,8BAA8B,EAAE,CAAC;QAErC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC;YACjC,WAAW,EACP,mCAAmC;YACvC,YAAY,EAAE,OAAO;SACxB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACvB,gCAAgC,CACnC,CAAC;QACF,KAAK,CAAC,QAAQ,CAAC,IAAI;YACf,6CAA6C,CAAC;QAClD,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAEvC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAClC,WAAW,EACP,6CAA6C;SACpD,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACvD,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG;YACV,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE;gBACN,IAAI,EAAE,aAAa;gBACnB,MAAM,CAAC,GAAW;oBACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;gBACpB,CAAC;aACJ;YACD,KAAK;gBACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,CAAC;SACJ,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE;YACpB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACxB,WAAW;YACX,aAAa;SAChB,CAAC,CAAC;QACH,MAAM,cAAc,GAChB,8BAA8B,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC;YACjC,WAAW,EACP,mCAAmC;YACvC,YAAY,EAAE,OAAO;SACxB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACvB,gCAAgC,CACnC,CAAC;QAEF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAEtB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CACvC,mCAAmC,CACtC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,3 +1,2 @@
1
- import type { RuntimeAdapter } from "@party-stack/runtime";
2
- export declare function createWebRuntime(owner: string, namespace: string): RuntimeAdapter;
1
+ export declare const createWebRuntime: (owner: string, namespace: string) => import("@party-stack/runtime").RuntimeAdapter;
3
2
  //# sourceMappingURL=createWebRuntime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createWebRuntime.d.ts","sourceRoot":"","sources":["../src/createWebRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAwBjF"}
1
+ {"version":3,"file":"createWebRuntime.d.ts","sourceRoot":"","sources":["../src/createWebRuntime.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,gBAAgB,qFAoC3B,CAAC"}
@@ -1,8 +1,20 @@
1
1
  import { LockBroadcastCoordination } from "@party-stack/coordination";
2
2
  import { IndexedDBPersistenceAdapter } from "@party-stack/db-indexeddb-persistence";
3
+ import { defineRuntime } from "@party-stack/runtime";
4
+ import { createWebBrowserAuthentication, } from "./createWebBrowserAuthentication.js";
3
5
  import { NavigatorNetworkConnectivity } from "./NavigatorNetworkConnectivity.js";
4
6
  import { OPFSBlobBytesStore } from "./OPFSBlobBytesStore.js";
5
- export function createWebRuntime(owner, namespace) {
7
+ function deleteIndexedDB(name) {
8
+ return new Promise((resolve, reject) => {
9
+ const request = indexedDB.deleteDatabase(name);
10
+ request.onsuccess = () => resolve();
11
+ request.onerror = () => reject(new Error(`IndexedDB database "${name}" could not be deleted.`, {
12
+ cause: request.error,
13
+ }));
14
+ request.onblocked = () => reject(new Error(`IndexedDB database "${name}" could not be deleted because it is open.`));
15
+ });
16
+ }
17
+ export const createWebRuntime = defineRuntime((owner, namespace) => {
6
18
  const name = `party-stack:${owner}:${namespace}`;
7
19
  const persistence = new IndexedDBPersistenceAdapter({
8
20
  databaseName: name,
@@ -11,20 +23,28 @@ export function createWebRuntime(owner, namespace) {
11
23
  const coordination = new LockBroadcastCoordination({
12
24
  scope: name,
13
25
  });
26
+ const blobBytes = new OPFSBlobBytesStore({
27
+ directoryName: `${name}:blobs`,
28
+ });
14
29
  return {
15
30
  owner,
16
31
  namespace,
17
- blobBytes: new OPFSBlobBytesStore({
18
- directoryName: `${name}:blobs`,
19
- }),
32
+ blobBytes,
20
33
  coordination,
21
34
  connectivity,
35
+ browserAuthentication: createWebBrowserAuthentication(),
22
36
  persistence,
37
+ destroy: async () => {
38
+ await Promise.all([
39
+ deleteIndexedDB(name),
40
+ blobBytes.clear(),
41
+ ]);
42
+ },
23
43
  cleanup: async () => {
24
44
  await coordination.close();
25
45
  await connectivity.close();
26
46
  persistence.close();
27
47
  },
28
48
  };
29
- }
49
+ });
30
50
  //# sourceMappingURL=createWebRuntime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createWebRuntime.js","sourceRoot":"","sources":["../src/createWebRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,SAAiB;IAC7D,MAAM,IAAI,GAAG,eAAe,KAAK,IAAI,SAAS,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,2BAA2B,CAAC;QAChD,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,4BAA4B,CAAC,MAAM,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC;QAC/C,KAAK,EAAE,IAAI;KACd,CAAC,CAAC;IACH,OAAO;QACH,KAAK;QACL,SAAS;QACT,SAAS,EAAE,IAAI,kBAAkB,CAAC;YAC9B,aAAa,EAAE,GAAG,IAAI,QAAQ;SACjC,CAAC;QACF,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"createWebRuntime.js","sourceRoot":"","sources":["../src/createWebRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACH,8BAA8B,GACjC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,SAAS,eAAe,CAAC,IAAY;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CACnB,MAAM,CACF,IAAI,KAAK,CAAC,uBAAuB,IAAI,yBAAyB,EAAE;YAC5D,KAAK,EAAE,OAAO,CAAC,KAAK;SACvB,CAAC,CACL,CAAC;QACN,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CACrB,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,IAAI,4CAA4C,CAAC,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAC1C,KAAK,EACL,SAAS,EACX,EAAE;IACA,MAAM,IAAI,GAAG,eAAe,KAAK,IAAI,SAAS,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,2BAA2B,CAAC;QAChD,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,4BAA4B,CAAC,MAAM,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC;QAC/C,KAAK,EAAE,IAAI;KACd,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC;QACrC,aAAa,EAAE,GAAG,IAAI,QAAQ;KACjC,CAAC,CAAC;IACH,OAAO;QACH,KAAK;QACL,SAAS;QACT,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,qBAAqB,EACjB,8BAA8B,EAAE;QACpC,WAAW;QACX,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,CAAC,GAAG,CAAC;gBACd,eAAe,CAAC,IAAI,CAAC;gBACrB,SAAS,CAAC,KAAK,EAAE;aACpB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;KACJ,CAAC;AACN,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@party-stack/web-runtime",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -14,8 +14,8 @@
14
14
  "dependencies": {
15
15
  "effection": "^4.0.2",
16
16
  "@party-stack/coordination": "0.2.0",
17
- "@party-stack/runtime": "0.2.0",
18
- "@party-stack/db-indexeddb-persistence": "0.1.0"
17
+ "@party-stack/db-indexeddb-persistence": "0.1.0",
18
+ "@party-stack/runtime": "0.3.0"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@bobbyfidz/universal-build-config": "^0.1.1",