@civic/auth 0.6.0 → 0.6.1-beta.1

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 (74) hide show
  1. package/dist/shared/components/CivicAuthIframeContainer.js +1 -1
  2. package/dist/shared/components/CivicAuthIframeContainer.js.map +1 -1
  3. package/dist/shared/lib/BrowserAuthenticationRefresher.d.ts +7 -1
  4. package/dist/shared/lib/BrowserAuthenticationRefresher.d.ts.map +1 -1
  5. package/dist/shared/lib/BrowserAuthenticationRefresher.js +15 -2
  6. package/dist/shared/lib/BrowserAuthenticationRefresher.js.map +1 -1
  7. package/dist/shared/lib/util.d.ts +1 -1
  8. package/dist/shared/lib/util.d.ts.map +1 -1
  9. package/dist/shared/lib/util.js +6 -1
  10. package/dist/shared/lib/util.js.map +1 -1
  11. package/dist/shared/version.d.ts +1 -1
  12. package/dist/shared/version.d.ts.map +1 -1
  13. package/dist/shared/version.js +1 -1
  14. package/dist/shared/version.js.map +1 -1
  15. package/dist/vanillajs/auth/CivicAuth.d.ts +63 -5
  16. package/dist/vanillajs/auth/CivicAuth.d.ts.map +1 -1
  17. package/dist/vanillajs/auth/CivicAuth.js +202 -26
  18. package/dist/vanillajs/auth/CivicAuth.js.map +1 -1
  19. package/dist/vanillajs/auth/OAuthCallbackHandler.d.ts +90 -0
  20. package/dist/vanillajs/auth/OAuthCallbackHandler.d.ts.map +1 -0
  21. package/dist/vanillajs/auth/OAuthCallbackHandler.js +143 -0
  22. package/dist/vanillajs/auth/OAuthCallbackHandler.js.map +1 -0
  23. package/dist/vanillajs/auth/SessionManager.d.ts +40 -9
  24. package/dist/vanillajs/auth/SessionManager.d.ts.map +1 -1
  25. package/dist/vanillajs/auth/SessionManager.js +96 -61
  26. package/dist/vanillajs/auth/SessionManager.js.map +1 -1
  27. package/dist/vanillajs/auth/TokenRefresher.d.ts +54 -0
  28. package/dist/vanillajs/auth/TokenRefresher.d.ts.map +1 -0
  29. package/dist/vanillajs/auth/TokenRefresher.js +166 -0
  30. package/dist/vanillajs/auth/TokenRefresher.js.map +1 -0
  31. package/dist/vanillajs/iframe/IframeManager.d.ts +82 -0
  32. package/dist/vanillajs/iframe/IframeManager.d.ts.map +1 -0
  33. package/dist/vanillajs/iframe/IframeManager.js +487 -0
  34. package/dist/vanillajs/iframe/IframeManager.js.map +1 -0
  35. package/dist/vanillajs/iframe/IframeResizer.d.ts +15 -0
  36. package/dist/vanillajs/iframe/IframeResizer.d.ts.map +1 -0
  37. package/dist/vanillajs/iframe/IframeResizer.js +127 -0
  38. package/dist/vanillajs/iframe/IframeResizer.js.map +1 -0
  39. package/dist/vanillajs/index.d.ts +8 -7
  40. package/dist/vanillajs/index.d.ts.map +1 -1
  41. package/dist/vanillajs/index.js +10 -7
  42. package/dist/vanillajs/index.js.map +1 -1
  43. package/dist/vanillajs/types/index.d.ts +2 -2
  44. package/dist/vanillajs/types/index.d.ts.map +1 -1
  45. package/dist/vanillajs/types/index.js.map +1 -1
  46. package/dist/vanillajs/ui/LoadingComponents.d.ts +51 -0
  47. package/dist/vanillajs/ui/LoadingComponents.d.ts.map +1 -0
  48. package/dist/vanillajs/ui/LoadingComponents.js +363 -0
  49. package/dist/vanillajs/ui/LoadingComponents.js.map +1 -0
  50. package/package.json +1 -1
  51. package/dist/vanillajs/iframe/domUtils.d.ts +0 -4
  52. package/dist/vanillajs/iframe/domUtils.d.ts.map +0 -1
  53. package/dist/vanillajs/iframe/domUtils.js +0 -25
  54. package/dist/vanillajs/iframe/domUtils.js.map +0 -1
  55. package/dist/vanillajs/storage/BrowserCookieStorageAdapter.d.ts +0 -19
  56. package/dist/vanillajs/storage/BrowserCookieStorageAdapter.d.ts.map +0 -1
  57. package/dist/vanillajs/storage/BrowserCookieStorageAdapter.js +0 -101
  58. package/dist/vanillajs/storage/BrowserCookieStorageAdapter.js.map +0 -1
  59. package/dist/vanillajs/storage/BrowserLocalStorageAdapter.d.ts +0 -9
  60. package/dist/vanillajs/storage/BrowserLocalStorageAdapter.d.ts.map +0 -1
  61. package/dist/vanillajs/storage/BrowserLocalStorageAdapter.js +0 -36
  62. package/dist/vanillajs/storage/BrowserLocalStorageAdapter.js.map +0 -1
  63. package/dist/vanillajs/storage/InMemoryStorageAdapter.d.ts +0 -9
  64. package/dist/vanillajs/storage/InMemoryStorageAdapter.d.ts.map +0 -1
  65. package/dist/vanillajs/storage/InMemoryStorageAdapter.js +0 -16
  66. package/dist/vanillajs/storage/InMemoryStorageAdapter.js.map +0 -1
  67. package/dist/vanillajs/storage/StorageAdapter.d.ts +0 -15
  68. package/dist/vanillajs/storage/StorageAdapter.d.ts.map +0 -1
  69. package/dist/vanillajs/storage/StorageAdapter.js +0 -16
  70. package/dist/vanillajs/storage/StorageAdapter.js.map +0 -1
  71. package/dist/vanillajs/utils/page-handlers.d.ts +0 -29
  72. package/dist/vanillajs/utils/page-handlers.d.ts.map +0 -1
  73. package/dist/vanillajs/utils/page-handlers.js +0 -165
  74. package/dist/vanillajs/utils/page-handlers.js.map +0 -1
@@ -0,0 +1,127 @@
1
+ // Message types for communication between parent and child
2
+ import { createLogger } from "../utils/logger.js";
3
+ var MessageType;
4
+ (function (MessageType) {
5
+ MessageType["RESIZE"] = "civic-iframe-resize";
6
+ MessageType["READY"] = "civic-iframe-ready";
7
+ })(MessageType || (MessageType = {}));
8
+ export class CivicIframeResizer {
9
+ iframe;
10
+ container;
11
+ logger;
12
+ messageListener = null;
13
+ requestSizeTimeouts = [];
14
+ constructor(iframe, container) {
15
+ this.iframe = iframe;
16
+ this.container = container;
17
+ this.logger = createLogger("iframe");
18
+ this.initializeResizer();
19
+ }
20
+ initializeResizer() {
21
+ this.logger.debug("Initializing Civic iframe resizer");
22
+ // Set up message listener for iframe resize messages
23
+ this.messageListener = (event) => {
24
+ this.handleMessage(event);
25
+ };
26
+ window.addEventListener("message", this.messageListener);
27
+ // Request size from child iframe after it loads
28
+ this.iframe.addEventListener("load", () => {
29
+ this.logger.debug("Iframe loaded, requesting size from child");
30
+ this.requestSizeFromChild();
31
+ // Schedule multiple size requests to ensure we get the correct height
32
+ const intervals = [100, 500, 1000, 2000, 3000];
33
+ intervals.forEach((interval) => {
34
+ const timeoutId = window.setTimeout(() => {
35
+ this.requestSizeFromChild();
36
+ }, interval);
37
+ this.requestSizeTimeouts.push(timeoutId);
38
+ });
39
+ });
40
+ }
41
+ handleMessage(event) {
42
+ try {
43
+ const message = event.data;
44
+ // Only handle messages from our iframe
45
+ if (!this.iframe.contentWindow ||
46
+ event.source !== this.iframe.contentWindow) {
47
+ return;
48
+ }
49
+ this.logger.debug("Received message from iframe:", message);
50
+ // Handle ready message
51
+ if (message.type === MessageType.READY) {
52
+ this.logger.debug("Iframe child is ready");
53
+ this.requestSizeFromChild();
54
+ }
55
+ // Handle resize message
56
+ if (message.type === MessageType.RESIZE &&
57
+ typeof message.height === "number") {
58
+ this.logger.debug("Resizing iframe to height:", message.height);
59
+ this.resizeIframe(message.height, message.suggestedAnimationDuration);
60
+ }
61
+ }
62
+ catch (error) {
63
+ this.logger.debug("Error processing iframe message:", error);
64
+ }
65
+ }
66
+ requestSizeFromChild() {
67
+ if (this.iframe.contentWindow) {
68
+ try {
69
+ this.logger.debug("Requesting size from iframe child");
70
+ this.iframe.contentWindow.postMessage({ type: "request-size" }, "*");
71
+ }
72
+ catch (error) {
73
+ this.logger.debug("Error requesting size from iframe:", error);
74
+ }
75
+ }
76
+ }
77
+ resizeIframe(height, animationDuration) {
78
+ // Ensure minimum height
79
+ const minHeight = 200;
80
+ const finalHeight = Math.max(height, minHeight);
81
+ // Apply height to iframe and ensure no overflow
82
+ this.iframe.style.height = `${finalHeight}px`;
83
+ this.iframe.style.maxHeight = `${finalHeight}px`;
84
+ this.iframe.style.overflow = "hidden";
85
+ this.iframe.style.overflowX = "hidden";
86
+ this.iframe.style.overflowY = "hidden";
87
+ // Apply transition if animation duration is suggested
88
+ if (animationDuration) {
89
+ this.iframe.style.transition = `height ${animationDuration}ms ease`;
90
+ }
91
+ // Try to inject additional CSS to prevent scrollbars after resize
92
+ try {
93
+ const iframeDoc = this.iframe.contentDocument || this.iframe.contentWindow?.document;
94
+ if (iframeDoc && iframeDoc.body) {
95
+ iframeDoc.body.style.overflow = "hidden";
96
+ iframeDoc.body.style.overflowX = "hidden";
97
+ iframeDoc.body.style.overflowY = "hidden";
98
+ if (iframeDoc.documentElement) {
99
+ iframeDoc.documentElement.style.overflow = "hidden";
100
+ iframeDoc.documentElement.style.overflowX = "hidden";
101
+ iframeDoc.documentElement.style.overflowY = "hidden";
102
+ }
103
+ }
104
+ }
105
+ catch (error) {
106
+ this.logger.debug("Could not apply overflow styles to iframe content (likely cross-origin):", error);
107
+ }
108
+ this.logger.debug(`Iframe resized to ${finalHeight}px`);
109
+ }
110
+ cleanup() {
111
+ this.logger.debug("Cleaning up iframe resizer");
112
+ if (this.messageListener) {
113
+ window.removeEventListener("message", this.messageListener);
114
+ this.messageListener = null;
115
+ }
116
+ // Clear any pending timeouts
117
+ this.requestSizeTimeouts.forEach((timeoutId) => {
118
+ window.clearTimeout(timeoutId);
119
+ });
120
+ this.requestSizeTimeouts = [];
121
+ }
122
+ resize() {
123
+ // Request size from child iframe
124
+ this.requestSizeFromChild();
125
+ }
126
+ }
127
+ //# sourceMappingURL=IframeResizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IframeResizer.js","sourceRoot":"","sources":["../../../src/vanillajs/iframe/IframeResizer.ts"],"names":[],"mappings":"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","sourcesContent":["// Message types for communication between parent and child\nimport { createLogger } from \"../utils/logger.js\";\n\nenum MessageType {\n RESIZE = \"civic-iframe-resize\",\n READY = \"civic-iframe-ready\",\n}\n\ninterface IframeMessage {\n type: MessageType;\n height?: number;\n messageCount?: number;\n suggestedAnimationDuration?: number;\n}\n\nexport class CivicIframeResizer {\n private iframe: HTMLIFrameElement;\n private container: HTMLElement;\n private logger: ReturnType<typeof createLogger>;\n private messageListener: ((event: MessageEvent) => void) | null = null;\n private requestSizeTimeouts: number[] = [];\n\n constructor(iframe: HTMLIFrameElement, container: HTMLElement) {\n this.iframe = iframe;\n this.container = container;\n this.logger = createLogger(\"iframe\");\n\n this.initializeResizer();\n }\n\n private initializeResizer(): void {\n this.logger.debug(\"Initializing Civic iframe resizer\");\n\n // Set up message listener for iframe resize messages\n this.messageListener = (event: MessageEvent) => {\n this.handleMessage(event);\n };\n\n window.addEventListener(\"message\", this.messageListener);\n\n // Request size from child iframe after it loads\n this.iframe.addEventListener(\"load\", () => {\n this.logger.debug(\"Iframe loaded, requesting size from child\");\n this.requestSizeFromChild();\n\n // Schedule multiple size requests to ensure we get the correct height\n const intervals = [100, 500, 1000, 2000, 3000];\n intervals.forEach((interval) => {\n const timeoutId = window.setTimeout(() => {\n this.requestSizeFromChild();\n }, interval);\n this.requestSizeTimeouts.push(timeoutId);\n });\n });\n }\n\n private handleMessage(event: MessageEvent): void {\n try {\n const message = event.data as IframeMessage;\n\n // Only handle messages from our iframe\n if (\n !this.iframe.contentWindow ||\n event.source !== this.iframe.contentWindow\n ) {\n return;\n }\n\n this.logger.debug(\"Received message from iframe:\", message);\n\n // Handle ready message\n if (message.type === MessageType.READY) {\n this.logger.debug(\"Iframe child is ready\");\n this.requestSizeFromChild();\n }\n\n // Handle resize message\n if (\n message.type === MessageType.RESIZE &&\n typeof message.height === \"number\"\n ) {\n this.logger.debug(\"Resizing iframe to height:\", message.height);\n this.resizeIframe(message.height, message.suggestedAnimationDuration);\n }\n } catch (error) {\n this.logger.debug(\"Error processing iframe message:\", error);\n }\n }\n\n private requestSizeFromChild(): void {\n if (this.iframe.contentWindow) {\n try {\n this.logger.debug(\"Requesting size from iframe child\");\n this.iframe.contentWindow.postMessage({ type: \"request-size\" }, \"*\");\n } catch (error) {\n this.logger.debug(\"Error requesting size from iframe:\", error);\n }\n }\n }\n\n private resizeIframe(height: number, animationDuration?: number): void {\n // Ensure minimum height\n const minHeight = 200;\n const finalHeight = Math.max(height, minHeight);\n\n // Apply height to iframe and ensure no overflow\n this.iframe.style.height = `${finalHeight}px`;\n this.iframe.style.maxHeight = `${finalHeight}px`;\n this.iframe.style.overflow = \"hidden\";\n this.iframe.style.overflowX = \"hidden\";\n this.iframe.style.overflowY = \"hidden\";\n\n // Apply transition if animation duration is suggested\n if (animationDuration) {\n this.iframe.style.transition = `height ${animationDuration}ms ease`;\n }\n\n // Try to inject additional CSS to prevent scrollbars after resize\n try {\n const iframeDoc =\n this.iframe.contentDocument || this.iframe.contentWindow?.document;\n if (iframeDoc && iframeDoc.body) {\n iframeDoc.body.style.overflow = \"hidden\";\n iframeDoc.body.style.overflowX = \"hidden\";\n iframeDoc.body.style.overflowY = \"hidden\";\n if (iframeDoc.documentElement) {\n iframeDoc.documentElement.style.overflow = \"hidden\";\n iframeDoc.documentElement.style.overflowX = \"hidden\";\n iframeDoc.documentElement.style.overflowY = \"hidden\";\n }\n }\n } catch (error) {\n this.logger.debug(\n \"Could not apply overflow styles to iframe content (likely cross-origin):\",\n error,\n );\n }\n\n this.logger.debug(`Iframe resized to ${finalHeight}px`);\n }\n\n public cleanup(): void {\n this.logger.debug(\"Cleaning up iframe resizer\");\n\n if (this.messageListener) {\n window.removeEventListener(\"message\", this.messageListener);\n this.messageListener = null;\n }\n\n // Clear any pending timeouts\n this.requestSizeTimeouts.forEach((timeoutId) => {\n window.clearTimeout(timeoutId);\n });\n this.requestSizeTimeouts = [];\n }\n\n public resize(): void {\n // Request size from child iframe\n this.requestSizeFromChild();\n }\n}\n"]}
@@ -1,16 +1,17 @@
1
1
  export * from "./auth/AuthenticationEvents.js";
2
2
  export * from "./auth/SessionManager.js";
3
+ export * from "./auth/TokenRefresher.js";
3
4
  export * from "./types/index.js";
4
- export * from "./storage/StorageAdapter.js";
5
- export * from "./storage/InMemoryStorageAdapter.js";
6
- export * from "./storage/BrowserLocalStorageAdapter.js";
7
- export * from "./storage/BrowserCookieStorageAdapter.js";
8
5
  export * from "./services/ApiService.js";
9
6
  export * from "./auth/CivicAuth.js";
10
7
  export { AuthenticationEvents } from "./auth/AuthenticationEvents.js";
11
8
  export { AuthEvent } from "./types/index.js";
12
- export { BrowserCookieStorageAdapter } from "./storage/BrowserCookieStorageAdapter.js";
13
- export { type StorageAdapter } from "./storage/StorageAdapter.js";
14
- export { handleOAuthRedirectPage, type HandleOAuthRedirectConfig, } from "./utils/page-handlers.js";
9
+ export { handleOAuthRedirectPage, storeTokens, type HandleOAuthRedirectConfig, } from "./auth/OAuthCallbackHandler.js";
10
+ export { storeTokens as sharedStoreTokens, retrieveTokens, clearTokens, } from "../shared/lib/util.js";
11
+ export { getUser, getTokens, clearAuthCookies } from "../shared/lib/session.js";
12
+ export { LocalStorageAdapter } from "../browser/storage.js";
13
+ export { createShimmerLoader, createIframeShimmerLoader, createSkeletonLoader, createButtonContentLoader, createCloseIcon, createCloseButton, cleanupLoadingStyles, type ShimmerLoaderOptions, } from "./ui/LoadingComponents.js";
14
+ export { BrowserCookieStorage } from "../shared/lib/BrowserCookieStorage.js";
15
+ export type { AuthStorage } from "../types.js";
15
16
  export type { User, Session } from "./types/index.js";
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vanillajs/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,uBAAuB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vanillajs/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,KAAK,yBAAyB,GAC/B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,WAAW,IAAI,iBAAiB,EAChC,cAAc,EACd,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAG7E,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,15 +1,18 @@
1
1
  export * from "./auth/AuthenticationEvents.js";
2
2
  export * from "./auth/SessionManager.js";
3
+ export * from "./auth/TokenRefresher.js";
3
4
  export * from "./types/index.js";
4
- export * from "./storage/StorageAdapter.js";
5
- export * from "./storage/InMemoryStorageAdapter.js";
6
- export * from "./storage/BrowserLocalStorageAdapter.js";
7
- export * from "./storage/BrowserCookieStorageAdapter.js";
8
5
  export * from "./services/ApiService.js";
9
6
  export * from "./auth/CivicAuth.js";
10
7
  export { AuthenticationEvents } from "./auth/AuthenticationEvents.js";
11
8
  export { AuthEvent } from "./types/index.js";
12
- export { BrowserCookieStorageAdapter } from "./storage/BrowserCookieStorageAdapter.js";
13
- export {} from "./storage/StorageAdapter.js";
14
- export { handleOAuthRedirectPage, } from "./utils/page-handlers.js";
9
+ export { handleOAuthRedirectPage, storeTokens, } from "./auth/OAuthCallbackHandler.js";
10
+ // Re-export shared utilities for convenience
11
+ export { storeTokens as sharedStoreTokens, retrieveTokens, clearTokens, } from "../shared/lib/util.js";
12
+ export { getUser, getTokens, clearAuthCookies } from "../shared/lib/session.js";
13
+ // Re-export shared storage adapters - these are the only storage implementations needed
14
+ export { LocalStorageAdapter } from "../browser/storage.js";
15
+ // Export UI components for loading states
16
+ export { createShimmerLoader, createIframeShimmerLoader, createSkeletonLoader, createButtonContentLoader, createCloseIcon, createCloseButton, cleanupLoadingStyles, } from "./ui/LoadingComponents.js";
17
+ export { BrowserCookieStorage } from "../shared/lib/BrowserCookieStorage.js";
15
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vanillajs/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAuB,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,uBAAuB,GAExB,MAAM,0BAA0B,CAAC","sourcesContent":["export * from \"./auth/AuthenticationEvents.js\";\nexport * from \"./auth/SessionManager.js\";\nexport * from \"./types/index.js\";\nexport * from \"./storage/StorageAdapter.js\";\nexport * from \"./storage/InMemoryStorageAdapter.js\";\nexport * from \"./storage/BrowserLocalStorageAdapter.js\";\nexport * from \"./storage/BrowserCookieStorageAdapter.js\";\nexport * from \"./services/ApiService.js\";\nexport * from \"./auth/CivicAuth.js\";\n\nexport { AuthenticationEvents } from \"./auth/AuthenticationEvents.js\";\nexport { AuthEvent } from \"./types/index.js\";\nexport { BrowserCookieStorageAdapter } from \"./storage/BrowserCookieStorageAdapter.js\";\nexport { type StorageAdapter } from \"./storage/StorageAdapter.js\";\nexport {\n handleOAuthRedirectPage,\n type HandleOAuthRedirectConfig,\n} from \"./utils/page-handlers.js\";\n\nexport type { User, Session } from \"./types/index.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vanillajs/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,WAAW,GAEZ,MAAM,gCAAgC,CAAC;AAExC,6CAA6C;AAC7C,OAAO,EACL,WAAW,IAAI,iBAAiB,EAChC,cAAc,EACd,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,wFAAwF;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,0CAA0C;AAC1C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC","sourcesContent":["export * from \"./auth/AuthenticationEvents.js\";\nexport * from \"./auth/SessionManager.js\";\nexport * from \"./auth/TokenRefresher.js\";\nexport * from \"./types/index.js\";\nexport * from \"./services/ApiService.js\";\nexport * from \"./auth/CivicAuth.js\";\n\nexport { AuthenticationEvents } from \"./auth/AuthenticationEvents.js\";\nexport { AuthEvent } from \"./types/index.js\";\nexport {\n handleOAuthRedirectPage,\n storeTokens,\n type HandleOAuthRedirectConfig,\n} from \"./auth/OAuthCallbackHandler.js\";\n\n// Re-export shared utilities for convenience\nexport {\n storeTokens as sharedStoreTokens,\n retrieveTokens,\n clearTokens,\n} from \"../shared/lib/util.js\";\nexport { getUser, getTokens, clearAuthCookies } from \"../shared/lib/session.js\";\n\n// Re-export shared storage adapters - these are the only storage implementations needed\nexport { LocalStorageAdapter } from \"../browser/storage.js\";\n\n// Export UI components for loading states\nexport {\n createShimmerLoader,\n createIframeShimmerLoader,\n createSkeletonLoader,\n createButtonContentLoader,\n createCloseIcon,\n createCloseButton,\n cleanupLoadingStyles,\n type ShimmerLoaderOptions,\n} from \"./ui/LoadingComponents.js\";\nexport { BrowserCookieStorage } from \"../shared/lib/BrowserCookieStorage.js\";\n\n// Re-export shared types\nexport type { AuthStorage } from \"../types.js\";\nexport type { User, Session } from \"./types/index.js\";\n"]}
@@ -1,8 +1,8 @@
1
1
  import type { User } from "../../types.js";
2
2
  export type { User };
3
3
  export interface Session {
4
- accessToken: string;
5
- idToken?: string;
4
+ accessToken?: string;
5
+ idToken: string;
6
6
  refreshToken?: string;
7
7
  user?: User;
8
8
  expiresAt?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vanillajs/types/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,YAAY,EAAE,IAAI,EAAE,CAAC;AAErB,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CAEpB;AAED,oBAAY,SAAS;IACnB,eAAe,kBAAkB;IACjC,gBAAgB,mBAAmB;IACnC,aAAa,gBAAgB;IAC7B,gBAAgB,mBAAmB;IACnC,iBAAiB,oBAAoB;IACrC,cAAc,iBAAiB;IAC/B,qBAAqB,wBAAwB;IAC7C,sBAAsB,yBAAyB;IAC/C,mBAAmB,sBAAsB;IACzC,oBAAoB,uBAAuB;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vanillajs/types/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,YAAY,EAAE,IAAI,EAAE,CAAC;AAErB,MAAM,WAAW,OAAO;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CAEpB;AAED,oBAAY,SAAS;IACnB,eAAe,kBAAkB;IACjC,gBAAgB,mBAAmB;IACnC,aAAa,gBAAgB;IAC7B,gBAAgB,mBAAmB;IACnC,iBAAiB,oBAAoB;IACrC,cAAc,iBAAiB;IAC/B,qBAAqB,wBAAwB;IAC7C,sBAAsB,yBAAyB;IAC/C,mBAAmB,sBAAsB;IACzC,oBAAoB,uBAAuB;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vanillajs/types/index.ts"],"names":[],"mappings":"AAcA,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;IAC7B,gDAAmC,CAAA;IACnC,kDAAqC,CAAA;IACrC,4CAA+B,CAAA;IAC/B,0DAA6C,CAAA;IAC7C,4DAA+C,CAAA;IAC/C,sDAAyC,CAAA;IACzC,wDAA2C,CAAA;AAC7C,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB","sourcesContent":["// Export other type files as they are created\nimport type { User } from \"../../types.js\";\n\nexport type { User };\n\nexport interface Session {\n accessToken: string;\n idToken?: string;\n refreshToken?: string;\n user?: User;\n expiresAt?: number; // Timestamp in milliseconds\n // any other session-related data\n}\n\nexport enum AuthEvent {\n SIGN_IN_STARTED = \"signInStarted\",\n SIGN_IN_COMPLETE = \"signInComplete\",\n SIGN_IN_ERROR = \"signInError\",\n SIGN_OUT_STARTED = \"signOutStarted\",\n SIGN_OUT_COMPLETE = \"signOutComplete\",\n SIGN_OUT_ERROR = \"signOutError\",\n TOKEN_REFRESH_STARTED = \"tokenRefreshStarted\",\n TOKEN_REFRESH_COMPLETE = \"tokenRefreshComplete\",\n TOKEN_REFRESH_ERROR = \"tokenRefreshError\",\n USER_SESSION_CHANGED = \"userSessionChanged\",\n}\n\nexport interface AuthResult {\n /** User information returned from authentication */\n user?: User;\n /** Signal text indicating the result */\n signalText?: string;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vanillajs/types/index.ts"],"names":[],"mappings":"AAcA,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;IAC7B,gDAAmC,CAAA;IACnC,kDAAqC,CAAA;IACrC,4CAA+B,CAAA;IAC/B,0DAA6C,CAAA;IAC7C,4DAA+C,CAAA;IAC/C,sDAAyC,CAAA;IACzC,wDAA2C,CAAA;AAC7C,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB","sourcesContent":["// Export other type files as they are created\nimport type { User } from \"../../types.js\";\n\nexport type { User };\n\nexport interface Session {\n accessToken?: string;\n idToken: string;\n refreshToken?: string;\n user?: User;\n expiresAt?: number; // Timestamp in milliseconds\n // any other session-related data\n}\n\nexport enum AuthEvent {\n SIGN_IN_STARTED = \"signInStarted\",\n SIGN_IN_COMPLETE = \"signInComplete\",\n SIGN_IN_ERROR = \"signInError\",\n SIGN_OUT_STARTED = \"signOutStarted\",\n SIGN_OUT_COMPLETE = \"signOutComplete\",\n SIGN_OUT_ERROR = \"signOutError\",\n TOKEN_REFRESH_STARTED = \"tokenRefreshStarted\",\n TOKEN_REFRESH_COMPLETE = \"tokenRefreshComplete\",\n TOKEN_REFRESH_ERROR = \"tokenRefreshError\",\n USER_SESSION_CHANGED = \"userSessionChanged\",\n}\n\nexport interface AuthResult {\n /** User information returned from authentication */\n user?: User;\n /** Signal text indicating the result */\n signalText?: string;\n}\n"]}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * UI Components for Civic Auth Vanilla JS implementation
3
+ * Converted from React components to vanilla DOM elements
4
+ */
5
+ export interface ShimmerLoaderOptions {
6
+ backgroundColor?: string;
7
+ width?: string;
8
+ height?: string;
9
+ borderRadius?: string;
10
+ }
11
+ /**
12
+ * Creates a horizontal shimmer loader element (SVG-based)
13
+ * Equivalent to the SVGLoading component from React implementation
14
+ */
15
+ export declare function createShimmerLoader(options?: ShimmerLoaderOptions): HTMLElement;
16
+ /**
17
+ * Creates a shimmer loader for iframe loading states
18
+ * Positioned to center within an iframe container
19
+ */
20
+ export declare function createIframeShimmerLoader(backgroundColor?: string, maxWidth?: string): HTMLElement;
21
+ /**
22
+ * Creates a simple horizontal skeleton loader (CSS-based alternative)
23
+ * Lighter weight alternative to SVG shimmer
24
+ */
25
+ export declare function createSkeletonLoader(options?: ShimmerLoaderOptions): HTMLElement;
26
+ /**
27
+ * Creates a button content loader that hides content and shows a skeleton
28
+ * Equivalent to ButtonContentOrLoader from React implementation
29
+ */
30
+ export declare function createButtonContentLoader(content: string | HTMLElement): {
31
+ container: HTMLElement;
32
+ showLoader: () => void;
33
+ hideLoader: () => void;
34
+ setContent: (newContent: string | HTMLElement) => void;
35
+ };
36
+ /**
37
+ * Creates a close icon (X) SVG element
38
+ * Equivalent to the CloseIcon component from React implementation
39
+ */
40
+ export declare function createCloseIcon(): SVGElement;
41
+ /**
42
+ * Creates a close button for modal iframes
43
+ * Positioned absolutely in the top-right corner
44
+ */
45
+ export declare function createCloseButton(onClose: () => void): HTMLButtonElement;
46
+ /**
47
+ * Utility function to remove all civic auth loading styles from the document
48
+ * Useful for cleanup
49
+ */
50
+ export declare function cleanupLoadingStyles(): void;
51
+ //# sourceMappingURL=LoadingComponents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingComponents.d.ts","sourceRoot":"","sources":["../../../src/vanillajs/ui/LoadingComponents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2BH,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,WAAW,CAmIb;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,eAAe,SAAY,EAC3B,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,CAoCb;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,oBAAyB,GACjC,WAAW,CAqCb;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG;IACxE,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,KAAK,IAAI,CAAC;CACxD,CA0EA;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,UAAU,CA8B5C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,iBAAiB,CAwCxE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAW3C"}