@douvery/auth 0.3.2 → 0.3.3
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/index.d.ts +61 -1
- package/dist/index.js +132 -2
- package/dist/index.js.map +1 -1
- package/dist/qwik/index.d.ts +59 -25
- package/dist/qwik/index.js +154 -59
- package/dist/qwik/index.js.map +1 -1
- package/package.json +1 -1
- package/src/qwik/index.tsx +243 -75
package/dist/qwik/index.js
CHANGED
|
@@ -1,31 +1,50 @@
|
|
|
1
|
-
import { createContextId, component$, useSignal, useContextProvider, useVisibleTask$, Slot, useContext,
|
|
1
|
+
import { createContextId, component$, useSignal, useTask$, useContextProvider, useVisibleTask$, noSerialize, Slot, useContext, $ } from '@builder.io/qwik';
|
|
2
2
|
import { createDouveryAuth } from '@douvery/auth';
|
|
3
3
|
export { DouveryAuthClient, createDouveryAuth } from '@douvery/auth';
|
|
4
4
|
import { jsx } from '@builder.io/qwik/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
// src/qwik/index.tsx
|
|
7
7
|
var DouveryAuthContext = createContextId("douvery-auth");
|
|
8
|
+
var DEFAULT_STATE = {
|
|
9
|
+
status: "unauthenticated",
|
|
10
|
+
user: null,
|
|
11
|
+
tokens: null,
|
|
12
|
+
error: null
|
|
13
|
+
};
|
|
8
14
|
var DouveryAuthProvider = component$(
|
|
9
|
-
({ config }) => {
|
|
10
|
-
const
|
|
11
|
-
const state = useSignal(client.getState());
|
|
15
|
+
({ config$, appUser: externalAppUser }) => {
|
|
16
|
+
const state = useSignal(DEFAULT_STATE);
|
|
12
17
|
const isInitialized = useSignal(false);
|
|
13
18
|
const isLoading = useSignal(false);
|
|
14
19
|
const error = useSignal(null);
|
|
20
|
+
const clientRef = useSignal();
|
|
21
|
+
const internalAppUser = useSignal(externalAppUser?.value ?? null);
|
|
22
|
+
const appUser = externalAppUser ?? internalAppUser;
|
|
23
|
+
const appUserAuthenticated = useSignal(!!appUser.value);
|
|
24
|
+
useTask$(({ track }) => {
|
|
25
|
+
const u = track(() => appUser.value);
|
|
26
|
+
appUserAuthenticated.value = !!u;
|
|
27
|
+
});
|
|
15
28
|
useContextProvider(DouveryAuthContext, {
|
|
16
29
|
state,
|
|
17
30
|
isInitialized,
|
|
18
31
|
isLoading,
|
|
19
32
|
error,
|
|
20
|
-
|
|
33
|
+
clientRef,
|
|
34
|
+
appUser,
|
|
35
|
+
appUserAuthenticated
|
|
21
36
|
});
|
|
22
|
-
useVisibleTask$(() => {
|
|
23
|
-
|
|
37
|
+
useVisibleTask$(async () => {
|
|
38
|
+
const config = await config$();
|
|
39
|
+
const client = createDouveryAuth(config);
|
|
40
|
+
clientRef.value = noSerialize(client);
|
|
41
|
+
try {
|
|
42
|
+
await client.initialize();
|
|
24
43
|
isInitialized.value = true;
|
|
25
44
|
state.value = client.getState();
|
|
26
|
-
}
|
|
45
|
+
} catch (err) {
|
|
27
46
|
error.value = err instanceof Error ? err : new Error(String(err));
|
|
28
|
-
}
|
|
47
|
+
}
|
|
29
48
|
const unsubscribe = client.subscribe((event) => {
|
|
30
49
|
state.value = client.getState();
|
|
31
50
|
if (event.type === "LOGIN_ERROR" || event.type === "LOGOUT_ERROR" || event.type === "TOKEN_REFRESH_ERROR") {
|
|
@@ -40,6 +59,15 @@ var DouveryAuthProvider = component$(
|
|
|
40
59
|
function useDouveryAuth() {
|
|
41
60
|
return useContext(DouveryAuthContext);
|
|
42
61
|
}
|
|
62
|
+
function getClient(ctx) {
|
|
63
|
+
const client = ctx.clientRef.value;
|
|
64
|
+
if (!client) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
"DouveryAuth client not initialized. Ensure DouveryAuthProvider is mounted and the page has hydrated."
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
return client;
|
|
70
|
+
}
|
|
43
71
|
function useUser() {
|
|
44
72
|
const { state } = useDouveryAuth();
|
|
45
73
|
const user = useSignal(state.value.user);
|
|
@@ -59,8 +87,10 @@ function useIsAuthenticated() {
|
|
|
59
87
|
return isAuth;
|
|
60
88
|
}
|
|
61
89
|
function useAuthActions() {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
90
|
+
const ctx = useDouveryAuth();
|
|
91
|
+
const { isLoading, error } = ctx;
|
|
92
|
+
const login = $(async (options) => {
|
|
93
|
+
const client = getClient(ctx);
|
|
64
94
|
isLoading.value = true;
|
|
65
95
|
error.value = null;
|
|
66
96
|
try {
|
|
@@ -71,8 +101,9 @@ function useAuthActions() {
|
|
|
71
101
|
} finally {
|
|
72
102
|
isLoading.value = false;
|
|
73
103
|
}
|
|
74
|
-
};
|
|
75
|
-
const logout = async (options) => {
|
|
104
|
+
});
|
|
105
|
+
const logout = $(async (options) => {
|
|
106
|
+
const client = getClient(ctx);
|
|
76
107
|
isLoading.value = true;
|
|
77
108
|
error.value = null;
|
|
78
109
|
try {
|
|
@@ -83,32 +114,33 @@ function useAuthActions() {
|
|
|
83
114
|
} finally {
|
|
84
115
|
isLoading.value = false;
|
|
85
116
|
}
|
|
86
|
-
};
|
|
87
|
-
const selectAccount = (options) => {
|
|
88
|
-
|
|
89
|
-
};
|
|
90
|
-
const addAccount = (options) => {
|
|
91
|
-
|
|
92
|
-
};
|
|
93
|
-
const register = (options) => {
|
|
94
|
-
|
|
95
|
-
};
|
|
96
|
-
const recoverAccount = (options) => {
|
|
97
|
-
|
|
98
|
-
};
|
|
99
|
-
const verifyAccount = (options) => {
|
|
100
|
-
|
|
101
|
-
};
|
|
102
|
-
const upgradeAccount = (options) => {
|
|
103
|
-
|
|
104
|
-
};
|
|
105
|
-
const setupPasskey = (options) => {
|
|
106
|
-
|
|
107
|
-
};
|
|
108
|
-
const setupAddress = (options) => {
|
|
109
|
-
|
|
110
|
-
};
|
|
111
|
-
const revokeToken = async (options) => {
|
|
117
|
+
});
|
|
118
|
+
const selectAccount = $((options) => {
|
|
119
|
+
getClient(ctx).selectAccount(options);
|
|
120
|
+
});
|
|
121
|
+
const addAccount = $((options) => {
|
|
122
|
+
getClient(ctx).addAccount(options);
|
|
123
|
+
});
|
|
124
|
+
const register = $((options) => {
|
|
125
|
+
getClient(ctx).register(options);
|
|
126
|
+
});
|
|
127
|
+
const recoverAccount = $((options) => {
|
|
128
|
+
getClient(ctx).recoverAccount(options);
|
|
129
|
+
});
|
|
130
|
+
const verifyAccount = $((options) => {
|
|
131
|
+
getClient(ctx).verifyAccount(options);
|
|
132
|
+
});
|
|
133
|
+
const upgradeAccount = $((options) => {
|
|
134
|
+
getClient(ctx).upgradeAccount(options);
|
|
135
|
+
});
|
|
136
|
+
const setupPasskey = $((options) => {
|
|
137
|
+
getClient(ctx).setupPasskey(options);
|
|
138
|
+
});
|
|
139
|
+
const setupAddress = $((options) => {
|
|
140
|
+
getClient(ctx).setupAddress(options);
|
|
141
|
+
});
|
|
142
|
+
const revokeToken = $(async (options) => {
|
|
143
|
+
const client = getClient(ctx);
|
|
112
144
|
isLoading.value = true;
|
|
113
145
|
error.value = null;
|
|
114
146
|
try {
|
|
@@ -119,7 +151,7 @@ function useAuthActions() {
|
|
|
119
151
|
} finally {
|
|
120
152
|
isLoading.value = false;
|
|
121
153
|
}
|
|
122
|
-
};
|
|
154
|
+
});
|
|
123
155
|
return {
|
|
124
156
|
login,
|
|
125
157
|
logout,
|
|
@@ -136,34 +168,97 @@ function useAuthActions() {
|
|
|
136
168
|
};
|
|
137
169
|
}
|
|
138
170
|
function useAuthUrls() {
|
|
139
|
-
const
|
|
171
|
+
const ctx = useDouveryAuth();
|
|
140
172
|
return {
|
|
141
|
-
loginUrl: (
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
173
|
+
loginUrl: $(
|
|
174
|
+
(options) => getClient(ctx).buildLoginUrl(options)
|
|
175
|
+
),
|
|
176
|
+
logoutUrl: $(
|
|
177
|
+
(options) => getClient(ctx).buildLogoutUrl(options)
|
|
178
|
+
),
|
|
179
|
+
selectAccountUrl: $(
|
|
180
|
+
(options) => getClient(ctx).buildSelectAccountUrl(options)
|
|
181
|
+
),
|
|
182
|
+
addAccountUrl: $(
|
|
183
|
+
(options) => getClient(ctx).buildAddAccountUrl(options)
|
|
184
|
+
),
|
|
185
|
+
registerUrl: $(
|
|
186
|
+
(options) => getClient(ctx).buildRegisterUrl(options)
|
|
187
|
+
),
|
|
188
|
+
recoverAccountUrl: $(
|
|
189
|
+
(options) => getClient(ctx).buildRecoverAccountUrl(options)
|
|
190
|
+
),
|
|
191
|
+
verifyAccountUrl: $(
|
|
192
|
+
(options) => getClient(ctx).buildVerifyAccountUrl(options)
|
|
193
|
+
),
|
|
194
|
+
upgradeAccountUrl: $(
|
|
195
|
+
(options) => getClient(ctx).buildUpgradeAccountUrl(options)
|
|
196
|
+
),
|
|
197
|
+
setupPasskeyUrl: $(
|
|
198
|
+
(options) => getClient(ctx).buildSetupPasskeyUrl(options)
|
|
199
|
+
),
|
|
200
|
+
setupAddressUrl: $(
|
|
201
|
+
(options) => getClient(ctx).buildSetupAddressUrl(options)
|
|
202
|
+
)
|
|
151
203
|
};
|
|
152
204
|
}
|
|
153
205
|
function useSessionStatus() {
|
|
154
|
-
const
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
const
|
|
206
|
+
const ctx = useDouveryAuth();
|
|
207
|
+
const { state } = ctx;
|
|
208
|
+
const c = ctx.clientRef.value;
|
|
209
|
+
const isExpired = useSignal(c ? c.isSessionExpired() : false);
|
|
210
|
+
const needsVerification = useSignal(c ? c.needsEmailVerification() : false);
|
|
211
|
+
const isGuest = useSignal(c ? c.isGuestAccount() : false);
|
|
158
212
|
useTask$(({ track }) => {
|
|
159
213
|
track(() => state.value);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
214
|
+
const client = ctx.clientRef.value;
|
|
215
|
+
if (client) {
|
|
216
|
+
isExpired.value = client.isSessionExpired();
|
|
217
|
+
needsVerification.value = client.needsEmailVerification();
|
|
218
|
+
isGuest.value = client.isGuestAccount();
|
|
219
|
+
}
|
|
163
220
|
});
|
|
164
221
|
return { isExpired, needsVerification, isGuest };
|
|
165
222
|
}
|
|
223
|
+
function useAppUser() {
|
|
224
|
+
const { appUser, appUserAuthenticated } = useDouveryAuth();
|
|
225
|
+
return {
|
|
226
|
+
user: appUser,
|
|
227
|
+
isAuthenticated: appUserAuthenticated
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function useAppUserActions() {
|
|
231
|
+
const { appUser, appUserAuthenticated } = useDouveryAuth();
|
|
232
|
+
const updateUser = $((userData) => {
|
|
233
|
+
appUser.value = userData;
|
|
234
|
+
appUserAuthenticated.value = !!userData;
|
|
235
|
+
});
|
|
236
|
+
const refreshUser = $(async () => {
|
|
237
|
+
try {
|
|
238
|
+
const response = await fetch("/api/auth/me", {
|
|
239
|
+
method: "GET",
|
|
240
|
+
credentials: "include",
|
|
241
|
+
headers: { "Cache-Control": "no-cache", Pragma: "no-cache" }
|
|
242
|
+
});
|
|
243
|
+
if (response.ok) {
|
|
244
|
+
const data = await response.json();
|
|
245
|
+
appUser.value = data.user;
|
|
246
|
+
appUserAuthenticated.value = true;
|
|
247
|
+
} else if (response.status === 401 || response.status === 403) {
|
|
248
|
+
appUser.value = null;
|
|
249
|
+
appUserAuthenticated.value = false;
|
|
250
|
+
}
|
|
251
|
+
} catch {
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
return {
|
|
255
|
+
user: appUser,
|
|
256
|
+
isAuthenticated: appUserAuthenticated,
|
|
257
|
+
updateUser,
|
|
258
|
+
refreshUser
|
|
259
|
+
};
|
|
260
|
+
}
|
|
166
261
|
|
|
167
|
-
export { DouveryAuthContext, DouveryAuthProvider, useAuthActions, useAuthUrls, useDouveryAuth, useIsAuthenticated, useSessionStatus, useUser };
|
|
262
|
+
export { DouveryAuthContext, DouveryAuthProvider, useAppUser, useAppUserActions, useAuthActions, useAuthUrls, useDouveryAuth, useIsAuthenticated, useSessionStatus, useUser };
|
|
168
263
|
//# sourceMappingURL=index.js.map
|
|
169
264
|
//# sourceMappingURL=index.js.map
|
package/dist/qwik/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/qwik/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @douvery/auth/qwik - Qwik adapter\n */\n\nimport {\n createContextId,\n useContextProvider,\n useContext,\n useSignal,\n useTask$,\n useVisibleTask$,\n component$,\n Slot,\n type Signal,\n} from \"@builder.io/qwik\";\nimport {\n DouveryAuthClient,\n createDouveryAuth,\n type DouveryAuthConfig,\n type AuthState,\n type User,\n type LoginOptions,\n type LogoutOptions,\n type SelectAccountOptions,\n type RegisterOptions,\n type RecoverAccountOptions,\n type VerifyAccountOptions,\n type UpgradeAccountOptions,\n type SetupPasskeyOptions,\n type SetupAddressOptions,\n type AddAccountOptions,\n type RevokeTokenOptions,\n type AuthUrl,\n} from \"@douvery/auth\";\n\ninterface DouveryAuthContextValue {\n state: Signal<AuthState>;\n isInitialized: Signal<boolean>;\n isLoading: Signal<boolean>;\n error: Signal<Error | null>;\n client: DouveryAuthClient;\n}\n\nexport const DouveryAuthContext =\n createContextId<DouveryAuthContextValue>(\"douvery-auth\");\n\nexport interface DouveryAuthProviderProps {\n config: DouveryAuthConfig;\n}\n\nexport const DouveryAuthProvider = component$<DouveryAuthProviderProps>(\n ({ config }) => {\n const client = createDouveryAuth(config);\n const state = useSignal<AuthState>(client.getState());\n const isInitialized = useSignal(false);\n const isLoading = useSignal(false);\n const error = useSignal<Error | null>(null);\n\n useContextProvider(DouveryAuthContext, {\n state,\n isInitialized,\n isLoading,\n error,\n client,\n });\n\n useVisibleTask$(() => {\n client\n .initialize()\n .then(() => {\n isInitialized.value = true;\n state.value = client.getState();\n })\n .catch((err) => {\n error.value = err instanceof Error ? err : new Error(String(err));\n });\n\n const unsubscribe = client.subscribe((event) => {\n state.value = client.getState();\n if (\n event.type === \"LOGIN_ERROR\" ||\n event.type === \"LOGOUT_ERROR\" ||\n event.type === \"TOKEN_REFRESH_ERROR\"\n ) {\n error.value = event.error;\n }\n });\n\n return () => unsubscribe();\n });\n\n return <Slot />;\n },\n);\n\nexport function useDouveryAuth() {\n return useContext(DouveryAuthContext);\n}\n\nexport function useUser(): Signal<User | null> {\n const { state } = useDouveryAuth();\n const user = useSignal<User | null>(state.value.user);\n useTask$(({ track }) => {\n track(() => state.value);\n user.value = state.value.user;\n });\n return user;\n}\n\nexport function useIsAuthenticated(): Signal<boolean> {\n const { state } = useDouveryAuth();\n const isAuth = useSignal(state.value.status === \"authenticated\");\n useTask$(({ track }) => {\n track(() => state.value);\n isAuth.value = state.value.status === \"authenticated\";\n });\n return isAuth;\n}\n\nexport function useAuthActions() {\n const { client, isLoading, error } = useDouveryAuth();\n\n const login = async (options?: LoginOptions) => {\n isLoading.value = true;\n error.value = null;\n try {\n await client.login(options);\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n throw err;\n } finally {\n isLoading.value = false;\n }\n };\n\n const logout = async (options?: LogoutOptions) => {\n isLoading.value = true;\n error.value = null;\n try {\n await client.logout(options);\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n throw err;\n } finally {\n isLoading.value = false;\n }\n };\n\n const selectAccount = (options?: SelectAccountOptions) => {\n client.selectAccount(options);\n };\n\n const addAccount = (options?: AddAccountOptions) => {\n client.addAccount(options);\n };\n\n const register = (options?: RegisterOptions) => {\n client.register(options);\n };\n\n const recoverAccount = (options?: RecoverAccountOptions) => {\n client.recoverAccount(options);\n };\n\n const verifyAccount = (options?: VerifyAccountOptions) => {\n client.verifyAccount(options);\n };\n\n const upgradeAccount = (options?: UpgradeAccountOptions) => {\n client.upgradeAccount(options);\n };\n\n const setupPasskey = (options?: SetupPasskeyOptions) => {\n client.setupPasskey(options);\n };\n\n const setupAddress = (options?: SetupAddressOptions) => {\n client.setupAddress(options);\n };\n\n const revokeToken = async (options?: RevokeTokenOptions) => {\n isLoading.value = true;\n error.value = null;\n try {\n await client.revokeToken(options);\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n throw err;\n } finally {\n isLoading.value = false;\n }\n };\n\n return {\n login,\n logout,\n selectAccount,\n addAccount,\n register,\n recoverAccount,\n verifyAccount,\n upgradeAccount,\n setupPasskey,\n setupAddress,\n revokeToken,\n isLoading,\n };\n}\n\n/** Get URL builders for auth pages (non-redirecting, useful for <a> tags) */\nexport function useAuthUrls() {\n const { client } = useDouveryAuth();\n return {\n loginUrl: (options?: LoginOptions): AuthUrl =>\n client.buildLoginUrl(options),\n logoutUrl: (options?: LogoutOptions): AuthUrl =>\n client.buildLogoutUrl(options),\n selectAccountUrl: (options?: SelectAccountOptions): AuthUrl =>\n client.buildSelectAccountUrl(options),\n addAccountUrl: (options?: AddAccountOptions): AuthUrl =>\n client.buildAddAccountUrl(options),\n registerUrl: (options?: RegisterOptions): AuthUrl =>\n client.buildRegisterUrl(options),\n recoverAccountUrl: (options?: RecoverAccountOptions): AuthUrl =>\n client.buildRecoverAccountUrl(options),\n verifyAccountUrl: (options?: VerifyAccountOptions): AuthUrl =>\n client.buildVerifyAccountUrl(options),\n upgradeAccountUrl: (options?: UpgradeAccountOptions): AuthUrl =>\n client.buildUpgradeAccountUrl(options),\n setupPasskeyUrl: (options?: SetupPasskeyOptions): AuthUrl =>\n client.buildSetupPasskeyUrl(options),\n setupAddressUrl: (options?: SetupAddressOptions): AuthUrl =>\n client.buildSetupAddressUrl(options),\n };\n}\n\n/** Get session status helpers */\nexport function useSessionStatus() {\n const { client, state } = useDouveryAuth();\n const isExpired = useSignal(client.isSessionExpired());\n const needsVerification = useSignal(client.needsEmailVerification());\n const isGuest = useSignal(client.isGuestAccount());\n\n useTask$(({ track }) => {\n track(() => state.value);\n isExpired.value = client.isSessionExpired();\n needsVerification.value = client.needsEmailVerification();\n isGuest.value = client.isGuestAccount();\n });\n\n return { isExpired, needsVerification, isGuest };\n}\n\nexport { DouveryAuthClient, createDouveryAuth } from \"@douvery/auth\";\nexport type {\n DouveryAuthConfig,\n AuthState,\n User,\n LoginOptions,\n LogoutOptions,\n SelectAccountOptions,\n RegisterOptions,\n RecoverAccountOptions,\n VerifyAccountOptions,\n UpgradeAccountOptions,\n SetupPasskeyOptions,\n SetupAddressOptions,\n AddAccountOptions,\n RevokeTokenOptions,\n AuthUrl,\n} from \"@douvery/auth\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/qwik/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @douvery/auth/qwik - Qwik adapter\n *\n * Uses QRL for config to avoid Qwik serialization issues with\n * function-based storage adapters (customStorage).\n * The client is created inside useVisibleTask$ and wrapped with\n * noSerialize() since DouveryAuthClient has non-serializable methods.\n */\n\nimport {\n createContextId,\n useContextProvider,\n useContext,\n useSignal,\n useTask$,\n useVisibleTask$,\n component$,\n $,\n Slot,\n noSerialize,\n type Signal,\n type NoSerialize,\n type QRL,\n} from \"@builder.io/qwik\";\nimport {\n DouveryAuthClient,\n createDouveryAuth,\n type DouveryAuthConfig,\n type AuthState,\n type User,\n type LoginOptions,\n type LogoutOptions,\n type SelectAccountOptions,\n type RegisterOptions,\n type RecoverAccountOptions,\n type VerifyAccountOptions,\n type UpgradeAccountOptions,\n type SetupPasskeyOptions,\n type SetupAddressOptions,\n type AddAccountOptions,\n type RevokeTokenOptions,\n type AuthUrl,\n} from \"@douvery/auth\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface DouveryAuthContextValue {\n state: Signal<AuthState>;\n isInitialized: Signal<boolean>;\n isLoading: Signal<boolean>;\n error: Signal<Error | null>;\n clientRef: Signal<NoSerialize<DouveryAuthClient> | undefined>;\n /** Application-specific user data from SSR (e.g. routeLoader$). */\n appUser: Signal<unknown>;\n appUserAuthenticated: Signal<boolean>;\n}\n\nexport const DouveryAuthContext =\n createContextId<DouveryAuthContextValue>(\"douvery-auth\");\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface DouveryAuthProviderProps {\n /**\n * QRL that returns the auth configuration.\n * Use $(() => getDouveryAuthConfig()) to wrap your config factory.\n * This avoids Qwik serialization issues with customStorage functions.\n */\n config$: QRL<() => DouveryAuthConfig>;\n /**\n * Optional application-specific user data loaded from SSR (routeLoader$).\n * This is separate from OAuth user – it holds the full app user object\n * (e.g. UserACC with address, active, sessionId, etc.).\n * Pass the routeLoader$ signal directly.\n */\n appUser?: Signal<unknown>;\n}\n\nconst DEFAULT_STATE: AuthState = {\n status: \"unauthenticated\",\n user: null,\n tokens: null,\n error: null,\n};\n\nexport const DouveryAuthProvider = component$<DouveryAuthProviderProps>(\n ({ config$, appUser: externalAppUser }) => {\n // All signals are serializable - no functions stored directly\n const state = useSignal<AuthState>(DEFAULT_STATE);\n const isInitialized = useSignal(false);\n const isLoading = useSignal(false);\n const error = useSignal<Error | null>(null);\n const clientRef = useSignal<NoSerialize<DouveryAuthClient>>();\n\n // App user data: use external signal if provided, otherwise create internal one\n const internalAppUser = useSignal<unknown>(externalAppUser?.value ?? null);\n const appUser = externalAppUser ?? internalAppUser;\n const appUserAuthenticated = useSignal<boolean>(!!appUser.value);\n\n // Keep appUserAuthenticated in sync\n useTask$(({ track }) => {\n const u = track(() => appUser.value);\n appUserAuthenticated.value = !!u;\n });\n\n useContextProvider(DouveryAuthContext, {\n state,\n isInitialized,\n isLoading,\n error,\n clientRef,\n appUser,\n appUserAuthenticated,\n });\n\n // Client creation deferred to browser-only task.\n // The QRL is invoked here, returning the full config (with customStorage).\n // noSerialize() wraps the client so Qwik doesn't try to serialize it.\n useVisibleTask$(async () => {\n const config = await config$();\n const client = createDouveryAuth(config);\n clientRef.value = noSerialize(client);\n\n try {\n await client.initialize();\n isInitialized.value = true;\n state.value = client.getState();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n }\n\n const unsubscribe = client.subscribe((event) => {\n state.value = client.getState();\n if (\n event.type === \"LOGIN_ERROR\" ||\n event.type === \"LOGOUT_ERROR\" ||\n event.type === \"TOKEN_REFRESH_ERROR\"\n ) {\n error.value = event.error;\n }\n });\n\n return () => unsubscribe();\n });\n\n return <Slot />;\n },\n);\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport function useDouveryAuth() {\n return useContext(DouveryAuthContext);\n}\n\n/**\n * Internal helper: safely access the client from context.\n * Throws if the client hasn't been initialized yet (before useVisibleTask$ runs).\n */\nfunction getClient(ctx: DouveryAuthContextValue): DouveryAuthClient {\n const client = ctx.clientRef.value;\n if (!client) {\n throw new Error(\n \"DouveryAuth client not initialized. \" +\n \"Ensure DouveryAuthProvider is mounted and the page has hydrated.\",\n );\n }\n return client;\n}\n\nexport function useUser(): Signal<User | null> {\n const { state } = useDouveryAuth();\n const user = useSignal<User | null>(state.value.user);\n useTask$(({ track }) => {\n track(() => state.value);\n user.value = state.value.user;\n });\n return user;\n}\n\nexport function useIsAuthenticated(): Signal<boolean> {\n const { state } = useDouveryAuth();\n const isAuth = useSignal(state.value.status === \"authenticated\");\n useTask$(({ track }) => {\n track(() => state.value);\n isAuth.value = state.value.status === \"authenticated\";\n });\n return isAuth;\n}\n\nexport function useAuthActions() {\n const ctx = useDouveryAuth();\n const { isLoading, error } = ctx;\n\n const login = $(async (options?: LoginOptions) => {\n const client = getClient(ctx);\n isLoading.value = true;\n error.value = null;\n try {\n await client.login(options);\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n throw err;\n } finally {\n isLoading.value = false;\n }\n });\n\n const logout = $(async (options?: LogoutOptions) => {\n const client = getClient(ctx);\n isLoading.value = true;\n error.value = null;\n try {\n await client.logout(options);\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n throw err;\n } finally {\n isLoading.value = false;\n }\n });\n\n const selectAccount = $((options?: SelectAccountOptions) => {\n getClient(ctx).selectAccount(options);\n });\n\n const addAccount = $((options?: AddAccountOptions) => {\n getClient(ctx).addAccount(options);\n });\n\n const register = $((options?: RegisterOptions) => {\n getClient(ctx).register(options);\n });\n\n const recoverAccount = $((options?: RecoverAccountOptions) => {\n getClient(ctx).recoverAccount(options);\n });\n\n const verifyAccount = $((options?: VerifyAccountOptions) => {\n getClient(ctx).verifyAccount(options);\n });\n\n const upgradeAccount = $((options?: UpgradeAccountOptions) => {\n getClient(ctx).upgradeAccount(options);\n });\n\n const setupPasskey = $((options?: SetupPasskeyOptions) => {\n getClient(ctx).setupPasskey(options);\n });\n\n const setupAddress = $((options?: SetupAddressOptions) => {\n getClient(ctx).setupAddress(options);\n });\n\n const revokeToken = $(async (options?: RevokeTokenOptions) => {\n const client = getClient(ctx);\n isLoading.value = true;\n error.value = null;\n try {\n await client.revokeToken(options);\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n throw err;\n } finally {\n isLoading.value = false;\n }\n });\n\n return {\n login,\n logout,\n selectAccount,\n addAccount,\n register,\n recoverAccount,\n verifyAccount,\n upgradeAccount,\n setupPasskey,\n setupAddress,\n revokeToken,\n isLoading,\n };\n}\n\n/** Get URL builders for auth pages (non-redirecting, useful for <a> tags) */\nexport function useAuthUrls() {\n const ctx = useDouveryAuth();\n return {\n loginUrl: $(\n (options?: LoginOptions): AuthUrl =>\n getClient(ctx).buildLoginUrl(options),\n ),\n logoutUrl: $(\n (options?: LogoutOptions): AuthUrl =>\n getClient(ctx).buildLogoutUrl(options),\n ),\n selectAccountUrl: $(\n (options?: SelectAccountOptions): AuthUrl =>\n getClient(ctx).buildSelectAccountUrl(options),\n ),\n addAccountUrl: $(\n (options?: AddAccountOptions): AuthUrl =>\n getClient(ctx).buildAddAccountUrl(options),\n ),\n registerUrl: $(\n (options?: RegisterOptions): AuthUrl =>\n getClient(ctx).buildRegisterUrl(options),\n ),\n recoverAccountUrl: $(\n (options?: RecoverAccountOptions): AuthUrl =>\n getClient(ctx).buildRecoverAccountUrl(options),\n ),\n verifyAccountUrl: $(\n (options?: VerifyAccountOptions): AuthUrl =>\n getClient(ctx).buildVerifyAccountUrl(options),\n ),\n upgradeAccountUrl: $(\n (options?: UpgradeAccountOptions): AuthUrl =>\n getClient(ctx).buildUpgradeAccountUrl(options),\n ),\n setupPasskeyUrl: $(\n (options?: SetupPasskeyOptions): AuthUrl =>\n getClient(ctx).buildSetupPasskeyUrl(options),\n ),\n setupAddressUrl: $(\n (options?: SetupAddressOptions): AuthUrl =>\n getClient(ctx).buildSetupAddressUrl(options),\n ),\n };\n}\n\n/** Get session status helpers */\nexport function useSessionStatus() {\n const ctx = useDouveryAuth();\n const { state } = ctx;\n const c = ctx.clientRef.value;\n const isExpired = useSignal(c ? c.isSessionExpired() : false);\n const needsVerification = useSignal(c ? c.needsEmailVerification() : false);\n const isGuest = useSignal(c ? c.isGuestAccount() : false);\n\n useTask$(({ track }) => {\n track(() => state.value);\n const client = ctx.clientRef.value;\n if (client) {\n isExpired.value = client.isSessionExpired();\n needsVerification.value = client.needsEmailVerification();\n isGuest.value = client.isGuestAccount();\n }\n });\n\n return { isExpired, needsVerification, isGuest };\n}\n\n// ============================================================================\n// App User hooks\n// ============================================================================\n\n/**\n * Returns the application-specific user data provided via `appUser` prop.\n * Cast to your app's user type: `const user = useAppUser<UserACC>()`.\n * Returns `{ user: Signal<T | null>, isAuthenticated: Signal<boolean> }`.\n */\nexport function useAppUser<T = unknown>() {\n const { appUser, appUserAuthenticated } = useDouveryAuth();\n return {\n user: appUser as Signal<T | null>,\n isAuthenticated: appUserAuthenticated,\n };\n}\n\n/**\n * Full app user context with refresh capabilities.\n * Use when you need to re-fetch user data from the server.\n */\nexport function useAppUserActions<T = unknown>() {\n const { appUser, appUserAuthenticated } = useDouveryAuth();\n\n const updateUser = $((userData: T | null) => {\n (appUser as Signal<T | null>).value = userData;\n appUserAuthenticated.value = !!userData;\n });\n\n const refreshUser = $(async () => {\n try {\n const response = await fetch(\"/api/auth/me\", {\n method: \"GET\",\n credentials: \"include\",\n headers: { \"Cache-Control\": \"no-cache\", Pragma: \"no-cache\" },\n });\n\n if (response.ok) {\n const data = await response.json();\n (appUser as Signal<T | null>).value = data.user;\n appUserAuthenticated.value = true;\n } else if (response.status === 401 || response.status === 403) {\n (appUser as Signal<T | null>).value = null;\n appUserAuthenticated.value = false;\n }\n } catch {\n // Network error: keep current state\n }\n });\n\n return {\n user: appUser as Signal<T | null>,\n isAuthenticated: appUserAuthenticated,\n updateUser,\n refreshUser,\n };\n}\n\n// ============================================================================\n// Re-exports\n// ============================================================================\n\nexport { DouveryAuthClient, createDouveryAuth } from \"@douvery/auth\";\nexport type {\n DouveryAuthConfig,\n AuthState,\n User,\n LoginOptions,\n LogoutOptions,\n SelectAccountOptions,\n RegisterOptions,\n RecoverAccountOptions,\n VerifyAccountOptions,\n UpgradeAccountOptions,\n SetupPasskeyOptions,\n SetupAddressOptions,\n AddAccountOptions,\n RevokeTokenOptions,\n AuthUrl,\n} from \"@douvery/auth\";\n"]}
|