@butterbase/sdk 1.0.0 → 1.1.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.
package/README.md CHANGED
@@ -69,6 +69,8 @@ const butterbase = createClient({
69
69
 
70
70
  ## Authentication
71
71
 
72
+ Sessions are automatically persisted to `localStorage` and restored on page refresh. Access tokens are automatically refreshed before they expire.
73
+
72
74
  ```typescript
73
75
  // Sign up
74
76
  const { data, error } = await butterbase.auth.signUp({
@@ -76,18 +78,21 @@ const { data, error } = await butterbase.auth.signUp({
76
78
  password: 'secure123'
77
79
  });
78
80
 
79
- // Sign in
81
+ // Sign in (session is automatically persisted)
80
82
  const { data, error } = await butterbase.auth.signIn({
81
83
  email: 'user@example.com',
82
84
  password: 'secure123'
83
85
  });
84
86
 
85
- // Get current user
87
+ // Get current user (works after page refresh)
86
88
  const { data: user } = await butterbase.auth.getUser();
87
89
 
88
- // Sign out
90
+ // Sign out (clears persisted session)
89
91
  await butterbase.auth.signOut();
90
92
 
93
+ // Refresh session manually (uses stored refresh token if none provided)
94
+ const { data } = await butterbase.auth.refreshSession();
95
+
91
96
  // OAuth
92
97
  const { url } = butterbase.auth.signInWithOAuth({
93
98
  provider: 'google',
@@ -96,6 +101,65 @@ const { url } = butterbase.auth.signInWithOAuth({
96
101
  window.location.href = url;
97
102
  ```
98
103
 
104
+ ### Auth State Changes
105
+
106
+ Subscribe to authentication events to react to sign-ins, sign-outs, and token refreshes:
107
+
108
+ ```typescript
109
+ const { unsubscribe } = butterbase.onAuthStateChange((event, session) => {
110
+ // event: 'SIGNED_IN' | 'SIGNED_OUT' | 'TOKEN_REFRESHED' | 'SESSION_RESTORED'
111
+ console.log(event, session?.user);
112
+ });
113
+
114
+ // Stop listening
115
+ unsubscribe();
116
+ ```
117
+
118
+ ### React Usage
119
+
120
+ ```typescript
121
+ import { useEffect, useState } from 'react';
122
+ import { butterbase } from './lib';
123
+
124
+ function App() {
125
+ const [user, setUser] = useState(null);
126
+
127
+ useEffect(() => {
128
+ // Session is auto-restored — check current state
129
+ const session = butterbase.sessionManager.getSession();
130
+ if (session) setUser(session.user);
131
+
132
+ // React to future auth changes
133
+ const { unsubscribe } = butterbase.onAuthStateChange((event, session) => {
134
+ setUser(session?.user ?? null);
135
+ });
136
+ return unsubscribe;
137
+ }, []);
138
+ }
139
+ ```
140
+
141
+ ### Custom Storage
142
+
143
+ By default, the SDK uses `localStorage` with an in-memory fallback for SSR/Node.js environments. You can provide a custom storage adapter:
144
+
145
+ ```typescript
146
+ import { createClient, MemorySessionStorage } from '@butterbase/sdk';
147
+
148
+ // Memory-only (no persistence)
149
+ const butterbase = createClient({
150
+ appId: 'app_abc123',
151
+ apiUrl: 'https://api.butterbase.com',
152
+ persistSession: false,
153
+ });
154
+
155
+ // Custom storage adapter (e.g., for React Native)
156
+ const butterbase = createClient({
157
+ appId: 'app_abc123',
158
+ apiUrl: 'https://api.butterbase.com',
159
+ sessionStorage: myCustomStorage, // implements { getItem, setItem, removeItem }
160
+ });
161
+ ```
162
+
99
163
  ## Storage
100
164
 
101
165
  ```typescript
@@ -28,9 +28,10 @@ export declare class AuthClient {
28
28
  url: string;
29
29
  };
30
30
  /**
31
- * Refresh the access token using a refresh token
31
+ * Refresh the access token using a refresh token.
32
+ * If no token is provided, uses the stored refresh token.
32
33
  */
33
- refreshSession(refreshToken: string): Promise<ButterbaseResponse<LoginResponse>>;
34
+ refreshSession(refreshToken?: string): Promise<ButterbaseResponse<LoginResponse>>;
34
35
  /**
35
36
  * Request a password reset email
36
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"auth-client.d.ts","sourceRoot":"","sources":["../../src/auth/auth-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EAEZ,aAAa,EACb,cAAc,EACd,IAAI,EACJ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,UAAU;IACT,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAE5C;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAe/E;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAiB9E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAiBlD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAalD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAMrD;;OAEG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAiBtF;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IActE;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAc1F;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;CAanE"}
1
+ {"version":3,"file":"auth-client.d.ts","sourceRoot":"","sources":["../../src/auth/auth-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EAEZ,aAAa,EACb,cAAc,EACd,IAAI,EACJ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,UAAU;IACT,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAW5C;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAe/E;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAqB9E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAoBlD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAalD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAMrD;;;OAGG;IACG,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IA0BvF;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IActE;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAc1F;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;CAanE"}
@@ -2,6 +2,10 @@ export class AuthClient {
2
2
  client;
3
3
  constructor(client) {
4
4
  this.client = client;
5
+ // Register refresh function with session manager
6
+ this.client.sessionManager.setRefreshFunction(async (refreshToken) => {
7
+ return this.client.request('POST', `/auth/${this.client.appId}/refresh`, { refresh_token: refreshToken });
8
+ });
5
9
  }
6
10
  /**
7
11
  * Sign up a new user with email and password
@@ -23,8 +27,9 @@ export class AuthClient {
23
27
  async signIn(params) {
24
28
  try {
25
29
  const response = await this.client.request('POST', `/auth/${this.client.appId}/login`, params);
26
- // Store access token from flat response
27
- this.client.setAccessToken(response.access_token);
30
+ // Persist full session and set access token
31
+ const session = this.client.sessionManager.setSessionFromLoginResponse(response, 'SIGNED_IN');
32
+ this.client.setAccessToken(session.accessToken);
28
33
  return { data: response, error: null };
29
34
  }
30
35
  catch (error) {
@@ -37,11 +42,14 @@ export class AuthClient {
37
42
  async signOut() {
38
43
  try {
39
44
  await this.client.request('POST', `/auth/${this.client.appId}/logout`, {});
40
- // Clear access token
41
45
  this.client.setAccessToken(undefined);
46
+ this.client.sessionManager.clearSession();
42
47
  return { data: null, error: null };
43
48
  }
44
49
  catch (error) {
50
+ // Still clear local state even if API call fails
51
+ this.client.setAccessToken(undefined);
52
+ this.client.sessionManager.clearSession();
45
53
  return { data: null, error: error };
46
54
  }
47
55
  }
@@ -67,13 +75,19 @@ export class AuthClient {
67
75
  return { url };
68
76
  }
69
77
  /**
70
- * Refresh the access token using a refresh token
78
+ * Refresh the access token using a refresh token.
79
+ * If no token is provided, uses the stored refresh token.
71
80
  */
72
81
  async refreshSession(refreshToken) {
73
82
  try {
74
- const response = await this.client.request('POST', `/auth/${this.client.appId}/refresh`, { refresh_token: refreshToken });
75
- // Store new access token from flat response
76
- this.client.setAccessToken(response.access_token);
83
+ const token = refreshToken ?? this.client.sessionManager.getSession()?.refreshToken;
84
+ if (!token) {
85
+ return { data: null, error: new Error('No refresh token available') };
86
+ }
87
+ const response = await this.client.request('POST', `/auth/${this.client.appId}/refresh`, { refresh_token: token });
88
+ // Persist new session and update access token
89
+ const session = this.client.sessionManager.setSessionFromLoginResponse(response, 'TOKEN_REFRESHED');
90
+ this.client.setAccessToken(session.accessToken);
77
91
  return { data: response, error: null };
78
92
  }
79
93
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../../src/auth/auth-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../../src/auth/auth-client.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;QAC1C,iDAAiD;QACjD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,EAAE,YAAoB,EAAE,EAAE;YAC3E,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,EACpC,EAAE,aAAa,EAAE,YAAY,EAAE,CAChC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,MAAoB;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,EACnC,MAAM,CACP,CAAC;YAEF,+DAA+D;YAC/D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAAoB;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,EAClC,MAAM,CACP,CAAC;YAEF,4CAA4C;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,2BAA2B,CACpE,QAAQ,EACR,WAAW,CACZ,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAEhD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,EACnC,EAAE,CACH,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YAE1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iDAAiD;YACjD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACpC,KAAK,EACL,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,CAChC,CAAC;YAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,MAAmB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,0BAA0B;QAChE,MAAM,GAAG,GAAG,GAAG,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAQ,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAChI,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,YAAqB;QACxC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC;YACpF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC;YACxE,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,EACpC,EAAE,aAAa,EAAE,KAAK,EAAE,CACzB,CAAC;YAEF,8CAA8C;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,2BAA2B,CACpE,QAAQ,EACR,iBAAiB,CAClB,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAEhD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,kBAAkB,EAC5C,EAAE,KAAK,EAAE,CACV,CAAC;YAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,WAAmB;QACpD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,iBAAiB,EAC3C,EAAE,KAAK,EAAE,WAAW,EAAE,CACvB,CAAC;YAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACvB,MAAM,EACN,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,eAAe,EACzC,EAAE,IAAI,EAAE,CACT,CAAC;YAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,59 @@
1
+ import type { Session, LoginResponse } from '../types/index.js';
2
+ import type { SessionStorage } from './session-storage.js';
3
+ export type AuthEvent = 'SIGNED_IN' | 'SIGNED_OUT' | 'TOKEN_REFRESHED' | 'SESSION_RESTORED';
4
+ export type AuthChangeCallback = (event: AuthEvent, session: Session | null) => void;
5
+ export interface Subscription {
6
+ unsubscribe: () => void;
7
+ }
8
+ export declare class SessionManager {
9
+ private session;
10
+ private storageKey;
11
+ private storage;
12
+ private listeners;
13
+ private refreshTimerId;
14
+ private refreshPromise;
15
+ /**
16
+ * Injected by AuthClient so SessionManager doesn't depend on network logic.
17
+ */
18
+ private refreshFn;
19
+ constructor(appId: string, storage: SessionStorage);
20
+ /**
21
+ * AuthClient registers its refresh callback here during construction.
22
+ */
23
+ setRefreshFunction(fn: (refreshToken: string) => Promise<LoginResponse>): void;
24
+ /**
25
+ * Restore session from storage. Called once during client init.
26
+ */
27
+ restoreSession(): Session | null;
28
+ /**
29
+ * Save a new session from a LoginResponse.
30
+ */
31
+ setSessionFromLoginResponse(response: LoginResponse, event?: AuthEvent): Session;
32
+ /**
33
+ * Get the current in-memory session.
34
+ */
35
+ getSession(): Session | null;
36
+ /**
37
+ * Clear session from memory and storage.
38
+ */
39
+ clearSession(): void;
40
+ /**
41
+ * Returns true if the access token is expired or will expire
42
+ * within REFRESH_BUFFER_SECONDS.
43
+ */
44
+ isAccessTokenExpired(): boolean;
45
+ /**
46
+ * Refresh the session. Deduplicates concurrent calls.
47
+ */
48
+ refreshSession(): Promise<Session | null>;
49
+ /**
50
+ * Subscribe to auth state changes.
51
+ */
52
+ onAuthStateChange(callback: AuthChangeCallback): Subscription;
53
+ private doRefresh;
54
+ private persist;
55
+ private emit;
56
+ private scheduleRefresh;
57
+ private cancelScheduledRefresh;
58
+ }
59
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,SAAS,GACjB,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,OAAO,GAAG,IAAI,KACpB,IAAI,CAAC;AAEV,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAKD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,cAAc,CAAwC;IAE9D;;OAEG;IACH,OAAO,CAAC,SAAS,CAED;gBAEJ,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAKlD;;OAEG;IACH,kBAAkB,CAChB,EAAE,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,GACnD,IAAI;IAIP;;OAEG;IACH,cAAc,IAAI,OAAO,GAAG,IAAI;IAqBhC;;OAEG;IACH,2BAA2B,CACzB,QAAQ,EAAE,aAAa,EACvB,KAAK,GAAE,SAA6B,GACnC,OAAO;IAeV;;OAEG;IACH,UAAU,IAAI,OAAO,GAAG,IAAI;IAI5B;;OAEG;IACH,YAAY,IAAI,IAAI;IAOpB;;;OAGG;IACH,oBAAoB,IAAI,OAAO;IAM/B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAW/C;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,YAAY;YAW/C,SAAS;IAgBvB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,sBAAsB;CAM/B"}
@@ -0,0 +1,165 @@
1
+ /** Refresh this many seconds before actual expiry */
2
+ const REFRESH_BUFFER_SECONDS = 60;
3
+ export class SessionManager {
4
+ session = null;
5
+ storageKey;
6
+ storage;
7
+ listeners = new Set();
8
+ refreshTimerId = null;
9
+ refreshPromise = null;
10
+ /**
11
+ * Injected by AuthClient so SessionManager doesn't depend on network logic.
12
+ */
13
+ refreshFn = null;
14
+ constructor(appId, storage) {
15
+ this.storageKey = `butterbase.auth.${appId}`;
16
+ this.storage = storage;
17
+ }
18
+ /**
19
+ * AuthClient registers its refresh callback here during construction.
20
+ */
21
+ setRefreshFunction(fn) {
22
+ this.refreshFn = fn;
23
+ }
24
+ /**
25
+ * Restore session from storage. Called once during client init.
26
+ */
27
+ restoreSession() {
28
+ try {
29
+ const raw = this.storage.getItem(this.storageKey);
30
+ if (!raw)
31
+ return null;
32
+ const stored = JSON.parse(raw);
33
+ if (!stored.accessToken || !stored.refreshToken) {
34
+ this.storage.removeItem(this.storageKey);
35
+ return null;
36
+ }
37
+ this.session = stored;
38
+ this.scheduleRefresh();
39
+ this.emit('SESSION_RESTORED', this.session);
40
+ return this.session;
41
+ }
42
+ catch {
43
+ this.storage.removeItem(this.storageKey);
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Save a new session from a LoginResponse.
49
+ */
50
+ setSessionFromLoginResponse(response, event = 'TOKEN_REFRESHED') {
51
+ const session = {
52
+ accessToken: response.access_token,
53
+ refreshToken: response.refresh_token,
54
+ expiresAt: Math.floor(Date.now() / 1000) + response.expires_in,
55
+ user: response.user,
56
+ };
57
+ this.session = session;
58
+ this.persist();
59
+ this.scheduleRefresh();
60
+ this.emit(event, session);
61
+ return session;
62
+ }
63
+ /**
64
+ * Get the current in-memory session.
65
+ */
66
+ getSession() {
67
+ return this.session;
68
+ }
69
+ /**
70
+ * Clear session from memory and storage.
71
+ */
72
+ clearSession() {
73
+ this.session = null;
74
+ this.storage.removeItem(this.storageKey);
75
+ this.cancelScheduledRefresh();
76
+ this.emit('SIGNED_OUT', null);
77
+ }
78
+ /**
79
+ * Returns true if the access token is expired or will expire
80
+ * within REFRESH_BUFFER_SECONDS.
81
+ */
82
+ isAccessTokenExpired() {
83
+ if (!this.session)
84
+ return true;
85
+ const now = Math.floor(Date.now() / 1000);
86
+ return now >= this.session.expiresAt - REFRESH_BUFFER_SECONDS;
87
+ }
88
+ /**
89
+ * Refresh the session. Deduplicates concurrent calls.
90
+ */
91
+ async refreshSession() {
92
+ if (this.refreshPromise)
93
+ return this.refreshPromise;
94
+ this.refreshPromise = this.doRefresh();
95
+ try {
96
+ return await this.refreshPromise;
97
+ }
98
+ finally {
99
+ this.refreshPromise = null;
100
+ }
101
+ }
102
+ /**
103
+ * Subscribe to auth state changes.
104
+ */
105
+ onAuthStateChange(callback) {
106
+ this.listeners.add(callback);
107
+ return {
108
+ unsubscribe: () => {
109
+ this.listeners.delete(callback);
110
+ },
111
+ };
112
+ }
113
+ // ── Internal helpers ─────────────────────────────────────
114
+ async doRefresh() {
115
+ if (!this.session?.refreshToken || !this.refreshFn)
116
+ return null;
117
+ try {
118
+ const response = await this.refreshFn(this.session.refreshToken);
119
+ const newSession = this.setSessionFromLoginResponse(response, 'TOKEN_REFRESHED');
120
+ return newSession;
121
+ }
122
+ catch {
123
+ this.clearSession();
124
+ return null;
125
+ }
126
+ }
127
+ persist() {
128
+ if (!this.session)
129
+ return;
130
+ try {
131
+ this.storage.setItem(this.storageKey, JSON.stringify(this.session));
132
+ }
133
+ catch {
134
+ // Storage full or unavailable — degrade silently
135
+ }
136
+ }
137
+ emit(event, session) {
138
+ for (const cb of this.listeners) {
139
+ try {
140
+ cb(event, session);
141
+ }
142
+ catch {
143
+ // Don't let subscriber errors break the SDK
144
+ }
145
+ }
146
+ }
147
+ scheduleRefresh() {
148
+ this.cancelScheduledRefresh();
149
+ if (!this.session)
150
+ return;
151
+ const now = Math.floor(Date.now() / 1000);
152
+ const refreshAt = this.session.expiresAt - REFRESH_BUFFER_SECONDS;
153
+ const delayMs = Math.max((refreshAt - now) * 1000, 0);
154
+ this.refreshTimerId = setTimeout(() => {
155
+ this.refreshSession();
156
+ }, delayMs);
157
+ }
158
+ cancelScheduledRefresh() {
159
+ if (this.refreshTimerId !== null) {
160
+ clearTimeout(this.refreshTimerId);
161
+ this.refreshTimerId = null;
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Interface for session persistence backends.
3
+ * Matches the Web Storage API (getItem/setItem/removeItem) so any
4
+ * Storage-compatible object works directly.
5
+ */
6
+ export interface SessionStorage {
7
+ getItem(key: string): string | null;
8
+ setItem(key: string, value: string): void;
9
+ removeItem(key: string): void;
10
+ }
11
+ /**
12
+ * localStorage adapter. Default for browser environments.
13
+ */
14
+ export declare class LocalSessionStorage implements SessionStorage {
15
+ getItem(key: string): string | null;
16
+ setItem(key: string, value: string): void;
17
+ removeItem(key: string): void;
18
+ }
19
+ /**
20
+ * In-memory fallback for SSR / Node / environments where
21
+ * localStorage is unavailable.
22
+ */
23
+ export declare class MemorySessionStorage implements SessionStorage {
24
+ private store;
25
+ getItem(key: string): string | null;
26
+ setItem(key: string, value: string): void;
27
+ removeItem(key: string): void;
28
+ }
29
+ /**
30
+ * Detect the best available storage. Returns LocalSessionStorage
31
+ * when localStorage is functional, otherwise MemorySessionStorage.
32
+ */
33
+ export declare function detectSessionStorage(): SessionStorage;
34
+ //# sourceMappingURL=session-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../src/auth/session-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAGnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAGzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG9B;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,KAAK,CAA6B;IAE1C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAGnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAGzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG9B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CASrD"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * localStorage adapter. Default for browser environments.
3
+ */
4
+ export class LocalSessionStorage {
5
+ getItem(key) {
6
+ return localStorage.getItem(key);
7
+ }
8
+ setItem(key, value) {
9
+ localStorage.setItem(key, value);
10
+ }
11
+ removeItem(key) {
12
+ localStorage.removeItem(key);
13
+ }
14
+ }
15
+ /**
16
+ * In-memory fallback for SSR / Node / environments where
17
+ * localStorage is unavailable.
18
+ */
19
+ export class MemorySessionStorage {
20
+ store = new Map();
21
+ getItem(key) {
22
+ return this.store.get(key) ?? null;
23
+ }
24
+ setItem(key, value) {
25
+ this.store.set(key, value);
26
+ }
27
+ removeItem(key) {
28
+ this.store.delete(key);
29
+ }
30
+ }
31
+ /**
32
+ * Detect the best available storage. Returns LocalSessionStorage
33
+ * when localStorage is functional, otherwise MemorySessionStorage.
34
+ */
35
+ export function detectSessionStorage() {
36
+ try {
37
+ const testKey = '__butterbase_storage_test__';
38
+ localStorage.setItem(testKey, 'test');
39
+ localStorage.removeItem(testKey);
40
+ return new LocalSessionStorage();
41
+ }
42
+ catch {
43
+ return new MemorySessionStorage();
44
+ }
45
+ }
46
+ //# sourceMappingURL=session-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/auth/session-storage.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC9B,OAAO,CAAC,GAAW;QACjB,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,UAAU,CAAC,GAAW;QACpB,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IACvB,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,6BAA6B,CAAC;QAC9C,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACpC,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,5 +4,8 @@ export { InsertBuilder, UpdateBuilder, DeleteBuilder } from './lib/mutation-buil
4
4
  export { AuthClient } from './auth/auth-client.js';
5
5
  export { StorageClient } from './storage/storage-client.js';
6
6
  export { FunctionsClient } from './functions/functions-client.js';
7
- export type { ButterbaseClientOptions, ButterbaseResponse, User, Session, SignUpParams, SignInParams, AuthResponse, LoginResponse, SignupResponse, OAuthParams, StorageObject, UploadResponse, DownloadUrlResponse, QueryOperator, QueryFilter, OrderByOptions, InvokeFunctionOptions, } from './types/index.js';
7
+ export { SessionManager } from './auth/session-manager.js';
8
+ export { LocalSessionStorage, MemorySessionStorage, detectSessionStorage } from './auth/session-storage.js';
9
+ export type { SessionStorage } from './auth/session-storage.js';
10
+ export type { ButterbaseClientOptions, ButterbaseResponse, User, Session, SignUpParams, SignInParams, AuthResponse, LoginResponse, SignupResponse, OAuthParams, StorageObject, UploadResponse, DownloadUrlResponse, QueryOperator, QueryFilter, OrderByOptions, InvokeFunctionOptions, AuthEvent, AuthChangeCallback, Subscription, } from './types/index.js';
8
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC5G,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,SAAS,EACT,kBAAkB,EAClB,YAAY,GACb,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -8,4 +8,7 @@ export { InsertBuilder, UpdateBuilder, DeleteBuilder } from './lib/mutation-buil
8
8
  export { AuthClient } from './auth/auth-client.js';
9
9
  export { StorageClient } from './storage/storage-client.js';
10
10
  export { FunctionsClient } from './functions/functions-client.js';
11
+ // Session persistence
12
+ export { SessionManager } from './auth/session-manager.js';
13
+ export { LocalSessionStorage, MemorySessionStorage, detectSessionStorage } from './auth/session-storage.js';
11
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE5E,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEzF,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE5E,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEzF,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,7 +1,8 @@
1
- import type { ButterbaseClientOptions } from '../types/index.js';
1
+ import type { ButterbaseClientOptions, AuthChangeCallback, Subscription } from '../types/index.js';
2
2
  import { AuthClient } from '../auth/auth-client.js';
3
3
  import { StorageClient } from '../storage/storage-client.js';
4
4
  import { FunctionsClient } from '../functions/functions-client.js';
5
+ import { SessionManager } from '../auth/session-manager.js';
5
6
  import { QueryBuilder } from './query-builder.js';
6
7
  export declare class ButterbaseClient {
7
8
  readonly appId: string;
@@ -9,6 +10,7 @@ export declare class ButterbaseClient {
9
10
  private anonKey?;
10
11
  private accessToken?;
11
12
  private options;
13
+ readonly sessionManager: SessionManager;
12
14
  readonly auth: AuthClient;
13
15
  readonly storage: StorageClient;
14
16
  readonly functions: FunctionsClient;
@@ -25,6 +27,15 @@ export declare class ButterbaseClient {
25
27
  * Get the current access token
26
28
  */
27
29
  getAccessToken(): string | undefined;
30
+ /**
31
+ * Subscribe to auth state changes
32
+ */
33
+ onAuthStateChange(callback: AuthChangeCallback): Subscription;
34
+ /**
35
+ * Ensure the access token is valid before making a request.
36
+ * Auto-refreshes if expired/near-expiry.
37
+ */
38
+ private ensureValidToken;
28
39
  /**
29
40
  * Internal request method used by all clients
30
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"butterbase-client.d.ts","sourceRoot":"","sources":["../../src/lib/butterbase-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,gBAAgB;IAC3B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,OAAO,CAA0B;IAEzC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,OAAO,EAAE,aAAa,CAAC;IACvC,SAAgB,SAAS,EAAE,eAAe,CAAC;gBAE/B,OAAO,EAAE,uBAAuB;IAW5C;;OAEG;IACH,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAIxC;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,GAAG,EACV,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC,CAAC,CAAC;IAyDb;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,GAAG,EACV,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;CAuCjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CAE/E"}
1
+ {"version":3,"file":"butterbase-client.d.ts","sourceRoot":"","sources":["../../src/lib/butterbase-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,gBAAgB;IAC3B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,OAAO,CAA0B;IAEzC,SAAgB,cAAc,EAAE,cAAc,CAAC;IAC/C,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,OAAO,EAAE,aAAa,CAAC;IACvC,SAAgB,SAAS,EAAE,eAAe,CAAC;gBAE/B,OAAO,EAAE,uBAAuB;IAwB5C;;OAEG;IACH,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAIxC;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,YAAY;IAI7D;;;OAGG;YACW,gBAAgB;IAY9B;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,GAAG,EACV,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC,CAAC,CAAC;IA8Db;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,GAAG,EACV,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;CA4CjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CAE/E"}
@@ -1,6 +1,8 @@
1
1
  import { AuthClient } from '../auth/auth-client.js';
2
2
  import { StorageClient } from '../storage/storage-client.js';
3
3
  import { FunctionsClient } from '../functions/functions-client.js';
4
+ import { SessionManager } from '../auth/session-manager.js';
5
+ import { detectSessionStorage, MemorySessionStorage } from '../auth/session-storage.js';
4
6
  import { QueryBuilder } from './query-builder.js';
5
7
  export class ButterbaseClient {
6
8
  appId;
@@ -8,6 +10,7 @@ export class ButterbaseClient {
8
10
  anonKey;
9
11
  accessToken;
10
12
  options;
13
+ sessionManager;
11
14
  auth;
12
15
  storage;
13
16
  functions;
@@ -16,9 +19,20 @@ export class ButterbaseClient {
16
19
  this.apiUrl = options.apiUrl;
17
20
  this.anonKey = options.anonKey;
18
21
  this.options = options;
22
+ // Initialize session manager with configured or auto-detected storage
23
+ const persistSession = options.persistSession !== false;
24
+ const storage = persistSession
25
+ ? (options.sessionStorage ?? detectSessionStorage())
26
+ : new MemorySessionStorage();
27
+ this.sessionManager = new SessionManager(this.appId, storage);
19
28
  this.auth = new AuthClient(this);
20
29
  this.storage = new StorageClient(this);
21
30
  this.functions = new FunctionsClient(this);
31
+ // Restore session from storage
32
+ const restored = this.sessionManager.restoreSession();
33
+ if (restored) {
34
+ this.accessToken = restored.accessToken;
35
+ }
22
36
  }
23
37
  /**
24
38
  * Create a query builder for a table
@@ -38,10 +52,36 @@ export class ButterbaseClient {
38
52
  getAccessToken() {
39
53
  return this.accessToken;
40
54
  }
55
+ /**
56
+ * Subscribe to auth state changes
57
+ */
58
+ onAuthStateChange(callback) {
59
+ return this.sessionManager.onAuthStateChange(callback);
60
+ }
61
+ /**
62
+ * Ensure the access token is valid before making a request.
63
+ * Auto-refreshes if expired/near-expiry.
64
+ */
65
+ async ensureValidToken() {
66
+ // Only auto-refresh if there's a managed session (not a manually-set token)
67
+ if (this.accessToken && this.sessionManager.getSession() && this.sessionManager.isAccessTokenExpired()) {
68
+ const newSession = await this.sessionManager.refreshSession();
69
+ if (newSession) {
70
+ this.accessToken = newSession.accessToken;
71
+ }
72
+ else {
73
+ this.accessToken = undefined;
74
+ }
75
+ }
76
+ }
41
77
  /**
42
78
  * Internal request method used by all clients
43
79
  */
44
80
  async request(method, path, body, customHeaders) {
81
+ // Auto-refresh before request (skip refresh endpoint to avoid loops)
82
+ if (!path.endsWith('/refresh')) {
83
+ await this.ensureValidToken();
84
+ }
45
85
  const headers = {
46
86
  ...customHeaders,
47
87
  };
@@ -94,6 +134,10 @@ export class ButterbaseClient {
94
134
  * Internal request method for blob responses (e.g., file exports)
95
135
  */
96
136
  async requestBlob(method, path, body, customHeaders) {
137
+ // Auto-refresh before request (skip refresh endpoint to avoid loops)
138
+ if (!path.endsWith('/refresh')) {
139
+ await this.ensureValidToken();
140
+ }
97
141
  const headers = {
98
142
  ...customHeaders,
99
143
  };
@@ -1 +1 @@
1
- {"version":3,"file":"butterbase-client.js","sourceRoot":"","sources":["../../src/lib/butterbase-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"butterbase-client.js","sourceRoot":"","sources":["../../src/lib/butterbase-client.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
+ import type { SessionStorage } from '../auth/session-storage.js';
1
2
  export interface ButterbaseClientOptions {
2
3
  appId: string;
3
4
  apiUrl: string;
4
5
  anonKey?: string;
5
6
  onUnauthorized?: () => void;
7
+ /** Custom session storage adapter. Defaults to localStorage with memory fallback. */
8
+ sessionStorage?: SessionStorage;
9
+ /** Set to false to disable automatic session persistence. Defaults to true. */
10
+ persistSession?: boolean;
6
11
  }
12
+ export type { AuthEvent, AuthChangeCallback, Subscription, } from '../auth/session-manager.js';
7
13
  export interface ButterbaseResponse<T> {
8
14
  data: T | null;
9
15
  error: Error | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@butterbase/sdk",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Universal TypeScript SDK for Butterbase",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",