delta-auth-next 0.1.75 → 0.1.77
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeltaProvider.d.ts","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,EAAe,eAAe,EAAE,MAAM,WAAW,CAAC;AAKzD,UAAU,KAAK;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"DeltaProvider.d.ts","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,EAAe,eAAe,EAAE,MAAM,WAAW,CAAC;AAKzD,UAAU,KAAK;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,2CA2K5D"}
|
package/dist/DeltaProvider.js
CHANGED
|
@@ -10,11 +10,9 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
10
10
|
const [loading, setLoading] = useState(true);
|
|
11
11
|
const [enabled, setEnabled] = useState(true);
|
|
12
12
|
const [accessToken, setAccessToken] = useState(null);
|
|
13
|
-
|
|
13
|
+
// Stored as a Number (ms) to allow direct math with Date.now()
|
|
14
|
+
const [expiresAt, setExpiresAt] = useState(null);
|
|
14
15
|
const { show, Toast } = useSimpleToast();
|
|
15
|
-
/* ---------------------------------- */
|
|
16
|
-
/* Stable Auth Client Instance */
|
|
17
|
-
/* ---------------------------------- */
|
|
18
16
|
const client = useMemo(() => {
|
|
19
17
|
return createAuthClient({
|
|
20
18
|
backendUrl: config.backendUrl,
|
|
@@ -29,23 +27,53 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
29
27
|
config.appType,
|
|
30
28
|
]);
|
|
31
29
|
/* ---------------------------------- */
|
|
32
|
-
/*
|
|
30
|
+
/* 1. Logic: The Silent Refresh */
|
|
31
|
+
/* ---------------------------------- */
|
|
32
|
+
const fetchUser = useCallback(async () => {
|
|
33
|
+
if (!enabled)
|
|
34
|
+
return null;
|
|
35
|
+
try {
|
|
36
|
+
const res = await client.getCurrentUser();
|
|
37
|
+
setDeltaUser(res.user);
|
|
38
|
+
setAccessToken(res.accessToken);
|
|
39
|
+
// Convert Date String to Unix Timestamp (ms) for calibration
|
|
40
|
+
if (res.user?.session_expires_at) {
|
|
41
|
+
setExpiresAt(new Date(res.user.session_expires_at).getTime());
|
|
42
|
+
}
|
|
43
|
+
if (res.application)
|
|
44
|
+
setApp(res.application);
|
|
45
|
+
return res;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
console.warn('DeltaAuth refresh failed:', err);
|
|
49
|
+
setDeltaUser(null);
|
|
50
|
+
setAccessToken(null);
|
|
51
|
+
setExpiresAt(null);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
setLoading(false);
|
|
56
|
+
}
|
|
57
|
+
}, [client, enabled]);
|
|
58
|
+
/* ---------------------------------- */
|
|
59
|
+
/* 2. Bootstrap (Initial Load) */
|
|
33
60
|
/* ---------------------------------- */
|
|
34
61
|
useEffect(() => {
|
|
35
|
-
let isMounted = true;
|
|
62
|
+
let isMounted = true;
|
|
36
63
|
setLoading(true);
|
|
37
64
|
const bootstrap = async () => {
|
|
38
65
|
try {
|
|
39
66
|
const res = await fetch(`${config.backendUrl}/auth/app-info?client_id=${config.publishableKey}`, { credentials: 'include' });
|
|
40
|
-
if (!res.ok)
|
|
67
|
+
if (!res.ok)
|
|
41
68
|
throw new Error('Failed to fetch app metadata');
|
|
42
|
-
}
|
|
43
69
|
const data = await res.json();
|
|
44
70
|
if (isMounted) {
|
|
71
|
+
// MATCHING YOUR BACKEND KEYS:
|
|
45
72
|
setApp(data.app ?? null);
|
|
46
73
|
setDeltaUser(data.user ?? null);
|
|
47
74
|
setAccessToken(data.accessToken);
|
|
48
|
-
|
|
75
|
+
// Use the absolute timestamp sent by the backend
|
|
76
|
+
setExpiresAt(data.user.session_expires_at);
|
|
49
77
|
}
|
|
50
78
|
}
|
|
51
79
|
catch (err) {
|
|
@@ -56,104 +84,64 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
56
84
|
setLoading(false);
|
|
57
85
|
}
|
|
58
86
|
};
|
|
59
|
-
if (config.publishableKey
|
|
87
|
+
if (config.publishableKey) {
|
|
60
88
|
bootstrap();
|
|
61
89
|
}
|
|
62
90
|
else {
|
|
63
|
-
setLoading(false);
|
|
91
|
+
setLoading(false);
|
|
64
92
|
}
|
|
65
93
|
return () => {
|
|
66
94
|
isMounted = false;
|
|
67
95
|
};
|
|
68
|
-
}, [config.publishableKey, config.
|
|
96
|
+
}, [config.publishableKey, config.backendUrl]);
|
|
69
97
|
/* ---------------------------------- */
|
|
70
|
-
/*
|
|
98
|
+
/* 3. Proactive Scheduling */
|
|
71
99
|
/* ---------------------------------- */
|
|
72
|
-
const fetchUser = useCallback(async () => {
|
|
73
|
-
if (!enabled)
|
|
74
|
-
return null;
|
|
75
|
-
setLoading(true);
|
|
76
|
-
try {
|
|
77
|
-
const res = await client.getCurrentUser(); // This gets { user, accessToken, expiresAt, ... }
|
|
78
|
-
// Update global SDK state
|
|
79
|
-
setDeltaUser(res.user);
|
|
80
|
-
setAccessToken(res.accessToken);
|
|
81
|
-
setExpiresAt(res.expiresAt);
|
|
82
|
-
if (res.application)
|
|
83
|
-
setApp(res.application);
|
|
84
|
-
return res; // <--- CHANGE THIS: Return the whole object, not just user
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
console.warn('DeltaAuth: Refresh failed', err);
|
|
88
|
-
setDeltaUser(null);
|
|
89
|
-
setAccessToken(null);
|
|
90
|
-
setExpiresAt(null);
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
finally {
|
|
94
|
-
setLoading(false);
|
|
95
|
-
}
|
|
96
|
-
}, [client, enabled]);
|
|
97
100
|
useEffect(() => {
|
|
98
101
|
if (!enabled || !deltaUser || !expiresAt)
|
|
99
102
|
return;
|
|
100
|
-
//
|
|
101
|
-
const
|
|
103
|
+
// Refresh 60 seconds before actual expiry to prevent "Request Denied" races
|
|
104
|
+
const refreshBuffer = 60 * 1000;
|
|
105
|
+
const delay = expiresAt - Date.now() - refreshBuffer;
|
|
102
106
|
if (delay <= 0) {
|
|
103
107
|
fetchUser();
|
|
104
108
|
return;
|
|
105
109
|
}
|
|
106
|
-
// Schedule the NEXT trip to the server exactly when needed
|
|
107
110
|
const timer = setTimeout(() => {
|
|
108
111
|
fetchUser();
|
|
109
112
|
}, delay);
|
|
110
113
|
return () => clearTimeout(timer);
|
|
111
|
-
}, [
|
|
114
|
+
}, [deltaUser, expiresAt, fetchUser, enabled]);
|
|
115
|
+
/* ---------------------------------- */
|
|
116
|
+
/* 4. Public Token Access Method */
|
|
117
|
+
/* ---------------------------------- */
|
|
112
118
|
const getAccessToken = useCallback(async () => {
|
|
113
|
-
const
|
|
114
|
-
//
|
|
115
|
-
if (accessToken && expiresAt && Date.now() +
|
|
119
|
+
const safetyBuffer = 30 * 1000;
|
|
120
|
+
// If memory token is valid, return it instantly
|
|
121
|
+
if (accessToken && expiresAt && Date.now() + safetyBuffer < expiresAt) {
|
|
116
122
|
return accessToken;
|
|
117
123
|
}
|
|
118
|
-
//
|
|
124
|
+
// Otherwise, perform a background refresh
|
|
119
125
|
const res = await fetchUser();
|
|
120
|
-
// 3. Now 'res' contains 'accessToken' because we changed the return above
|
|
121
126
|
return res?.accessToken ?? null;
|
|
122
127
|
}, [accessToken, expiresAt, fetchUser]);
|
|
123
128
|
/* ---------------------------------- */
|
|
124
|
-
/* Auto Refresh (Optional) */
|
|
125
|
-
/* ---------------------------------- */
|
|
126
|
-
useEffect(() => {
|
|
127
|
-
if (!enabled || !config.autoRefresh || !deltaUser)
|
|
128
|
-
return;
|
|
129
|
-
const interval = setInterval(() => {
|
|
130
|
-
fetchUser();
|
|
131
|
-
}, config.refreshInterval ?? 5 * 60 * 1000);
|
|
132
|
-
return () => clearInterval(interval);
|
|
133
|
-
}, [
|
|
134
|
-
enabled,
|
|
135
|
-
config.autoRefresh,
|
|
136
|
-
config.refreshInterval,
|
|
137
|
-
deltaUser,
|
|
138
|
-
fetchUser,
|
|
139
|
-
]);
|
|
140
|
-
/* ---------------------------------- */
|
|
141
129
|
/* Render */
|
|
142
130
|
/* ---------------------------------- */
|
|
143
131
|
if (!enabled) {
|
|
144
132
|
return (_jsxs(_Fragment, { children: [children, _jsx(Toast, {})] }));
|
|
145
133
|
}
|
|
146
|
-
return (_jsxs(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
134
|
+
return (_jsxs(AuthContext.Provider, { value: {
|
|
135
|
+
deltaUser,
|
|
136
|
+
setDeltaUser,
|
|
137
|
+
app,
|
|
138
|
+
setApp,
|
|
139
|
+
loading,
|
|
140
|
+
isAuthenticated: Boolean(deltaUser),
|
|
141
|
+
client,
|
|
142
|
+
fetchUser,
|
|
143
|
+
getAccessToken,
|
|
144
|
+
config,
|
|
145
|
+
}, children: [children, _jsx(Toast, {})] }));
|
|
158
146
|
}
|
|
159
147
|
//# sourceMappingURL=DeltaProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeltaProvider.js","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,WAAW,EAAmB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAOzC,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAS;IAC3D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAc,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,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.77",
|
|
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",
|