@civic/auth 0.2.5-alpha.1 → 0.2.5-alpha.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.
Files changed (132) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/dist/cjs/constants.d.ts +2 -1
  3. package/dist/cjs/constants.d.ts.map +1 -1
  4. package/dist/cjs/constants.js +3 -1
  5. package/dist/cjs/constants.js.map +1 -1
  6. package/dist/cjs/nextjs/config.d.ts.map +1 -1
  7. package/dist/cjs/nextjs/config.js +1 -8
  8. package/dist/cjs/nextjs/config.js.map +1 -1
  9. package/dist/cjs/nextjs/cookies.d.ts.map +1 -1
  10. package/dist/cjs/nextjs/cookies.js +43 -2
  11. package/dist/cjs/nextjs/cookies.js.map +1 -1
  12. package/dist/cjs/nextjs/routeHandler.d.ts.map +1 -1
  13. package/dist/cjs/nextjs/routeHandler.js +9 -8
  14. package/dist/cjs/nextjs/routeHandler.js.map +1 -1
  15. package/dist/cjs/services/AuthenticationService.d.ts.map +1 -1
  16. package/dist/cjs/services/AuthenticationService.js +19 -8
  17. package/dist/cjs/services/AuthenticationService.js.map +1 -1
  18. package/dist/cjs/shared/lib/BrowserCookieStorage.d.ts.map +1 -1
  19. package/dist/cjs/shared/lib/BrowserCookieStorage.js +5 -7
  20. package/dist/cjs/shared/lib/BrowserCookieStorage.js.map +1 -1
  21. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  22. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js +6 -6
  23. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  24. package/dist/cjs/shared/lib/types.d.ts +2 -2
  25. package/dist/cjs/shared/lib/types.d.ts.map +1 -1
  26. package/dist/cjs/shared/lib/types.js +3 -3
  27. package/dist/cjs/shared/lib/types.js.map +1 -1
  28. package/dist/cjs/shared/lib/util.d.ts +3 -1
  29. package/dist/cjs/shared/lib/util.d.ts.map +1 -1
  30. package/dist/cjs/shared/lib/util.js +28 -11
  31. package/dist/cjs/shared/lib/util.js.map +1 -1
  32. package/dist/cjs/shared/version.d.ts +1 -1
  33. package/dist/cjs/shared/version.js +1 -1
  34. package/dist/cjs/shared/version.js.map +1 -1
  35. package/dist/cjs/types.d.ts +2 -3
  36. package/dist/cjs/types.d.ts.map +1 -1
  37. package/dist/cjs/types.js.map +1 -1
  38. package/dist/esm/constants.d.ts +2 -1
  39. package/dist/esm/constants.d.ts.map +1 -1
  40. package/dist/esm/constants.js +2 -1
  41. package/dist/esm/constants.js.map +1 -1
  42. package/dist/esm/nextjs/config.d.ts.map +1 -1
  43. package/dist/esm/nextjs/config.js +1 -8
  44. package/dist/esm/nextjs/config.js.map +1 -1
  45. package/dist/esm/nextjs/cookies.d.ts.map +1 -1
  46. package/dist/esm/nextjs/cookies.js +11 -3
  47. package/dist/esm/nextjs/cookies.js.map +1 -1
  48. package/dist/esm/nextjs/routeHandler.d.ts.map +1 -1
  49. package/dist/esm/nextjs/routeHandler.js +9 -8
  50. package/dist/esm/nextjs/routeHandler.js.map +1 -1
  51. package/dist/esm/services/AuthenticationService.d.ts.map +1 -1
  52. package/dist/esm/services/AuthenticationService.js +19 -8
  53. package/dist/esm/services/AuthenticationService.js.map +1 -1
  54. package/dist/esm/shared/lib/BrowserCookieStorage.d.ts.map +1 -1
  55. package/dist/esm/shared/lib/BrowserCookieStorage.js +5 -7
  56. package/dist/esm/shared/lib/BrowserCookieStorage.js.map +1 -1
  57. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  58. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js +7 -7
  59. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  60. package/dist/esm/shared/lib/types.d.ts +2 -2
  61. package/dist/esm/shared/lib/types.d.ts.map +1 -1
  62. package/dist/esm/shared/lib/types.js +2 -2
  63. package/dist/esm/shared/lib/types.js.map +1 -1
  64. package/dist/esm/shared/lib/util.d.ts +3 -1
  65. package/dist/esm/shared/lib/util.d.ts.map +1 -1
  66. package/dist/esm/shared/lib/util.js +26 -11
  67. package/dist/esm/shared/lib/util.js.map +1 -1
  68. package/dist/esm/shared/version.d.ts +1 -1
  69. package/dist/esm/shared/version.js +1 -1
  70. package/dist/esm/shared/version.js.map +1 -1
  71. package/dist/esm/types.d.ts +2 -3
  72. package/dist/esm/types.d.ts.map +1 -1
  73. package/dist/esm/types.js.map +1 -1
  74. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  75. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  76. package/package.json +29 -19
  77. package/dist/cjs/nextjs/GetUser.d.ts +0 -6
  78. package/dist/cjs/nextjs/GetUser.d.ts.map +0 -1
  79. package/dist/cjs/nextjs/GetUser.js +0 -11
  80. package/dist/cjs/nextjs/GetUser.js.map +0 -1
  81. package/dist/cjs/reactjs/hooks/useAuth.d.ts +0 -3
  82. package/dist/cjs/reactjs/hooks/useAuth.d.ts.map +0 -1
  83. package/dist/cjs/reactjs/hooks/useAuth.js +0 -15
  84. package/dist/cjs/reactjs/hooks/useAuth.js.map +0 -1
  85. package/dist/cjs/reactjs/hooks/useSignIn.d.ts +0 -6
  86. package/dist/cjs/reactjs/hooks/useSignIn.d.ts.map +0 -1
  87. package/dist/cjs/reactjs/hooks/useSignIn.js +0 -38
  88. package/dist/cjs/reactjs/hooks/useSignIn.js.map +0 -1
  89. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts +0 -3
  90. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts.map +0 -1
  91. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js +0 -16
  92. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js.map +0 -1
  93. package/dist/cjs/shared/providers/AuthProvider.d.ts +0 -22
  94. package/dist/cjs/shared/providers/AuthProvider.d.ts.map +0 -1
  95. package/dist/cjs/shared/providers/AuthProvider.js +0 -108
  96. package/dist/cjs/shared/providers/AuthProvider.js.map +0 -1
  97. package/dist/cjs/shared/providers/CivicAuthProvider.d.ts +0 -6
  98. package/dist/cjs/shared/providers/CivicAuthProvider.d.ts.map +0 -1
  99. package/dist/cjs/shared/providers/CivicAuthProvider.js +0 -38
  100. package/dist/cjs/shared/providers/CivicAuthProvider.js.map +0 -1
  101. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts +0 -17
  102. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +0 -1
  103. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js +0 -168
  104. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js.map +0 -1
  105. package/dist/esm/nextjs/GetUser.d.ts +0 -6
  106. package/dist/esm/nextjs/GetUser.d.ts.map +0 -1
  107. package/dist/esm/nextjs/GetUser.js +0 -7
  108. package/dist/esm/nextjs/GetUser.js.map +0 -1
  109. package/dist/esm/reactjs/hooks/useAuth.d.ts +0 -3
  110. package/dist/esm/reactjs/hooks/useAuth.d.ts.map +0 -1
  111. package/dist/esm/reactjs/hooks/useAuth.js +0 -12
  112. package/dist/esm/reactjs/hooks/useAuth.js.map +0 -1
  113. package/dist/esm/reactjs/hooks/useSignIn.d.ts +0 -6
  114. package/dist/esm/reactjs/hooks/useSignIn.d.ts.map +0 -1
  115. package/dist/esm/reactjs/hooks/useSignIn.js +0 -34
  116. package/dist/esm/reactjs/hooks/useSignIn.js.map +0 -1
  117. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts +0 -3
  118. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts.map +0 -1
  119. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js +0 -13
  120. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js.map +0 -1
  121. package/dist/esm/shared/providers/AuthProvider.d.ts +0 -22
  122. package/dist/esm/shared/providers/AuthProvider.d.ts.map +0 -1
  123. package/dist/esm/shared/providers/AuthProvider.js +0 -72
  124. package/dist/esm/shared/providers/AuthProvider.js.map +0 -1
  125. package/dist/esm/shared/providers/CivicAuthProvider.d.ts +0 -6
  126. package/dist/esm/shared/providers/CivicAuthProvider.d.ts.map +0 -1
  127. package/dist/esm/shared/providers/CivicAuthProvider.js +0 -32
  128. package/dist/esm/shared/providers/CivicAuthProvider.js.map +0 -1
  129. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts +0 -17
  130. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +0 -1
  131. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js +0 -131
  132. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civic/auth",
3
- "version": "0.2.5-alpha.1",
3
+ "version": "0.2.5-alpha.3",
4
4
  "type": "module",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -62,6 +62,20 @@
62
62
  }
63
63
  }
64
64
  },
65
+ "scripts": {
66
+ "prebuild": "pnpm generate-version",
67
+ "build": "pnpm build:cjs && pnpm build:esm",
68
+ "build:cjs": "tsc -p tsconfig.cjs.json --noEmit false $(if [ \"$WATCH_MODE\" = \"true\" ]; then echo \"--watch\"; fi) && tsc-alias -p tsconfig.cjs.json",
69
+ "build:esm": "tsc -p tsconfig.esm.json --noEmit false $(if [ \"$WATCH_MODE\" = \"true\" ]; then echo \"--watch\"; fi) && tsc-alias -p tsconfig.esm.json",
70
+ "prepublishOnly": "pnpm generate-version && node ../../etc/scripts/prompt-changelog.js && pnpm build",
71
+ "dev": "WATCH_MODE=true pnpm build",
72
+ "pretest": "pnpm generate-version",
73
+ "test": "vitest",
74
+ "lint": "eslint \"src/**/*.ts*\" --max-warnings 0",
75
+ "lint:fix": "pnpm lint --fix",
76
+ "test:update": "vitest --update",
77
+ "generate-version": "npx tsx ./generateVersion.ts"
78
+ },
65
79
  "dependencies": {
66
80
  "debug": "^4.3.7",
67
81
  "eventemitter3": "^5.0.1",
@@ -72,6 +86,8 @@
72
86
  "uuid": "^10.0.0"
73
87
  },
74
88
  "devDependencies": {
89
+ "@repo/eslint-config": "workspace:*",
90
+ "@repo/typescript-config": "workspace:*",
75
91
  "@rollup/plugin-typescript": "^12.1.1",
76
92
  "@testing-library/jest-dom": "^6.5.0",
77
93
  "@testing-library/react": "16.0.1",
@@ -96,24 +112,18 @@
96
112
  "tsx": "^4.19.1",
97
113
  "vite": "^5",
98
114
  "vite-plugin-dts": "^4.2.3",
99
- "vitest": "^2.1.8",
100
- "@repo/eslint-config": "0.0.0",
101
- "@repo/typescript-config": "0.0.0"
115
+ "vitest": "^2.1.8"
102
116
  },
103
- "optionalDependency": {
104
- "next": "^14"
117
+ "peerDependencies": {
118
+ "next": ">=14",
119
+ "react": ">=18"
105
120
  },
106
- "scripts": {
107
- "prebuild": "pnpm generate-version",
108
- "build": "pnpm build:cjs && pnpm build:esm",
109
- "build:cjs": "tsc -p tsconfig.cjs.json --noEmit false $(if [ \"$WATCH_MODE\" = \"true\" ]; then echo \"--watch\"; fi) && tsc-alias -p tsconfig.cjs.json",
110
- "build:esm": "tsc -p tsconfig.esm.json --noEmit false $(if [ \"$WATCH_MODE\" = \"true\" ]; then echo \"--watch\"; fi) && tsc-alias -p tsconfig.esm.json",
111
- "dev": "WATCH_MODE=true pnpm build",
112
- "pretest": "pnpm generate-version",
113
- "test": "vitest",
114
- "lint": "eslint \"src/**/*.ts*\" --max-warnings 0",
115
- "lint:fix": "pnpm lint --fix",
116
- "test:update": "vitest --update",
117
- "generate-version": "npx tsx ./generateVersion.ts"
121
+ "peerDependenciesMeta": {
122
+ "next": {
123
+ "optional": true
124
+ },
125
+ "react": {
126
+ "optional": false
127
+ }
118
128
  }
119
- }
129
+ }
@@ -1,6 +0,0 @@
1
- /**
2
- * Used on the server-side to get the user object from the cookie
3
- */
4
- import type { User } from "../types.js";
5
- export declare const getUser: () => Promise<User | null>;
6
- //# sourceMappingURL=GetUser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GetUser.d.ts","sourceRoot":"","sources":["../../../src/nextjs/GetUser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIvC,eAAO,MAAM,OAAO,QAAa,OAAO,CAAC,IAAI,GAAG,IAAI,CAGnD,CAAC"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUser = void 0;
4
- const cookies_js_1 = require("../nextjs/cookies.js");
5
- const session_js_1 = require("../shared/lib/session.js");
6
- const getUser = async () => {
7
- const clientStorage = new cookies_js_1.NextjsClientStorage();
8
- return (0, session_js_1.getUser)(clientStorage);
9
- };
10
- exports.getUser = getUser;
11
- //# sourceMappingURL=GetUser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GetUser.js","sourceRoot":"","sources":["../../../src/nextjs/GetUser.ts"],"names":[],"mappings":";;;AAIA,oDAA0D;AAC1D,wDAAoE;AAE7D,MAAM,OAAO,GAAG,KAAK,IAA0B,EAAE;IACtD,MAAM,aAAa,GAAG,IAAI,gCAAmB,EAAE,CAAC;IAChD,OAAO,IAAA,oBAAc,EAAC,aAAa,CAAC,CAAC;AACvC,CAAC,CAAC;AAHW,QAAA,OAAO,WAGlB","sourcesContent":["/**\n * Used on the server-side to get the user object from the cookie\n */\nimport type { User } from \"@/types.js\";\nimport { NextjsClientStorage } from \"@/nextjs/cookies.js\";\nimport { getUser as getSessionUser } from \"@/shared/lib/session.js\";\n\nexport const getUser = async (): Promise<User | null> => {\n const clientStorage = new NextjsClientStorage();\n return getSessionUser(clientStorage);\n};\n"]}
@@ -1,3 +0,0 @@
1
- declare const useAuth: () => import("../../shared/providers/AuthContext.js").AuthContextType;
2
- export { useAuth };
3
- //# sourceMappingURL=useAuth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../src/reactjs/hooks/useAuth.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,OAAO,mEAQZ,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,15 +0,0 @@
1
- "use strict";
2
- "use client";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.useAuth = void 0;
5
- const react_1 = require("react");
6
- const AuthContext_js_1 = require("../../shared/providers/AuthContext.js");
7
- const useAuth = () => {
8
- const context = (0, react_1.useContext)(AuthContext_js_1.AuthContext);
9
- if (!context) {
10
- throw new Error("useAuth must be used within an AuthProvider");
11
- }
12
- return context;
13
- };
14
- exports.useAuth = useAuth;
15
- //# sourceMappingURL=useAuth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../../../src/reactjs/hooks/useAuth.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AACb,iCAAmC;AACnC,sEAAgE;AAEhE,MAAM,OAAO,GAAG,GAAG,EAAE;IACnB,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,4BAAW,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEO,0BAAO","sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport { AuthContext } from \"@/shared/providers/AuthContext.js\";\n\nconst useAuth = () => {\n const context = useContext(AuthContext);\n\n if (!context) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n\n return context;\n};\n\nexport { useAuth };\n"]}
@@ -1,6 +0,0 @@
1
- /**
2
- * This hook wraps the signIn function from the useUser hook and returns a promise that resolves when the user is signed in.
3
- * It allows integrators to await the completion of the sign-in process,
4
- */
5
- export declare const useSignIn: () => () => Promise<unknown>;
6
- //# sourceMappingURL=useSignIn.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../../src/reactjs/hooks/useSignIn.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,SAAS,8BAgCrB,CAAC"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSignIn = void 0;
4
- const useUser_js_1 = require("./useUser.js");
5
- const react_1 = require("react");
6
- /**
7
- * This hook wraps the signIn function from the useUser hook and returns a promise that resolves when the user is signed in.
8
- * It allows integrators to await the completion of the sign-in process,
9
- */
10
- const useSignIn = () => {
11
- const { signIn: triggerSignIn, user, error } = (0, useUser_js_1.useUser)();
12
- // We'll create exactly ONE promise in the component's lifetime:
13
- const signInPromiseRef = (0, react_1.useRef)(null);
14
- // We'll store its resolve/reject callbacks in here:
15
- const signInCallbacksRef = (0, react_1.useRef)({});
16
- if (!signInPromiseRef.current) {
17
- signInPromiseRef.current = new Promise((resolve, reject) => {
18
- signInCallbacksRef.current.resolve = resolve;
19
- signInCallbacksRef.current.reject = reject;
20
- });
21
- }
22
- // Once user or error changes, fulfill or reject that single promise:
23
- (0, react_1.useEffect)(() => {
24
- if (user) {
25
- signInCallbacksRef.current.resolve?.(user);
26
- }
27
- else if (error) {
28
- signInCallbacksRef.current.reject?.(error);
29
- }
30
- }, [user, error]);
31
- // signIn triggers the login and returns the SAME promise every time:
32
- return (0, react_1.useCallback)(async () => {
33
- await triggerSignIn();
34
- return signInPromiseRef.current;
35
- }, [triggerSignIn]);
36
- };
37
- exports.useSignIn = useSignIn;
38
- //# sourceMappingURL=useSignIn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSignIn.js","sourceRoot":"","sources":["../../../../src/reactjs/hooks/useSignIn.ts"],"names":[],"mappings":";;;AAAA,6CAA0D;AAC1D,iCAAuD;AAEvD;;;GAGG;AACI,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAe,GAAE,CAAC;IAEjE,gEAAgE;IAChE,MAAM,gBAAgB,GAAG,IAAA,cAAM,EAA0B,IAAI,CAAC,CAAC;IAC/D,oDAAoD;IACpD,MAAM,kBAAkB,GAAG,IAAA,cAAM,EAG9B,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC9B,gBAAgB,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,kBAAkB,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7C,kBAAkB,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,IAAI,EAAE,CAAC;YACT,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAElB,qEAAqE;IACrE,OAAO,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,aAAa,EAAE,CAAC;QACtB,OAAO,gBAAgB,CAAC,OAAQ,CAAC;IACnC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACtB,CAAC,CAAC;AAhCW,QAAA,SAAS,aAgCpB","sourcesContent":["import { useUser as useUserInternal } from \"./useUser.js\";\nimport { useCallback, useEffect, useRef } from \"react\";\n\n/**\n * This hook wraps the signIn function from the useUser hook and returns a promise that resolves when the user is signed in.\n * It allows integrators to await the completion of the sign-in process,\n */\nexport const useSignIn = () => {\n const { signIn: triggerSignIn, user, error } = useUserInternal();\n\n // We'll create exactly ONE promise in the component's lifetime:\n const signInPromiseRef = useRef<Promise<unknown> | null>(null);\n // We'll store its resolve/reject callbacks in here:\n const signInCallbacksRef = useRef<{\n resolve?: (val: unknown) => void;\n reject?: (err: unknown) => void;\n }>({});\n\n if (!signInPromiseRef.current) {\n signInPromiseRef.current = new Promise((resolve, reject) => {\n signInCallbacksRef.current.resolve = resolve;\n signInCallbacksRef.current.reject = reject;\n });\n }\n\n // Once user or error changes, fulfill or reject that single promise:\n useEffect(() => {\n if (user) {\n signInCallbacksRef.current.resolve?.(user);\n } else if (error) {\n signInCallbacksRef.current.reject?.(error);\n }\n }, [user, error]);\n\n // signIn triggers the login and returns the SAME promise every time:\n return useCallback(async () => {\n await triggerSignIn();\n return signInPromiseRef.current!;\n }, [triggerSignIn]);\n};\n"]}
@@ -1,3 +0,0 @@
1
- declare const useClientTokenExchangeSession: () => import("../../shared/providers/ClientTokenExchangeSessionProvider.js").ClientTokenExchangeSessionProviderOutput;
2
- export { useClientTokenExchangeSession };
3
- //# sourceMappingURL=useClientTokenExchangeSession.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useClientTokenExchangeSession.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useClientTokenExchangeSession.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,6BAA6B,mHAMlC,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- "use client";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.useClientTokenExchangeSession = void 0;
5
- const react_1 = require("react");
6
- const ClientTokenExchangeSessionProvider_js_1 = require("../../shared/providers/ClientTokenExchangeSessionProvider.js");
7
- // TokenProvider will use this internal context to access session
8
- const useClientTokenExchangeSession = () => {
9
- const context = (0, react_1.useContext)(ClientTokenExchangeSessionProvider_js_1.ClientTokenExchangeSessionContext);
10
- if (!context) {
11
- throw new Error("useSession must be used within an SessionProvider");
12
- }
13
- return context;
14
- };
15
- exports.useClientTokenExchangeSession = useClientTokenExchangeSession;
16
- //# sourceMappingURL=useClientTokenExchangeSession.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useClientTokenExchangeSession.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useClientTokenExchangeSession.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AACb,iCAAmC;AACnC,oHAA6G;AAE7G,iEAAiE;AACjE,MAAM,6BAA6B,GAAG,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,yEAAiC,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEO,sEAA6B","sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport { ClientTokenExchangeSessionContext } from \"@/shared/providers/ClientTokenExchangeSessionProvider.js\";\n\n// TokenProvider will use this internal context to access session\nconst useClientTokenExchangeSession = () => {\n const context = useContext(ClientTokenExchangeSessionContext);\n if (!context) {\n throw new Error(\"useSession must be used within an SessionProvider\");\n }\n return context;\n};\n\nexport { useClientTokenExchangeSession };\n"]}
@@ -1,22 +0,0 @@
1
- import React, { type ReactNode } from "react";
2
- import type { Config, DisplayMode, SessionData } from "../../types.js";
3
- import type { PKCEConsumer } from "../../services/types.js";
4
- export type IframeMode = "embedded" | "modal";
5
- export type AuthProviderProps = {
6
- children: ReactNode;
7
- clientId: string;
8
- nonce?: string;
9
- onSignIn?: (error?: Error) => void;
10
- onSignOut?: () => Promise<void>;
11
- iframeMode?: IframeMode;
12
- config?: Config;
13
- redirectUrl?: string;
14
- displayMode?: DisplayMode;
15
- };
16
- export type InternalAuthProviderProps = AuthProviderProps & {
17
- sessionData?: SessionData;
18
- pkceConsumer?: PKCEConsumer;
19
- };
20
- declare const AuthProvider: ({ children, onSignIn, onSignOut, pkceConsumer, iframeMode, displayMode, }: InternalAuthProviderProps) => React.JSX.Element;
21
- export { AuthProvider };
22
- //# sourceMappingURL=AuthProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/AuthProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAkBxD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAC9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,QAAA,MAAM,YAAY,8EAOf,yBAAyB,sBAsE3B,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,108 +0,0 @@
1
- "use strict";
2
- "use client";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.AuthProvider = void 0;
38
- const react_1 = __importStar(require("react"));
39
- const AuthContext_js_1 = require("../../shared/providers/AuthContext.js");
40
- const useSignIn_js_1 = require("../../shared/hooks/useSignIn.js");
41
- const useIframe_js_1 = require("../../shared/hooks/useIframe.js");
42
- const useCivicAuthConfig_js_1 = require("../../shared/hooks/useCivicAuthConfig.js");
43
- const useSession_js_1 = require("../../shared/hooks/useSession.js");
44
- const IFrameAndLoading_js_1 = require("../../shared/components/IFrameAndLoading.js");
45
- // Global this object setup
46
- let globalThisObject;
47
- if (typeof window !== "undefined") {
48
- globalThisObject = window;
49
- }
50
- else if (typeof global !== "undefined") {
51
- globalThisObject = global;
52
- }
53
- else {
54
- globalThisObject = Function("return this")();
55
- }
56
- globalThisObject.globalThis = globalThisObject;
57
- const AuthProvider = ({ children, onSignIn, onSignOut, pkceConsumer, iframeMode = "modal", displayMode = "iframe", }) => {
58
- const authConfig = (0, useCivicAuthConfig_js_1.useCivicAuthConfig)();
59
- const { redirectUrl } = authConfig || {};
60
- const { iframeRef } = (0, useIframe_js_1.useIframe)();
61
- const { signIn, signOut } = (0, useSignIn_js_1.useSignIn)({
62
- preSignOut: onSignOut,
63
- pkceConsumer,
64
- displayMode: displayMode,
65
- });
66
- const [localSessionData, setLocalSessionData] = (0, react_1.useState)();
67
- const { data: session, error: tokenExchangeError, isLoading: tokenExchangeInProgress, } = (0, useSession_js_1.useSession)();
68
- (0, react_1.useEffect)(() => {
69
- if (session) {
70
- setLocalSessionData(session);
71
- if (session.authenticated) {
72
- onSignIn?.();
73
- }
74
- }
75
- }, [onSignIn, session]);
76
- const isAuthenticated = (0, react_1.useMemo)(() => {
77
- return !!localSessionData?.idToken;
78
- }, [localSessionData]);
79
- (0, react_1.useEffect)(() => {
80
- if (iframeMode === "embedded" &&
81
- redirectUrl &&
82
- !isAuthenticated &&
83
- iframeRef?.current) {
84
- signIn();
85
- }
86
- }, [iframeMode, redirectUrl, isAuthenticated, iframeRef, signIn]);
87
- const isLoading = tokenExchangeInProgress || !authConfig;
88
- const value = (0, react_1.useMemo)(() => ({
89
- isLoading,
90
- error: tokenExchangeError,
91
- signOut,
92
- isAuthenticated,
93
- signIn,
94
- displayMode,
95
- }), [
96
- isLoading,
97
- tokenExchangeError,
98
- isAuthenticated,
99
- signIn,
100
- signOut,
101
- displayMode,
102
- ]);
103
- return (react_1.default.createElement(AuthContext_js_1.AuthContext.Provider, { value: value },
104
- react_1.default.createElement(IFrameAndLoading_js_1.IFrameAndLoading, { error: tokenExchangeError, isLoading: isLoading }),
105
- children));
106
- };
107
- exports.AuthProvider = AuthProvider;
108
- //# sourceMappingURL=AuthProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/providers/AuthProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport type { Config, DisplayMode, SessionData } from \"@/types.js\";\nimport { AuthContext } from \"@/shared/providers/AuthContext.js\";\nimport type { PKCEConsumer } from \"@/services/types.js\";\nimport { useSignIn } from \"@/shared/hooks/useSignIn.js\";\nimport { useIframe } from \"@/shared/hooks/useIframe.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nimport { useSession } from \"@/shared/hooks/useSession.js\";\nimport { IFrameAndLoading } from \"@/shared/components/IFrameAndLoading.js\";\n\n// Global this object setup\nlet globalThisObject;\nif (typeof window !== \"undefined\") {\n globalThisObject = window;\n} else if (typeof global !== \"undefined\") {\n globalThisObject = global;\n} else {\n globalThisObject = Function(\"return this\")();\n}\nglobalThisObject.globalThis = globalThisObject;\n\nexport type IframeMode = \"embedded\" | \"modal\";\nexport type AuthProviderProps = {\n children: ReactNode;\n clientId: string;\n nonce?: string;\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => Promise<void>;\n iframeMode?: IframeMode;\n config?: Config;\n redirectUrl?: string;\n displayMode?: DisplayMode;\n};\n\nexport type InternalAuthProviderProps = AuthProviderProps & {\n sessionData?: SessionData;\n pkceConsumer?: PKCEConsumer;\n};\n\nconst AuthProvider = ({\n children,\n onSignIn,\n onSignOut,\n pkceConsumer,\n iframeMode = \"modal\",\n displayMode = \"iframe\",\n}: InternalAuthProviderProps) => {\n const authConfig = useCivicAuthConfig();\n const { redirectUrl } = authConfig || {};\n const { iframeRef } = useIframe();\n\n const { signIn, signOut } = useSignIn({\n preSignOut: onSignOut,\n pkceConsumer,\n displayMode: displayMode,\n });\n\n const [localSessionData, setLocalSessionData] =\n useState<SessionData | null>();\n\n const {\n data: session,\n error: tokenExchangeError,\n isLoading: tokenExchangeInProgress,\n } = useSession();\n\n useEffect(() => {\n if (session) {\n setLocalSessionData(session);\n if (session.authenticated) {\n onSignIn?.();\n }\n }\n }, [onSignIn, session]);\n\n const isAuthenticated = useMemo(() => {\n return !!localSessionData?.idToken;\n }, [localSessionData]);\n\n useEffect(() => {\n if (\n iframeMode === \"embedded\" &&\n redirectUrl &&\n !isAuthenticated &&\n iframeRef?.current\n ) {\n signIn();\n }\n }, [iframeMode, redirectUrl, isAuthenticated, iframeRef, signIn]);\n\n const isLoading = tokenExchangeInProgress || !authConfig;\n const value = useMemo(\n () => ({\n isLoading,\n error: tokenExchangeError as Error | null,\n signOut,\n isAuthenticated,\n signIn,\n displayMode,\n }),\n [\n isLoading,\n tokenExchangeError,\n isAuthenticated,\n signIn,\n signOut,\n displayMode,\n ],\n );\n\n return (\n <AuthContext.Provider value={value}>\n <IFrameAndLoading error={tokenExchangeError} isLoading={isLoading} />\n {children}\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n"]}
@@ -1,6 +0,0 @@
1
- import React from "react";
2
- import { type AuthProviderProps } from "../../shared/providers/AuthProvider.js";
3
- type CivicAuthProviderProps = Omit<AuthProviderProps, "pkceConsumer">;
4
- declare const CivicAuthProvider: ({ children, ...props }: CivicAuthProviderProps) => React.JSX.Element;
5
- export { CivicAuthProvider, type CivicAuthProviderProps };
6
- //# sourceMappingURL=CivicAuthProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CivicAuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/CivicAuthProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oCAAoC,CAAC;AAY5C,KAAK,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;AAmCtE,QAAA,MAAM,iBAAiB,2BAA4B,sBAAsB,sBAexE,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,CAAC"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- "use client";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.CivicAuthProvider = void 0;
8
- const react_1 = __importDefault(require("react"));
9
- const AuthProvider_js_1 = require("../../shared/providers/AuthProvider.js");
10
- const PKCE_js_1 = require("../../services/PKCE.js");
11
- const UserProvider_js_1 = require("../../shared/providers/UserProvider.js");
12
- const storage_js_1 = require("../../browser/storage.js");
13
- const CivicAuthConfigContext_js_1 = require("../../shared/providers/CivicAuthConfigContext.js");
14
- const IframeProvider_js_1 = require("../../shared/providers/IframeProvider.js");
15
- const ClientTokenExchangeSessionProvider_js_1 = require("../../shared/providers/ClientTokenExchangeSessionProvider.js");
16
- const SessionProvider_js_1 = require("../../shared/providers/SessionProvider.js");
17
- const useClientTokenExchangeSession_js_1 = require("../../shared/hooks/useClientTokenExchangeSession.js");
18
- const TokenProvider_js_1 = require("../../shared/providers/TokenProvider.js");
19
- const useAuth_js_1 = require("../../shared/hooks/useAuth.js");
20
- const WrapperUserProvider = ({ children }) => {
21
- const { signIn, signOut, displayMode } = (0, useAuth_js_1.useAuth)();
22
- return (react_1.default.createElement(UserProvider_js_1.UserProvider, { storage: new storage_js_1.LocalStorageAdapter(), signIn: signIn, signOut: signOut, displayMode: displayMode }, children));
23
- };
24
- const WrapperSessionAuthProvider = ({ children, ...props }) => {
25
- const sessionData = (0, useClientTokenExchangeSession_js_1.useClientTokenExchangeSession)();
26
- return (react_1.default.createElement(SessionProvider_js_1.SessionProvider, { ...sessionData },
27
- react_1.default.createElement(IframeProvider_js_1.IframeProvider, { iframeMode: props.iframeMode },
28
- react_1.default.createElement(AuthProvider_js_1.AuthProvider, { ...props, pkceConsumer: new PKCE_js_1.BrowserPublicClientPKCEProducer() },
29
- react_1.default.createElement(TokenProvider_js_1.TokenProvider, null,
30
- react_1.default.createElement(WrapperUserProvider, null, children))))));
31
- };
32
- const CivicAuthProvider = ({ children, ...props }) => {
33
- return (react_1.default.createElement(CivicAuthConfigContext_js_1.CivicAuthConfigProvider, { oauthServer: props?.config?.oauthServer, clientId: props?.clientId, redirectUrl: props?.redirectUrl, nonce: props?.nonce },
34
- react_1.default.createElement(ClientTokenExchangeSessionProvider_js_1.ClientTokenExchangeSessionProvider, null,
35
- react_1.default.createElement(WrapperSessionAuthProvider, { ...props }, children))));
36
- };
37
- exports.CivicAuthProvider = CivicAuthProvider;
38
- //# sourceMappingURL=CivicAuthProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CivicAuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/providers/CivicAuthProvider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;AACb,kDAA0B;AAC1B,wEAG4C;AAC5C,gDAAqE;AACrE,wEAAkE;AAClE,qDAA2D;AAC3D,4FAAuF;AACvF,4EAAsE;AACtE,oHAA8G;AAC9G,8EAAwE;AACxE,sGAAgG;AAChG,0EAAoE;AACpE,0DAAoD;AAIpD,MAAM,mBAAmB,GAAG,CAAC,EAAE,QAAQ,EAAiC,EAAE,EAAE;IAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAA,oBAAO,GAAE,CAAC;IACnD,OAAO,CACL,8BAAC,8BAAY,IACX,OAAO,EAAE,IAAI,gCAAmB,EAAE,EAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,IAEvB,QAAQ,CACI,CAChB,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,0BAA0B,GAAG,CAAC,EAClC,QAAQ,EACR,GAAG,KAAK,EACe,EAAE,EAAE;IAC3B,MAAM,WAAW,GAAG,IAAA,gEAA6B,GAAE,CAAC;IACpD,OAAO,CACL,8BAAC,oCAAe,OAAK,WAAW;QAC9B,8BAAC,kCAAc,IAAC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC1C,8BAAC,8BAAY,OACP,KAAK,EACT,YAAY,EAAE,IAAI,yCAA+B,EAAE;gBAEnD,8BAAC,gCAAa;oBACZ,8BAAC,mBAAmB,QAAE,QAAQ,CAAuB,CACvC,CACH,CACA,CACD,CACnB,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,iBAAiB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA0B,EAAE,EAAE;IAC3E,OAAO,CACL,8BAAC,mDAAuB,IACtB,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EACvC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EACzB,WAAW,EAAE,KAAK,EAAE,WAAW,EAC/B,KAAK,EAAE,KAAK,EAAE,KAAK;QAEnB,8BAAC,0EAAkC;YACjC,8BAAC,0BAA0B,OAAK,KAAK,IAClC,QAAQ,CACkB,CACM,CACb,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEO,8CAAiB","sourcesContent":["\"use client\";\nimport React from \"react\";\nimport {\n AuthProvider,\n type AuthProviderProps,\n} from \"@/shared/providers/AuthProvider.js\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { UserProvider } from \"@/shared/providers/UserProvider.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { CivicAuthConfigProvider } from \"@/shared/providers/CivicAuthConfigContext.js\";\nimport { IframeProvider } from \"@/shared/providers/IframeProvider.js\";\nimport { ClientTokenExchangeSessionProvider } from \"@/shared/providers/ClientTokenExchangeSessionProvider.js\";\nimport { SessionProvider } from \"@/shared/providers/SessionProvider.js\";\nimport { useClientTokenExchangeSession } from \"@/shared/hooks/useClientTokenExchangeSession.js\";\nimport { TokenProvider } from \"@/shared/providers/TokenProvider.js\";\nimport { useAuth } from \"@/shared/hooks/useAuth.js\";\n\ntype CivicAuthProviderProps = Omit<AuthProviderProps, \"pkceConsumer\">;\n\nconst WrapperUserProvider = ({ children }: { children: React.ReactNode }) => {\n const { signIn, signOut, displayMode } = useAuth();\n return (\n <UserProvider\n storage={new LocalStorageAdapter()}\n signIn={signIn}\n signOut={signOut}\n displayMode={displayMode}\n >\n {children}\n </UserProvider>\n );\n};\nconst WrapperSessionAuthProvider = ({\n children,\n ...props\n}: CivicAuthProviderProps) => {\n const sessionData = useClientTokenExchangeSession();\n return (\n <SessionProvider {...sessionData}>\n <IframeProvider iframeMode={props.iframeMode}>\n <AuthProvider\n {...props}\n pkceConsumer={new BrowserPublicClientPKCEProducer()}\n >\n <TokenProvider>\n <WrapperUserProvider>{children}</WrapperUserProvider>\n </TokenProvider>\n </AuthProvider>\n </IframeProvider>\n </SessionProvider>\n );\n};\nconst CivicAuthProvider = ({ children, ...props }: CivicAuthProviderProps) => {\n return (\n <CivicAuthConfigProvider\n oauthServer={props?.config?.oauthServer}\n clientId={props?.clientId}\n redirectUrl={props?.redirectUrl}\n nonce={props?.nonce}\n >\n <ClientTokenExchangeSessionProvider>\n <WrapperSessionAuthProvider {...props}>\n {children}\n </WrapperSessionAuthProvider>\n </ClientTokenExchangeSessionProvider>\n </CivicAuthConfigProvider>\n );\n};\n\nexport { CivicAuthProvider, type CivicAuthProviderProps };\n"]}
@@ -1,17 +0,0 @@
1
- import type { ReactNode } from "react";
2
- import React from "react";
3
- import type { SessionData } from "../../types.js";
4
- export type ClientTokenExchangeSessionProviderOutput = {
5
- data: SessionData | null;
6
- error: Error | null;
7
- isLoading: boolean;
8
- doTokenExchange: null | ((url: string) => Promise<void>);
9
- };
10
- declare const ClientTokenExchangeSessionContext: React.Context<ClientTokenExchangeSessionProviderOutput>;
11
- type ClientTokenExchangeSessionContextType = {
12
- children: ReactNode;
13
- };
14
- declare const ClientTokenExchangeSessionProvider: ({ children, }: ClientTokenExchangeSessionContextType) => React.JSX.Element;
15
- export type { ClientTokenExchangeSessionContextType as SessionContextType };
16
- export { ClientTokenExchangeSessionProvider, ClientTokenExchangeSessionContext, };
17
- //# sourceMappingURL=ClientTokenExchangeSessionProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClientTokenExchangeSessionProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/ClientTokenExchangeSessionProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAMN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9C,MAAM,MAAM,wCAAwC,GAAG;IACrD,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;CAC1D,CAAC;AAcF,QAAA,MAAM,iCAAiC,yDACkC,CAAC;AAE1E,KAAK,qCAAqC,GAAG;IAC3C,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,kCAAkC,kBAErC,qCAAqC,sBAsIvC,CAAC;AAEF,YAAY,EAAE,qCAAqC,IAAI,kBAAkB,EAAE,CAAC;AAC5E,OAAO,EACL,kCAAkC,EAClC,iCAAiC,GAClC,CAAC"}
@@ -1,168 +0,0 @@
1
- "use strict";
2
- "use client";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.ClientTokenExchangeSessionContext = exports.ClientTokenExchangeSessionProvider = void 0;
38
- const react_1 = __importStar(require("react"));
39
- const AuthenticationService_js_1 = require("../../services/AuthenticationService.js");
40
- const windowUtil_js_1 = require("../../lib/windowUtil.js");
41
- const index_js_1 = require("../../shared/hooks/index.js");
42
- const storage_js_1 = require("../../browser/storage.js");
43
- const defaultSession = {
44
- data: {
45
- authenticated: false,
46
- idToken: undefined,
47
- accessToken: undefined,
48
- displayMode: "iframe",
49
- },
50
- error: null,
51
- isLoading: false,
52
- doTokenExchange: null,
53
- };
54
- // Context for exposing session specifically to the TokenProvider
55
- const ClientTokenExchangeSessionContext = (0, react_1.createContext)(defaultSession);
56
- exports.ClientTokenExchangeSessionContext = ClientTokenExchangeSessionContext;
57
- const ClientTokenExchangeSessionProvider = ({ children, }) => {
58
- const authConfig = (0, index_js_1.useCivicAuthConfig)();
59
- const [authService, setAuthService] = (0, react_1.useState)();
60
- const [error, setError] = (0, react_1.useState)(null);
61
- const [isLoading, setIsLoading] = (0, react_1.useState)(false);
62
- const [session, setSession] = (0, react_1.useState)(null);
63
- const { isWindowFocused } = (0, index_js_1.useWindowFocused)();
64
- const currentUrl = (0, index_js_1.useCurrentUrl)();
65
- (0, index_js_1.useRefresh)(session);
66
- (0, react_1.useEffect)(() => {
67
- if (!currentUrl || !authConfig)
68
- return;
69
- const { redirectUrl, clientId, oauthServer, scopes, logoutRedirectUrl, logoutUrl, } = authConfig;
70
- AuthenticationService_js_1.BrowserAuthenticationService.build({
71
- clientId,
72
- redirectUrl,
73
- logoutRedirectUrl,
74
- logoutUrl,
75
- oauthServer,
76
- scopes,
77
- displayMode: "iframe",
78
- }).then(setAuthService);
79
- }, [currentUrl, authConfig]);
80
- const isInIframe = (0, windowUtil_js_1.isWindowInIframe)(globalThis.window);
81
- const doTokenExchange = (0, react_1.useCallback)(async (inUrl) => {
82
- if (!authService)
83
- return;
84
- const url = new URL(inUrl);
85
- const code = url.searchParams.get("code");
86
- const state = url.searchParams.get("state");
87
- if (code && state) {
88
- try {
89
- setIsLoading(true);
90
- await authService.tokenExchange(code, state);
91
- }
92
- catch (error) {
93
- setError(error);
94
- setSession({ authenticated: false });
95
- }
96
- setIsLoading(false);
97
- }
98
- }, [authService]);
99
- const onSignIn = (0, react_1.useCallback)(async () => {
100
- if (!authService)
101
- return;
102
- const session = await authService.getSessionData();
103
- setSession(session);
104
- }, [authService]);
105
- const onSignOut = (0, react_1.useCallback)(() => {
106
- setSession({ authenticated: false });
107
- }, []);
108
- (0, react_1.useEffect)(() => {
109
- storage_js_1.LocalStorageAdapter.emitter.on("signIn", onSignIn);
110
- storage_js_1.LocalStorageAdapter.emitter.on("signOut", onSignOut);
111
- return () => {
112
- storage_js_1.LocalStorageAdapter.emitter.off("signIn", onSignIn);
113
- storage_js_1.LocalStorageAdapter.emitter.off("signOut", onSignOut);
114
- };
115
- }, [onSignIn, onSignOut]);
116
- (0, react_1.useEffect)(() => {
117
- if (!authConfig) {
118
- setIsLoading(true);
119
- }
120
- else {
121
- setIsLoading(false);
122
- }
123
- }, [authConfig]);
124
- // Handle page load or refocus
125
- (0, react_1.useEffect)(() => {
126
- if (!authConfig || !authService || !currentUrl || isInIframe || isLoading) {
127
- return;
128
- }
129
- const abortController = new AbortController();
130
- const onPageLoad = async () => {
131
- // if we have existing tokens, then validate them and return the session data
132
- // otherwise check if we have a code in the url and exchange it for tokens
133
- // if we have neither, return undefined
134
- const existingSessionData = await authService.validateExistingSession();
135
- if (existingSessionData.authenticated) {
136
- setSession(existingSessionData);
137
- return;
138
- }
139
- if (abortController.signal.aborted ||
140
- !new URL(currentUrl).searchParams.get("code")) {
141
- return;
142
- }
143
- await doTokenExchange(currentUrl);
144
- };
145
- onPageLoad();
146
- return () => {
147
- abortController.abort();
148
- };
149
- }, [
150
- authConfig,
151
- authService,
152
- currentUrl,
153
- doTokenExchange,
154
- isInIframe,
155
- isLoading,
156
- isWindowFocused,
157
- session?.authenticated,
158
- ]);
159
- const value = (0, react_1.useMemo)(() => ({
160
- data: session,
161
- error,
162
- isLoading,
163
- doTokenExchange: authService ? doTokenExchange : null,
164
- }), [session, error, isLoading, authService, doTokenExchange]);
165
- return (react_1.default.createElement(ClientTokenExchangeSessionContext.Provider, { value: value }, children));
166
- };
167
- exports.ClientTokenExchangeSessionProvider = ClientTokenExchangeSessionProvider;
168
- //# sourceMappingURL=ClientTokenExchangeSessionProvider.js.map