@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.
- package/dist/shared/components/CivicAuthIframeContainer.js +1 -1
- package/dist/shared/components/CivicAuthIframeContainer.js.map +1 -1
- package/dist/shared/lib/BrowserAuthenticationRefresher.d.ts +7 -1
- package/dist/shared/lib/BrowserAuthenticationRefresher.d.ts.map +1 -1
- package/dist/shared/lib/BrowserAuthenticationRefresher.js +15 -2
- package/dist/shared/lib/BrowserAuthenticationRefresher.js.map +1 -1
- package/dist/shared/lib/util.d.ts +1 -1
- package/dist/shared/lib/util.d.ts.map +1 -1
- package/dist/shared/lib/util.js +6 -1
- package/dist/shared/lib/util.js.map +1 -1
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/version.d.ts.map +1 -1
- package/dist/shared/version.js +1 -1
- package/dist/shared/version.js.map +1 -1
- package/dist/vanillajs/auth/CivicAuth.d.ts +63 -5
- package/dist/vanillajs/auth/CivicAuth.d.ts.map +1 -1
- package/dist/vanillajs/auth/CivicAuth.js +202 -26
- package/dist/vanillajs/auth/CivicAuth.js.map +1 -1
- package/dist/vanillajs/auth/OAuthCallbackHandler.d.ts +90 -0
- package/dist/vanillajs/auth/OAuthCallbackHandler.d.ts.map +1 -0
- package/dist/vanillajs/auth/OAuthCallbackHandler.js +143 -0
- package/dist/vanillajs/auth/OAuthCallbackHandler.js.map +1 -0
- package/dist/vanillajs/auth/SessionManager.d.ts +40 -9
- package/dist/vanillajs/auth/SessionManager.d.ts.map +1 -1
- package/dist/vanillajs/auth/SessionManager.js +96 -61
- package/dist/vanillajs/auth/SessionManager.js.map +1 -1
- package/dist/vanillajs/auth/TokenRefresher.d.ts +54 -0
- package/dist/vanillajs/auth/TokenRefresher.d.ts.map +1 -0
- package/dist/vanillajs/auth/TokenRefresher.js +166 -0
- package/dist/vanillajs/auth/TokenRefresher.js.map +1 -0
- package/dist/vanillajs/iframe/IframeManager.d.ts +82 -0
- package/dist/vanillajs/iframe/IframeManager.d.ts.map +1 -0
- package/dist/vanillajs/iframe/IframeManager.js +487 -0
- package/dist/vanillajs/iframe/IframeManager.js.map +1 -0
- package/dist/vanillajs/iframe/IframeResizer.d.ts +15 -0
- package/dist/vanillajs/iframe/IframeResizer.d.ts.map +1 -0
- package/dist/vanillajs/iframe/IframeResizer.js +127 -0
- package/dist/vanillajs/iframe/IframeResizer.js.map +1 -0
- package/dist/vanillajs/index.d.ts +8 -7
- package/dist/vanillajs/index.d.ts.map +1 -1
- package/dist/vanillajs/index.js +10 -7
- package/dist/vanillajs/index.js.map +1 -1
- package/dist/vanillajs/types/index.d.ts +2 -2
- package/dist/vanillajs/types/index.d.ts.map +1 -1
- package/dist/vanillajs/types/index.js.map +1 -1
- package/dist/vanillajs/ui/LoadingComponents.d.ts +51 -0
- package/dist/vanillajs/ui/LoadingComponents.d.ts.map +1 -0
- package/dist/vanillajs/ui/LoadingComponents.js +363 -0
- package/dist/vanillajs/ui/LoadingComponents.js.map +1 -0
- package/package.json +1 -1
- package/dist/vanillajs/iframe/domUtils.d.ts +0 -4
- package/dist/vanillajs/iframe/domUtils.d.ts.map +0 -1
- package/dist/vanillajs/iframe/domUtils.js +0 -25
- package/dist/vanillajs/iframe/domUtils.js.map +0 -1
- package/dist/vanillajs/storage/BrowserCookieStorageAdapter.d.ts +0 -19
- package/dist/vanillajs/storage/BrowserCookieStorageAdapter.d.ts.map +0 -1
- package/dist/vanillajs/storage/BrowserCookieStorageAdapter.js +0 -101
- package/dist/vanillajs/storage/BrowserCookieStorageAdapter.js.map +0 -1
- package/dist/vanillajs/storage/BrowserLocalStorageAdapter.d.ts +0 -9
- package/dist/vanillajs/storage/BrowserLocalStorageAdapter.d.ts.map +0 -1
- package/dist/vanillajs/storage/BrowserLocalStorageAdapter.js +0 -36
- package/dist/vanillajs/storage/BrowserLocalStorageAdapter.js.map +0 -1
- package/dist/vanillajs/storage/InMemoryStorageAdapter.d.ts +0 -9
- package/dist/vanillajs/storage/InMemoryStorageAdapter.d.ts.map +0 -1
- package/dist/vanillajs/storage/InMemoryStorageAdapter.js +0 -16
- package/dist/vanillajs/storage/InMemoryStorageAdapter.js.map +0 -1
- package/dist/vanillajs/storage/StorageAdapter.d.ts +0 -15
- package/dist/vanillajs/storage/StorageAdapter.d.ts.map +0 -1
- package/dist/vanillajs/storage/StorageAdapter.js +0 -16
- package/dist/vanillajs/storage/StorageAdapter.js.map +0 -1
- package/dist/vanillajs/utils/page-handlers.d.ts +0 -29
- package/dist/vanillajs/utils/page-handlers.d.ts.map +0 -1
- package/dist/vanillajs/utils/page-handlers.js +0 -165
- 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 {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
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,
|
|
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"}
|
package/dist/vanillajs/index.js
CHANGED
|
@@ -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 {
|
|
13
|
-
export
|
|
14
|
-
export {
|
|
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,
|
|
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 +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;
|
|
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
|
|
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"}
|