@forgerock/iframe-manager 0.0.0-beta-20250506165419

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/CHANGELOG.md ADDED
@@ -0,0 +1,14 @@
1
+ # @forgerock/iframe-manager
2
+
3
+ ## 0.0.0-beta-20250506165419
4
+
5
+ ### Minor Changes
6
+
7
+ - [#253](https://github.com/ForgeRock/ping-javascript-sdk/pull/253) [`04b506c`](https://github.com/ForgeRock/ping-javascript-sdk/commit/04b506c2016324dffeba3a473bfc705843ac3e41) Thanks [@ryanbas21](https://github.com/ryanbas21)! - Adds IFrame manager package to be able to create iframes and parse search params from the iframe url.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`04b506c`](https://github.com/ForgeRock/ping-javascript-sdk/commit/04b506c2016324dffeba3a473bfc705843ac3e41), [`0d54b34`](https://github.com/ForgeRock/ping-javascript-sdk/commit/0d54b3461443fcf5c5071a08578f2d418f066073), [`50fd7fa`](https://github.com/ForgeRock/ping-javascript-sdk/commit/50fd7fab9f0dd893528e85cb15f1ba6fdc1fe3e8)]:
12
+ - @forgerock/sdk-types@0.0.0-beta-20250506165419
13
+ - @forgerock/sdk-request-middleware@0.0.0-beta-20250506165419
14
+ - @forgerock/sdk-utilities@0.0.0-beta-20250506165419
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Ping Identity Corporation
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # IFrame Manager (`@pingidentity/sdk-effects/iframe-manager`)
2
+
3
+ ## Overview
4
+
5
+ The IFrame Manager Effect provides a mechanism to perform operations within a hidden `<iframe>` that involve navigating to an external URL and waiting for a redirect back to the application's origin. It's commonly used for flows like silent authentication or fetching tokens where user interaction is not required, and the result is communicated via query parameters in the final redirect URL.
6
+
7
+ The core functionality involves:
8
+
9
+ 1. Creating a hidden `<iframe>` dynamically.
10
+ 1. Navigating the iframe to a specified URL.
11
+ 1. Monitoring the iframe's `load` events to detect navigation changes.
12
+ 1. Once a navigation occurs back to the **same origin** as the parent application, parsing the query parameters from the iframe's URL.
13
+ 1. Resolving or rejecting a Promise based on the presence of predefined "success" or "error" query parameters.
14
+ 1. Handling timeouts and potential errors (like cross-origin access restrictions).
15
+
16
+ **Key Constraint: Same-Origin Policy**
17
+
18
+ This utility fundamentally relies on the browser's **Same-Origin Policy**. The final URL that the iframe is redirected to (the one containing the expected `successParams` or `errorParams`) **MUST** be on the exact same origin (protocol, hostname, and port) as the main application window. Attempting to access the location (`contentWindow.location`) of an iframe pointing to a different origin will be blocked by the browser, causing the operation to fail.
19
+
20
+ ## Installation
21
+
22
+ This effect is typically part of a larger SDK. Assume it's imported or available within your project structure like so (adjust path as necessary):
23
+
24
+ ```typescript
25
+ import iFrameManager from './path/to/iframe-manager.effects'; // Adjust path as needed
26
+
27
+ const iframeMgr = iFrameManager();
28
+ ```
29
+
30
+ ## API Reference
31
+
32
+ ### `iFrameManager()`
33
+
34
+ This is the main factory function that initializes the effect.
35
+
36
+ - **Returns:** `object` - An object containing the API methods for managing iframe requests.
37
+
38
+ ### `iframeMgr.getParamsByRedirect(options: GetParamsFromIFrameOptions): Promise<ResolvedParams>`
39
+
40
+ This method creates a hidden iframe, initiates navigation, and waits for a redirect back to the application's origin containing specific query parameters.
41
+
42
+ - **`options`**: `GetParamsFromIFrameOptions` - An object containing configuration for the iframe request.
43
+
44
+ - **`url: string`**: The initial URL to load within the hidden iframe. This URL is expected to eventually redirect back to the application's origin.
45
+ - **`timeout: number`**: The maximum time in milliseconds to wait for the entire operation to complete successfully (i.e., for a redirect containing success or error parameters). If the timeout is reached before completion, the promise rejects.
46
+
47
+ * **`successParams: string[]`**: An array of query parameter _keys_. If the final redirect URL (on the same origin) contains **at least one** of these keys in its query string, the promise will **resolve**.
48
+ * **`errorParams: string[]`**: An array of query parameter _keys_. If the final redirect URL (on the same origin) contains **any** of these keys in its query string, the promise will **reject**. Error parameters are checked _before_ success parameters.
49
+ - _Note:_ Both `successParams` and `errorParams` must be provided and contain at least one key.
50
+
51
+ - **Returns**: `Promise<ResolvedParams>`
52
+
53
+ - **On Success**: Resolves with `ResolvedParams`, an object containing _all_ query parameters parsed from the final redirect URL's query string. This occurs when the iframe redirects back to the same origin and its URL contains at least one key listed in `successParams` (and no keys listed in `errorParams`).
54
+ - **On Failure**: Rejects with:
55
+ - `ResolvedParams`: An object containing _all_ parsed query parameters if the final redirect URL contains any key listed in `errorParams`.
56
+ - An object `{ type: 'internal_error', message: 'iframe timed out' }` if the specified `timeout` is reached before a success or error condition is met.
57
+ - An object `{ type: 'internal_error', message: 'unexpected failure' }` if there's an error accessing the iframe's content window (most likely due to a cross-origin redirect that wasn't expected or handled).
58
+ - An object `{ type: 'internal_error', message: 'error setting up iframe' }` if there was an issue creating or configuring the iframe initially.
59
+ - An `Error` if `successParams` or `errorParams` are missing or empty during setup.
60
+
61
+ - **`ResolvedParams`**: `Record<string, string>` - A simple key-value object representing the parsed query parameters.
62
+
63
+ ## Usage Example
64
+
65
+ ```typescript
66
+ import iFrameManager from './path/to/iframe-manager.effects'; // Adjust path
67
+
68
+ const iframeMgr = iFrameManager();
69
+
70
+ async function performSilentLogin(authUrl: string) {
71
+ const options = {
72
+ url: authUrl, // e.g., 'https://auth.example.com/authorize?prompt=none&client_id=...'
73
+ timeout: 10000, // 10 seconds timeout
74
+ successParams: ['code', 'id_token', 'session_state'], // Expect one of these on success
75
+ errorParams: ['error', 'error_description'], // Expect one of these on failure
76
+ };
77
+
78
+ try {
79
+ console.log('Attempting silent login via iframe...');
80
+ // The promise resolves/rejects when the iframe redirects back to *this* app's origin
81
+ // with appropriate query parameters.
82
+ const resultParams = await iframeMgr.getParamsByRedirect(options);
83
+
84
+ // Success case: 'code', 'id_token', or 'session_state' was present
85
+ console.log('Silent login successful. Received params:', resultParams);
86
+ // Process the received parameters (e.g., exchange code for token)
87
+ // const code = resultParams.code;
88
+ // const state = resultParams.state; // Other params are included too
89
+ } catch (errorResult) {
90
+ // Failure case: Check if it's a known error from the server or an internal error
91
+ if (errorResult && errorResult.type === 'internal_error') {
92
+ // Timeout or iframe access error
93
+ console.error(`Iframe operation failed: ${errorResult.message}`);
94
+ } else if (errorResult && (errorResult.error || errorResult.error_description)) {
95
+ // Error reported by the authorization server via errorParams
96
+ console.error('Silent login failed. Server returned error:', errorResult);
97
+ // const errorCode = errorResult.error;
98
+ // const errorDesc = errorResult.error_description;
99
+ } else {
100
+ // Other unexpected error
101
+ console.error('An unexpected error occurred:', errorResult);
102
+ }
103
+ }
104
+ }
105
+
106
+ // Example usage:
107
+ // Assuming your app is running on https://app.example.com
108
+ // and the auth server will redirect back to https://app.example.com/callback?code=... or ?error=...
109
+ const authorizationUrl =
110
+ 'https://auth.example.com/authorize?prompt=none&client_id=abc&redirect_uri=https://app.example.com/callback&response_type=code&scope=openid';
111
+ performSilentLogin(authorizationUrl);
112
+ ```
113
+
114
+ ## Important Considerations
115
+
116
+ 1. **Same-Origin Redirect:** This cannot be stressed enough. The URL specified in `options.url` _must_ eventually redirect back to a URL on the **same origin** as your main application for this mechanism to work. Cross-origin restrictions will prevent the script from reading the final URL's parameters otherwise.
117
+ 1. **Timeout:** Choose a reasonable `timeout` value. If the external service is slow or the redirect chain is long, the operation might time out prematurely. Conversely, too long a timeout might delay feedback to the user if something goes wrong.
118
+ 1. **Intermediate Redirects:** The code handles intermediate redirects (pages loaded within the iframe that don't contain success or error parameters) by simply waiting for the next `load` event. The process only completes upon detecting success/error parameters or timing out.
119
+ 1. **Cleanup:** The utility ensures the iframe element is removed from the DOM and the timeout timer is cleared upon completion (resolve, reject, or timeout) to prevent memory leaks.
120
+ 1. **Error Parameter Precedence:** Error parameters (`errorParams`) are checked before success parameters (`successParams`). If a redirect URL contains both an error parameter and a success parameter, the promise will be **rejected**.
@@ -0,0 +1,2 @@
1
+ export * from './lib/iframe-manager.effects.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './lib/iframe-manager.effects.js';
@@ -0,0 +1,20 @@
1
+ export interface GetParamsFromIFrameOptions {
2
+ /** The URL to load in the iframe. */
3
+ url: string;
4
+ /** Timeout in milliseconds for the entire operation. */
5
+ timeout: number;
6
+ /** Array of query parameter keys expected upon successful completion. */
7
+ successParams: string[];
8
+ /** Array of query parameter keys indicating an error occurred. */
9
+ errorParams: string[];
10
+ }
11
+ type ResolvedParams = Record<string, string>;
12
+ /**
13
+ * Initializes the Iframe Manager effect.
14
+ * @returns An object containing the API for managing iframe requests.
15
+ */
16
+ export default function iFrameManager(): {
17
+ getParamsByRedirect: (options: GetParamsFromIFrameOptions) => Promise<ResolvedParams>;
18
+ };
19
+ export {};
20
+ //# sourceMappingURL=iframe-manager.effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe-manager.effects.d.ts","sourceRoot":"","sources":["../../../src/lib/iframe-manager.effects.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,0BAA0B;IACzC,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kEAAkE;IAClE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA0B7C;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa;mCAcF,0BAA0B,KAAG,OAAO,CAAC,cAAc,CAAC;EA4GtF"}
@@ -0,0 +1,139 @@
1
+ /*
2
+ * Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
3
+ *
4
+ * This software may be modified and distributed under the terms
5
+ * of the MIT license. See the LICENSE file for details.
6
+ */
7
+ function hasErrorParams(params, errorParams) {
8
+ for (const key of errorParams) {
9
+ if (params.has(key)) {
10
+ return true;
11
+ }
12
+ }
13
+ return false;
14
+ }
15
+ // Helper function to check if all required success params are present
16
+ function hasSomeSuccessParams(params, successParams) {
17
+ return successParams.some((key) => params.has(key));
18
+ }
19
+ function searchParamsToRecord(params) {
20
+ const result = {};
21
+ params.forEach((value, key) => {
22
+ result[key] = value;
23
+ });
24
+ return result;
25
+ }
26
+ /**
27
+ * Initializes the Iframe Manager effect.
28
+ * @returns An object containing the API for managing iframe requests.
29
+ */
30
+ export default function iFrameManager() {
31
+ /**
32
+ * Creates a hidden iframe to navigate to the specified URL,
33
+ * waits for a redirect back to the application's origin,
34
+ * and resolves/rejects based on the query parameters found in the redirect URL.
35
+ * IMPORTANT: This relies on the final redirect target being on the SAME ORIGIN
36
+ * as the parent window due to browser security restrictions (Same-Origin Policy).
37
+ * Accessing contentWindow.location of a cross-origin iframe will fail.
38
+ *
39
+ * @param options - The options for the iframe request (URL, timeout, success/error params).
40
+ * @returns A Promise that resolves with the parsed query parameters on success,
41
+ * or rejects on error, timeout, or if unable to access iframe content.
42
+ */
43
+ return {
44
+ getParamsByRedirect: (options) => {
45
+ const { url, timeout, successParams, errorParams } = options;
46
+ if (!successParams ||
47
+ !errorParams ||
48
+ successParams.length === 0 ||
49
+ errorParams.length === 0) {
50
+ const error = new Error('successParams and errorParams must be provided');
51
+ throw error;
52
+ }
53
+ return new Promise((resolve, reject) => {
54
+ let iframe = null;
55
+ let timerId = null;
56
+ let onLoadHandler = () => { };
57
+ let cleanup = () => { };
58
+ cleanup = () => {
59
+ if (!iframe && !timerId)
60
+ return;
61
+ if (timerId) {
62
+ clearTimeout(timerId);
63
+ timerId = null;
64
+ }
65
+ if (iframe) {
66
+ iframe.removeEventListener('load', onLoadHandler);
67
+ if (iframe.parentNode) {
68
+ iframe.remove();
69
+ }
70
+ iframe = null;
71
+ }
72
+ onLoadHandler = () => { };
73
+ cleanup = () => { };
74
+ };
75
+ onLoadHandler = () => {
76
+ try {
77
+ if (iframe && iframe.contentWindow) {
78
+ const currentIframeHref = iframe.contentWindow.location.href;
79
+ if (currentIframeHref === 'about:blank' || !currentIframeHref) {
80
+ return; // Wait for actual navigation
81
+ }
82
+ const redirectUrl = new URL(currentIframeHref);
83
+ const searchParams = redirectUrl.searchParams;
84
+ const parsedParams = searchParamsToRecord(searchParams);
85
+ // 1. Check for Error Parameters
86
+ if (hasErrorParams(searchParams, errorParams)) {
87
+ cleanup();
88
+ reject(parsedParams); // Reject with all parsed params for context
89
+ return;
90
+ }
91
+ // 2. Check for Success Parameters
92
+ if (hasSomeSuccessParams(searchParams, successParams)) {
93
+ cleanup();
94
+ resolve(parsedParams); // Resolve with all parsed params
95
+ return;
96
+ }
97
+ /*
98
+ * 3. Neither Error nor Success: Intermediate Redirect?
99
+ * If neither error nor all required success params are found,
100
+ * assume it's an intermediate step in the redirect flow.
101
+ * Do nothing, let the timeout eventually handle non-resolving states
102
+ * or wait for the next 'load' event.
103
+ */
104
+ }
105
+ }
106
+ catch {
107
+ // This likely means a cross-origin navigation occurred where access is denied.
108
+ cleanup();
109
+ reject({
110
+ type: 'internal_error',
111
+ message: 'unexpected failure',
112
+ });
113
+ }
114
+ };
115
+ try {
116
+ iframe = document.createElement('iframe');
117
+ iframe.style.display = 'none'; // Hide the iframe
118
+ iframe.addEventListener('load', onLoadHandler);
119
+ document.body.appendChild(iframe);
120
+ timerId = setTimeout(() => {
121
+ cleanup();
122
+ reject({
123
+ type: 'internal_error',
124
+ message: 'iframe timed out',
125
+ });
126
+ }, timeout);
127
+ iframe.src = url;
128
+ }
129
+ catch {
130
+ cleanup(); // Attempt cleanup even if setup failed partially
131
+ reject({
132
+ type: 'internal_error',
133
+ message: 'error setting up iframe',
134
+ });
135
+ }
136
+ });
137
+ },
138
+ };
139
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es5.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.dom.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../node_modules/.pnpm/typescript@5.7.3/node_modules/typescript/lib/lib.esnext.full.d.ts","../../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.d.ts","../../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/modules/index.d.ts","../src/lib/iframe-manager.effects.ts","../src/index.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/compatibility/disposable.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/compatibility/indexable.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/compatibility/iterators.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/compatibility/index.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/globals.typedarray.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/globals.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/assert.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/assert/strict.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/async_hooks.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/buffer.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/child_process.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/cluster.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/console.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/constants.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/crypto.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/dgram.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/diagnostics_channel.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/dns.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/dns/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/domain.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/dom-events.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/events.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/fs.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/fs/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/http.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/http2.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/https.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/inspector.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/module.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/net.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/os.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/path.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/perf_hooks.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/process.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/punycode.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/querystring.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/readline.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/readline/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/repl.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/sea.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/sqlite.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/stream.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/stream/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/stream/consumers.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/stream/web.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/string_decoder.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/test.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/timers.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/timers/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/tls.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/trace_events.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/tty.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/url.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/util.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/v8.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/vm.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/wasi.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/worker_threads.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/zlib.d.ts","../../../../node_modules/.pnpm/@types+node@22.14.1/node_modules/@types/node/index.d.ts"],"fileIdsList":[[92,132,135],[92,134,135],[135],[92,135,140,170],[92,135,136,141,147,148,155,167,178],[92,135,136,137,147,155],[92,135],[87,88,89,92,135],[92,135,138,179],[92,135,139,140,148,156],[92,135,140,167,175],[92,135,141,143,147,155],[92,134,135,142],[92,135,143,144],[92,135,147],[92,135,145,147],[92,134,135,147],[92,135,147,148,149,167,178],[92,135,147,148,149,162,167,170],[92,130,135,183],[92,130,135,143,147,150,155,167,178],[92,135,147,148,150,151,155,167,175,178],[92,135,150,152,167,175,178],[90,91,92,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184],[92,135,147,153],[92,135,154,178],[92,135,143,147,155,167],[92,135,156],[92,135,157],[92,134,135,158],[92,132,133,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184],[92,135,160],[92,135,161],[92,135,147,162,163],[92,135,162,164,179,181],[92,135,147,167,168,170],[92,135,169,170],[92,135,167,168],[92,135,170],[92,135,171],[92,132,135,167],[92,135,147,173,174],[92,135,173,174],[92,135,140,155,167,175],[92,135,176],[92,135,155,177],[92,135,150,161,178],[92,135,140,179],[92,135,167,180],[92,135,154,181],[92,135,182],[92,135,140,147,149,158,167,178,181,183],[92,135,167,184],[83,92,135],[92,102,106,135,178],[92,102,135,167,178],[92,97,135],[92,99,102,135,175,178],[92,135,155,175],[92,135,185],[92,97,135,185],[92,99,102,135,155,178],[92,94,95,98,101,135,147,167,178],[92,102,109,135],[92,94,100,135],[92,102,123,124,135],[92,98,102,135,170,178,185],[92,123,135,185],[92,96,97,135,185],[92,102,135],[92,96,97,98,99,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,135],[92,102,117,135],[92,102,109,110,135],[92,100,102,110,111,135],[92,101,135],[92,94,97,102,135],[92,102,106,110,111,135],[92,106,135],[92,100,102,105,135,178],[92,94,99,102,109,135],[92,135,167],[92,97,102,123,135,183,185],[84,85,92,135],[84,92,135]],"fileInfos":[{"version":"e41c290ef7dd7dab3493e6cbe5909e0148edf4a8dad0271be08edec368a0f7b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"e12a46ce14b817d4c9e6b2b478956452330bf00c9801b79de46f7a1815b5bd40","impliedFormat":1},{"version":"4fd3f3422b2d2a3dfd5cdd0f387b3a8ec45f006c6ea896a4cb41264c2100bb2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"62bb211266ee48b2d0edf0d8d1b191f0c24fc379a82bd4c1692a082c540bc6b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1e2a172204962276504466a6393426d2ca9c54894b1ad0a6c9dad867a65f876","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"bab26767638ab3557de12c900f0b91f710c7dc40ee9793d5a27d32c04f0bf646","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"61d6a2092f48af66dbfb220e31eea8b10bc02b6932d6e529005fd2d7b3281290","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"bde31fd423cd93b0eff97197a3f66df7c93e8c0c335cbeb113b7ff1ac35c23f4","impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"aa881287a137acbb86334bd0aa324ee58969f955c42c008a23c96f3c73c7f400","signature":"585f9df92b836d08a08d337ef68e9ce9f715e01afffbc4b774a119a384978fa9","impliedFormat":99},{"version":"8bdb9dd6be8c08582f62c9be8b50818fe441d6a5105a67c3587714dc7b6c9006","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fa51737611c21ba3a5ac02c4e1535741d58bec67c9bdf94b1837a31c97a2263","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"d2bc987ae352271d0d615a420dcf98cc886aa16b87fb2b569358c1fe0ca0773d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f0539c58717cbc8b73acb29f9e992ab5ff20adba5f9b57130691c7f9b186a4d","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"76103716ba397bbb61f9fa9c9090dca59f39f9047cb1352b2179c5d8e7f4e8d0","impliedFormat":1},{"version":"f9677e434b7a3b14f0a9367f9dfa1227dfe3ee661792d0085523c3191ae6a1a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"115971d64632ea4742b5b115fb64ed04bcaae2c3c342f13d9ba7e3f9ee39c4e7","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"9057f224b79846e3a95baf6dad2c8103278de2b0c5eebda23fc8188171ad2398","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"e6f5a38687bebe43a4cef426b69d34373ef68be9a6b1538ec0a371e69f309354","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0476e6b51a47a8eaf5ee6ecab0d686f066f3081de9a572f1dde3b2a8a7fb055","impliedFormat":1},{"version":"1e289f30a48126935a5d408a91129a13a59c9b0f8c007a816f9f16ef821e144e","impliedFormat":1},{"version":"f96a023e442f02cf551b4cfe435805ccb0a7e13c81619d4da61ec835d03fe512","impliedFormat":1},{"version":"5135bdd72cc05a8192bd2e92f0914d7fc43ee077d1293dc622a049b7035a0afb","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"6d386bc0d7f3afa1d401afc3e00ed6b09205a354a9795196caed937494a713e6","impliedFormat":1},{"version":"5b2e73adcb25865d31c21accdc8f82de1eaded23c6f73230e474df156942380e","affectsGlobalScope":true,"impliedFormat":1},{"version":"23459c1915878a7c1e86e8bdb9c187cddd3aea105b8b1dfce512f093c969bc7e","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"1dc73f8854e5c4506131c4d95b3a6c24d0c80336d3758e95110f4c7b5cb16397","affectsGlobalScope":true,"impliedFormat":1},{"version":"64ede330464b9fd5d35327c32dd2770e7474127ed09769655ebce70992af5f44","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"c6b4e0a02545304935ecbf7de7a8e056a31bb50939b5b321c9d50a405b5a0bba","impliedFormat":1},{"version":"fab29e6d649aa074a6b91e3bdf2bff484934a46067f6ee97a30fcd9762ae2213","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"bcd0418abb8a5c9fe7db36a96ca75fc78455b0efab270ee89b8e49916eac5174","impliedFormat":1},{"version":"c878f74b6d10b267f6075c51ac1d8becd15b4aa6a58f79c0cfe3b24908357f60","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"fbf68fc8057932b1c30107ebc37420f8d8dc4bef1253c4c2f9e141886c0df5ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"7d8b16d7f33d5081beac7a657a6d13f11a72cf094cc5e37cda1b9d8c89371951","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"5360a27d3ebca11b224d7d3e38e3e2c63f8290cb1fcf6c3610401898f8e68bc3","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"217941ef5c6fd81b77cd0073c94019a98e20777eaac6c4326156bf6b021ed547","affectsGlobalScope":true,"impliedFormat":1},{"version":"f689c4237b70ae6be5f0e4180e8833f34ace40529d1acc0676ab8fb8f70457d7","impliedFormat":1},{"version":"b02784111b3fc9c38590cd4339ff8718f9329a6f4d3fd66e9744a1dcd1d7e191","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"63b05afa6121657f25e99e1519596b0826cda026f09372c9100dfe21417f4bd6","affectsGlobalScope":true,"impliedFormat":1},{"version":"78dc0513cc4f1642906b74dda42146bcbd9df7401717d6e89ea6d72d12ecb539","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1}],"root":[85,86],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":false,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"outDir":"./","skipLibCheck":true,"strict":true,"tsBuildInfoFile":"./tsconfig.lib.tsbuildinfo"},"referencedMap":[[132,1],[133,1],[134,2],[92,3],[135,4],[136,5],[137,6],[87,7],[90,8],[88,7],[89,7],[138,9],[139,10],[140,11],[141,12],[142,13],[143,14],[144,14],[146,15],[145,16],[147,17],[148,18],[149,19],[131,20],[91,7],[150,21],[151,22],[152,23],[185,24],[153,25],[154,26],[155,27],[156,28],[157,29],[158,30],[159,31],[160,32],[161,33],[162,34],[163,34],[164,35],[165,7],[166,7],[167,36],[169,37],[168,38],[170,39],[171,40],[172,41],[173,42],[174,43],[175,44],[176,45],[177,46],[178,47],[179,48],[180,49],[181,50],[182,51],[183,52],[184,53],[93,7],[84,54],[83,7],[80,7],[81,7],[15,7],[13,7],[14,7],[19,7],[18,7],[2,7],[20,7],[21,7],[22,7],[23,7],[24,7],[25,7],[26,7],[27,7],[3,7],[28,7],[29,7],[4,7],[30,7],[34,7],[31,7],[32,7],[33,7],[35,7],[36,7],[37,7],[5,7],[38,7],[39,7],[40,7],[41,7],[6,7],[45,7],[42,7],[43,7],[44,7],[46,7],[7,7],[47,7],[52,7],[53,7],[48,7],[49,7],[50,7],[51,7],[8,7],[57,7],[54,7],[55,7],[56,7],[58,7],[9,7],[59,7],[60,7],[61,7],[63,7],[62,7],[64,7],[65,7],[10,7],[66,7],[67,7],[68,7],[11,7],[69,7],[70,7],[71,7],[72,7],[73,7],[1,7],[74,7],[75,7],[12,7],[78,7],[77,7],[82,7],[76,7],[79,7],[17,7],[16,7],[109,55],[119,56],[108,55],[129,57],[100,58],[99,59],[128,60],[122,61],[127,62],[102,63],[116,64],[101,65],[125,66],[97,67],[96,60],[126,68],[98,69],[103,70],[104,7],[107,70],[94,7],[130,71],[120,72],[111,73],[112,74],[114,75],[110,76],[113,77],[123,60],[105,78],[106,79],[115,80],[95,81],[118,72],[117,70],[121,7],[124,82],[86,83],[85,84]],"latestChangedDtsFile":"./src/index.d.ts","version":"5.7.3"}
@@ -0,0 +1,22 @@
1
+ import baseConfig from '../../../eslint.config.mjs';
2
+
3
+ export default [
4
+ ...baseConfig,
5
+ {
6
+ files: ['**/*.json'],
7
+ rules: {
8
+ '@nx/dependency-checks': [
9
+ 'error',
10
+ {
11
+ ignoredFiles: [
12
+ '{projectRoot}/eslint.config.{js,cjs,mjs}',
13
+ '{projectRoot}/vite.config.{js,ts,mjs,mts}',
14
+ ],
15
+ },
16
+ ],
17
+ },
18
+ languageOptions: {
19
+ parser: await import('jsonc-eslint-parser'),
20
+ },
21
+ },
22
+ ];
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@forgerock/iframe-manager",
3
+ "version": "0.0.0-beta-20250506165419",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/src/index.js",
7
+ "module": "./dist/src/index.js",
8
+ "types": "./dist/src/index.d.ts",
9
+ "exports": {
10
+ "./package.json": "./package.json",
11
+ ".": {
12
+ "types": "./dist/src/index.d.ts",
13
+ "import": "./dist/src/index.js",
14
+ "default": "./dist/src/index.js"
15
+ }
16
+ },
17
+ "dependencies": {
18
+ "tslib": "^2.3.0",
19
+ "@forgerock/sdk-request-middleware": "0.0.0-beta-20250506165419",
20
+ "@forgerock/sdk-types": "0.0.0-beta-20250506165419",
21
+ "@forgerock/sdk-utilities": "0.0.0-beta-20250506165419"
22
+ },
23
+ "nx": {
24
+ "tags": [
25
+ "scope:sdk-effects"
26
+ ]
27
+ }
28
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './lib/iframe-manager.effects.js';
@@ -0,0 +1,173 @@
1
+ /*
2
+ * Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
3
+ *
4
+ * This software may be modified and distributed under the terms
5
+ * of the MIT license. See the LICENSE file for details.
6
+ */
7
+
8
+ /* eslint-disable @typescript-eslint/no-empty-function */
9
+
10
+ export interface GetParamsFromIFrameOptions {
11
+ /** The URL to load in the iframe. */
12
+ url: string;
13
+ /** Timeout in milliseconds for the entire operation. */
14
+ timeout: number;
15
+ /** Array of query parameter keys expected upon successful completion. */
16
+ successParams: string[];
17
+ /** Array of query parameter keys indicating an error occurred. */
18
+ errorParams: string[];
19
+ }
20
+
21
+ type ResolvedParams = Record<string, string>;
22
+
23
+ type Noop = () => void;
24
+
25
+ function hasErrorParams(params: URLSearchParams, errorParams: string[]): boolean {
26
+ for (const key of errorParams) {
27
+ if (params.has(key)) {
28
+ return true;
29
+ }
30
+ }
31
+ return false;
32
+ }
33
+
34
+ // Helper function to check if all required success params are present
35
+ function hasSomeSuccessParams(params: URLSearchParams, successParams: string[]): boolean {
36
+ return successParams.some((key) => params.has(key));
37
+ }
38
+
39
+ function searchParamsToRecord(params: URLSearchParams): ResolvedParams {
40
+ const result: ResolvedParams = {};
41
+ params.forEach((value, key) => {
42
+ result[key] = value;
43
+ });
44
+ return result;
45
+ }
46
+
47
+ /**
48
+ * Initializes the Iframe Manager effect.
49
+ * @returns An object containing the API for managing iframe requests.
50
+ */
51
+ export default function iFrameManager() {
52
+ /**
53
+ * Creates a hidden iframe to navigate to the specified URL,
54
+ * waits for a redirect back to the application's origin,
55
+ * and resolves/rejects based on the query parameters found in the redirect URL.
56
+ * IMPORTANT: This relies on the final redirect target being on the SAME ORIGIN
57
+ * as the parent window due to browser security restrictions (Same-Origin Policy).
58
+ * Accessing contentWindow.location of a cross-origin iframe will fail.
59
+ *
60
+ * @param options - The options for the iframe request (URL, timeout, success/error params).
61
+ * @returns A Promise that resolves with the parsed query parameters on success,
62
+ * or rejects on error, timeout, or if unable to access iframe content.
63
+ */
64
+ return {
65
+ getParamsByRedirect: (options: GetParamsFromIFrameOptions): Promise<ResolvedParams> => {
66
+ const { url, timeout, successParams, errorParams } = options;
67
+
68
+ if (
69
+ !successParams ||
70
+ !errorParams ||
71
+ successParams.length === 0 ||
72
+ errorParams.length === 0
73
+ ) {
74
+ const error = new Error('successParams and errorParams must be provided');
75
+ throw error;
76
+ }
77
+
78
+ return new Promise<ResolvedParams>((resolve, reject) => {
79
+ let iframe: HTMLIFrameElement | null = null;
80
+ let timerId: ReturnType<typeof setTimeout> | null = null;
81
+
82
+ let onLoadHandler: () => void = () => {};
83
+ let cleanup: Noop = () => {};
84
+
85
+ cleanup = (): void => {
86
+ if (!iframe && !timerId) return;
87
+
88
+ if (timerId) {
89
+ clearTimeout(timerId);
90
+ timerId = null;
91
+ }
92
+ if (iframe) {
93
+ iframe.removeEventListener('load', onLoadHandler);
94
+ if (iframe.parentNode) {
95
+ iframe.remove();
96
+ }
97
+ iframe = null;
98
+ }
99
+ onLoadHandler = () => {};
100
+ cleanup = () => {};
101
+ };
102
+
103
+ onLoadHandler = (): void => {
104
+ try {
105
+ if (iframe && iframe.contentWindow) {
106
+ const currentIframeHref = iframe.contentWindow.location.href;
107
+
108
+ if (currentIframeHref === 'about:blank' || !currentIframeHref) {
109
+ return; // Wait for actual navigation
110
+ }
111
+
112
+ const redirectUrl = new URL(currentIframeHref);
113
+ const searchParams = redirectUrl.searchParams;
114
+ const parsedParams = searchParamsToRecord(searchParams);
115
+
116
+ // 1. Check for Error Parameters
117
+ if (hasErrorParams(searchParams, errorParams)) {
118
+ cleanup();
119
+ reject(parsedParams); // Reject with all parsed params for context
120
+ return;
121
+ }
122
+
123
+ // 2. Check for Success Parameters
124
+ if (hasSomeSuccessParams(searchParams, successParams)) {
125
+ cleanup();
126
+ resolve(parsedParams); // Resolve with all parsed params
127
+ return;
128
+ }
129
+
130
+ /*
131
+ * 3. Neither Error nor Success: Intermediate Redirect?
132
+ * If neither error nor all required success params are found,
133
+ * assume it's an intermediate step in the redirect flow.
134
+ * Do nothing, let the timeout eventually handle non-resolving states
135
+ * or wait for the next 'load' event.
136
+ */
137
+ }
138
+ } catch {
139
+ // This likely means a cross-origin navigation occurred where access is denied.
140
+ cleanup();
141
+ reject({
142
+ type: 'internal_error',
143
+ message: 'unexpected failure',
144
+ });
145
+ }
146
+ };
147
+
148
+ try {
149
+ iframe = document.createElement('iframe');
150
+ iframe.style.display = 'none'; // Hide the iframe
151
+ iframe.addEventListener('load', onLoadHandler);
152
+ document.body.appendChild(iframe);
153
+
154
+ timerId = setTimeout(() => {
155
+ cleanup();
156
+ reject({
157
+ type: 'internal_error',
158
+ message: 'iframe timed out',
159
+ });
160
+ }, timeout);
161
+
162
+ iframe.src = url;
163
+ } catch {
164
+ cleanup(); // Attempt cleanup even if setup failed partially
165
+ reject({
166
+ type: 'internal_error',
167
+ message: 'error setting up iframe',
168
+ });
169
+ }
170
+ });
171
+ },
172
+ };
173
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "files": [],
4
+ "include": [],
5
+ "references": [
6
+ {
7
+ "path": "../../sdk-types"
8
+ },
9
+ {
10
+ "path": "../../sdk-utilities"
11
+ },
12
+ {
13
+ "path": "../sdk-request-middleware"
14
+ },
15
+ {
16
+ "path": "./tsconfig.lib.json"
17
+ },
18
+ {
19
+ "path": "./tsconfig.spec.json"
20
+ }
21
+ ],
22
+ "nx": {
23
+ "addTypecheckTarget": false
24
+ }
25
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "outDir": "dist",
6
+ "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
7
+ "emitDeclarationOnly": false,
8
+ "module": "nodenext",
9
+ "moduleResolution": "nodenext",
10
+ "forceConsistentCasingInFileNames": true,
11
+ "strict": true,
12
+ "importHelpers": true,
13
+ "noImplicitOverride": true,
14
+ "noImplicitReturns": true,
15
+ "noFallthroughCasesInSwitch": true,
16
+ "types": ["node"]
17
+ },
18
+ "include": ["src/**/*.ts"],
19
+ "references": [
20
+ {
21
+ "path": "../../sdk-types/tsconfig.lib.json"
22
+ },
23
+ {
24
+ "path": "../../sdk-utilities/tsconfig.lib.json"
25
+ },
26
+ {
27
+ "path": "../sdk-request-middleware/tsconfig.lib.json"
28
+ }
29
+ ],
30
+ "exclude": [
31
+ "vite.config.ts",
32
+ "vite.config.mts",
33
+ "vitest.config.ts",
34
+ "vitest.config.mts",
35
+ "src/**/*.test.ts",
36
+ "src/**/*.spec.ts",
37
+ "src/**/*.test.tsx",
38
+ "src/**/*.spec.tsx",
39
+ "src/**/*.test.js",
40
+ "src/**/*.spec.js",
41
+ "src/**/*.test.jsx",
42
+ "src/**/*.spec.jsx"
43
+ ]
44
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "./out-tsc/vitest",
5
+ "types": [
6
+ "vitest/globals",
7
+ "vitest/importMeta",
8
+ "vite/client",
9
+ "node",
10
+ "vitest"
11
+ ],
12
+ "module": "nodenext",
13
+ "moduleResolution": "nodenext",
14
+ "forceConsistentCasingInFileNames": true,
15
+ "strict": true,
16
+ "importHelpers": true,
17
+ "noImplicitOverride": true,
18
+ "noImplicitReturns": true,
19
+ "noFallthroughCasesInSwitch": true
20
+ },
21
+ "include": [
22
+ "vite.config.ts",
23
+ "vite.config.mts",
24
+ "vitest.config.ts",
25
+ "vitest.config.mts",
26
+ "src/**/*.test.ts",
27
+ "src/**/*.spec.ts",
28
+ "src/**/*.test.tsx",
29
+ "src/**/*.spec.tsx",
30
+ "src/**/*.test.js",
31
+ "src/**/*.spec.js",
32
+ "src/**/*.test.jsx",
33
+ "src/**/*.spec.jsx",
34
+ "src/**/*.d.ts"
35
+ ],
36
+ "references": [
37
+ {
38
+ "path": "./tsconfig.lib.json"
39
+ }
40
+ ]
41
+ }
package/typedoc.json ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "@forgerock/iframe-manager",
3
+ "entryPoints": ["src/index.ts"]
4
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,22 @@
1
+ import { defineConfig } from 'vite';
2
+
3
+ export default defineConfig(() => ({
4
+ root: __dirname,
5
+ cacheDir: '../../../node_modules/.vite/packages/effects/iframe-manager',
6
+ plugins: [],
7
+ // Uncomment this if you are using workers.
8
+ // worker: {
9
+ // plugins: [ nxViteTsPaths() ],
10
+ // },
11
+ test: {
12
+ watch: false,
13
+ globals: true,
14
+ environment: 'node',
15
+ include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
16
+ reporters: ['default'],
17
+ coverage: {
18
+ reportsDirectory: './test-output/vitest/coverage',
19
+ provider: 'v8' as const,
20
+ },
21
+ },
22
+ }));