@gusnips/react 0.9.32 → 0.9.33
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.
|
@@ -16,6 +16,15 @@ export interface SupabaseSessionAuth {
|
|
|
16
16
|
signOut(options?: SignOut): Promise<{
|
|
17
17
|
error: unknown;
|
|
18
18
|
}>;
|
|
19
|
+
/** supabase-js always has it. {@link signOutEvenOffline} listens with it so it never sends a
|
|
20
|
+
* second `SIGNED_OUT`; without it, that cleanup runs every time. */
|
|
21
|
+
onAuthStateChange?(callback: (event: string) => void): {
|
|
22
|
+
data: {
|
|
23
|
+
subscription: {
|
|
24
|
+
unsubscribe(): void;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
};
|
|
19
28
|
}
|
|
20
29
|
/**
|
|
21
30
|
* Where auth-js keeps the session: the two `createClient` options it reads it from. Build the
|
|
@@ -121,7 +130,7 @@ export declare function supabaseAuthStorage(supabaseUrl: string): SupabaseSessio
|
|
|
121
130
|
* later at 2.106.2. If your screen does not reload, clear your own store when this resolves instead
|
|
122
131
|
* of waiting for the event.
|
|
123
132
|
*/
|
|
124
|
-
export declare function signOutEvenOffline(auth: Pick<SupabaseSessionAuth, "signOut">, { storage, storageKey }: SupabaseSessionStorage): Promise<{
|
|
133
|
+
export declare function signOutEvenOffline(auth: Pick<SupabaseSessionAuth, "signOut" | "onAuthStateChange">, { storage, storageKey }: SupabaseSessionStorage): Promise<{
|
|
125
134
|
error: unknown;
|
|
126
135
|
}>;
|
|
127
136
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase-session.d.ts","sourceRoot":"","sources":["../src/supabase-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EAGZ,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE3E,UAAU,qBAAqB;IAC7B,IAAI,EAAE;QAAE,OAAO,EAAE;YAAE,YAAY,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC;CACpD;AAED,8FAA8F;AAC9F,MAAM,WAAW,mBAAmB;IAClC,UAAU,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC7C,cAAc,IAAI,OAAO,CAAC,qBAAqB,GAAG;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"supabase-session.d.ts","sourceRoot":"","sources":["../src/supabase-session.ts"],"names":[],"mappings":"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"}
|
package/dist/supabase-session.js
CHANGED
|
@@ -145,17 +145,37 @@ function localStorageOrMemory() {
|
|
|
145
145
|
* of waiting for the event.
|
|
146
146
|
*/
|
|
147
147
|
export async function signOutEvenOffline(auth, { storage, storageKey }) {
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
// From 2.119.0 on, auth-js signs this device out by itself when a local sign-out meets a refresh
|
|
149
|
+
// that could not reach auth, and sends SIGNED_OUT when its backoff ends. The cleanup below would
|
|
150
|
+
// send it a second time, so it runs only if auth-js finished without sending one.
|
|
151
|
+
let announced = false;
|
|
152
|
+
const listening = auth.onAuthStateChange?.((event) => {
|
|
153
|
+
if (event === "SIGNED_OUT")
|
|
154
|
+
announced = true;
|
|
155
|
+
});
|
|
156
|
+
const done = () => listening?.data.subscription.unsubscribe();
|
|
157
|
+
const first = auth.signOut({ scope: "local" }).catch((thrown) => ({ error: thrown }));
|
|
158
|
+
const { error } = await withinSignOutDeadline(first);
|
|
159
|
+
if (error == null) {
|
|
160
|
+
done();
|
|
150
161
|
return { error: null };
|
|
162
|
+
}
|
|
151
163
|
// From 2.110.2 on, auth-js has already removed the session when only `/logout` failed, and has
|
|
152
164
|
// already sent SIGNED_OUT. Going on would send it a second time.
|
|
153
|
-
if ((await storage.getItem(storageKey)) === null)
|
|
165
|
+
if ((await storage.getItem(storageKey)) === null) {
|
|
166
|
+
done();
|
|
154
167
|
return { error };
|
|
168
|
+
}
|
|
155
169
|
await storage.removeItem(storageKey);
|
|
156
|
-
// Not awaited:
|
|
157
|
-
//
|
|
158
|
-
void
|
|
170
|
+
// Not awaited: the first call may still be in auth-js's refresh backoff, and a second one would
|
|
171
|
+
// wait behind it anyway. The session is already out of storage, and storage is what a reload reads.
|
|
172
|
+
void first
|
|
173
|
+
.then(async () => {
|
|
174
|
+
if (!announced)
|
|
175
|
+
await auth.signOut({ scope: "local" });
|
|
176
|
+
})
|
|
177
|
+
.catch(() => { })
|
|
178
|
+
.finally(done);
|
|
159
179
|
return { error };
|
|
160
180
|
}
|
|
161
181
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase-session.js","sourceRoot":"","sources":["../src/supabase-session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,yBAAyB,GAK1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAuB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"supabase-session.js","sourceRoot":"","sources":["../src/supabase-session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gusnips/react",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.33",
|
|
4
4
|
"description": "The headless runtime under a Vite + React SPA: typed fetch client with single-flight refresh, auth store, query defaults, route guards, error boundary, stale-tab recovery, i18n bootstrap.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
package/src/supabase-session.ts
CHANGED
|
@@ -17,6 +17,11 @@ export interface SupabaseSessionAuth {
|
|
|
17
17
|
getSession(): Promise<SupabaseSessionResult>;
|
|
18
18
|
refreshSession(): Promise<SupabaseSessionResult & { error: unknown }>;
|
|
19
19
|
signOut(options?: SignOut): Promise<{ error: unknown }>;
|
|
20
|
+
/** supabase-js always has it. {@link signOutEvenOffline} listens with it so it never sends a
|
|
21
|
+
* second `SIGNED_OUT`; without it, that cleanup runs every time. */
|
|
22
|
+
onAuthStateChange?(callback: (event: string) => void): {
|
|
23
|
+
data: { subscription: { unsubscribe(): void } };
|
|
24
|
+
};
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
/**
|
|
@@ -185,18 +190,38 @@ function localStorageOrMemory(): SupportedStorage {
|
|
|
185
190
|
* of waiting for the event.
|
|
186
191
|
*/
|
|
187
192
|
export async function signOutEvenOffline(
|
|
188
|
-
auth: Pick<SupabaseSessionAuth, "signOut">,
|
|
193
|
+
auth: Pick<SupabaseSessionAuth, "signOut" | "onAuthStateChange">,
|
|
189
194
|
{ storage, storageKey }: SupabaseSessionStorage,
|
|
190
195
|
): Promise<{ error: unknown }> {
|
|
191
|
-
|
|
192
|
-
|
|
196
|
+
// From 2.119.0 on, auth-js signs this device out by itself when a local sign-out meets a refresh
|
|
197
|
+
// that could not reach auth, and sends SIGNED_OUT when its backoff ends. The cleanup below would
|
|
198
|
+
// send it a second time, so it runs only if auth-js finished without sending one.
|
|
199
|
+
let announced = false;
|
|
200
|
+
const listening = auth.onAuthStateChange?.((event) => {
|
|
201
|
+
if (event === "SIGNED_OUT") announced = true;
|
|
202
|
+
});
|
|
203
|
+
const done = () => listening?.data.subscription.unsubscribe();
|
|
204
|
+
const first = auth.signOut({ scope: "local" }).catch((thrown: unknown) => ({ error: thrown }));
|
|
205
|
+
const { error } = await withinSignOutDeadline(first);
|
|
206
|
+
if (error == null) {
|
|
207
|
+
done();
|
|
208
|
+
return { error: null };
|
|
209
|
+
}
|
|
193
210
|
// From 2.110.2 on, auth-js has already removed the session when only `/logout` failed, and has
|
|
194
211
|
// already sent SIGNED_OUT. Going on would send it a second time.
|
|
195
|
-
if ((await storage.getItem(storageKey)) === null)
|
|
212
|
+
if ((await storage.getItem(storageKey)) === null) {
|
|
213
|
+
done();
|
|
214
|
+
return { error };
|
|
215
|
+
}
|
|
196
216
|
await storage.removeItem(storageKey);
|
|
197
|
-
// Not awaited:
|
|
198
|
-
//
|
|
199
|
-
void
|
|
217
|
+
// Not awaited: the first call may still be in auth-js's refresh backoff, and a second one would
|
|
218
|
+
// wait behind it anyway. The session is already out of storage, and storage is what a reload reads.
|
|
219
|
+
void first
|
|
220
|
+
.then(async () => {
|
|
221
|
+
if (!announced) await auth.signOut({ scope: "local" });
|
|
222
|
+
})
|
|
223
|
+
.catch(() => {})
|
|
224
|
+
.finally(done);
|
|
200
225
|
return { error };
|
|
201
226
|
}
|
|
202
227
|
|