delta-auth-next 0.1.80 → 0.1.82
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/DeltaProvider.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { DeltaAuthConfig } from './context';
|
|
3
|
-
|
|
3
|
+
export declare function DeltaAuthProvider({ config, children, }: {
|
|
4
4
|
config: DeltaAuthConfig;
|
|
5
5
|
children: React.ReactNode;
|
|
6
|
-
}
|
|
7
|
-
export declare function DeltaAuthProvider({ config, children }: Props): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export {};
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
9
7
|
//# sourceMappingURL=DeltaProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeltaProvider.d.ts","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAe,eAAe,EAAE,MAAM,WAAW,CAAC;AAKzD,
|
|
1
|
+
{"version":3,"file":"DeltaProvider.d.ts","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAe,eAAe,EAAE,MAAM,WAAW,CAAC;AAKzD,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAiIA"}
|
package/dist/DeltaProvider.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx,
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useEffect, useCallback, useMemo, useRef, } from 'react';
|
|
4
4
|
import { AuthContext } from './context';
|
|
5
5
|
import { createAuthClient } from './client/authClient';
|
|
6
6
|
import { useSimpleToast } from './alert';
|
|
7
|
-
export function DeltaAuthProvider({ config, children }) {
|
|
7
|
+
export function DeltaAuthProvider({ config, children, }) {
|
|
8
8
|
const [deltaUser, setDeltaUser] = useState(null);
|
|
9
9
|
const [app, setApp] = useState(null);
|
|
10
10
|
const [loading, setLoading] = useState(true);
|
|
11
|
-
const [enabled, setEnabled] = useState(true);
|
|
12
11
|
const [accessToken, setAccessToken] = useState(null);
|
|
13
12
|
const [expiresAt, setExpiresAt] = useState(null);
|
|
14
|
-
// 1.
|
|
13
|
+
// 1. CRITICAL: These refs prevent the "Feedback Loop"
|
|
15
14
|
const isRefreshing = useRef(false);
|
|
15
|
+
const lastRefreshTime = useRef(0);
|
|
16
16
|
const { Toast } = useSimpleToast();
|
|
17
17
|
const client = useMemo(() => {
|
|
18
18
|
return createAuthClient({
|
|
@@ -21,22 +21,21 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
21
21
|
authDomain: config.authDomain,
|
|
22
22
|
appType: config.appType,
|
|
23
23
|
});
|
|
24
|
-
}, [
|
|
25
|
-
config.backendUrl,
|
|
26
|
-
config.publishableKey,
|
|
27
|
-
config.authDomain,
|
|
28
|
-
config.appType,
|
|
29
|
-
]);
|
|
24
|
+
}, [config]);
|
|
30
25
|
const fetchUser = useCallback(async () => {
|
|
31
|
-
if
|
|
26
|
+
// 2. Stop if already in flight OR if we just refreshed < 5 seconds ago
|
|
27
|
+
if (isRefreshing.current || Date.now() - lastRefreshTime.current < 5000)
|
|
32
28
|
return null;
|
|
33
|
-
isRefreshing.current = true;
|
|
29
|
+
isRefreshing.current = true;
|
|
34
30
|
try {
|
|
35
31
|
const res = await client.getCurrentUser();
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
if (res.user) {
|
|
33
|
+
setDeltaUser(res.user);
|
|
34
|
+
setAccessToken(res.accessToken);
|
|
35
|
+
if (res.user.session_expires_at) {
|
|
36
|
+
setExpiresAt(new Date(res.user.session_expires_at).getTime());
|
|
37
|
+
}
|
|
38
|
+
lastRefreshTime.current = Date.now(); // Mark successful refresh
|
|
40
39
|
}
|
|
41
40
|
if (res.application)
|
|
42
41
|
setApp(res.application);
|
|
@@ -44,92 +43,73 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
44
43
|
}
|
|
45
44
|
catch (err) {
|
|
46
45
|
console.warn('DeltaAuth refresh failed:', err);
|
|
47
|
-
setDeltaUser(null);
|
|
48
|
-
setAccessToken(null);
|
|
49
|
-
setExpiresAt(null);
|
|
50
46
|
return null;
|
|
51
47
|
}
|
|
52
48
|
finally {
|
|
53
|
-
isRefreshing.current = false;
|
|
49
|
+
isRefreshing.current = false;
|
|
54
50
|
setLoading(false);
|
|
55
51
|
}
|
|
56
|
-
}, [client
|
|
57
|
-
/*
|
|
58
|
-
/* Bootstrap (Initial Load) */
|
|
59
|
-
/* ---------------------------------- */
|
|
52
|
+
}, [client]);
|
|
53
|
+
/* --- Bootstrap (Runs once on mount) --- */
|
|
60
54
|
useEffect(() => {
|
|
61
55
|
let isMounted = true;
|
|
62
|
-
setLoading(true);
|
|
63
56
|
const bootstrap = async () => {
|
|
64
57
|
try {
|
|
65
58
|
const res = await fetch(`${config.backendUrl}/auth/app-info?client_id=${config.publishableKey}`, { credentials: 'include' });
|
|
66
|
-
if (!res.ok)
|
|
67
|
-
throw new Error('Failed to fetch app metadata');
|
|
68
59
|
const data = await res.json();
|
|
69
|
-
if (isMounted) {
|
|
70
|
-
setApp(data.app
|
|
71
|
-
setDeltaUser(data.user
|
|
60
|
+
if (isMounted && data.user) {
|
|
61
|
+
setApp(data.app);
|
|
62
|
+
setDeltaUser(data.user);
|
|
72
63
|
setAccessToken(data.accessToken);
|
|
73
|
-
if (data.user
|
|
64
|
+
if (data.user.session_expires_at) {
|
|
74
65
|
setExpiresAt(new Date(data.user.session_expires_at).getTime());
|
|
75
66
|
}
|
|
76
67
|
}
|
|
77
68
|
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
console.warn('DeltaAuth bootstrap failed:', err);
|
|
80
|
-
}
|
|
81
69
|
finally {
|
|
82
70
|
if (isMounted)
|
|
83
71
|
setLoading(false);
|
|
84
72
|
}
|
|
85
73
|
};
|
|
86
|
-
|
|
87
|
-
bootstrap();
|
|
74
|
+
bootstrap();
|
|
88
75
|
return () => {
|
|
89
76
|
isMounted = false;
|
|
90
77
|
};
|
|
91
78
|
}, [config.publishableKey, config.backendUrl]);
|
|
92
|
-
/*
|
|
93
|
-
/* 3. Proactive Scheduling (Fixed) */
|
|
94
|
-
/* ---------------------------------- */
|
|
79
|
+
/* --- 3. THE FIXED SCHEDULER --- */
|
|
95
80
|
useEffect(() => {
|
|
96
|
-
if
|
|
81
|
+
// Only schedule if we have a user and an expiry that isn't currently being refreshed
|
|
82
|
+
if (!deltaUser || !expiresAt || isRefreshing.current)
|
|
97
83
|
return;
|
|
98
|
-
// Calculate delay
|
|
99
84
|
const now = Date.now();
|
|
100
|
-
|
|
101
|
-
//
|
|
102
|
-
// we wait at least 5 seconds before the next check to prevent infinite loops
|
|
103
|
-
// if the backend hasn't rotated the session_expires_at yet.
|
|
85
|
+
const delay = expiresAt - now;
|
|
86
|
+
// If already expired, trigger a single refresh
|
|
104
87
|
if (delay <= 0) {
|
|
105
88
|
fetchUser();
|
|
106
89
|
return;
|
|
107
90
|
}
|
|
91
|
+
// Otherwise, set a timer for the exact moment of death
|
|
108
92
|
const timer = setTimeout(() => {
|
|
109
93
|
fetchUser();
|
|
110
94
|
}, delay);
|
|
111
95
|
return () => clearTimeout(timer);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
/* ---------------------------------- */
|
|
96
|
+
// 4. IMPORTANT: We remove deltaUser from dependencies to prevent the loop
|
|
97
|
+
// We only care if the 'expiresAt' timestamp actually changes.
|
|
98
|
+
}, [expiresAt, fetchUser]);
|
|
116
99
|
const getAccessToken = useCallback(async () => {
|
|
117
|
-
const isExpired = !expiresAt || Date.now() +
|
|
118
|
-
if (accessToken && !isExpired)
|
|
100
|
+
const isExpired = !expiresAt || Date.now() + 2000 >= expiresAt;
|
|
101
|
+
if (accessToken && !isExpired)
|
|
119
102
|
return accessToken;
|
|
120
|
-
}
|
|
121
103
|
const res = await fetchUser();
|
|
122
104
|
return res?.accessToken ?? null;
|
|
123
105
|
}, [accessToken, expiresAt, fetchUser]);
|
|
124
|
-
if (!enabled)
|
|
125
|
-
return (_jsxs(_Fragment, { children: [children, _jsx(Toast, {})] }));
|
|
126
106
|
return (_jsxs(AuthContext.Provider, { value: {
|
|
127
107
|
deltaUser,
|
|
128
108
|
setDeltaUser,
|
|
129
109
|
app,
|
|
130
110
|
setApp,
|
|
131
111
|
loading,
|
|
132
|
-
isAuthenticated:
|
|
112
|
+
isAuthenticated: !!deltaUser,
|
|
133
113
|
client,
|
|
134
114
|
fetchUser,
|
|
135
115
|
getAccessToken,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeltaProvider.js","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EACZ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAmB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DeltaProvider.js","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "delta-auth-next",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.82",
|
|
4
4
|
"description": "A lightweight authentication system for Next.js that provides React context providers and Edge-safe middleware utilities for handling sign-in redirects and session management.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Samuel Onwodi",
|