delta-auth-next 0.1.78 → 0.1.80
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,
|
|
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,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,2CA6J5D"}
|
package/dist/DeltaProvider.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useEffect, useCallback, useMemo } from 'react';
|
|
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';
|
|
@@ -10,9 +10,10 @@ 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
|
-
// Stored as a Number (ms) to allow direct math with Date.now()
|
|
14
13
|
const [expiresAt, setExpiresAt] = useState(null);
|
|
15
|
-
|
|
14
|
+
// 1. ADD THIS: Ref to prevent concurrent/infinite calls
|
|
15
|
+
const isRefreshing = useRef(false);
|
|
16
|
+
const { Toast } = useSimpleToast();
|
|
16
17
|
const client = useMemo(() => {
|
|
17
18
|
return createAuthClient({
|
|
18
19
|
backendUrl: config.backendUrl,
|
|
@@ -26,17 +27,14 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
26
27
|
config.authDomain,
|
|
27
28
|
config.appType,
|
|
28
29
|
]);
|
|
29
|
-
/* ---------------------------------- */
|
|
30
|
-
/* 1. Logic: The Silent Refresh */
|
|
31
|
-
/* ---------------------------------- */
|
|
32
30
|
const fetchUser = useCallback(async () => {
|
|
33
|
-
if (!enabled)
|
|
31
|
+
if (!enabled || isRefreshing.current)
|
|
34
32
|
return null;
|
|
33
|
+
isRefreshing.current = true; // Lock
|
|
35
34
|
try {
|
|
36
35
|
const res = await client.getCurrentUser();
|
|
37
36
|
setDeltaUser(res.user);
|
|
38
37
|
setAccessToken(res.accessToken);
|
|
39
|
-
// Convert Date String to Unix Timestamp (ms) for calibration
|
|
40
38
|
if (res.user?.session_expires_at) {
|
|
41
39
|
setExpiresAt(new Date(res.user.session_expires_at).getTime());
|
|
42
40
|
}
|
|
@@ -52,11 +50,12 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
52
50
|
return null;
|
|
53
51
|
}
|
|
54
52
|
finally {
|
|
53
|
+
isRefreshing.current = false; // Unlock
|
|
55
54
|
setLoading(false);
|
|
56
55
|
}
|
|
57
56
|
}, [client, enabled]);
|
|
58
57
|
/* ---------------------------------- */
|
|
59
|
-
/*
|
|
58
|
+
/* Bootstrap (Initial Load) */
|
|
60
59
|
/* ---------------------------------- */
|
|
61
60
|
useEffect(() => {
|
|
62
61
|
let isMounted = true;
|
|
@@ -68,11 +67,9 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
68
67
|
throw new Error('Failed to fetch app metadata');
|
|
69
68
|
const data = await res.json();
|
|
70
69
|
if (isMounted) {
|
|
71
|
-
// MATCHING YOUR BACKEND KEYS:
|
|
72
70
|
setApp(data.app ?? null);
|
|
73
71
|
setDeltaUser(data.user ?? null);
|
|
74
72
|
setAccessToken(data.accessToken);
|
|
75
|
-
// Use the absolute timestamp sent by the backend
|
|
76
73
|
if (data.user?.session_expires_at) {
|
|
77
74
|
setExpiresAt(new Date(data.user.session_expires_at).getTime());
|
|
78
75
|
}
|
|
@@ -86,25 +83,24 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
86
83
|
setLoading(false);
|
|
87
84
|
}
|
|
88
85
|
};
|
|
89
|
-
if (config.publishableKey)
|
|
86
|
+
if (config.publishableKey)
|
|
90
87
|
bootstrap();
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
setLoading(false);
|
|
94
|
-
}
|
|
95
88
|
return () => {
|
|
96
89
|
isMounted = false;
|
|
97
90
|
};
|
|
98
91
|
}, [config.publishableKey, config.backendUrl]);
|
|
99
92
|
/* ---------------------------------- */
|
|
100
|
-
/* 3. Proactive Scheduling
|
|
93
|
+
/* 3. Proactive Scheduling (Fixed) */
|
|
101
94
|
/* ---------------------------------- */
|
|
102
95
|
useEffect(() => {
|
|
103
|
-
if (!enabled || !deltaUser || !expiresAt)
|
|
96
|
+
if (!enabled || !deltaUser || !expiresAt || isRefreshing.current)
|
|
104
97
|
return;
|
|
105
|
-
//
|
|
106
|
-
const
|
|
107
|
-
|
|
98
|
+
// Calculate delay
|
|
99
|
+
const now = Date.now();
|
|
100
|
+
let delay = expiresAt - now;
|
|
101
|
+
// 2. THE FIX: If the token is expired, or expiring very soon,
|
|
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.
|
|
108
104
|
if (delay <= 0) {
|
|
109
105
|
fetchUser();
|
|
110
106
|
return;
|
|
@@ -118,21 +114,15 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
118
114
|
/* 4. Public Token Access Method */
|
|
119
115
|
/* ---------------------------------- */
|
|
120
116
|
const getAccessToken = useCallback(async () => {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
if (accessToken && expiresAt && Date.now() + safetyBuffer < expiresAt) {
|
|
117
|
+
const isExpired = !expiresAt || Date.now() + 1000 >= expiresAt;
|
|
118
|
+
if (accessToken && !isExpired) {
|
|
124
119
|
return accessToken;
|
|
125
120
|
}
|
|
126
|
-
// Otherwise, perform a background refresh
|
|
127
121
|
const res = await fetchUser();
|
|
128
122
|
return res?.accessToken ?? null;
|
|
129
123
|
}, [accessToken, expiresAt, fetchUser]);
|
|
130
|
-
|
|
131
|
-
/* Render */
|
|
132
|
-
/* ---------------------------------- */
|
|
133
|
-
if (!enabled) {
|
|
124
|
+
if (!enabled)
|
|
134
125
|
return (_jsxs(_Fragment, { children: [children, _jsx(Toast, {})] }));
|
|
135
|
-
}
|
|
136
126
|
return (_jsxs(AuthContext.Provider, { value: {
|
|
137
127
|
deltaUser,
|
|
138
128
|
setDeltaUser,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeltaProvider.js","sourceRoot":"","sources":["../src/DeltaProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,
|
|
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.80",
|
|
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",
|