@civic/auth 0.0.1-beta.18 → 0.0.1-beta.19

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.
Files changed (68) hide show
  1. package/dist/AuthProvider-Bj_Prt1x.d.ts +21 -0
  2. package/dist/AuthProvider-DUAoX4G9.d.mts +21 -0
  3. package/dist/{index-DTimUlkB.d.ts → UserProvider-CMLaYOUD.d.ts} +1 -2
  4. package/dist/{index-DvjkKpkk.d.mts → UserProvider-Cbm8MZkJ.d.mts} +1 -2
  5. package/dist/chunk-5UQQYXCX.js +1 -0
  6. package/dist/chunk-5UQQYXCX.js.map +1 -0
  7. package/dist/chunk-BFESCRFK.mjs +118 -0
  8. package/dist/chunk-BFESCRFK.mjs.map +1 -0
  9. package/dist/{chunk-G3P5TIO2.mjs → chunk-CBQ3HKRV.mjs} +123 -232
  10. package/dist/chunk-CBQ3HKRV.mjs.map +1 -0
  11. package/dist/chunk-CRTRMMJ7.js.map +1 -1
  12. package/dist/{chunk-SEKF2WZX.js → chunk-CZ3AVCKD.js} +16 -71
  13. package/dist/chunk-CZ3AVCKD.js.map +1 -0
  14. package/dist/chunk-DJFTZS4P.js +118 -0
  15. package/dist/chunk-DJFTZS4P.js.map +1 -0
  16. package/dist/chunk-HTTTZ2BP.mjs +223 -0
  17. package/dist/chunk-HTTTZ2BP.mjs.map +1 -0
  18. package/dist/{chunk-RF23Q4V6.js → chunk-O2SODTR3.js} +114 -223
  19. package/dist/chunk-O2SODTR3.js.map +1 -0
  20. package/dist/chunk-O6DPCPRH.js +223 -0
  21. package/dist/chunk-O6DPCPRH.js.map +1 -0
  22. package/dist/chunk-PMJAV4JJ.mjs +1 -0
  23. package/dist/chunk-PMJAV4JJ.mjs.map +1 -0
  24. package/dist/chunk-UADVRCHY.mjs +710 -0
  25. package/dist/chunk-UADVRCHY.mjs.map +1 -0
  26. package/dist/chunk-VJVRFKDH.js +710 -0
  27. package/dist/chunk-VJVRFKDH.js.map +1 -0
  28. package/dist/{chunk-5XL2ST72.mjs → chunk-X3FQBE22.mjs} +15 -70
  29. package/dist/chunk-X3FQBE22.mjs.map +1 -0
  30. package/dist/index.d.mts +2 -2
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.js +2 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/index.mjs +1 -0
  35. package/dist/nextjs/client.css +335 -0
  36. package/dist/nextjs/client.css.map +1 -0
  37. package/dist/nextjs/client.d.mts +12 -0
  38. package/dist/nextjs/client.d.ts +12 -0
  39. package/dist/nextjs/client.js +179 -0
  40. package/dist/nextjs/client.js.map +1 -0
  41. package/dist/nextjs/client.mjs +179 -0
  42. package/dist/nextjs/client.mjs.map +1 -0
  43. package/dist/nextjs.d.mts +35 -7
  44. package/dist/nextjs.d.ts +35 -7
  45. package/dist/nextjs.js +129 -42
  46. package/dist/nextjs.js.map +1 -1
  47. package/dist/nextjs.mjs +116 -29
  48. package/dist/nextjs.mjs.map +1 -1
  49. package/dist/react.d.mts +7 -31
  50. package/dist/react.d.ts +7 -31
  51. package/dist/react.js +15 -835
  52. package/dist/react.js.map +1 -1
  53. package/dist/react.mjs +47 -867
  54. package/dist/react.mjs.map +1 -1
  55. package/dist/server.d.mts +3 -24
  56. package/dist/server.d.ts +3 -24
  57. package/dist/server.js +4 -2
  58. package/dist/server.js.map +1 -1
  59. package/dist/server.mjs +4 -2
  60. package/dist/storage-B2eAQNdv.d.ts +25 -0
  61. package/dist/storage-BJPUpxhm.d.mts +25 -0
  62. package/dist/{types-b4c1koXj.d.mts → types-Bqm9OCZN.d.mts} +5 -2
  63. package/dist/{types-b4c1koXj.d.ts → types-Bqm9OCZN.d.ts} +5 -2
  64. package/package.json +24 -15
  65. package/dist/chunk-5XL2ST72.mjs.map +0 -1
  66. package/dist/chunk-G3P5TIO2.mjs.map +0 -1
  67. package/dist/chunk-RF23Q4V6.js.map +0 -1
  68. package/dist/chunk-SEKF2WZX.js.map +0 -1
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { A as AuthProviderProps } from '../AuthProvider-DUAoX4G9.mjs';
3
+ import { b as EmptyObject, U as User } from '../types-HdCjGldB.mjs';
4
+ import 'react';
5
+ import 'oslo/oauth2';
6
+
7
+ type NextCivicAuthProviderProps = Omit<AuthProviderProps, "clientId">;
8
+ declare const CivicNextAuthProvider: ({ children, ...props }: NextCivicAuthProviderProps) => react_jsx_runtime.JSX.Element;
9
+
10
+ declare const useUserCookie: <T extends EmptyObject>() => User<T> | null;
11
+
12
+ export { type NextCivicAuthProviderProps as AuthProviderProps, CivicNextAuthProvider as CivicAuthProvider, useUserCookie };
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { A as AuthProviderProps } from '../AuthProvider-Bj_Prt1x.js';
3
+ import { b as EmptyObject, U as User } from '../types-HdCjGldB.js';
4
+ import 'react';
5
+ import 'oslo/oauth2';
6
+
7
+ type NextCivicAuthProviderProps = Omit<AuthProviderProps, "clientId">;
8
+ declare const CivicNextAuthProvider: ({ children, ...props }: NextCivicAuthProviderProps) => react_jsx_runtime.JSX.Element;
9
+
10
+ declare const useUserCookie: <T extends EmptyObject>() => User<T> | null;
11
+
12
+ export { type NextCivicAuthProviderProps as AuthProviderProps, CivicNextAuthProvider as CivicAuthProvider, useUserCookie };
@@ -0,0 +1,179 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-5UQQYXCX.js');
2
+
3
+
4
+
5
+ var _chunkVJVRFKDHjs = require('../chunk-VJVRFKDH.js');
6
+
7
+
8
+
9
+ var _chunkDJFTZS4Pjs = require('../chunk-DJFTZS4P.js');
10
+
11
+
12
+ var _chunkCZ3AVCKDjs = require('../chunk-CZ3AVCKD.js');
13
+ require('../chunk-O6DPCPRH.js');
14
+
15
+
16
+ var _chunkO2SODTR3js = require('../chunk-O2SODTR3.js');
17
+
18
+
19
+
20
+
21
+
22
+ var _chunkCRTRMMJ7js = require('../chunk-CRTRMMJ7.js');
23
+
24
+ // src/nextjs/providers/NextAuthProvider.tsx
25
+ var _react = require('react');
26
+ var _reactquery = require('@tanstack/react-query');
27
+
28
+ // src/nextjs/hooks/useUserCookie.ts
29
+
30
+ var _navigationjs = require('next/navigation.js');
31
+
32
+
33
+ // src/lib/cookies.ts
34
+ var getWindowCookieValue = ({
35
+ key,
36
+ window: window2,
37
+ parseJson = false
38
+ }) => {
39
+ const cookie = window2.document.cookie;
40
+ if (!cookie) return null;
41
+ const cookies = cookie.split(";");
42
+ for (const c of cookies) {
43
+ const [name, value] = c.trim().split("=");
44
+ if (value && name === key) {
45
+ try {
46
+ const decodeURIComponentValue = decodeURIComponent(value);
47
+ return parseJson === true ? JSON.parse(decodeURIComponentValue) : decodeURIComponentValue;
48
+ } catch (e) {
49
+ return value;
50
+ }
51
+ }
52
+ }
53
+ return null;
54
+ };
55
+
56
+ // src/nextjs/hooks/useUserCookie.ts
57
+ var getUserFromCookie = () => {
58
+ const userCookie = getWindowCookieValue({
59
+ key: "user" /* USER */,
60
+ window: globalThis.window,
61
+ parseJson: true
62
+ });
63
+ return userCookie;
64
+ };
65
+ var useUserCookie = () => {
66
+ const hasRunRef = _react.useRef.call(void 0, false);
67
+ const router = _navigationjs.useRouter.call(void 0, );
68
+ const { data: user } = _reactquery.useQuery.call(void 0, {
69
+ queryKey: ["user"],
70
+ queryFn: () => getUserFromCookie(),
71
+ refetchInterval: 2e3,
72
+ refetchIntervalInBackground: true,
73
+ enabled: !hasRunRef.current,
74
+ refetchOnWindowFocus: true
75
+ });
76
+ _react.useEffect.call(void 0, () => {
77
+ if (user) {
78
+ if (!hasRunRef.current) {
79
+ hasRunRef.current = true;
80
+ router.refresh();
81
+ }
82
+ } else {
83
+ hasRunRef.current = false;
84
+ }
85
+ }, [user, router]);
86
+ return user != null ? user : null;
87
+ };
88
+
89
+ // src/nextjs/hooks/useTokenCookie.ts
90
+
91
+
92
+
93
+ var getTokenFromCookie = (tokenName) => {
94
+ return getWindowCookieValue({
95
+ key: tokenName,
96
+ window: globalThis.window,
97
+ parseJson: false
98
+ });
99
+ };
100
+ var useTokenCookie = (tokenName) => {
101
+ const hasRunRef = _react.useRef.call(void 0, false);
102
+ const router = _navigationjs.useRouter.call(void 0, );
103
+ const { data: token } = _reactquery.useQuery.call(void 0, {
104
+ queryKey: ["token", tokenName],
105
+ queryFn: () => getTokenFromCookie(tokenName) || null,
106
+ refetchInterval: 2e3,
107
+ refetchIntervalInBackground: true,
108
+ enabled: !hasRunRef.current,
109
+ refetchOnWindowFocus: true
110
+ });
111
+ _react.useEffect.call(void 0, () => {
112
+ if (token) {
113
+ if (!hasRunRef.current) {
114
+ hasRunRef.current = true;
115
+ router.refresh();
116
+ }
117
+ } else {
118
+ hasRunRef.current = false;
119
+ }
120
+ }, [token, router]);
121
+ return token != null ? token : null;
122
+ };
123
+
124
+ // src/nextjs/providers/NextAuthProvider.tsx
125
+ var _jsxruntime = require('react/jsx-runtime');
126
+ var queryClient = new (0, _reactquery.QueryClient)();
127
+ var CivicNextAuthProvider = (_a) => {
128
+ var _b = _a, {
129
+ children
130
+ } = _b, props = _chunkCRTRMMJ7js.__objRest.call(void 0, _b, [
131
+ "children"
132
+ ]);
133
+ const [redirectUrl, setRedirectUrl] = _react.useState.call(void 0, "");
134
+ const resolvedConfig = _chunkCZ3AVCKDjs.resolveAuthConfig.call(void 0, );
135
+ const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } = resolvedConfig;
136
+ _react.useEffect.call(void 0, () => {
137
+ if (typeof globalThis.window !== "undefined") {
138
+ const currentUrl = globalThis.window.location.href;
139
+ setRedirectUrl(_chunkDJFTZS4Pjs.resolveCallbackUrl.call(void 0, resolvedConfig, currentUrl));
140
+ }
141
+ }, [callbackUrl, resolvedConfig]);
142
+ const user = useUserCookie();
143
+ const idToken = useTokenCookie("id_token" /* ID_TOKEN */);
144
+ const combinedUser = user ? _chunkCRTRMMJ7js.__spreadProps.call(void 0, _chunkCRTRMMJ7js.__spreadValues.call(void 0, {}, user || {}), { idToken }) : null;
145
+ const sessionData = _chunkCRTRMMJ7js.__spreadValues.call(void 0, {
146
+ authenticated: !!user
147
+ }, idToken ? { idToken } : {});
148
+ const signOut = () => _chunkCRTRMMJ7js.__async.call(void 0, void 0, null, function* () {
149
+ if (props.onSignOut) {
150
+ yield props.onSignOut();
151
+ }
152
+ window.location.href = logoutUrl;
153
+ return;
154
+ });
155
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactquery.QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
156
+ _chunkVJVRFKDHjs.AuthProvider,
157
+ _chunkCRTRMMJ7js.__spreadProps.call(void 0, _chunkCRTRMMJ7js.__spreadValues.call(void 0, {}, props), {
158
+ redirectUrl,
159
+ config: { oauthServer },
160
+ clientId,
161
+ pkceConsumer: new (0, _chunkO2SODTR3js.ConfidentialClientPKCEConsumer)(challengeUrl),
162
+ sessionData,
163
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
164
+ _chunkVJVRFKDHjs.UserProvider,
165
+ {
166
+ storage: new (0, _chunkDJFTZS4Pjs.NextjsClientStorage)(),
167
+ user: combinedUser,
168
+ signOut,
169
+ children
170
+ }
171
+ )
172
+ })
173
+ ) });
174
+ };
175
+
176
+
177
+
178
+ exports.CivicAuthProvider = CivicNextAuthProvider; exports.useUserCookie = useUserCookie;
179
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevincolgan/code/civic-auth/packages/civic-auth-client/dist/nextjs/client.js","../../src/nextjs/providers/NextAuthProvider.tsx","../../src/nextjs/hooks/useUserCookie.ts","../../src/lib/cookies.ts","../../src/nextjs/hooks/useTokenCookie.ts"],"names":["window","useRef","useRouter","useQuery","useEffect"],"mappings":"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","file":"/Users/kevincolgan/code/civic-auth/packages/civic-auth-client/dist/nextjs/client.js","sourcesContent":[null,"\"use client\";\n/**\n * A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.\n */\nimport { useEffect, useState } from \"react\";\nimport { AuthProvider, AuthProviderProps } from \"@/shared/AuthProvider.js\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\n\n// adding the styles import here to be added to the bundle\nimport \"@/styles.css\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { NextjsClientStorage } from \"@/nextjs/cookies\";\nimport { UserProvider } from \"@/shared/UserProvider\";\nimport { useUserCookie } from \"../hooks/useUserCookie\";\nimport { OAuthTokens } from \"@/shared/types\";\nimport { useTokenCookie } from \"../hooks/useTokenCookie\";\nimport { User } from \"@/types\";\n\nconst queryClient = new QueryClient();\n\nexport type NextCivicAuthProviderProps = Omit<AuthProviderProps, \"clientId\">;\n\nexport const CivicNextAuthProvider = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n const [redirectUrl, setRedirectUrl] = useState<string>(\"\");\n const resolvedConfig = resolveAuthConfig();\n const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } =\n resolvedConfig;\n\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n const currentUrl = globalThis.window.location.href;\n setRedirectUrl(resolveCallbackUrl(resolvedConfig, currentUrl));\n }\n }, [callbackUrl, resolvedConfig]);\n\n const user = useUserCookie();\n const idToken = useTokenCookie(OAuthTokens.ID_TOKEN);\n const combinedUser = user ? ({ ...(user || {}), idToken } as User) : null;\n const sessionData = {\n authenticated: !!user,\n ...(idToken ? { idToken } : {}),\n };\n const signOut = async (): Promise<void> => {\n if (props.onSignOut) {\n await props.onSignOut();\n }\n window.location.href = logoutUrl;\n return;\n };\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider\n {...props}\n redirectUrl={redirectUrl}\n config={{ oauthServer }}\n clientId={clientId}\n pkceConsumer={new ConfidentialClientPKCEConsumer(challengeUrl)}\n sessionData={sessionData}\n >\n <UserProvider\n storage={new NextjsClientStorage()}\n user={combinedUser}\n signOut={signOut}\n >\n {children}\n </UserProvider>\n </AuthProvider>\n </QueryClientProvider>\n );\n};\n","\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport { useRouter } from \"next/navigation.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getWindowCookieValue } from \"@/lib/cookies.js\";\nimport { EmptyObject, User } from \"@/types\";\nimport { UserStorage } from \"@/shared/types\";\n\nconst getUserFromCookie = () => {\n const userCookie = getWindowCookieValue({\n key: UserStorage.USER,\n window: globalThis.window,\n parseJson: true,\n });\n return userCookie;\n};\n\nexport const useUserCookie = <T extends EmptyObject>() => {\n const hasRunRef = useRef(false);\n const router = useRouter();\n\n const { data: user } = useQuery({\n queryKey: [\"user\"],\n queryFn: () => getUserFromCookie() as User<T> | null,\n refetchInterval: 2000,\n refetchIntervalInBackground: true,\n enabled: !hasRunRef.current,\n refetchOnWindowFocus: true,\n });\n\n useEffect(() => {\n if (user) {\n if (!hasRunRef.current) {\n hasRunRef.current = true;\n router.refresh();\n }\n } else {\n hasRunRef.current = false;\n }\n }, [user, router]);\n\n return user ?? null;\n};\n","const getWindowCookieValue = ({\n key,\n window,\n parseJson = false,\n}: {\n key: string;\n window: Window;\n parseJson?: boolean;\n}) => {\n const cookie = window.document.cookie;\n if (!cookie) return null;\n const cookies = cookie.split(\";\");\n for (const c of cookies) {\n const [name, value] = c.trim().split(\"=\");\n if (value && name === key) {\n try {\n const decodeURIComponentValue = decodeURIComponent(value);\n return parseJson === true\n ? JSON.parse(decodeURIComponentValue)\n : decodeURIComponentValue;\n } catch {\n return value;\n }\n }\n }\n return null;\n};\nexport { getWindowCookieValue };\n","\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport { useRouter } from \"next/navigation.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getWindowCookieValue } from \"@/lib/cookies.js\";\nimport { OAuthTokens } from \"@/shared/types\";\n\nconst getTokenFromCookie = (tokenName: OAuthTokens): string => {\n return getWindowCookieValue({\n key: tokenName,\n window: globalThis.window,\n parseJson: false,\n });\n};\n\nexport const useTokenCookie = (tokenName: OAuthTokens): string | null => {\n const hasRunRef = useRef(false);\n const router = useRouter();\n\n const { data: token } = useQuery({\n queryKey: [\"token\", tokenName],\n queryFn: () => getTokenFromCookie(tokenName) || null,\n refetchInterval: 2000,\n refetchIntervalInBackground: true,\n enabled: !hasRunRef.current,\n refetchOnWindowFocus: true,\n });\n\n useEffect(() => {\n if (token) {\n if (!hasRunRef.current) {\n hasRunRef.current = true;\n router.refresh();\n }\n } else {\n hasRunRef.current = false;\n }\n }, [token, router]);\n\n return token ?? null;\n};\n"]}
@@ -0,0 +1,179 @@
1
+ import "../chunk-PMJAV4JJ.mjs";
2
+ import {
3
+ AuthProvider,
4
+ UserProvider
5
+ } from "../chunk-UADVRCHY.mjs";
6
+ import {
7
+ NextjsClientStorage,
8
+ resolveCallbackUrl
9
+ } from "../chunk-BFESCRFK.mjs";
10
+ import {
11
+ resolveAuthConfig
12
+ } from "../chunk-X3FQBE22.mjs";
13
+ import "../chunk-HTTTZ2BP.mjs";
14
+ import {
15
+ ConfidentialClientPKCEConsumer
16
+ } from "../chunk-CBQ3HKRV.mjs";
17
+ import {
18
+ __async,
19
+ __objRest,
20
+ __spreadProps,
21
+ __spreadValues
22
+ } from "../chunk-RGHW4PYM.mjs";
23
+
24
+ // src/nextjs/providers/NextAuthProvider.tsx
25
+ import { useEffect as useEffect3, useState } from "react";
26
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
27
+
28
+ // src/nextjs/hooks/useUserCookie.ts
29
+ import { useEffect, useRef } from "react";
30
+ import { useRouter } from "next/navigation.js";
31
+ import { useQuery } from "@tanstack/react-query";
32
+
33
+ // src/lib/cookies.ts
34
+ var getWindowCookieValue = ({
35
+ key,
36
+ window: window2,
37
+ parseJson = false
38
+ }) => {
39
+ const cookie = window2.document.cookie;
40
+ if (!cookie) return null;
41
+ const cookies = cookie.split(";");
42
+ for (const c of cookies) {
43
+ const [name, value] = c.trim().split("=");
44
+ if (value && name === key) {
45
+ try {
46
+ const decodeURIComponentValue = decodeURIComponent(value);
47
+ return parseJson === true ? JSON.parse(decodeURIComponentValue) : decodeURIComponentValue;
48
+ } catch (e) {
49
+ return value;
50
+ }
51
+ }
52
+ }
53
+ return null;
54
+ };
55
+
56
+ // src/nextjs/hooks/useUserCookie.ts
57
+ var getUserFromCookie = () => {
58
+ const userCookie = getWindowCookieValue({
59
+ key: "user" /* USER */,
60
+ window: globalThis.window,
61
+ parseJson: true
62
+ });
63
+ return userCookie;
64
+ };
65
+ var useUserCookie = () => {
66
+ const hasRunRef = useRef(false);
67
+ const router = useRouter();
68
+ const { data: user } = useQuery({
69
+ queryKey: ["user"],
70
+ queryFn: () => getUserFromCookie(),
71
+ refetchInterval: 2e3,
72
+ refetchIntervalInBackground: true,
73
+ enabled: !hasRunRef.current,
74
+ refetchOnWindowFocus: true
75
+ });
76
+ useEffect(() => {
77
+ if (user) {
78
+ if (!hasRunRef.current) {
79
+ hasRunRef.current = true;
80
+ router.refresh();
81
+ }
82
+ } else {
83
+ hasRunRef.current = false;
84
+ }
85
+ }, [user, router]);
86
+ return user != null ? user : null;
87
+ };
88
+
89
+ // src/nextjs/hooks/useTokenCookie.ts
90
+ import { useEffect as useEffect2, useRef as useRef2 } from "react";
91
+ import { useRouter as useRouter2 } from "next/navigation.js";
92
+ import { useQuery as useQuery2 } from "@tanstack/react-query";
93
+ var getTokenFromCookie = (tokenName) => {
94
+ return getWindowCookieValue({
95
+ key: tokenName,
96
+ window: globalThis.window,
97
+ parseJson: false
98
+ });
99
+ };
100
+ var useTokenCookie = (tokenName) => {
101
+ const hasRunRef = useRef2(false);
102
+ const router = useRouter2();
103
+ const { data: token } = useQuery2({
104
+ queryKey: ["token", tokenName],
105
+ queryFn: () => getTokenFromCookie(tokenName) || null,
106
+ refetchInterval: 2e3,
107
+ refetchIntervalInBackground: true,
108
+ enabled: !hasRunRef.current,
109
+ refetchOnWindowFocus: true
110
+ });
111
+ useEffect2(() => {
112
+ if (token) {
113
+ if (!hasRunRef.current) {
114
+ hasRunRef.current = true;
115
+ router.refresh();
116
+ }
117
+ } else {
118
+ hasRunRef.current = false;
119
+ }
120
+ }, [token, router]);
121
+ return token != null ? token : null;
122
+ };
123
+
124
+ // src/nextjs/providers/NextAuthProvider.tsx
125
+ import { jsx } from "react/jsx-runtime";
126
+ var queryClient = new QueryClient();
127
+ var CivicNextAuthProvider = (_a) => {
128
+ var _b = _a, {
129
+ children
130
+ } = _b, props = __objRest(_b, [
131
+ "children"
132
+ ]);
133
+ const [redirectUrl, setRedirectUrl] = useState("");
134
+ const resolvedConfig = resolveAuthConfig();
135
+ const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } = resolvedConfig;
136
+ useEffect3(() => {
137
+ if (typeof globalThis.window !== "undefined") {
138
+ const currentUrl = globalThis.window.location.href;
139
+ setRedirectUrl(resolveCallbackUrl(resolvedConfig, currentUrl));
140
+ }
141
+ }, [callbackUrl, resolvedConfig]);
142
+ const user = useUserCookie();
143
+ const idToken = useTokenCookie("id_token" /* ID_TOKEN */);
144
+ const combinedUser = user ? __spreadProps(__spreadValues({}, user || {}), { idToken }) : null;
145
+ const sessionData = __spreadValues({
146
+ authenticated: !!user
147
+ }, idToken ? { idToken } : {});
148
+ const signOut = () => __async(void 0, null, function* () {
149
+ if (props.onSignOut) {
150
+ yield props.onSignOut();
151
+ }
152
+ window.location.href = logoutUrl;
153
+ return;
154
+ });
155
+ return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(
156
+ AuthProvider,
157
+ __spreadProps(__spreadValues({}, props), {
158
+ redirectUrl,
159
+ config: { oauthServer },
160
+ clientId,
161
+ pkceConsumer: new ConfidentialClientPKCEConsumer(challengeUrl),
162
+ sessionData,
163
+ children: /* @__PURE__ */ jsx(
164
+ UserProvider,
165
+ {
166
+ storage: new NextjsClientStorage(),
167
+ user: combinedUser,
168
+ signOut,
169
+ children
170
+ }
171
+ )
172
+ })
173
+ ) });
174
+ };
175
+ export {
176
+ CivicNextAuthProvider as CivicAuthProvider,
177
+ useUserCookie
178
+ };
179
+ //# sourceMappingURL=client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/nextjs/providers/NextAuthProvider.tsx","../../src/nextjs/hooks/useUserCookie.ts","../../src/lib/cookies.ts","../../src/nextjs/hooks/useTokenCookie.ts"],"sourcesContent":["\"use client\";\n/**\n * A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.\n */\nimport { useEffect, useState } from \"react\";\nimport { AuthProvider, AuthProviderProps } from \"@/shared/AuthProvider.js\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\n\n// adding the styles import here to be added to the bundle\nimport \"@/styles.css\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { NextjsClientStorage } from \"@/nextjs/cookies\";\nimport { UserProvider } from \"@/shared/UserProvider\";\nimport { useUserCookie } from \"../hooks/useUserCookie\";\nimport { OAuthTokens } from \"@/shared/types\";\nimport { useTokenCookie } from \"../hooks/useTokenCookie\";\nimport { User } from \"@/types\";\n\nconst queryClient = new QueryClient();\n\nexport type NextCivicAuthProviderProps = Omit<AuthProviderProps, \"clientId\">;\n\nexport const CivicNextAuthProvider = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n const [redirectUrl, setRedirectUrl] = useState<string>(\"\");\n const resolvedConfig = resolveAuthConfig();\n const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } =\n resolvedConfig;\n\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n const currentUrl = globalThis.window.location.href;\n setRedirectUrl(resolveCallbackUrl(resolvedConfig, currentUrl));\n }\n }, [callbackUrl, resolvedConfig]);\n\n const user = useUserCookie();\n const idToken = useTokenCookie(OAuthTokens.ID_TOKEN);\n const combinedUser = user ? ({ ...(user || {}), idToken } as User) : null;\n const sessionData = {\n authenticated: !!user,\n ...(idToken ? { idToken } : {}),\n };\n const signOut = async (): Promise<void> => {\n if (props.onSignOut) {\n await props.onSignOut();\n }\n window.location.href = logoutUrl;\n return;\n };\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider\n {...props}\n redirectUrl={redirectUrl}\n config={{ oauthServer }}\n clientId={clientId}\n pkceConsumer={new ConfidentialClientPKCEConsumer(challengeUrl)}\n sessionData={sessionData}\n >\n <UserProvider\n storage={new NextjsClientStorage()}\n user={combinedUser}\n signOut={signOut}\n >\n {children}\n </UserProvider>\n </AuthProvider>\n </QueryClientProvider>\n );\n};\n","\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport { useRouter } from \"next/navigation.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getWindowCookieValue } from \"@/lib/cookies.js\";\nimport { EmptyObject, User } from \"@/types\";\nimport { UserStorage } from \"@/shared/types\";\n\nconst getUserFromCookie = () => {\n const userCookie = getWindowCookieValue({\n key: UserStorage.USER,\n window: globalThis.window,\n parseJson: true,\n });\n return userCookie;\n};\n\nexport const useUserCookie = <T extends EmptyObject>() => {\n const hasRunRef = useRef(false);\n const router = useRouter();\n\n const { data: user } = useQuery({\n queryKey: [\"user\"],\n queryFn: () => getUserFromCookie() as User<T> | null,\n refetchInterval: 2000,\n refetchIntervalInBackground: true,\n enabled: !hasRunRef.current,\n refetchOnWindowFocus: true,\n });\n\n useEffect(() => {\n if (user) {\n if (!hasRunRef.current) {\n hasRunRef.current = true;\n router.refresh();\n }\n } else {\n hasRunRef.current = false;\n }\n }, [user, router]);\n\n return user ?? null;\n};\n","const getWindowCookieValue = ({\n key,\n window,\n parseJson = false,\n}: {\n key: string;\n window: Window;\n parseJson?: boolean;\n}) => {\n const cookie = window.document.cookie;\n if (!cookie) return null;\n const cookies = cookie.split(\";\");\n for (const c of cookies) {\n const [name, value] = c.trim().split(\"=\");\n if (value && name === key) {\n try {\n const decodeURIComponentValue = decodeURIComponent(value);\n return parseJson === true\n ? JSON.parse(decodeURIComponentValue)\n : decodeURIComponentValue;\n } catch {\n return value;\n }\n }\n }\n return null;\n};\nexport { getWindowCookieValue };\n","\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport { useRouter } from \"next/navigation.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getWindowCookieValue } from \"@/lib/cookies.js\";\nimport { OAuthTokens } from \"@/shared/types\";\n\nconst getTokenFromCookie = (tokenName: OAuthTokens): string => {\n return getWindowCookieValue({\n key: tokenName,\n window: globalThis.window,\n parseJson: false,\n });\n};\n\nexport const useTokenCookie = (tokenName: OAuthTokens): string | null => {\n const hasRunRef = useRef(false);\n const router = useRouter();\n\n const { data: token } = useQuery({\n queryKey: [\"token\", tokenName],\n queryFn: () => getTokenFromCookie(tokenName) || null,\n refetchInterval: 2000,\n refetchIntervalInBackground: true,\n enabled: !hasRunRef.current,\n refetchOnWindowFocus: true,\n });\n\n useEffect(() => {\n if (token) {\n if (!hasRunRef.current) {\n hasRunRef.current = true;\n router.refresh();\n }\n } else {\n hasRunRef.current = false;\n }\n }, [token, router]);\n\n return token ?? null;\n};\n"],"mappings":"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","names":["useEffect","window","useEffect","useRef","useRouter","useQuery","useRef","useRouter","useQuery","useEffect","useEffect"]}
package/dist/nextjs.d.mts CHANGED
@@ -2,11 +2,17 @@ import * as next_dist_shared_lib_image_config from 'next/dist/shared/lib/image-c
2
2
  import * as next_dist_lib_load_custom_routes from 'next/dist/lib/load-custom-routes';
3
3
  import * as next_dist_server_config_shared from 'next/dist/server/config-shared';
4
4
  import { NextConfig } from 'next';
5
- import { T as TokensCookieConfig, C as CookieConfig } from './types-b4c1koXj.mjs';
6
- import { U as User } from './types-HdCjGldB.mjs';
5
+ import { T as TokensCookieConfig, a as CookieConfig, O as OAuthTokens, C as CodeVerifier } from './types-Bqm9OCZN.mjs';
6
+ import { U as User, S as SessionData, a as UnknownObject } from './types-HdCjGldB.mjs';
7
7
  import { NextRequest, NextResponse } from 'next/server.js';
8
+ import { NextResponse as NextResponse$1 } from 'next/server';
9
+ import { C as CookieStorage, a as CookieStorageSettings } from './storage-BJPUpxhm.mjs';
8
10
  import 'oslo/oauth2';
9
11
 
12
+ type CookiesConfigObject = {
13
+ tokens: TokensCookieConfig;
14
+ user: CookieConfig;
15
+ };
10
16
  type AuthConfigWithDefaults = {
11
17
  clientId: string;
12
18
  oauthServer: string;
@@ -17,10 +23,7 @@ type AuthConfigWithDefaults = {
17
23
  challengeUrl: string;
18
24
  include: string[];
19
25
  exclude: string[];
20
- cookies: {
21
- tokens: TokensCookieConfig;
22
- user: CookieConfig;
23
- };
26
+ cookies: CookiesConfigObject;
24
27
  };
25
28
  type AuthConfig = Partial<AuthConfigWithDefaults>;
26
29
  /**
@@ -215,4 +218,29 @@ declare function auth(authConfig?: AuthConfig): (middleware: Middleware) => ((re
215
218
  */
216
219
  declare const handler: (authConfig?: {}) => (request: NextRequest) => Promise<NextResponse>;
217
220
 
218
- export { auth, authMiddleware, createCivicAuthPlugin, getUser, handler, withAuth };
221
+ /**
222
+ * Creates HTTP-only cookies for authentication tokens
223
+ */
224
+ declare const createTokenCookies: (response: NextResponse$1, sessionData: SessionData, config: AuthConfig) => void;
225
+ /**
226
+ * Creates a client-readable cookie with user info
227
+ */
228
+ declare const createUserInfoCookie: (response: NextResponse$1, user: User<UnknownObject> | null, sessionData: SessionData, config: AuthConfig) => void;
229
+ /**
230
+ * Clears all authentication cookies
231
+ */
232
+ declare const clearAuthCookies: (config: AuthConfig) => Promise<void>;
233
+ type KeySetter = OAuthTokens | CodeVerifier;
234
+ declare class NextjsCookieStorage extends CookieStorage {
235
+ readonly config: Partial<TokensCookieConfig>;
236
+ constructor(config?: Partial<TokensCookieConfig>);
237
+ get(key: string): string | null;
238
+ set(key: KeySetter, value: string): void;
239
+ }
240
+ declare class NextjsClientStorage extends CookieStorage {
241
+ constructor(config?: Partial<CookieStorageSettings>);
242
+ get(key: string): string | null;
243
+ set(key: string, value: string): void;
244
+ }
245
+
246
+ export { NextjsClientStorage, NextjsCookieStorage, auth, authMiddleware, clearAuthCookies, createCivicAuthPlugin, createTokenCookies, createUserInfoCookie, getUser, handler, withAuth };
package/dist/nextjs.d.ts CHANGED
@@ -2,11 +2,17 @@ import * as next_dist_shared_lib_image_config from 'next/dist/shared/lib/image-c
2
2
  import * as next_dist_lib_load_custom_routes from 'next/dist/lib/load-custom-routes';
3
3
  import * as next_dist_server_config_shared from 'next/dist/server/config-shared';
4
4
  import { NextConfig } from 'next';
5
- import { T as TokensCookieConfig, C as CookieConfig } from './types-b4c1koXj.js';
6
- import { U as User } from './types-HdCjGldB.js';
5
+ import { T as TokensCookieConfig, a as CookieConfig, O as OAuthTokens, C as CodeVerifier } from './types-Bqm9OCZN.js';
6
+ import { U as User, S as SessionData, a as UnknownObject } from './types-HdCjGldB.js';
7
7
  import { NextRequest, NextResponse } from 'next/server.js';
8
+ import { NextResponse as NextResponse$1 } from 'next/server';
9
+ import { C as CookieStorage, a as CookieStorageSettings } from './storage-B2eAQNdv.js';
8
10
  import 'oslo/oauth2';
9
11
 
12
+ type CookiesConfigObject = {
13
+ tokens: TokensCookieConfig;
14
+ user: CookieConfig;
15
+ };
10
16
  type AuthConfigWithDefaults = {
11
17
  clientId: string;
12
18
  oauthServer: string;
@@ -17,10 +23,7 @@ type AuthConfigWithDefaults = {
17
23
  challengeUrl: string;
18
24
  include: string[];
19
25
  exclude: string[];
20
- cookies: {
21
- tokens: TokensCookieConfig;
22
- user: CookieConfig;
23
- };
26
+ cookies: CookiesConfigObject;
24
27
  };
25
28
  type AuthConfig = Partial<AuthConfigWithDefaults>;
26
29
  /**
@@ -215,4 +218,29 @@ declare function auth(authConfig?: AuthConfig): (middleware: Middleware) => ((re
215
218
  */
216
219
  declare const handler: (authConfig?: {}) => (request: NextRequest) => Promise<NextResponse>;
217
220
 
218
- export { auth, authMiddleware, createCivicAuthPlugin, getUser, handler, withAuth };
221
+ /**
222
+ * Creates HTTP-only cookies for authentication tokens
223
+ */
224
+ declare const createTokenCookies: (response: NextResponse$1, sessionData: SessionData, config: AuthConfig) => void;
225
+ /**
226
+ * Creates a client-readable cookie with user info
227
+ */
228
+ declare const createUserInfoCookie: (response: NextResponse$1, user: User<UnknownObject> | null, sessionData: SessionData, config: AuthConfig) => void;
229
+ /**
230
+ * Clears all authentication cookies
231
+ */
232
+ declare const clearAuthCookies: (config: AuthConfig) => Promise<void>;
233
+ type KeySetter = OAuthTokens | CodeVerifier;
234
+ declare class NextjsCookieStorage extends CookieStorage {
235
+ readonly config: Partial<TokensCookieConfig>;
236
+ constructor(config?: Partial<TokensCookieConfig>);
237
+ get(key: string): string | null;
238
+ set(key: KeySetter, value: string): void;
239
+ }
240
+ declare class NextjsClientStorage extends CookieStorage {
241
+ constructor(config?: Partial<CookieStorageSettings>);
242
+ get(key: string): string | null;
243
+ set(key: string, value: string): void;
244
+ }
245
+
246
+ export { NextjsClientStorage, NextjsCookieStorage, auth, authMiddleware, clearAuthCookies, createCivicAuthPlugin, createTokenCookies, createUserInfoCookie, getUser, handler, withAuth };