@lunora/react-native 1.0.0-alpha.1 → 1.0.0-alpha.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/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  </div>
8
8
 
9
+ > **Experimental** — this package is outside the Lunora 1.0 stability promise: its API may change in any release, without a major version bump.
10
+
9
11
  ---
10
12
 
11
13
  The same live hooks you use on the web — `useQuery`, `useMutation`,
package/dist/auth.d.mts CHANGED
@@ -1,33 +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
- */
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
+ */
23
24
  declare const expoBearerToken: (authClient: {
24
25
  getCookie: () => string;
25
26
  }) => null | string;
26
27
  /**
27
- * The slice of a key/value store the better-auth Expo plugin needs — the shape
28
- * of `expo-secure-store` (a synchronous `getItem`, plus `setItem`). Pass Expo
29
- * `SecureStore` straight in.
30
- */
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
+ */
31
33
  interface SecureStorageLike {
32
34
  getItem: (key: string) => null | string;
33
35
  setItem: (key: string, value: string) => unknown;
package/dist/auth.d.ts CHANGED
@@ -1,33 +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
- */
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
+ */
23
24
  declare const expoBearerToken: (authClient: {
24
25
  getCookie: () => string;
25
26
  }) => null | string;
26
27
  /**
27
- * The slice of a key/value store the better-auth Expo plugin needs — the shape
28
- * of `expo-secure-store` (a synchronous `getItem`, plus `setItem`). Pass Expo
29
- * `SecureStore` straight in.
30
- */
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
+ */
31
33
  interface SecureStorageLike {
32
34
  getItem: (key: string) => null | string;
33
35
  setItem: (key: string, value: string) => unknown;
package/dist/auth.mjs CHANGED
@@ -1,2 +1 @@
1
- export { default as expoBearerToken } from './packem_shared/expoBearerToken-B0Zorz--.mjs';
2
- export { expoClient, setupExpoFocusManager, setupExpoOnlineManager } from '@better-auth/expo/client';
1
+ import{default as p}from"./packem_shared/expoBearerToken-CSfRb511.mjs";import{expoClient as a,setupExpoFocusManager as n,setupExpoOnlineManager as t}from"@better-auth/expo/client";export{p as expoBearerToken,a as expoClient,n as setupExpoFocusManager,t as setupExpoOnlineManager};
package/dist/index.d.mts CHANGED
@@ -1,75 +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
- */
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
+ */
16
17
  type AuthHeadersFactory = () => Record<string, string> | undefined;
17
18
  /**
18
- * Options for `createLunoraClient` — the React Native / Expo counterpart to
19
- * constructing a `LunoraClient` directly. It is `LunoraClientOptions` with two
20
- * React-Native-shaped conveniences layered on. `storage` wires the
21
- * AsyncStorage-backed offline-queue persistence for you (the browser default
22
- * auto-probes IndexedDB, which React Native lacks, so without this the queue
23
- * stays in memory and is lost on reload). `getAuthHeaders` is a generic escape
24
- * hatch for a custom credential header on both the HTTP RPC path and the
25
- * WebSocket upgrade; for better-auth sessions prefer a bearer token
26
- * (`expoBearerToken` + the client's `setAuthToken` / `setWsToken`).
27
- *
28
- * The `persistence`, `fetch`, and `WebSocket` fields of `LunoraClientOptions`
29
- * are still accepted and take precedence when you need full control; the two
30
- * conveniences are sugar over exactly those seams.
31
- */
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
+ */
32
34
  interface CreateLunoraClientOptions extends LunoraClientOptions {
33
35
  /**
34
- * Attaches a credential to every HTTP RPC request and to the WebSocket
35
- * upgrade request. See `AuthHeadersFactory`. When omitted, requests go out
36
- * with only whatever `LunoraClient` already sets (its bearer token from
37
- * `setAuthToken`, if any).
38
- *
39
- * Merged UNDER the client's own headers on the HTTP path (an explicit
40
- * `setAuthToken` bearer wins over a same-named header here); applied to the
41
- * WebSocket upgrade via a wrapping `WebSocket`, since the socket has no other
42
- * way to carry credentials in React Native.
43
- */
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
+ */
44
46
  getAuthHeaders?: AuthHeadersFactory;
45
47
  /**
46
- * React Native `AsyncStorage` (or any async key/value store with the same
47
- * `getItem`/`setItem`/`removeItem` surface — Expo `SecureStore`, an in-memory
48
- * map in tests). When supplied, the offline mutation queue is persisted here
49
- * via `createAsyncStoragePersistence`, so writes made offline survive an app
50
- * restart. Ignored when an explicit `persistence` is passed.
51
- */
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
+ */
52
54
  storage?: AsyncStorageLike;
53
55
  }
54
56
  /**
55
- * Construct a `LunoraClient` tuned for React Native / Expo — a thin wrapper over
56
- * `new LunoraClient(options)` that fills in the two things a browser gets for
57
- * free but React Native does not.
58
- *
59
- * First, a durable offline queue: pass `storage` (React Native `AsyncStorage`,
60
- * or any async key/value store) and the offline mutation queue is persisted
61
- * through `createAsyncStoragePersistence` — the browser default auto-probes
62
- * IndexedDB, which React Native lacks, so without this the queue lives only in
63
- * memory and is lost on reload.
64
- *
65
- * Second, credentialed requests: pass `getAuthHeaders` and the returned headers
66
- * ride both the HTTP RPC path and the WebSocket upgrade, since React Native has
67
- * no cookie jar to attach a session implicitly.
68
- *
69
- * Everything on `LunoraClientOptions` is still accepted and passed through; an
70
- * explicit `persistence`, `fetch`, or `WebSocket` takes precedence over the
71
- * convenience derived from `storage` / `getAuthHeaders`. See the package README
72
- * for a full setup example.
73
- */
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
+ */
74
77
  declare const createLunoraClient: (options: CreateLunoraClientOptions) => LunoraClient;
75
78
  export { type AuthHeadersFactory, type CreateLunoraClientOptions, createLunoraClient };
package/dist/index.d.ts CHANGED
@@ -1,75 +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
- */
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
+ */
16
17
  type AuthHeadersFactory = () => Record<string, string> | undefined;
17
18
  /**
18
- * Options for `createLunoraClient` — the React Native / Expo counterpart to
19
- * constructing a `LunoraClient` directly. It is `LunoraClientOptions` with two
20
- * React-Native-shaped conveniences layered on. `storage` wires the
21
- * AsyncStorage-backed offline-queue persistence for you (the browser default
22
- * auto-probes IndexedDB, which React Native lacks, so without this the queue
23
- * stays in memory and is lost on reload). `getAuthHeaders` is a generic escape
24
- * hatch for a custom credential header on both the HTTP RPC path and the
25
- * WebSocket upgrade; for better-auth sessions prefer a bearer token
26
- * (`expoBearerToken` + the client's `setAuthToken` / `setWsToken`).
27
- *
28
- * The `persistence`, `fetch`, and `WebSocket` fields of `LunoraClientOptions`
29
- * are still accepted and take precedence when you need full control; the two
30
- * conveniences are sugar over exactly those seams.
31
- */
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
+ */
32
34
  interface CreateLunoraClientOptions extends LunoraClientOptions {
33
35
  /**
34
- * Attaches a credential to every HTTP RPC request and to the WebSocket
35
- * upgrade request. See `AuthHeadersFactory`. When omitted, requests go out
36
- * with only whatever `LunoraClient` already sets (its bearer token from
37
- * `setAuthToken`, if any).
38
- *
39
- * Merged UNDER the client's own headers on the HTTP path (an explicit
40
- * `setAuthToken` bearer wins over a same-named header here); applied to the
41
- * WebSocket upgrade via a wrapping `WebSocket`, since the socket has no other
42
- * way to carry credentials in React Native.
43
- */
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
+ */
44
46
  getAuthHeaders?: AuthHeadersFactory;
45
47
  /**
46
- * React Native `AsyncStorage` (or any async key/value store with the same
47
- * `getItem`/`setItem`/`removeItem` surface — Expo `SecureStore`, an in-memory
48
- * map in tests). When supplied, the offline mutation queue is persisted here
49
- * via `createAsyncStoragePersistence`, so writes made offline survive an app
50
- * restart. Ignored when an explicit `persistence` is passed.
51
- */
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
+ */
52
54
  storage?: AsyncStorageLike;
53
55
  }
54
56
  /**
55
- * Construct a `LunoraClient` tuned for React Native / Expo — a thin wrapper over
56
- * `new LunoraClient(options)` that fills in the two things a browser gets for
57
- * free but React Native does not.
58
- *
59
- * First, a durable offline queue: pass `storage` (React Native `AsyncStorage`,
60
- * or any async key/value store) and the offline mutation queue is persisted
61
- * through `createAsyncStoragePersistence` — the browser default auto-probes
62
- * IndexedDB, which React Native lacks, so without this the queue lives only in
63
- * memory and is lost on reload.
64
- *
65
- * Second, credentialed requests: pass `getAuthHeaders` and the returned headers
66
- * ride both the HTTP RPC path and the WebSocket upgrade, since React Native has
67
- * no cookie jar to attach a session implicitly.
68
- *
69
- * Everything on `LunoraClientOptions` is still accepted and passed through; an
70
- * explicit `persistence`, `fetch`, or `WebSocket` takes precedence over the
71
- * convenience derived from `storage` / `getAuthHeaders`. See the package README
72
- * for a full setup example.
73
- */
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
+ */
74
77
  declare const createLunoraClient: (options: CreateLunoraClientOptions) => LunoraClient;
75
78
  export { type AuthHeadersFactory, type CreateLunoraClientOptions, createLunoraClient };
package/dist/index.mjs CHANGED
@@ -1,2 +1 @@
1
- export { createLunoraClient } from './packem_shared/createLunoraClient-D9i-IKbc.mjs';
2
- export * from '@lunora/react';
1
+ import{createLunoraClient as o}from"./packem_shared/createLunoraClient-5PwdvVvS.mjs";export*from"@lunora/react";export{o as createLunoraClient};
@@ -0,0 +1 @@
1
+ import{LunoraClient as i,createAsyncStoragePersistence as h}from"@lunora/client";const d=(s,t)=>(o,e)=>{const r=t();if(!r)return s(o,e);const c=new Headers(r);return e?.headers&&new Headers(e.headers).forEach((n,a)=>{c.set(a,n)}),s(o,{...e,headers:c})},f=(s,t)=>class extends s{constructor(o,e){const r=t();super(o,e,r?{headers:r}:void 0)}},b=s=>{const{getAuthHeaders:t,storage:o,...e}=s,r=t&&e.fetch===void 0&&typeof fetch=="function"?d(fetch.bind(globalThis),t):e.fetch,c=t&&e.WebSocket===void 0&&typeof WebSocket=="function"?f(WebSocket,t):e.WebSocket;return new i({...e,persistence:e.persistence??(o?h({storage:o}):void 0),fetch:r,WebSocket:c})};export{b as createLunoraClient,d as withAuthHeaders,f as withAuthWebSocket};
@@ -0,0 +1 @@
1
+ const o=/(?:^|;)[^;=]*session_token=([^;]+)/,t=e=>o.exec(e.getCookie())?.[1]??null;export{t as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/react-native",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.11",
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.21",
54
- "@lunora/react": "1.0.0-alpha.24"
53
+ "@lunora/client": "1.0.0-alpha.31",
54
+ "@lunora/react": "1.0.0-alpha.35"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "@better-auth/expo": "^1.6.23",
@@ -1,36 +0,0 @@
1
- import { LunoraClient, createAsyncStoragePersistence } from '@lunora/client';
2
-
3
- const withAuthHeaders = (fetchImpl, getAuthHeaders) => (input, init) => {
4
- const extra = getAuthHeaders();
5
- if (!extra) {
6
- return fetchImpl(input, init);
7
- }
8
- const merged = new Headers(extra);
9
- if (init?.headers) {
10
- new Headers(init.headers).forEach((value, key) => {
11
- merged.set(key, value);
12
- });
13
- }
14
- return fetchImpl(input, { ...init, headers: merged });
15
- };
16
- const withAuthWebSocket = (WebSocketImpl, getAuthHeaders) => class AuthWebSocket extends WebSocketImpl {
17
- constructor(url, protocols) {
18
- const headers = getAuthHeaders();
19
- super(url, protocols, headers ? { headers } : void 0);
20
- }
21
- };
22
- const createLunoraClient = (options) => {
23
- const { getAuthHeaders, storage, ...rest } = options;
24
- const authedFetch = getAuthHeaders && rest.fetch === void 0 && typeof fetch === "function" ? withAuthHeaders(fetch.bind(globalThis), getAuthHeaders) : rest.fetch;
25
- const authedWebSocket = getAuthHeaders && rest.WebSocket === void 0 && typeof WebSocket === "function" ? withAuthWebSocket(WebSocket, getAuthHeaders) : rest.WebSocket;
26
- return new LunoraClient({
27
- ...rest,
28
- // Auto-wire AsyncStorage persistence unless the caller passed an explicit
29
- // `persistence` (including `false` to opt out).
30
- persistence: rest.persistence ?? (storage ? createAsyncStoragePersistence({ storage }) : void 0),
31
- fetch: authedFetch,
32
- WebSocket: authedWebSocket
33
- });
34
- };
35
-
36
- export { createLunoraClient, withAuthHeaders, withAuthWebSocket };
@@ -1,7 +0,0 @@
1
- const SESSION_TOKEN_COOKIE = /(?:^|;)[^;=]*session_token=([^;]+)/;
2
- const expoBearerToken = (authClient) => {
3
- const match = SESSION_TOKEN_COOKIE.exec(authClient.getCookie());
4
- return match?.[1] ?? null;
5
- };
6
-
7
- export { expoBearerToken as default };