delta-auth-next 0.1.75 → 0.1.76
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,2CA6K5D"}
|
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,55 @@ 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)
|
|
41
|
-
throw new Error('
|
|
42
|
-
}
|
|
67
|
+
if (!res.ok)
|
|
68
|
+
throw new Error('App metadata failed');
|
|
43
69
|
const data = await res.json();
|
|
44
70
|
if (isMounted) {
|
|
45
|
-
setApp(data.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
71
|
+
setApp(data.secured_application ?? null);
|
|
72
|
+
const user = data.data?.user ?? null;
|
|
73
|
+
setDeltaUser(user);
|
|
74
|
+
setAccessToken(data.accessToken ?? null);
|
|
75
|
+
// Calibrate expiry from bootstrap response
|
|
76
|
+
if (user?.session_expires_at) {
|
|
77
|
+
setExpiresAt(new Date(user.session_expires_at).getTime());
|
|
78
|
+
}
|
|
49
79
|
}
|
|
50
80
|
}
|
|
51
81
|
catch (err) {
|
|
@@ -56,104 +86,64 @@ export function DeltaAuthProvider({ config, children }) {
|
|
|
56
86
|
setLoading(false);
|
|
57
87
|
}
|
|
58
88
|
};
|
|
59
|
-
if (config.publishableKey
|
|
89
|
+
if (config.publishableKey) {
|
|
60
90
|
bootstrap();
|
|
61
91
|
}
|
|
62
92
|
else {
|
|
63
|
-
setLoading(false);
|
|
93
|
+
setLoading(false);
|
|
64
94
|
}
|
|
65
95
|
return () => {
|
|
66
96
|
isMounted = false;
|
|
67
97
|
};
|
|
68
|
-
}, [config.publishableKey, config.
|
|
98
|
+
}, [config.publishableKey, config.backendUrl]);
|
|
69
99
|
/* ---------------------------------- */
|
|
70
|
-
/*
|
|
100
|
+
/* 3. Proactive Scheduling */
|
|
71
101
|
/* ---------------------------------- */
|
|
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
102
|
useEffect(() => {
|
|
98
103
|
if (!enabled || !deltaUser || !expiresAt)
|
|
99
104
|
return;
|
|
100
|
-
//
|
|
101
|
-
const
|
|
105
|
+
// Refresh 60 seconds before actual expiry to prevent "Request Denied" races
|
|
106
|
+
const refreshBuffer = 60 * 1000;
|
|
107
|
+
const delay = expiresAt - Date.now() - refreshBuffer;
|
|
102
108
|
if (delay <= 0) {
|
|
103
109
|
fetchUser();
|
|
104
110
|
return;
|
|
105
111
|
}
|
|
106
|
-
// Schedule the NEXT trip to the server exactly when needed
|
|
107
112
|
const timer = setTimeout(() => {
|
|
108
113
|
fetchUser();
|
|
109
114
|
}, delay);
|
|
110
115
|
return () => clearTimeout(timer);
|
|
111
|
-
}, [
|
|
116
|
+
}, [deltaUser, expiresAt, fetchUser, enabled]);
|
|
117
|
+
/* ---------------------------------- */
|
|
118
|
+
/* 4. Public Token Access Method */
|
|
119
|
+
/* ---------------------------------- */
|
|
112
120
|
const getAccessToken = useCallback(async () => {
|
|
113
|
-
const
|
|
114
|
-
//
|
|
115
|
-
if (accessToken && expiresAt && Date.now() +
|
|
121
|
+
const safetyBuffer = 30 * 1000;
|
|
122
|
+
// If memory token is valid, return it instantly
|
|
123
|
+
if (accessToken && expiresAt && Date.now() + safetyBuffer < expiresAt) {
|
|
116
124
|
return accessToken;
|
|
117
125
|
}
|
|
118
|
-
//
|
|
126
|
+
// Otherwise, perform a background refresh
|
|
119
127
|
const res = await fetchUser();
|
|
120
|
-
// 3. Now 'res' contains 'accessToken' because we changed the return above
|
|
121
128
|
return res?.accessToken ?? null;
|
|
122
129
|
}, [accessToken, expiresAt, fetchUser]);
|
|
123
130
|
/* ---------------------------------- */
|
|
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
131
|
/* Render */
|
|
142
132
|
/* ---------------------------------- */
|
|
143
133
|
if (!enabled) {
|
|
144
134
|
return (_jsxs(_Fragment, { children: [children, _jsx(Toast, {})] }));
|
|
145
135
|
}
|
|
146
|
-
return (_jsxs(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
136
|
+
return (_jsxs(AuthContext.Provider, { value: {
|
|
137
|
+
deltaUser,
|
|
138
|
+
setDeltaUser,
|
|
139
|
+
app,
|
|
140
|
+
setApp,
|
|
141
|
+
loading,
|
|
142
|
+
isAuthenticated: Boolean(deltaUser),
|
|
143
|
+
client,
|
|
144
|
+
fetchUser,
|
|
145
|
+
getAccessToken,
|
|
146
|
+
config,
|
|
147
|
+
}, children: [children, _jsx(Toast, {})] }));
|
|
158
148
|
}
|
|
159
149
|
//# 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.76",
|
|
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",
|