@party-stack/expo-runtime 0.2.0 → 0.3.1

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 ExpoFileSystemBlobBytesStore 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=ExpoFileSystemBlobBytesStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoFileSystemBlobBytesStore.d.ts","sourceRoot":"","sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,mCAAmC;IAChD,aAAa,EAAE,MAAM,CAAC;CACzB;AAMD,qBAAa,4BAA6B,YAAW,cAAc;;gBAGnD,OAAO,EAAE,mCAAmC;IAIlD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBpC"}
1
+ {"version":3,"file":"ExpoFileSystemBlobBytesStore.d.ts","sourceRoot":"","sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,mCAAmC;IAChD,aAAa,EAAE,MAAM,CAAC;CACzB;AAMD,qBAAa,4BAA6B,YAAW,cAAc;;gBAGnD,OAAO,EAAE,mCAAmC;IAIlD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBzB"}
@@ -28,6 +28,13 @@ export class ExpoFileSystemBlobBytesStore {
28
28
  file.delete();
29
29
  });
30
30
  }
31
+ clear() {
32
+ return Promise.resolve().then(() => {
33
+ const directory = new Directory(Paths.document, this.#directoryName);
34
+ if (directory.exists)
35
+ directory.delete();
36
+ });
37
+ }
31
38
  #directory() {
32
39
  const directory = new Directory(Paths.document, this.#directoryName);
33
40
  directory.create({ idempotent: true, intermediates: true });
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoFileSystemBlobBytesStore.js","sourceRoot":"","sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAO1D,SAAS,cAAc,CAAC,EAAU;IAC9B,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,4BAA4B;IACrC,cAAc,CAAS;IAEvB,YAAY,OAA4C;QACpD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,IAAU;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,EAAU;QACX,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAU;QACb,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,UAAU;QACN,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACrE,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,EAAU;QACZ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ"}
1
+ {"version":3,"file":"ExpoFileSystemBlobBytesStore.js","sourceRoot":"","sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAO1D,SAAS,cAAc,CAAC,EAAU;IAC9B,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,4BAA4B;IACrC,cAAc,CAAS;IAEvB,YAAY,OAA4C;QACpD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,IAAU;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,EAAU;QACX,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAU;QACb,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACrE,IAAI,SAAS,CAAC,MAAM;gBAAE,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,UAAU;QACN,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACrE,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,EAAU;QACZ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ"}
@@ -0,0 +1,10 @@
1
+ import type { SecretStore } from "@party-stack/runtime";
2
+ export declare class ExpoSecretStore implements SecretStore {
3
+ private readonly prefix;
4
+ constructor(prefix: string);
5
+ get(key: string): Promise<string | undefined>;
6
+ set(key: string, value: string): Promise<void>;
7
+ delete(key: string): Promise<void>;
8
+ private key;
9
+ }
10
+ //# sourceMappingURL=ExpoSecretStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoSecretStore.d.ts","sourceRoot":"","sources":["../src/ExpoSecretStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD,qBAAa,eAAgB,YAAW,WAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,OAAO,CAAC,GAAG;CAGd"}
@@ -0,0 +1,25 @@
1
+ import { deleteItemAsync, getItemAsync, setItemAsync } from "expo-secure-store";
2
+ // https://docs.expo.dev/versions/latest/sdk/securestore#securestoresetitemkey-value-options
3
+ function encodeKey(value) {
4
+ const bytes = new TextEncoder().encode(value);
5
+ return `party-stack.${Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("")}`;
6
+ }
7
+ export class ExpoSecretStore {
8
+ prefix;
9
+ constructor(prefix) {
10
+ this.prefix = prefix;
11
+ }
12
+ get(key) {
13
+ return getItemAsync(this.key(key)).then((value) => value ?? undefined);
14
+ }
15
+ set(key, value) {
16
+ return setItemAsync(this.key(key), value);
17
+ }
18
+ delete(key) {
19
+ return deleteItemAsync(this.key(key));
20
+ }
21
+ key(key) {
22
+ return encodeKey(JSON.stringify([this.prefix, key]));
23
+ }
24
+ }
25
+ //# sourceMappingURL=ExpoSecretStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoSecretStore.js","sourceRoot":"","sources":["../src/ExpoSecretStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGhF,4FAA4F;AAC5F,SAAS,SAAS,CAAC,KAAa;IAC5B,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,eAAe,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACrG,CAAC;AAED,MAAM,OAAO,eAAe;IACK;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,GAAG,CAAC,GAAW;QACX,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IAC3E,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,GAAW;QACd,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEO,GAAG,CAAC,GAAW;QACnB,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ExpoSecretStore.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoSecretStore.test.d.ts","sourceRoot":"","sources":["../src/ExpoSecretStore.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { beforeEach, describe, expect, it, vi, } from "vitest";
2
+ import { ExpoSecretStore } from "./ExpoSecretStore.js";
3
+ const secureStore = vi.hoisted(() => ({
4
+ deleteItemAsync: vi.fn((key) => {
5
+ void key;
6
+ return Promise.resolve();
7
+ }),
8
+ getItemAsync: vi.fn((key) => {
9
+ void key;
10
+ return Promise.resolve(null);
11
+ }),
12
+ setItemAsync: vi.fn((key, value) => {
13
+ void key;
14
+ void value;
15
+ return Promise.resolve();
16
+ }),
17
+ }));
18
+ vi.mock("expo-secure-store", () => secureStore);
19
+ describe("ExpoSecretStore", () => {
20
+ beforeEach(() => {
21
+ vi.clearAllMocks();
22
+ });
23
+ it("encodes namespaced keys using only SecureStore-safe characters", async () => {
24
+ const store = new ExpoSecretStore("party-stack:user@example.com:oauth");
25
+ await store.set("tokens/client:id", "secret");
26
+ const key = secureStore.setItemAsync
27
+ .mock.calls[0]?.[0];
28
+ expect(key).toMatch(/^[A-Za-z0-9._-]+$/);
29
+ expect(key).not.toContain("user@example.com");
30
+ expect(secureStore.setItemAsync).toHaveBeenCalledWith(key, "secret");
31
+ });
32
+ it("separates prefix and key without collisions", async () => {
33
+ await new ExpoSecretStore("a").set("b:c", "one");
34
+ await new ExpoSecretStore("a:b").set("c", "two");
35
+ expect(secureStore.setItemAsync
36
+ .mock.calls[0]?.[0]).not.toBe(secureStore.setItemAsync
37
+ .mock.calls[1]?.[0]);
38
+ });
39
+ });
40
+ //# sourceMappingURL=ExpoSecretStore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoSecretStore.test.js","sourceRoot":"","sources":["../src/ExpoSecretStore.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,EACF,EAAE,GACL,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClC,eAAe,EAAE,EAAE,CAAC,EAAE,CAClB,CAAC,GAAW,EAAE,EAAE;QACZ,KAAK,GAAG,CAAC;QACT,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CACJ;IACD,YAAY,EAAE,EAAE,CAAC,EAAE,CACf,CAAC,GAAW,EAAE,EAAE;QACZ,KAAK,GAAG,CAAC;QACT,OAAO,OAAO,CAAC,OAAO,CAClB,IAAI,CACP,CAAC;IACN,CAAC,CACJ;IACD,YAAY,EAAE,EAAE,CAAC,EAAE,CACf,CACI,GAAW,EACX,KAAa,EACf,EAAE;QACA,KAAK,GAAG,CAAC;QACT,KAAK,KAAK,CAAC;QACX,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CACJ;CACJ,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAC9B,WAAW,CACd,CAAC;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,KAAK,GACP,IAAI,eAAe,CACf,oCAAoC,CACvC,CAAC;QAEN,MAAM,KAAK,CAAC,GAAG,CACX,kBAAkB,EAClB,QAAQ,CACX,CAAC;QAEF,MAAM,GAAG,GACL,WAAW,CAAC,YAAY;aACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CACf,mBAAmB,CACtB,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CACrB,kBAAkB,CACrB,CAAC;QACF,MAAM,CACF,WAAW,CAAC,YAAY,CAC3B,CAAC,oBAAoB,CAClB,GAAG,EACH,QAAQ,CACX,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,IAAI,eAAe,CACrB,GAAG,CACN,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpB,MAAM,IAAI,eAAe,CACrB,KAAK,CACR,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAElB,MAAM,CACF,WAAW,CAAC,YAAY;aACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAC1B,CAAC,GAAG,CAAC,IAAI,CACN,WAAW,CAAC,YAAY;aACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAC1B,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type BrowserAuthentication } from "@party-stack/runtime";
2
+ export declare function createExpoBrowserAuthentication(): BrowserAuthentication;
3
+ //# sourceMappingURL=createExpoBrowserAuthentication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExpoBrowserAuthentication.d.ts","sourceRoot":"","sources":["../src/createExpoBrowserAuthentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,qBAAqB,EAC7B,MAAM,sBAAsB,CAAC;AAM9B,wBAAgB,+BAA+B,IAAI,qBAAqB,CAuBvE"}
@@ -0,0 +1,23 @@
1
+ import { BrowserAuthenticationCancelledError, } from "@party-stack/runtime";
2
+ import { dismissAuthSession, openAuthSessionAsync, } from "expo-web-browser";
3
+ export function createExpoBrowserAuthentication() {
4
+ return {
5
+ start({ redirectUrl }) {
6
+ return {
7
+ async open(authorizationUrl) {
8
+ const result = await openAuthSessionAsync(authorizationUrl, redirectUrl);
9
+ if (result.type === "success") {
10
+ return {
11
+ callbackUrl: result.url,
12
+ };
13
+ }
14
+ throw new BrowserAuthenticationCancelledError();
15
+ },
16
+ close() {
17
+ dismissAuthSession();
18
+ },
19
+ };
20
+ },
21
+ };
22
+ }
23
+ //# sourceMappingURL=createExpoBrowserAuthentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExpoBrowserAuthentication.js","sourceRoot":"","sources":["../src/createExpoBrowserAuthentication.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mCAAmC,GAEtC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,+BAA+B;IAC3C,OAAO;QACH,KAAK,CAAC,EAAE,WAAW,EAAE;YACjB,OAAO;gBACH,KAAK,CAAC,IAAI,CAAC,gBAAgB;oBACvB,MAAM,MAAM,GACR,MAAM,oBAAoB,CACtB,gBAAgB,EAChB,WAAW,CACd,CAAC;oBACN,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAC5B,OAAO;4BACH,WAAW,EAAE,MAAM,CAAC,GAAG;yBAC1B,CAAC;oBACN,CAAC;oBACD,MAAM,IAAI,mCAAmC,EAAE,CAAC;gBACpD,CAAC;gBACD,KAAK;oBACD,kBAAkB,EAAE,CAAC;gBACzB,CAAC;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,3 +1,2 @@
1
- import type { RuntimeAdapter } from "@party-stack/runtime";
2
- export declare function createExpoRuntime(owner: string, namespace: string): Promise<RuntimeAdapter>;
1
+ export declare const createExpoRuntime: (owner: string, namespace: string) => Promise<import("@party-stack/runtime").RuntimeAdapter>;
3
2
  //# sourceMappingURL=createExpoRuntime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createExpoRuntime.d.ts","sourceRoot":"","sources":["../src/createExpoRuntime.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,wBAAsB,iBAAiB,CACnC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CA4BzB"}
1
+ {"version":3,"file":"createExpoRuntime.d.ts","sourceRoot":"","sources":["../src/createExpoRuntime.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,iBAAiB,8FAyC5B,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { SingleProcessCoordination } from "@party-stack/coordination";
2
+ import { defineRuntime } from "@party-stack/runtime";
2
3
  import { createExpoSQLitePersistence, } from "@tanstack/expo-db-sqlite-persistence";
3
- import { openDatabaseAsync } from "expo-sqlite";
4
+ import { deleteDatabaseAsync, openDatabaseAsync } from "expo-sqlite";
5
+ import { createExpoBrowserAuthentication } from "./createExpoBrowserAuthentication.js";
4
6
  import { ExpoFileSystemBlobBytesStore } from "./ExpoFileSystemBlobBytesStore.js";
5
7
  import { ExpoNetworkConnectivity } from "./ExpoNetworkConnectivity.js";
6
- export async function createExpoRuntime(owner, namespace) {
8
+ import { ExpoSecretStore } from "./ExpoSecretStore.js";
9
+ export const createExpoRuntime = defineRuntime(async (owner, namespace) => {
7
10
  const name = `party-stack:${owner}:${namespace}`;
8
11
  const [database, connectivity] = await Promise.all([
9
12
  openDatabaseAsync(`${name}.db`),
@@ -15,20 +18,29 @@ export async function createExpoRuntime(owner, namespace) {
15
18
  const coordination = new SingleProcessCoordination({
16
19
  scope: name,
17
20
  });
21
+ const blobBytes = new ExpoFileSystemBlobBytesStore({
22
+ directoryName: `${name}:blobs`,
23
+ });
18
24
  return {
19
25
  owner,
20
26
  namespace,
21
- blobBytes: new ExpoFileSystemBlobBytesStore({
22
- directoryName: `${name}:blobs`,
23
- }),
27
+ blobBytes,
28
+ browserAuthentication: createExpoBrowserAuthentication(),
29
+ secrets: new ExpoSecretStore(`${name}:secrets`),
24
30
  connectivity,
25
31
  coordination,
26
32
  persistence,
33
+ destroy: async () => {
34
+ await Promise.all([
35
+ deleteDatabaseAsync(`${name}.db`),
36
+ blobBytes.clear(),
37
+ ]);
38
+ },
27
39
  cleanup: async () => {
28
40
  await coordination.close();
29
41
  connectivity.close();
30
42
  await database.closeAsync();
31
43
  },
32
44
  };
33
- }
45
+ });
34
46
  //# sourceMappingURL=createExpoRuntime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createExpoRuntime.js","sourceRoot":"","sources":["../src/createExpoRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACH,2BAA2B,GAE9B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,KAAa,EACb,SAAiB;IAEjB,MAAM,IAAI,GAAG,eAAe,KAAK,IAAI,SAAS,EAAE,CAAC;IACjD,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,iBAAiB,CAAC,GAAG,IAAI,KAAK,CAAC;QAC/B,uBAAuB,CAAC,MAAM,EAAE;KACnC,CAAC,CAAC;IACH,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,2BAA2B,CAAC;QACzD,QAAQ,EAAE,QAA6C;KAC1D,CAAC,CAAC;IACH,MAAM,YAAY,GACd,IAAI,yBAAyB,CAAC;QAC1B,KAAK,EAAE,IAAI;KACd,CAAC,CAAC;IACP,OAAO;QACH,KAAK;QACL,SAAS;QACT,SAAS,EAAE,IAAI,4BAA4B,CAAC;YACxC,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,YAAY,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAChC,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"createExpoRuntime.js","sourceRoot":"","sources":["../src/createExpoRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACH,2BAA2B,GAE9B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC,KAAK,EAChD,KAAK,EACL,SAAS,EACX,EAAE;IACA,MAAM,IAAI,GAAG,eAAe,KAAK,IAAI,SAAS,EAAE,CAAC;IACjD,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,iBAAiB,CAAC,GAAG,IAAI,KAAK,CAAC;QAC/B,uBAAuB,CAAC,MAAM,EAAE;KACnC,CAAC,CAAC;IACH,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,2BAA2B,CAAC;QACzD,QAAQ,EAAE,QAA6C;KAC1D,CAAC,CAAC;IACH,MAAM,YAAY,GACd,IAAI,yBAAyB,CAAC;QAC1B,KAAK,EAAE,IAAI;KACd,CAAC,CAAC;IACP,MAAM,SAAS,GAAG,IAAI,4BAA4B,CAAC;QAC/C,aAAa,EAAE,GAAG,IAAI,QAAQ;KACjC,CAAC,CAAC;IACH,OAAO;QACH,KAAK;QACL,SAAS;QACT,SAAS;QACT,qBAAqB,EACjB,+BAA+B,EAAE;QACrC,OAAO,EAAE,IAAI,eAAe,CAAC,GAAG,IAAI,UAAU,CAAC;QAC/C,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,CAAC,GAAG,CAAC;gBACd,mBAAmB,CAAC,GAAG,IAAI,KAAK,CAAC;gBACjC,SAAS,CAAC,KAAK,EAAE;aACpB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,YAAY,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAChC,CAAC;KACJ,CAAC;AACN,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@party-stack/expo-runtime",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -12,9 +12,11 @@
12
12
  "lib"
13
13
  ],
14
14
  "dependencies": {
15
- "@tanstack/expo-db-sqlite-persistence": "^0.2.6",
15
+ "@tanstack/expo-db-sqlite-persistence": "^0.2.19",
16
+ "expo-secure-store": "^57.0.1",
17
+ "expo-web-browser": "^57.0.2",
16
18
  "@party-stack/coordination": "0.2.0",
17
- "@party-stack/runtime": "0.2.0"
19
+ "@party-stack/runtime": "0.3.1"
18
20
  },
19
21
  "devDependencies": {
20
22
  "@bobbyfidz/universal-build-config": "^0.1.1",