@lunora/react-native 1.0.0-alpha.3 → 1.0.0-alpha.5

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/dist/auth.d.mts CHANGED
@@ -1,35 +1,35 @@
1
1
  export { expoClient, setupExpoFocusManager, setupExpoOnlineManager } from '@better-auth/expo/client';
2
2
  /**
3
- * Read the current better-auth session token from an Expo auth client, for use
4
- * as a **bearer** credential on the Lunora client — `client.setAuthToken(token)`
5
- * for HTTP RPC and `client.setWsToken(token ?? undefined)` for the live socket.
6
- *
7
- * The Expo plugin persists the session as a cookie in `SecureStore`;
8
- * `getCookie()` exposes it, and this pulls the `session_token` value out.
9
- * better-auth's `bearer` plugin accepts that value verbatim in the
10
- * `Authorization` header — so the native client authenticates WITHOUT sending a
11
- * `Cookie`, which the runtime's CSRF guard rejects on an `Origin`-less native
12
- * request (React Native sends no `Origin`). Returns `null` when signed out.
13
- *
14
- * Re-run it whenever the session changes and feed the result to the client (see
15
- * the package README):
16
- *
17
- * ```ts
18
- * const token = expoBearerToken(authClient);
19
- * client.setAuthToken(token);
20
- * client.setWsToken(token ?? undefined);
21
- * ```
22
- * @experimental
23
- */
3
+ * Read the current better-auth session token from an Expo auth client, for use
4
+ * as a **bearer** credential on the Lunora client — `client.setAuthToken(token)`
5
+ * for HTTP RPC and `client.setWsToken(token ?? undefined)` for the live socket.
6
+ *
7
+ * The Expo plugin persists the session as a cookie in `SecureStore`;
8
+ * `getCookie()` exposes it, and this pulls the `session_token` value out.
9
+ * better-auth's `bearer` plugin accepts that value verbatim in the
10
+ * `Authorization` header — so the native client authenticates WITHOUT sending a
11
+ * `Cookie`, which the runtime's CSRF guard rejects on an `Origin`-less native
12
+ * request (React Native sends no `Origin`). Returns `null` when signed out.
13
+ *
14
+ * Re-run it whenever the session changes and feed the result to the client (see
15
+ * the package README):
16
+ *
17
+ * ```ts
18
+ * const token = expoBearerToken(authClient);
19
+ * client.setAuthToken(token);
20
+ * client.setWsToken(token ?? undefined);
21
+ * ```
22
+ * @experimental
23
+ */
24
24
  declare const expoBearerToken: (authClient: {
25
25
  getCookie: () => string;
26
26
  }) => null | string;
27
27
  /**
28
- * The slice of a key/value store the better-auth Expo plugin needs — the shape
29
- * of `expo-secure-store` (a synchronous `getItem`, plus `setItem`). Pass Expo
30
- * `SecureStore` straight in.
31
- * @experimental
32
- */
28
+ * The slice of a key/value store the better-auth Expo plugin needs — the shape
29
+ * of `expo-secure-store` (a synchronous `getItem`, plus `setItem`). Pass Expo
30
+ * `SecureStore` straight in.
31
+ * @experimental
32
+ */
33
33
  interface SecureStorageLike {
34
34
  getItem: (key: string) => null | string;
35
35
  setItem: (key: string, value: string) => unknown;
package/dist/auth.d.ts CHANGED
@@ -1,35 +1,35 @@
1
1
  export { expoClient, setupExpoFocusManager, setupExpoOnlineManager } from '@better-auth/expo/client';
2
2
  /**
3
- * Read the current better-auth session token from an Expo auth client, for use
4
- * as a **bearer** credential on the Lunora client — `client.setAuthToken(token)`
5
- * for HTTP RPC and `client.setWsToken(token ?? undefined)` for the live socket.
6
- *
7
- * The Expo plugin persists the session as a cookie in `SecureStore`;
8
- * `getCookie()` exposes it, and this pulls the `session_token` value out.
9
- * better-auth's `bearer` plugin accepts that value verbatim in the
10
- * `Authorization` header — so the native client authenticates WITHOUT sending a
11
- * `Cookie`, which the runtime's CSRF guard rejects on an `Origin`-less native
12
- * request (React Native sends no `Origin`). Returns `null` when signed out.
13
- *
14
- * Re-run it whenever the session changes and feed the result to the client (see
15
- * the package README):
16
- *
17
- * ```ts
18
- * const token = expoBearerToken(authClient);
19
- * client.setAuthToken(token);
20
- * client.setWsToken(token ?? undefined);
21
- * ```
22
- * @experimental
23
- */
3
+ * Read the current better-auth session token from an Expo auth client, for use
4
+ * as a **bearer** credential on the Lunora client — `client.setAuthToken(token)`
5
+ * for HTTP RPC and `client.setWsToken(token ?? undefined)` for the live socket.
6
+ *
7
+ * The Expo plugin persists the session as a cookie in `SecureStore`;
8
+ * `getCookie()` exposes it, and this pulls the `session_token` value out.
9
+ * better-auth's `bearer` plugin accepts that value verbatim in the
10
+ * `Authorization` header — so the native client authenticates WITHOUT sending a
11
+ * `Cookie`, which the runtime's CSRF guard rejects on an `Origin`-less native
12
+ * request (React Native sends no `Origin`). Returns `null` when signed out.
13
+ *
14
+ * Re-run it whenever the session changes and feed the result to the client (see
15
+ * the package README):
16
+ *
17
+ * ```ts
18
+ * const token = expoBearerToken(authClient);
19
+ * client.setAuthToken(token);
20
+ * client.setWsToken(token ?? undefined);
21
+ * ```
22
+ * @experimental
23
+ */
24
24
  declare const expoBearerToken: (authClient: {
25
25
  getCookie: () => string;
26
26
  }) => null | string;
27
27
  /**
28
- * The slice of a key/value store the better-auth Expo plugin needs — the shape
29
- * of `expo-secure-store` (a synchronous `getItem`, plus `setItem`). Pass Expo
30
- * `SecureStore` straight in.
31
- * @experimental
32
- */
28
+ * The slice of a key/value store the better-auth Expo plugin needs — the shape
29
+ * of `expo-secure-store` (a synchronous `getItem`, plus `setItem`). Pass Expo
30
+ * `SecureStore` straight in.
31
+ * @experimental
32
+ */
33
33
  interface SecureStorageLike {
34
34
  getItem: (key: string) => null | string;
35
35
  setItem: (key: string, value: string) => unknown;
package/dist/index.d.mts CHANGED
@@ -1,78 +1,78 @@
1
1
  import { AsyncStorageLike, LunoraClientOptions, LunoraClient } from '@lunora/client';
2
2
  export * from '@lunora/react';
3
3
  /**
4
- * A `() => headers` factory the React Native client threads onto every HTTP RPC
5
- * request *and* the WebSocket upgrade — a generic escape hatch for attaching a
6
- * **custom** credential header (an API-gateway key, a proxy token, …) that
7
- * React Native's missing cookie jar can't carry implicitly. Return `undefined`
8
- * (or an empty object) when there's nothing to attach.
9
- *
10
- * For better-auth Expo sessions, prefer a **bearer** token instead: read it with
11
- * `@lunora/react-native/auth`'s `expoBearerToken` and feed it to
12
- * `client.setAuthToken` / `setWsToken` (see the package README). A bearer avoids
13
- * the `Cookie` header the runtime's CSRF guard rejects on `Origin`-less native
14
- * requests.
15
- * @experimental
16
- */
4
+ * A `() => headers` factory the React Native client threads onto every HTTP RPC
5
+ * request *and* the WebSocket upgrade — a generic escape hatch for attaching a
6
+ * **custom** credential header (an API-gateway key, a proxy token, …) that
7
+ * React Native's missing cookie jar can't carry implicitly. Return `undefined`
8
+ * (or an empty object) when there's nothing to attach.
9
+ *
10
+ * For better-auth Expo sessions, prefer a **bearer** token instead: read it with
11
+ * `@lunora/react-native/auth`'s `expoBearerToken` and feed it to
12
+ * `client.setAuthToken` / `setWsToken` (see the package README). A bearer avoids
13
+ * the `Cookie` header the runtime's CSRF guard rejects on `Origin`-less native
14
+ * requests.
15
+ * @experimental
16
+ */
17
17
  type AuthHeadersFactory = () => Record<string, string> | undefined;
18
18
  /**
19
- * Options for `createLunoraClient` — the React Native / Expo counterpart to
20
- * constructing a `LunoraClient` directly. It is `LunoraClientOptions` with two
21
- * React-Native-shaped conveniences layered on. `storage` wires the
22
- * AsyncStorage-backed offline-queue persistence for you (the browser default
23
- * auto-probes IndexedDB, which React Native lacks, so without this the queue
24
- * stays in memory and is lost on reload). `getAuthHeaders` is a generic escape
25
- * hatch for a custom credential header on both the HTTP RPC path and the
26
- * WebSocket upgrade; for better-auth sessions prefer a bearer token
27
- * (`expoBearerToken` + the client's `setAuthToken` / `setWsToken`).
28
- *
29
- * The `persistence`, `fetch`, and `WebSocket` fields of `LunoraClientOptions`
30
- * are still accepted and take precedence when you need full control; the two
31
- * conveniences are sugar over exactly those seams.
32
- * @experimental
33
- */
19
+ * Options for `createLunoraClient` — the React Native / Expo counterpart to
20
+ * constructing a `LunoraClient` directly. It is `LunoraClientOptions` with two
21
+ * React-Native-shaped conveniences layered on. `storage` wires the
22
+ * AsyncStorage-backed offline-queue persistence for you (the browser default
23
+ * auto-probes IndexedDB, which React Native lacks, so without this the queue
24
+ * stays in memory and is lost on reload). `getAuthHeaders` is a generic escape
25
+ * hatch for a custom credential header on both the HTTP RPC path and the
26
+ * WebSocket upgrade; for better-auth sessions prefer a bearer token
27
+ * (`expoBearerToken` + the client's `setAuthToken` / `setWsToken`).
28
+ *
29
+ * The `persistence`, `fetch`, and `WebSocket` fields of `LunoraClientOptions`
30
+ * are still accepted and take precedence when you need full control; the two
31
+ * conveniences are sugar over exactly those seams.
32
+ * @experimental
33
+ */
34
34
  interface CreateLunoraClientOptions extends LunoraClientOptions {
35
35
  /**
36
- * Attaches a credential to every HTTP RPC request and to the WebSocket
37
- * upgrade request. See `AuthHeadersFactory`. When omitted, requests go out
38
- * with only whatever `LunoraClient` already sets (its bearer token from
39
- * `setAuthToken`, if any).
40
- *
41
- * Merged UNDER the client's own headers on the HTTP path (an explicit
42
- * `setAuthToken` bearer wins over a same-named header here); applied to the
43
- * WebSocket upgrade via a wrapping `WebSocket`, since the socket has no other
44
- * way to carry credentials in React Native.
45
- */
36
+ * Attaches a credential to every HTTP RPC request and to the WebSocket
37
+ * upgrade request. See `AuthHeadersFactory`. When omitted, requests go out
38
+ * with only whatever `LunoraClient` already sets (its bearer token from
39
+ * `setAuthToken`, if any).
40
+ *
41
+ * Merged UNDER the client's own headers on the HTTP path (an explicit
42
+ * `setAuthToken` bearer wins over a same-named header here); applied to the
43
+ * WebSocket upgrade via a wrapping `WebSocket`, since the socket has no other
44
+ * way to carry credentials in React Native.
45
+ */
46
46
  getAuthHeaders?: AuthHeadersFactory;
47
47
  /**
48
- * React Native `AsyncStorage` (or any async key/value store with the same
49
- * `getItem`/`setItem`/`removeItem` surface — Expo `SecureStore`, an in-memory
50
- * map in tests). When supplied, the offline mutation queue is persisted here
51
- * via `createAsyncStoragePersistence`, so writes made offline survive an app
52
- * restart. Ignored when an explicit `persistence` is passed.
53
- */
48
+ * React Native `AsyncStorage` (or any async key/value store with the same
49
+ * `getItem`/`setItem`/`removeItem` surface — Expo `SecureStore`, an in-memory
50
+ * map in tests). When supplied, the offline mutation queue is persisted here
51
+ * via `createAsyncStoragePersistence`, so writes made offline survive an app
52
+ * restart. Ignored when an explicit `persistence` is passed.
53
+ */
54
54
  storage?: AsyncStorageLike;
55
55
  }
56
56
  /**
57
- * Construct a `LunoraClient` tuned for React Native / Expo — a thin wrapper over
58
- * `new LunoraClient(options)` that fills in the two things a browser gets for
59
- * free but React Native does not.
60
- *
61
- * First, a durable offline queue: pass `storage` (React Native `AsyncStorage`,
62
- * or any async key/value store) and the offline mutation queue is persisted
63
- * through `createAsyncStoragePersistence` — the browser default auto-probes
64
- * IndexedDB, which React Native lacks, so without this the queue lives only in
65
- * memory and is lost on reload.
66
- *
67
- * Second, credentialed requests: pass `getAuthHeaders` and the returned headers
68
- * ride both the HTTP RPC path and the WebSocket upgrade, since React Native has
69
- * no cookie jar to attach a session implicitly.
70
- *
71
- * Everything on `LunoraClientOptions` is still accepted and passed through; an
72
- * explicit `persistence`, `fetch`, or `WebSocket` takes precedence over the
73
- * convenience derived from `storage` / `getAuthHeaders`. See the package README
74
- * for a full setup example.
75
- * @experimental
76
- */
57
+ * Construct a `LunoraClient` tuned for React Native / Expo — a thin wrapper over
58
+ * `new LunoraClient(options)` that fills in the two things a browser gets for
59
+ * free but React Native does not.
60
+ *
61
+ * First, a durable offline queue: pass `storage` (React Native `AsyncStorage`,
62
+ * or any async key/value store) and the offline mutation queue is persisted
63
+ * through `createAsyncStoragePersistence` — the browser default auto-probes
64
+ * IndexedDB, which React Native lacks, so without this the queue lives only in
65
+ * memory and is lost on reload.
66
+ *
67
+ * Second, credentialed requests: pass `getAuthHeaders` and the returned headers
68
+ * ride both the HTTP RPC path and the WebSocket upgrade, since React Native has
69
+ * no cookie jar to attach a session implicitly.
70
+ *
71
+ * Everything on `LunoraClientOptions` is still accepted and passed through; an
72
+ * explicit `persistence`, `fetch`, or `WebSocket` takes precedence over the
73
+ * convenience derived from `storage` / `getAuthHeaders`. See the package README
74
+ * for a full setup example.
75
+ * @experimental
76
+ */
77
77
  declare const createLunoraClient: (options: CreateLunoraClientOptions) => LunoraClient;
78
78
  export { type AuthHeadersFactory, type CreateLunoraClientOptions, createLunoraClient };
package/dist/index.d.ts CHANGED
@@ -1,78 +1,78 @@
1
1
  import { AsyncStorageLike, LunoraClientOptions, LunoraClient } from '@lunora/client';
2
2
  export * from '@lunora/react';
3
3
  /**
4
- * A `() => headers` factory the React Native client threads onto every HTTP RPC
5
- * request *and* the WebSocket upgrade — a generic escape hatch for attaching a
6
- * **custom** credential header (an API-gateway key, a proxy token, …) that
7
- * React Native's missing cookie jar can't carry implicitly. Return `undefined`
8
- * (or an empty object) when there's nothing to attach.
9
- *
10
- * For better-auth Expo sessions, prefer a **bearer** token instead: read it with
11
- * `@lunora/react-native/auth`'s `expoBearerToken` and feed it to
12
- * `client.setAuthToken` / `setWsToken` (see the package README). A bearer avoids
13
- * the `Cookie` header the runtime's CSRF guard rejects on `Origin`-less native
14
- * requests.
15
- * @experimental
16
- */
4
+ * A `() => headers` factory the React Native client threads onto every HTTP RPC
5
+ * request *and* the WebSocket upgrade — a generic escape hatch for attaching a
6
+ * **custom** credential header (an API-gateway key, a proxy token, …) that
7
+ * React Native's missing cookie jar can't carry implicitly. Return `undefined`
8
+ * (or an empty object) when there's nothing to attach.
9
+ *
10
+ * For better-auth Expo sessions, prefer a **bearer** token instead: read it with
11
+ * `@lunora/react-native/auth`'s `expoBearerToken` and feed it to
12
+ * `client.setAuthToken` / `setWsToken` (see the package README). A bearer avoids
13
+ * the `Cookie` header the runtime's CSRF guard rejects on `Origin`-less native
14
+ * requests.
15
+ * @experimental
16
+ */
17
17
  type AuthHeadersFactory = () => Record<string, string> | undefined;
18
18
  /**
19
- * Options for `createLunoraClient` — the React Native / Expo counterpart to
20
- * constructing a `LunoraClient` directly. It is `LunoraClientOptions` with two
21
- * React-Native-shaped conveniences layered on. `storage` wires the
22
- * AsyncStorage-backed offline-queue persistence for you (the browser default
23
- * auto-probes IndexedDB, which React Native lacks, so without this the queue
24
- * stays in memory and is lost on reload). `getAuthHeaders` is a generic escape
25
- * hatch for a custom credential header on both the HTTP RPC path and the
26
- * WebSocket upgrade; for better-auth sessions prefer a bearer token
27
- * (`expoBearerToken` + the client's `setAuthToken` / `setWsToken`).
28
- *
29
- * The `persistence`, `fetch`, and `WebSocket` fields of `LunoraClientOptions`
30
- * are still accepted and take precedence when you need full control; the two
31
- * conveniences are sugar over exactly those seams.
32
- * @experimental
33
- */
19
+ * Options for `createLunoraClient` — the React Native / Expo counterpart to
20
+ * constructing a `LunoraClient` directly. It is `LunoraClientOptions` with two
21
+ * React-Native-shaped conveniences layered on. `storage` wires the
22
+ * AsyncStorage-backed offline-queue persistence for you (the browser default
23
+ * auto-probes IndexedDB, which React Native lacks, so without this the queue
24
+ * stays in memory and is lost on reload). `getAuthHeaders` is a generic escape
25
+ * hatch for a custom credential header on both the HTTP RPC path and the
26
+ * WebSocket upgrade; for better-auth sessions prefer a bearer token
27
+ * (`expoBearerToken` + the client's `setAuthToken` / `setWsToken`).
28
+ *
29
+ * The `persistence`, `fetch`, and `WebSocket` fields of `LunoraClientOptions`
30
+ * are still accepted and take precedence when you need full control; the two
31
+ * conveniences are sugar over exactly those seams.
32
+ * @experimental
33
+ */
34
34
  interface CreateLunoraClientOptions extends LunoraClientOptions {
35
35
  /**
36
- * Attaches a credential to every HTTP RPC request and to the WebSocket
37
- * upgrade request. See `AuthHeadersFactory`. When omitted, requests go out
38
- * with only whatever `LunoraClient` already sets (its bearer token from
39
- * `setAuthToken`, if any).
40
- *
41
- * Merged UNDER the client's own headers on the HTTP path (an explicit
42
- * `setAuthToken` bearer wins over a same-named header here); applied to the
43
- * WebSocket upgrade via a wrapping `WebSocket`, since the socket has no other
44
- * way to carry credentials in React Native.
45
- */
36
+ * Attaches a credential to every HTTP RPC request and to the WebSocket
37
+ * upgrade request. See `AuthHeadersFactory`. When omitted, requests go out
38
+ * with only whatever `LunoraClient` already sets (its bearer token from
39
+ * `setAuthToken`, if any).
40
+ *
41
+ * Merged UNDER the client's own headers on the HTTP path (an explicit
42
+ * `setAuthToken` bearer wins over a same-named header here); applied to the
43
+ * WebSocket upgrade via a wrapping `WebSocket`, since the socket has no other
44
+ * way to carry credentials in React Native.
45
+ */
46
46
  getAuthHeaders?: AuthHeadersFactory;
47
47
  /**
48
- * React Native `AsyncStorage` (or any async key/value store with the same
49
- * `getItem`/`setItem`/`removeItem` surface — Expo `SecureStore`, an in-memory
50
- * map in tests). When supplied, the offline mutation queue is persisted here
51
- * via `createAsyncStoragePersistence`, so writes made offline survive an app
52
- * restart. Ignored when an explicit `persistence` is passed.
53
- */
48
+ * React Native `AsyncStorage` (or any async key/value store with the same
49
+ * `getItem`/`setItem`/`removeItem` surface — Expo `SecureStore`, an in-memory
50
+ * map in tests). When supplied, the offline mutation queue is persisted here
51
+ * via `createAsyncStoragePersistence`, so writes made offline survive an app
52
+ * restart. Ignored when an explicit `persistence` is passed.
53
+ */
54
54
  storage?: AsyncStorageLike;
55
55
  }
56
56
  /**
57
- * Construct a `LunoraClient` tuned for React Native / Expo — a thin wrapper over
58
- * `new LunoraClient(options)` that fills in the two things a browser gets for
59
- * free but React Native does not.
60
- *
61
- * First, a durable offline queue: pass `storage` (React Native `AsyncStorage`,
62
- * or any async key/value store) and the offline mutation queue is persisted
63
- * through `createAsyncStoragePersistence` — the browser default auto-probes
64
- * IndexedDB, which React Native lacks, so without this the queue lives only in
65
- * memory and is lost on reload.
66
- *
67
- * Second, credentialed requests: pass `getAuthHeaders` and the returned headers
68
- * ride both the HTTP RPC path and the WebSocket upgrade, since React Native has
69
- * no cookie jar to attach a session implicitly.
70
- *
71
- * Everything on `LunoraClientOptions` is still accepted and passed through; an
72
- * explicit `persistence`, `fetch`, or `WebSocket` takes precedence over the
73
- * convenience derived from `storage` / `getAuthHeaders`. See the package README
74
- * for a full setup example.
75
- * @experimental
76
- */
57
+ * Construct a `LunoraClient` tuned for React Native / Expo — a thin wrapper over
58
+ * `new LunoraClient(options)` that fills in the two things a browser gets for
59
+ * free but React Native does not.
60
+ *
61
+ * First, a durable offline queue: pass `storage` (React Native `AsyncStorage`,
62
+ * or any async key/value store) and the offline mutation queue is persisted
63
+ * through `createAsyncStoragePersistence` — the browser default auto-probes
64
+ * IndexedDB, which React Native lacks, so without this the queue lives only in
65
+ * memory and is lost on reload.
66
+ *
67
+ * Second, credentialed requests: pass `getAuthHeaders` and the returned headers
68
+ * ride both the HTTP RPC path and the WebSocket upgrade, since React Native has
69
+ * no cookie jar to attach a session implicitly.
70
+ *
71
+ * Everything on `LunoraClientOptions` is still accepted and passed through; an
72
+ * explicit `persistence`, `fetch`, or `WebSocket` takes precedence over the
73
+ * convenience derived from `storage` / `getAuthHeaders`. See the package README
74
+ * for a full setup example.
75
+ * @experimental
76
+ */
77
77
  declare const createLunoraClient: (options: CreateLunoraClientOptions) => LunoraClient;
78
78
  export { type AuthHeadersFactory, type CreateLunoraClientOptions, createLunoraClient };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/react-native",
3
- "version": "1.0.0-alpha.3",
3
+ "version": "1.0.0-alpha.5",
4
4
  "description": "React Native / Expo integration for Lunora: an AsyncStorage-backed client factory, the useQuery/useMutation/useSubscription hooks, and a one-call better-auth Expo client",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -50,8 +50,8 @@
50
50
  "access": "public"
51
51
  },
52
52
  "dependencies": {
53
- "@lunora/client": "1.0.0-alpha.23",
54
- "@lunora/react": "1.0.0-alpha.27"
53
+ "@lunora/client": "1.0.0-alpha.25",
54
+ "@lunora/react": "1.0.0-alpha.29"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "@better-auth/expo": "^1.6.23",