@hubspot/app-connect-sdk 1.0.0-alpha.16 → 1.0.0-alpha.17

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.
@@ -4,15 +4,15 @@
4
4
   RUN  v4.1.6 /Users/psteeleidem/src/HubSpotEngineering/app-connect-sdk/packages/app-connect-sdk
5
5
 
6
6
  [?2026h
7
-  ❯ src/server/hono/hubspot-connect-routes/auth-init-session.test.ts [queued]
7
+  ❯ src/browser/app-connect-controller/connect-start.test.ts [queued]
8
8
 
9
9
   Test Files 0 passed (29)
10
10
   Tests 0 passed (0)
11
-  Start at 10:44:01
12
-  Duration 101ms
11
+  Start at 13:01:31
12
+  Duration 100ms
13
13
  [?2026l[?2026h
14
14
   ❯ src/browser/app-connect-controller/connect-start.test.ts [queued]
15
-  ❯ src/browser/app-connect-controller/init.test.ts [queued]
15
+  ❯ src/browser/app-connect-controller/init.test.ts 0/7
16
16
   ❯ src/browser/app-connect-controller/oauth-popup.test.ts [queued]
17
17
   ❯ src/server/api-client-core/__tests__/operation-headers.test.ts [queued]
18
18
   ❯ src/server/hono/hubspot-connect-routes/auth-complete.test.ts [queued]
@@ -20,27 +20,28 @@
20
20
   ❯ src/server/hono/hubspot-connect-routes/auth-logout.test.ts [queued]
21
21
   ❯ src/server/hono/hubspot-connect-routes/auth-refresh.test.ts [queued]
22
22
   ❯ src/server/hono/hubspot-connect-routes/cimd-public-routes.test.ts [queued]
23
-  ❯ src/server/hono/utils/cors-middleware.test.ts 0/4
24
-  ❯ src/server/sanitize-request.test.ts [queued]
23
+  ❯ src/server/sanitize-request.test.ts 0/6
25
24
   ❯ src/server/utils/dpop-utils.test.ts [queued]
26
25
   ❯ src/server/utils/hubspot-dpop-auth-headers.test.ts [queued]
26
+  ❯ src/server/utils/jwt-utils.test.ts 0/6
27
27
 
28
28
   Test Files 0 passed (29)
29
-  Tests 0 passed (4)
30
-  Start at 10:44:01
31
-  Duration 200ms
32
- [?2026l[?2026h ✓ src/server/sanitize-request.test.ts (6 tests) 12ms
33
- ✓ src/server/hono/utils/cors-middleware.test.ts (4 tests) 16ms
34
- ✓ src/browser/app-connect-controller/init.test.ts (5 tests) 17ms
35
- ✓ src/browser/app-connect-controller/oauth-popup.test.ts (4 tests) 18ms
36
- ✓ src/server/api-client-core/__tests__/operation-headers.test.ts (9 tests) 22ms
37
- ✓ src/server/hono/hubspot-connect-routes/auth-complete.test.ts (9 tests) 27ms
38
- ✓ src/server/hono/hubspot-connect-routes/cimd-public-routes.test.ts (4 tests) 24ms
39
- ✓ src/server/hono/hubspot-connect-routes/auth-logout.test.ts (2 tests) 22ms
29
+  Tests 0 passed (19)
30
+  Start at 13:01:31
31
+  Duration 201ms
32
+ [?2026l[?2026h ✓ src/server/utils/jwt-utils.test.ts (6 tests) 10ms
33
+ ✓ src/server/sanitize-request.test.ts (6 tests) 11ms
34
+ ✓ src/server/utils/dpop-utils.test.ts (7 tests) 13ms
35
+ ✓ src/browser/app-connect-controller/oauth-popup.test.ts (5 tests) 16ms
36
+ ✓ src/browser/app-connect-controller/init.test.ts (7 tests) 18ms
37
+ ✓ src/server/utils/hubspot-dpop-auth-headers.test.ts (2 tests) 14ms
38
+ ✓ src/server/api-client-core/__tests__/operation-headers.test.ts (9 tests) 18ms
39
+ ✓ src/server/hono/hubspot-connect-routes/cimd-public-routes.test.ts (4 tests) 20ms
40
+ ✓ src/server/hono/hubspot-connect-routes/auth-complete.test.ts (9 tests) 24ms
40
41
  stdout | src/server/hono/hubspot-connect-routes/auth-init-session.test.ts > handleAuthInitSession > builds the OAuth redirect_uri from the request Origin and the frontend callback path
41
42
  clientId test-client-id
42
43
 
43
- ✓ src/browser/app-connect-controller/connect-start.test.ts (2 tests) 19ms
44
+ ✓ src/server/hono/hubspot-connect-routes/auth-logout.test.ts (2 tests) 23ms
44
45
  stdout | src/server/hono/hubspot-connect-routes/auth-init-session.test.ts > handleAuthInitSession > pins the request Origin in `__Host-hs_app_origin` with SameSite=None; Partitioned
45
46
  clientId test-client-id
46
47
 
@@ -50,64 +51,69 @@
50
51
  stdout | src/server/hono/hubspot-connect-routes/auth-init-session.test.ts > handleAuthInitSession > returns JSON with authorization_url on success
51
52
  clientId test-client-id
52
53
 
53
- ✓ src/server/utils/dpop-utils.test.ts (7 tests) 48ms
54
+ ✓ src/server/hono/hubspot-connect-routes/auth-refresh.test.ts (6 tests) 30ms
55
+ ✓ src/browser/app-connect-controller/connect-start.test.ts (2 tests) 15ms
54
56
  stdout | src/server/hono/hubspot-connect-routes/auth-init-session.test.ts > handleAuthInitSession > defaults return_path to / when param is absent
55
57
  clientId test-client-id
56
58
 
57
- ✓ src/server/hono/hubspot-connect-routes/auth-init-session.test.ts (8 tests) 47ms
58
- ✓ src/server/hono/hubspot-connect-routes/auth-refresh.test.ts (6 tests) 47ms
59
- ✓ src/server/utils/hubspot-dpop-auth-headers.test.ts (2 tests) 35ms
59
+ ✓ src/server/hono/hubspot-connect-routes/auth-init-session.test.ts (8 tests) 31ms
60
60
 
61
61
   ❯ src/browser/app-connect-controller/connect-start.test.ts 2/2
62
-  ❯ src/browser/app-connect-controller/init.test.ts 5/5
63
-  ❯ src/browser/app-connect-controller/oauth-popup.test.ts 4/4
62
+  ❯ src/browser/app-connect-controller/init.test.ts 7/7
63
+  ❯ src/browser/app-connect-controller/oauth-popup.test.ts 5/5
64
64
   ❯ src/server/api-client-core/__tests__/operation-headers.test.ts 9/9
65
65
   ❯ src/server/hono/hubspot-connect-routes/auth-complete.test.ts 9/9
66
66
   ❯ src/server/hono/hubspot-connect-routes/auth-init-session.test.ts 8/8
67
67
   ❯ src/server/hono/hubspot-connect-routes/auth-logout.test.ts 2/2
68
68
   ❯ src/server/hono/hubspot-connect-routes/auth-refresh.test.ts 6/6
69
69
   ❯ src/server/hono/hubspot-connect-routes/cimd-public-routes.test.ts 4/4
70
-  ❯ src/server/hono/utils/cors-middleware.test.ts 4/4
70
+  ❯ src/server/hono/utils/cors-middleware.test.ts [queued]
71
+  ❯ src/server/sanitize-request.test.ts 6/6
71
72
   ❯ src/server/utils/dpop-utils.test.ts 7/7
72
73
   ❯ src/server/utils/hubspot-dpop-auth-headers.test.ts 2/2
73
-  ❯ src/server/utils/jwt-utils.test.ts [queued]
74
74
 
75
75
   Test Files 13 passed (29)
76
-  Tests 68 passed (68)
77
-  Start at 10:44:01
78
-  Duration 502ms
79
- [?2026l[?2026h ✓ src/server/utils/jwt-utils.test.ts (6 tests) 12ms
80
- ✓ src/server/utils/jwk-utils.test.ts (3 tests) 7ms
81
- ✓ src/shared/encoding/sha256.test.ts (3 tests) 9ms
82
- ✓ src/browser/app-connect-controller/oauth-complete.test.ts (2 tests) 16ms
83
- ✓ src/shared/encoding/base64.test.ts (7 tests) 3ms
84
- ✓ src/browser/app-connect-controller/utils/session-utils.test.ts (9 tests) 4ms
76
+  Tests 73 passed (73)
77
+  Start at 13:01:31
78
+  Duration 402ms
79
+ [?2026l[?2026h ✓ src/shared/encoding/sha256.test.ts (3 tests) 5ms
80
+ ✓ src/server/utils/env-utils.test.ts (29 tests) 3ms
81
+ ✓ src/browser/app-connect-controller/oauth-complete.test.ts (2 tests) 14ms
82
+
83
+  src/browser/app-connect-controller/utils/memoize-utils.test.ts [queued]
84
+  src/browser/app-connect-controller/utils/session-utils.test.ts 0/9
85
+  ❯ src/browser/app-connect-controller/utils/store-utils.test.ts [queued]
86
+  ❯ src/server/api-client-core/__tests__/errors.test.ts [queued]
87
+  ❯ src/server/hono/hubspot-connect-routes/auth-init-session.test.ts 8/8
88
+  ❯ src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.test.ts [queued]
89
+  ❯ src/server/hono/utils/cors-middleware.test.ts 0/4
90
+  ❯ src/server/utils/cookie-utils.test.ts [queued]
91
+  ❯ src/server/utils/env-utils.test.ts 29/29
92
+  ❯ src/server/utils/jwk-utils.test.ts 0/3
93
+  ❯ src/shared/encoding/base64.test.ts [queued]
94
+  ❯ src/shared/encoding/sha256.test.ts 3/3
95
+
96
+  Test Files 16 passed (29)
97
+  Tests 107 passed (123)
98
+  Start at 13:01:31
99
+  Duration 501ms
100
+ [?2026l ✓ src/browser/app-connect-controller/utils/session-utils.test.ts (9 tests) 6ms
101
+ ✓ src/server/utils/jwk-utils.test.ts (3 tests) 11ms
102
+ ✓ src/server/hono/utils/cors-middleware.test.ts (4 tests) 13ms
85
103
  ✓ src/server/api-client-core/__tests__/errors.test.ts (14 tests) 3ms
86
- ✓ src/server/utils/env-utils.test.ts (29 tests) 5ms
104
+ ✓ src/browser/app-connect-controller/utils/store-utils.test.ts (11 tests) 3ms
105
+ ✓ src/shared/encoding/base64.test.ts (7 tests) 2ms
87
106
  ✓ src/browser/app-connect-controller/utils/memoize-utils.test.ts (4 tests) 2ms
88
- ✓ src/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.test.ts (5 tests) 5ms
89
- ✓ src/server/utils/cookie-utils.test.ts (8 tests) 3ms
107
+ ✓ src/server/utils/cookie-utils.test.ts (8 tests) 2ms
108
+ ✓ src/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.test.ts (5 tests) 2ms
90
109
  ✓ src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.test.ts (10 tests) 3ms
91
- ✓ src/browser/app-connect-controller/utils/store-utils.test.ts (11 tests) 3ms
92
-
93
-
94
-
95
-
96
-
97
-  ❯ src/server/hono/hubspot-connect-routes/utils.test.ts [queued]
98
-  ❯ src/server/utils/jwk-utils.test.ts 3/3
99
-
100
-  Test Files 26 passed (29)
101
-  Tests 179 passed (179)
102
-  Start at 10:44:01
103
-  Duration 601ms
104
- [?2026l ✓ src/server/hono/hubspot-connect-routes/utils.test.ts (7 tests) 2ms
110
+ ✓ src/server/hono/hubspot-connect-routes/utils.test.ts (7 tests) 2ms
105
111
  ✓ src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.test.ts (4 tests) 2ms
106
112
  ✓ src/browser/app-connect-controller/view-state.test.ts (7 tests) 2ms
107
113
 
108
114
   Test Files  29 passed (29)
109
-  Tests  197 passed (197)
110
-  Start at  10:44:01
111
-  Duration  710ms (transform 1.16s, setup 0ms, import 2.09s, tests 434ms, environment 1ms)
115
+  Tests  200 passed (200)
116
+  Start at  13:01:31
117
+  Duration  636ms (transform 1.15s, setup 0ms, import 2.04s, tests 317ms, environment 1ms)
112
118
 
113
119
  [?25h
@@ -9,13 +9,13 @@
9
9
  ℹ tsconfig: tsconfig.server.json
10
10
  ℹ tsconfig: tsconfig.browser.json
11
11
  ℹ Build start
12
- ℹ Cleaning 546 files
12
+ ℹ Cleaning 36 files
13
13
  ℹ dist/browser/react/lovable.js  1.19 kB │ gzip: 0.56 kB
14
- ℹ dist/browser/index.js  0.24 kB │ gzip: 0.15 kB
14
+ ℹ dist/browser/index.js  0.24 kB │ gzip: 0.16 kB
15
15
  ℹ dist/browser/react.js  0.15 kB │ gzip: 0.10 kB
16
- ℹ dist/browser/create-D-oTtxX-.js.map 44.54 kB │ gzip: 12.61 kB
16
+ ℹ dist/browser/create-BYIPBw_G.js.map 44.93 kB │ gzip: 12.70 kB
17
17
  ℹ dist/browser/HubSpotAppConnect-DFe9b90e.js.map 35.91 kB │ gzip: 8.20 kB
18
- ℹ dist/browser/create-D-oTtxX-.js 22.90 kB │ gzip: 7.08 kB
18
+ ℹ dist/browser/create-BYIPBw_G.js 23.13 kB │ gzip: 7.13 kB
19
19
  ℹ dist/browser/HubSpotAppConnect-DFe9b90e.js 17.05 kB │ gzip: 3.98 kB
20
20
  ℹ dist/browser/theme.css-CJbxi5hC.js 14.28 kB │ gzip: 2.37 kB
21
21
  ℹ dist/browser/assets/src/browser/theme-tokens.generated.css.ts.vanilla-C8Rjb8NH.css 10.50 kB │ gzip: 2.06 kB
@@ -33,8 +33,8 @@
33
33
  ℹ dist/browser/react/lovable.d.ts  1.91 kB │ gzip: 0.88 kB
34
34
  ℹ dist/browser/react.d.ts  1.75 kB │ gzip: 0.75 kB
35
35
  ℹ dist/browser/types-DkAmHcZt.d.ts  3.63 kB │ gzip: 1.51 kB
36
- ℹ 23 files, total: 182.99 kB
37
- ✔ Build complete in 1309ms
36
+ ℹ 23 files, total: 183.59 kB
37
+ ✔ Build complete in 1089ms
38
38
  ℹ dist/server/api-client.js  18.71 kB │ gzip: 2.66 kB
39
39
  ℹ dist/server/oauth.js  0.32 kB │ gzip: 0.17 kB
40
40
  ℹ dist/server/lovable.js  0.29 kB │ gzip: 0.16 kB
@@ -521,4 +521,4 @@
521
521
  ℹ dist/server/api-client-core/apis/auth/oauth.generated.d.ts  0.26 kB │ gzip: 0.19 kB
522
522
  ℹ dist/server/api-client-core/apis/crm/lists.generated.d.ts  0.26 kB │ gzip: 0.19 kB
523
523
  ℹ 485 files, total: 3.30 MB
524
- ✔ Build complete in 2019ms
524
+ ✔ Build complete in 1773ms
@@ -1 +1 @@
1
- {"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-runtime.d.ts","../src/shared/logger.ts","../src/browser/types.ts","../src/shared/wire-types.ts","../src/shared/constants.ts","../src/browser/app-connect-controller/utils/store-utils.ts","../src/browser/app-connect-controller/types.ts","../src/browser/app-connect-controller/constants.ts","../src/browser/app-connect-controller/utils/session-utils.ts","../src/browser/app-connect-controller/oauth-complete.ts","../src/browser/app-connect-controller/oauth-popup.ts","../src/browser/app-connect-controller/utils/iframe-utils.ts","../src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts","../src/browser/app-connect-controller/utils/timeout-utils.ts","../src/browser/app-connect-controller/connect-start.ts","../src/browser/app-connect-controller/default-session-storage.ts","../src/browser/app-connect-controller/disconnect.ts","../src/browser/app-connect-controller/init.ts","../src/browser/app-connect-controller/refresh.ts","../src/browser/app-connect-controller/utils/memoize-utils.ts","../src/browser/app-connect-controller/view-state.ts","../src/browser/app-connect-controller/create.ts","../../../node_modules/.pnpm/@vanilla-extract+css@1.20.1/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.cjs.d.ts","../src/browser/theme-tokens.generated.css.ts","../src/browser/theme.css.ts","../src/browser/index.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.6/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.6/node_modules/@vitest/runner/dist/tasks.d-deyaimiu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.6/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/traces.d.d2t_r8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/types/hmrpayload.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/types/customevent.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.6/node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.6/node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.6/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/config.d.a1h_y6jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/rpc.d.b_8spu0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/worker.d.zphpo4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/browser.d.bcoexmfg.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.6/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.6/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.6/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.6/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/global.d.dvssrdq5.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.6_vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7_/node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.6_vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7_/node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.6_vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/index.d.ts","../src/browser/app-connect-controller/connect-start.test.ts","../src/browser/app-connect-controller/init.test.ts","../src/browser/app-connect-controller/oauth-complete.test.ts","../src/browser/app-connect-controller/oauth-popup.test.ts","../src/browser/app-connect-controller/view-state.test.ts","../src/shared/encoding/base64.ts","../src/shared/encoding/sha256.ts","../src/browser/app-connect-controller/utils/crypto-utils.ts","../src/browser/app-connect-controller/utils/encode-utils.ts","../src/browser/app-connect-controller/utils/memoize-utils.test.ts","../src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.test.ts","../src/browser/app-connect-controller/utils/session-utils.test.ts","../src/browser/app-connect-controller/utils/store-utils.test.ts","../src/browser/react/context.ts","../src/browser/react/hooks.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.8_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/reason-parts.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/reasons.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/createbaseuieventdetails.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useinteractions.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtreestore.d.ts","../../../node_modules/.pnpm/reselect@5.1.1/node_modules/reselect/dist/reselect.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/createselector.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/createselectormemoized.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/fasthooks.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/store.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/usestore.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/reactstore.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/storeinspector.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/usetransitionstatus.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/popuptriggermap.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/types/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/types.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/store.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/popupstoreutils.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingrootstore.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/useenhancedclickhandler.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingfocusmanager.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/getstateattributesprops.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/userenderelement.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingportal.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclientpoint.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usedismiss.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefocus.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehovershared.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehover.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverfloatinginteraction.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverreferenceinteraction.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/uselistnavigation.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/userole.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usetypeahead.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloatingrootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/safepolygon.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtree.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/types.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingdelaygroup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclick.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloating.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usesyncedfloatingrootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/useanchorpositioning.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/arrow/menuarrow.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/backdrop/menubackdrop.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/store/menustore.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/root/menurootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menubar/menubarcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/context-menu/root/contextmenuroot.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/context-menu/root/contextmenurootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/store/menuhandle.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/root/menuroot.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/checkbox-item/menucheckboxitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/checkbox-item-indicator/menucheckboxitemindicator.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/group/menugroup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/group-label/menugrouplabel.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/item/menuitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/link-item/menulinkitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/popup/menupopup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/portal/menuportal.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/positioner/menupositioner.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/radio-group/menuradiogroup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/radio-item/menuradioitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/radio-item-indicator/menuradioitemindicator.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenurootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenuroot.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/trigger/menutrigger.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/viewport/menuviewport.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/separator/separator.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/submenu-trigger/menusubmenutrigger.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/index.parts.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/index.d.ts","../src/browser/react/components/button/button.css.ts","../src/browser/react/components/button/button.tsx","../src/browser/react/components/connectbutton/connectbutton.css.ts","../src/browser/react/components/connectbutton/connectbutton.tsx","../src/browser/react/components/icons/chevrondownicon.tsx","../src/browser/react/components/icons/externallinkicon.tsx","../src/browser/react/components/icons/hubspotdatasourceicon.tsx","../src/browser/react/components/icons/logouticon.tsx","../src/browser/react/components/icons/shareicon.tsx","../src/browser/react/components/sharebutton/sharebutton.css.ts","../src/browser/react/components/sharebutton/sharebutton.tsx","../src/browser/react/components/appconnectheader/appconnectheader.css.ts","../src/browser/react/components/appconnectheader/appconnectheader.tsx","../src/browser/react/components/disconnectedbody/disconnectedbody.css.ts","../src/browser/react/components/disconnectedbody/disconnectedbody.tsx","../src/browser/react/components/loadingindicator/loadingindicator.css.ts","../src/browser/react/components/loadingindicator/loadingindicator.tsx","../src/browser/react/components/hubspotappconnect/hubspotappconnect.css.ts","../src/browser/react/components/hubspotappconnect/hubspotappconnect.tsx","../src/browser/react/index.ts","../src/browser/react/lovable/lovablehubspotappconnect.tsx","../src/browser/react/lovable/index.ts","../src/shared/encoding/base64.test.ts","../src/shared/encoding/sha256.test.ts"],"fileIdsList":[[75,187,226,246],[74,223],[74,211],[74,175,193,211],[74,188,196],[74,172,184,185,191,211],[74,175,211],[211],[171,211],[175,211],[172,192,211],[201,211],[74,175,188,201,211],[74,173,211],[184,187,191,192],[169,174,175,194,197,198,199,200,202,203,204,205,206,207,208,209,210,211,212,213,214,215],[201],[74,169,172,174,175,192,194,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,216],[171],[170],[74,187],[74,188,195],[74],[74,188,217],[74,185,188],[74,188,226],[74,188],[218,219,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,244,245],[218,219,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,243,244],[74,185,188,193,217],[74,216],[74,75,171,172,191,220,221,222,224,225],[74,220,226],[220],[74,175,184,185,188,191,192,193,216,226,246],[75,226,239],[74,220],[74,188,225],[74,226],[74,172],[186,189,190],[74,184,185,189],[185,186,188,192,216],[74,165,216],[176],[177],[177,178,180,181,182,183],[180],[74,75,180],[179,180],[165],[166,167],[74,168],[129,130],[72,73],[73],[102,108,126,127,128,131],[138],[138,139],[106,108,109],[106,108],[106],[101,106,117,118],[101,106,117],[125],[101,107],[101],[103],[101,102,103,104,105],[144,145],[144,145,146,147],[144,146],[144],[112],[112,113,114,115],[114],[110,133,134,136],[110,111,123,136],[101,108,110,111,119,136],[116],[101,110,111,119,132,135,136],[110,111,116,119,136],[110,133,134,135,136],[110,116,120,121,122,136],[101,106,108,110,111,116,119,120,121,122,123,124,126,132,133,134,135,136,137,140,141,142,143,148],[101,108,110,111,119,120,133,134,135,136,141],[75,76,80,81,89,149],[75,78,81,85,87,88],[75,79],[75,76,77,80,81,83,89,90,91,92,93,94,95],[75,81],[75,78,81,83],[75,76,79,80,81,82,92,149],[75,79,81,83,84,85],[75,76,80,81,82,84,149],[75,78,79,81,83],[75,76,79,80,81,85,149],[75,79,81,83,84],[75,78,81,82,83],[75,77,80,100],[75,156],[75,155],[75],[75,94,149],[75,87,149],[75,77,86],[75,76,80,81,82,83,149],[75,81,82],[75,80,149],[75,81,95,149],[75,77,81],[75,76,77,96,99],[75,97,99],[75,164,246,250,251,252,253,254,257,258],[74,75,247],[75,164,248,249],[74,75,164,250,260],[74,75,77,99,163,164,259,261,263,264],[75,262],[75,255,256],[74,75,77],[74,75,77,163],[75,164,265],[75,267],[74,75,77,96,265],[75,97],[75,97,98],[75,149,155],[75,149,156]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"407b24a104bd1c82b647c108280c94e08d5cf45b20940a638ae6101273b8ded6","signature":"55a4c5e9f9e2d6074dd006f989ae5761c9411b8ac354af95b793b2444a426588","impliedFormat":99},{"version":"de6e751e0c761e783b890e313374dde38c360aed11fb5b524d7d54fafddcf402","signature":"de349a5f8d6f7d801f4f6069eff776a198214e11aeec487c50b50aa720261d8a","impliedFormat":99},{"version":"5785dbfb0d38c77312f71ee976649f44fb78e9641fa78eaf066f6780bc8d63dc","signature":"63c2df7bd60dbff1001c52e590ecebbde8c17ffca9ab583d0f236979726c7361","impliedFormat":99},{"version":"54daea00f568b293b5f936ecadc4d9a591cf011e66e685da43f9780d73b67775","signature":"004fdb1ac374d91ffe164a5f32c66963b753248b0cf9a5ec397c6fa535d818a6","impliedFormat":99},{"version":"e6b04201d5efe77792c3153d2be5d5133c74f2e9c707933b97651e1a704eff44","signature":"42ca4564036c5faa5a391b3efc9cd3c48b2ba740429f9ee7ec21e97c78041205","impliedFormat":99},{"version":"177167b0df425a8f16fc50caba04a88ff2153e99a660f32f37c28bb6920b931f","impliedFormat":99},{"version":"905dd97fda250d3b1fbdf89d3f38e8018eb601d6a0dfe2c5b6a5972136d6787a","impliedFormat":99},{"version":"e73bd4945f4a1ae1af1d86469e87a316917c1b44d10a98221802f6ab004f9919","impliedFormat":99},{"version":"7b14b6c25a02ae5f1fad2447f2d751c1b31393a7670307db5115056af4971988","signature":"109374d03e08d33adc38813dfdd8a467da96556c81771e122234d3b239e7e1b4","impliedFormat":99},{"version":"79ab7f00c90b1d5a40e95a36493d2cf09ee101108392b454734a293d32e06019","signature":"d7d8c994779c7fe584b3354ccac49089d20c2c99fdc45c19eefaf0d284439d7f","impliedFormat":99},{"version":"e425b68101191475f4d3a30846982b9c3ee5d381f3812e0b8597c1b93a849473","signature":"3b18f5a07b8a4a93d67ffe11bc72323dddad0d2eaf6b2d3f5721ce6f87431ce8","impliedFormat":99},{"version":"5ef912c23524b7835669ee90a5ea636602ccd3922b57f6c600cbcfc56670f932","signature":"a762e03b83bbb41c0131c300433ca63441248727a6131b4c97eca980ed9bef4e","impliedFormat":99},{"version":"33e4719d718b1df3c58d87b50751d01a1b6fa94c6e8f95b815e47ed73766c8cd","signature":"95f8beace3ed894e3e5e3ebaae46c855dfc133e2c63d37663a760c801750f7d4","impliedFormat":99},{"version":"3af7e4689b782cc4a7769ecc3f8a3fe941f0a516d9e630d6e97f1ae9b3c35df7","signature":"4afb855ba41a45d8a77cac68a2467fe60634e92edade046340efa451e0f1fe38","impliedFormat":99},{"version":"204e35686bb23518646947184af42d814b29cc86cea6a25c268185ba8adc46af","impliedFormat":99},{"version":"21325d6b94a1a3a0f2cc1028c239cf87cf01a86b16eabf34af8aa5a0f86d5a95","impliedFormat":99},{"version":"beb7fdf5ffddc22919eade1238dde4801fe7bd2450ce1aecf1f8bd6edf028436","signature":"a1d54f1ceb3d9d4662a725c2bb8fbaa0a2103fd3821f708ef3b8b398f9031c41","impliedFormat":99},{"version":"956f32d0aa7730cd7d844772b423557515adb2ae988098418b73066686800709","impliedFormat":99},{"version":"c2ce3b8e68e587d6b90539e678f9eb76cfdbe2fe9a8a7f679c6c7a88494c8c25","signature":"3f0e5fdc3167c48907ba2b7799026968ca777c6ba644bd3e631f26d92706683b","impliedFormat":99},{"version":"106454bf54dd3894acbc0980a93aad008d4d859ff059c09bfdd706ddfc1307cc","impliedFormat":99},{"version":"7d601442b6e6988b4df400b68381988bd6943542b0d15f0e0b8700f2e6c73b7c","impliedFormat":99},{"version":"6eb5704dff5676bd481938650071eea1664f99c0547e4d7e06e1e569435dbb02","impliedFormat":1},{"version":"84083b9a93a2e291f55ab308485f59c866ff496d3bed4b77f6a486c191b82deb","signature":"747d0c1b48d973e50fe8fad67c18766889129c8d310774a716e5fefc8b4ccd69","impliedFormat":99},{"version":"f57898f71af239f9baf7e8ae45d76079360eedf34f25e9634ad56ca0dc0fbe25","signature":"322e48188eb2292508e887395efa4c30f211f57a543bd7d742f070d8bb3a742a","impliedFormat":99},{"version":"3a719754f6a30eaaa64e7954eeb9b17033dc30365ac35f1efcdd961406770777","signature":"cc19c9bf9fab7255f894311e342d22d0290eb1079f77b3d7bf924e8e6d852d12","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"091546ac9077cddcd7b9479cc2e0c677238bf13e39eab4b13e75046c3328df93","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"9b63533086dc8a7de8d730e118a872a46276b4b3c46720e2c936d5f24304bef2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"cc189d602f4567d3e5f990901cd709c2abc5ecaf0e3e633a3868d3826a1e7990","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"8e4d74dc759f867b3a99320fc292f3237b2877217e6fdcf79ccc2c651d63f27b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"db1b80b1b2890508313276a18a4258e1c1f35e42e1af85674861c94a63313c1a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"38dd0b86c6199f19247e6bdbc30738bedad630d1ee19f6dd1249ce8f591bc441","impliedFormat":99},{"version":"8f6beb5dc71bf4831b65d3e18777e0547e5b4bf1c76b0d5ca9d6456a6f143fe7","signature":"a6b102e51051d4ba8f0414aca714f77f9d36b0abae4382b3c84b48ef668a0bc2","impliedFormat":99},{"version":"88275e11e2a66b5da5db136c95c08d90246be02c840d401ffa631169ff1c0e58","signature":"417b173c779116e1713401f08da4a2758eab0f9bbcf45d8b353b22ddb7aae243","impliedFormat":99},{"version":"f4a5c88174e4d19eb4dc2b2e3036a182c73eea10572020fa6374a417470ae140","impliedFormat":99},{"version":"0330abb8203b04e3af5530cb641b6d3ac2e62e86f812ab0affc14844898c84af","impliedFormat":99},{"version":"074232e3e2da286e6c8b8fd5b9a739d25239511249c4b90810810b76cda076b4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"4b3aac16dcdc4191a112344e948803c09287a125359760993096b474addc9b8b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"01a4544a71c4fb4f4b7a5ee83464673f898e0620418b1006d287f3c6e28fd548","impliedFormat":99},{"version":"3bb01f5ce9efb61c09c11dc224fbd3a07c8fdd1a8646a3afd106851da3a81cc7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"920ecbd6e380859b03719b009494501889e15f5665dbb87e3d02350dc58a23cf","impliedFormat":99},{"version":"519439db41fb64755d7cd247bcd7f4a12f8d7d5b4df908004c855046f4ae3cd0","impliedFormat":99},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"7459d85c80f2971be954b562724106b13d5a2a57e8bfde51723e94e838f6fcbf","impliedFormat":99},{"version":"c24ab9ac84d65b417a807ada25456697bb2adf1189fa80cb240625dfb3e61c42","impliedFormat":99},{"version":"03952163760a479246853f7ee56fd231d703e8d6f78deb353c7892efeef3db3e","impliedFormat":99},{"version":"ad98c359284db8c984e88949b2c3394e4a35158880767b772491489788a6c5a0","impliedFormat":99},{"version":"5c117cca0b75ed634fe3085142a931df2e2214e26f2bbcb34c592b767f13c1e8","impliedFormat":99},{"version":"773c18e2bcc18598df8f8b2be930eb26b22608edf368e42e9ca3484828ec4122","impliedFormat":99},{"version":"37f96daaddc2dd96712b2e86f3901f477ac01a5c2539b1bc07fd609d62039ee1","impliedFormat":1},{"version":"4faca872dbd194a17b3ee267bd8ddc3daf3d16df96f4e43a02c7d9a862022c4f","impliedFormat":99},{"version":"f89aeba83b1744a0d697c1b7fb8a06d8dc4cf7c0d469d2419772121f499efa8e","impliedFormat":99},{"version":"144a4e5780b800c0553949169f50be285eccbdb0298afd83ef2ae03fef77e2d2","impliedFormat":99},{"version":"66aeb47bf8638d6767f7b4ff684c2d794391c981590073025e98f98e1afed499","impliedFormat":99},{"version":"26748898fec8579096c776866e8e6f07754845b3d08f5ae98c3a59baa9e85c2e","impliedFormat":99},{"version":"6d805abd62920edbd9ed4b20be26d040d01529f3ce53fdab9ca4d0fa9b589f02","impliedFormat":99},{"version":"edbeff52e73b0ff82898142aaf8ffb336910a8ccdfc31b79960ea4ad4c9f407b","impliedFormat":99},{"version":"b64a8c7a27133db3f181199d21c0c582e86f38ba57a031a126b77229526b4916","impliedFormat":99},{"version":"4d857105510df8011cfb5b3769dec55624a1df92e85d399cd03bc82bb89d090c","impliedFormat":99},{"version":"8eca47167dadd486582ecd4e41f7fba6ae66cc4a4c5202f1f7acf34129a0dadf","impliedFormat":99},{"version":"0d121799b2cbac398e84a4708fcd82f980f33bf3ac7721a3cf9db9f28d9eb2b2","impliedFormat":99},{"version":"b45c2c7da9952665f78397fccb03f67535535939497b11308c9409c8505eb32a","impliedFormat":99},{"version":"755fc4f6a7aca9da7b38e1f7a39abd36538a72711763c741f1bbbf36f999b654","impliedFormat":99},{"version":"c4e79e849fd94553e07d7386552c472ea4f4fbfc9d280c012018fe7a6c50e598","impliedFormat":99},{"version":"062c0cf9641ca90ff3ad8edc61c2e06299fe6585fb9a4014a8acdf7f11810d51","impliedFormat":99},{"version":"f68896096cba0f06ffbf39a67c2280f6f2e5b90c75db56a3f9ae5f7f3bb54460","impliedFormat":99},{"version":"97b02501eb45f487174d5a0ff89b6a95690d50e9eae242e2162118edd5f2705c","impliedFormat":99},{"version":"425a03d68f43164e0214b1c333cd58e777d4186f412b530467c18ef0d2b37a80","impliedFormat":99},{"version":"26cfaec143443411bc7d5363f274f885ced430b8f4bee25a81f7827248848d7b","impliedFormat":99},{"version":"f9a591e5fe0be6728cc84e70325aacafffcf203b051ddef37d65651b43c05056","impliedFormat":99},{"version":"293c0a3e323608f4e20667acc74d7bdba727db954b840ee1db03f2fd5807c761","impliedFormat":99},{"version":"de8b4c367880fe92a0a740b706f08a46d1cf9e3981d55c2701e82423e81ef0ef","impliedFormat":99},{"version":"4a056a71ffda9ff3f2adec60c0189c906f7e46976a0c6650fa196674ff8c4dff","impliedFormat":99},{"version":"3a3fd6f5ca85ceeb293f2a010125f9455404958122b6dd0ba0b34f7dab74feb5","impliedFormat":99},{"version":"42b58bc8da11e9181ecf4ac498d41c74930c73c8ebef091474d0f8cf971b50ac","impliedFormat":99},{"version":"9e003336714371c98108af3dc53342829039327f8b1db97d826ca81805746b7f","impliedFormat":99},{"version":"d8954254110123f6f5c9fda6280674f6b853d47df7fc41c2090e741dc8b6b627","impliedFormat":99},{"version":"cc141bc69488825723b0d638491da8779c4c3e515712d5e1e63709e0136dfb2b","impliedFormat":99},{"version":"df600fddb7f36e4c4b3cc4e36073d0099a5b6352b88be02decf63869c8886313","impliedFormat":99},{"version":"9fe94c8f6b36cb41acd30d89567761a52246932dece21e1ce104baa2e84b07ac","impliedFormat":99},{"version":"5560b9471d610c2543dfaa66a88f7b7cf05cdac61a698d4106b3845b7b7b3b29","impliedFormat":99},{"version":"e80a0ca19ba1ea6d815b5017ce248fc817c076522d1b0f42f062a784897a30a7","impliedFormat":99},{"version":"e96bd939a55117abe6ccbc02839f2f4d9ce3893368fea528ca91c59ebddf496f","impliedFormat":99},{"version":"81f6bf27eedb1ed92466abfcee33795a6b2304691ae01f42e60f8c76894fade7","impliedFormat":99},{"version":"8ae2e6733fc535c43c514f871d28cb0fe5926238dbc3d64c978a1f6f00d73296","impliedFormat":99},{"version":"26a0c2d883e1ed55ba00810d957dedcde5d16d637e33063686e2bc3f58a5c64a","impliedFormat":99},{"version":"68099697ac4e919f6f1832389f32eb67d3d94fae744967f33e0cbc049a222a3a","impliedFormat":99},{"version":"bfb900f7de2066a4be644c269285fda8ccca40b065476a27b082173014d00467","impliedFormat":99},{"version":"fea750ade335a63f707e7fd7410cc11b81805f6b454880e1ed0e178c08fae8ee","impliedFormat":99},{"version":"7e2b8299e85423435784cc6244e2d559ea862d226e7b0ec871c6a53f88e5139f","impliedFormat":99},{"version":"51b6335f5a8e177306647558a3eefa1f6abe259b283c6462223be3d7d0f33300","impliedFormat":99},{"version":"31a63b6b49338cc6ddb1a318beda72d3d8fd523e50f8dd5d5ff3accd39a490d7","impliedFormat":99},{"version":"8fc7615fb8fa095406f5a58b1b817b9a685c516058877a3d2c06d4545fdf5dbe","impliedFormat":99},{"version":"f70e9fcb8172de822a729503eefece37f169e063cd7f97a978e3913dc872a82f","impliedFormat":99},{"version":"d5da26af31358a4883edb6112879018b14c7c1fbcc457aa36961b03ee17bedea","impliedFormat":99},{"version":"4e93fb2d2c59bbc1f1a5211b36c447efe4d0af568d682ef1e5eb5f84ca6ccc2e","impliedFormat":99},{"version":"b6cc07bc56c7418ab500421d2629c26acdb6ec2e9af85c5e2c5d7e8c9f92566d","impliedFormat":99},{"version":"3d13fe973e92e708ad3dbbf1b2385bb799f8e70c8da71a1ac72fcb5521c8a5e9","impliedFormat":99},{"version":"16f3f66b5182e57c554d0e374e29fdc0a899c1321b3f94fa997d19abf9faf931","impliedFormat":99},{"version":"df459c67b9eef71318851331b23926961f0476b4b9d1674addcb627eabe583b2","impliedFormat":99},{"version":"b93915733f1802a8d9093116a5e660385afda0f72a5bab9c9bd356549a61f1cd","impliedFormat":99},{"version":"1dfb1491b28cf3734f3c07745a56d7758a12d546f81a70fbfe8ee9faeb528c54","impliedFormat":99},{"version":"42b00a511331c7f79039ae3be83fd5941b212ce193654c3ac5d82157227b69ad","impliedFormat":99},{"version":"1a5914065c7c6e2b6e98437c4ba6059bfeda3441f0f55cb07189df1e78698922","impliedFormat":99},{"version":"66d3f42196f32c639d8240bbd520852abc024d673c713bc5ab26b4bdde750a74","impliedFormat":99},{"version":"18ce9175445b3edec11bbca1c682a8f3919e74fb3504abd883ac462ea8089a0d","impliedFormat":99},{"version":"aec96f94a27fc61d5f4ead202628e811199f887d48bb7614b7e1706b629cd1ba","impliedFormat":99},{"version":"2ab01a0368f65b3b891e25416ae785dca54808f70d8f6204b99589ed4f7f1d2f","impliedFormat":99},{"version":"efd87ca2190e2d0f905e30343443c8d2f0d32cb2b1c9e05b2cb97b0061abec08","impliedFormat":99},{"version":"3323edd649d2c85d3528912cdf6fb770258d59d75241575fcf25c7850837de79","impliedFormat":99},{"version":"e0c8deca5262879f11ee84fe6664dcd197a60f546930363bf2d78d37c3138c69","impliedFormat":99},{"version":"3b8ba0456ce7763676505d103eb336a6b97659d6fc8a7d7d186558ea0b8c7ea5","impliedFormat":99},{"version":"7bae4a3f50a844fcbdc504d717f5f13dd7178ca99f131b230305db6b55e1dbc3","impliedFormat":99},{"version":"f3a4668046e42e9f5ebfdc8b79238eb27c399443dd1dcfcd4c4c3652692ed031","impliedFormat":99},{"version":"07160ad59d49c6f2999f9703542918df3eb1ef93857bc560b4baa7c6775d22ce","impliedFormat":99},{"version":"642d33e1e66ab109cdcc5a5b5535535768c8b642fd5ef75de4d77de3a5632601","impliedFormat":99},{"version":"c23b9684ab48ea6956f0a510c3cf724277fa457efa7ff85d5907f4e4290ba0aa","impliedFormat":99},{"version":"3859635347ecc10d4ff5dd68bde66420f5a8539b7313dd62020aa025208d2222","impliedFormat":99},{"version":"f49e8feb6d7473579a5ceb5872598bbc1be3723da653993472720629c72fa0ba","impliedFormat":99},{"version":"14c727434cfe6a078b51a88d005033ad01a76bec36292d7b47369d82e48e1cb0","impliedFormat":99},{"version":"76a0fc58ff835fb7502357e4c278dbdb7399f1cf126dead051df9ddb87b586c0","signature":"96bd65650e4d85a16360de962c181f6ce7120f67c7219651d49d01cef241210b","impliedFormat":99},{"version":"a5261652e513e8dac9cba83c92d42655f0160d03a3e53e3717b8a8478b1af4be","signature":"dff2f9c0ddd1bc8f13c656dd33efc2d0d1cc151cb184b433e87296d8b935a181","impliedFormat":99},{"version":"22ab0c23b5ea85800106fb0d37511ed81f70a1a7023f8a91ebb7939e663bda34","signature":"430269ee0899a7c7e08ea98ccbe756fbf2c5789046e30356e73ebf4366e9b2e7","impliedFormat":99},{"version":"ea0c2c49fd65128ac467a07769214768474e1e167be8921f9e84d25846071ee3","impliedFormat":99},{"version":"c647331286df3f858cbd84e409c2fc3396b21dfee949f905560034fbb4168661","signature":"974cf39b95102a109d0c24d0a9f9fd64c1362851f2164121bdd4fa5fd81b3796","impliedFormat":99},{"version":"079e766f00ec70afdbe8da3b8b32fb8ef9a6fe6f1b38cc96b6970550c537bb1e","signature":"74fc0d65517b1d1121a5762e3f42b8c043517d4d368a50948e249163f2e25ca1","impliedFormat":99},{"version":"bef7f492c73eb95204add9d2d028ab8a4fd80dc5a64e509b9d48d5c95102fefb","signature":"beba36f63962c49ba38eae274a87a185ba00480541e7bd5a9c2e4647fde28f9b","impliedFormat":99},{"version":"c0194d10fe7ad387eb6628c7fc9682f28195e6e5c8371812c300079b2a57cc0b","signature":"240aa035c06cd06dfa2adf38760b29831cf0e9915c6a0d983e73f2e6d98db36b","impliedFormat":99},{"version":"589250f6a0fd7184aff9a96c3ad106683fd1f3e274ebc6755da04ef3fa215909","signature":"c89417acd35d8a5b8f1391bfd2d2414426dc657c7c4f88127a0293b5c7d31b52","impliedFormat":99},{"version":"aa11b40e8b90a7e81efcb8b2e19c4c1638ba90c6eda84929472d35b5d04c3f73","signature":"8cb7d3f6fa905df0aa41e82350c9c30e3ce7d106765460068897f82d66531f00","impliedFormat":99},{"version":"af33d6b73e168e87194810551cd91be50effeaa1ac80866c2da82bd60e1cd6fb","signature":"b294c69b6b3e74e6ac727fdcb2a6ac3f93469c5e8fb7dbc0a2767282777cda97","impliedFormat":99},{"version":"18b265aa52209c724b23722673d94237abcc1254d911ab1b0ce0649ac7788ee4","signature":"55d636d4a7989165a31e64fe77e49f67ddb8a0af6ff21a2b5e2c209037d7f659","impliedFormat":99},{"version":"628436a6d2a812d566967b11e5c572619ac2afb39451f485a506d64d317db8bc","impliedFormat":99},{"version":"01feb8c57ba5da706fc523412d6752a74682a4dae5b83535b8bbb792d717474f","signature":"4cf8af5b45737588313400a3ec89839de2508dfe13a8ab7fb8cac800854a7b59","impliedFormat":99},{"version":"7e8342f3f79fd9361a10aa8752a74e8964722b0b28c0a6c576d5bf731a072898","impliedFormat":99},{"version":"2987acfb0e8bb4a6064bc06f8547f8c3f5dd8ae2c23edbcecec9739fdcb5bb23","signature":"efb26f5211a6a84f9137fd6621caf304e00b061745031f7f006af228f11a49bd","impliedFormat":99},{"version":"ed250d5083c4c13c6c362353180c87cc7f894a2118a53867368ae339f8d0bbb0","signature":"6a70b91867e0e6bf86e492ce5d11061eb72b0d1d2f7ec297a565db1b3c253437","impliedFormat":99},{"version":"11e994add6593662c81f5ee86bd7f9bd3f4ef29b6a95a009f79ab99a613a81e4","signature":"ed522c8819f20b1fd6cc851db4e318cd5c613dbb15a4052484f005e347d6a4f8","impliedFormat":99},{"version":"f7c41ff95f4467ea2310eefd744901ffe501614744b9e28ed025a7dc2f036e22","impliedFormat":99},{"version":"d9dd64f0d265efc7863e69e237334c22649294e345759653b5ed3dad3c0de51d","impliedFormat":99},{"version":"ae755f1eed3abd97cba754b98c3d1cb4df9cd85a215fc4d0e67a9a820630d1ae","signature":"b8ec5b079fd63b0df494c255c58efece20c5eb1d0b7a0173ae8bdf89f06acafa","impliedFormat":99},{"version":"5c80337a6727599acdadb3e16df0200683543e54fcf640e1f98c5d2c4fa20cda","impliedFormat":99},{"version":"38e3da8d8e1114aecba17bb2353050bac90ed935f42fa6771199352921c33017","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"3531e5a62ede7a7264f34340c5a6ba805908ff7dfdf15f5c34fe2729a9218fa9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99}],"root":[[76,96],[98,100],[150,164],[247,270]],"options":{"allowImportingTsExtensions":true,"allowJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"jsx":4,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"rewriteRelativeImportExtensions":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"target":11,"tsBuildInfoFile":"./tsconfig.browser.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[223,1],[224,2],[212,3],[194,4],[197,5],[192,6],[210,7],[175,8],[213,9],[198,8],[199,10],[214,8],[208,11],[200,8],[202,12],[203,8],[204,13],[201,8],[174,14],[205,7],[206,8],[215,15],[207,3],[216,16],[209,17],[211,18],[172,19],[171,20],[188,21],[196,22],[185,23],[218,24],[219,25],[228,25],[227,26],[230,27],[229,27],[246,28],[245,29],[231,27],[232,27],[233,30],[234,31],[235,24],[236,26],[238,25],[237,27],[226,32],[221,33],[225,34],[220,35],[240,36],[239,37],[244,27],[241,38],[242,27],[222,39],[243,27],[187,40],[191,41],[190,42],[189,43],[217,44],[179,23],[177,45],[178,46],[184,47],[182,48],[183,49],[181,50],[193,23],[166,51],[168,52],[169,53],[131,54],[74,55],[75,23],[97,56],[132,57],[139,58],[140,59],[110,60],[109,61],[133,60],[117,62],[119,63],[118,64],[126,65],[108,66],[102,67],[104,68],[106,69],[107,67],[146,70],[148,71],[147,72],[145,73],[113,74],[116,75],[114,74],[115,76],[135,77],[124,78],[120,79],[121,62],[142,80],[136,81],[122,82],[141,83],[123,84],[149,85],[143,86],[150,87],[89,88],[82,89],[96,90],[90,91],[91,92],[151,93],[92,94],[152,95],[84,96],[153,97],[85,98],[93,99],[81,100],[157,101],[158,102],[86,103],[159,104],[94,103],[160,105],[87,106],[161,107],[83,108],[162,109],[80,103],[88,103],[154,110],[95,111],[100,112],[258,113],[259,114],[247,113],[248,115],[249,113],[250,116],[260,113],[261,117],[264,113],[265,118],[251,103],[252,103],[253,103],[254,103],[255,103],[262,113],[263,119],[256,113],[257,120],[163,121],[164,122],[266,123],[268,124],[267,125],[98,126],[99,127],[77,103],[79,103],[269,128],[155,103],[270,129],[156,102],[76,103],[78,103]],"affectedFilesPendingEmit":[[150,17],[89,17],[82,17],[96,17],[90,17],[91,17],[151,17],[92,17],[152,17],[84,17],[153,17],[85,17],[93,17],[81,17],[157,17],[158,17],[86,17],[159,17],[94,17],[160,17],[87,17],[161,17],[83,17],[162,17],[80,17],[88,17],[154,17],[95,17],[100,17],[258,17],[259,17],[247,17],[248,17],[249,17],[250,17],[260,17],[261,17],[264,17],[265,17],[251,17],[252,17],[253,17],[254,17],[255,17],[262,17],[263,17],[256,17],[257,17],[163,17],[164,17],[266,17],[268,17],[267,17],[98,17],[99,17],[77,17],[79,17],[269,17],[155,17],[270,17],[156,17],[76,17],[78,17]],"emitSignatures":[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,98,99,100,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270],"version":"6.0.3"}
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-runtime.d.ts","../src/shared/logger.ts","../src/browser/types.ts","../src/shared/wire-types.ts","../src/shared/constants.ts","../src/browser/app-connect-controller/utils/store-utils.ts","../src/browser/app-connect-controller/types.ts","../src/browser/app-connect-controller/constants.ts","../src/browser/app-connect-controller/utils/session-utils.ts","../src/browser/app-connect-controller/oauth-complete.ts","../src/browser/app-connect-controller/oauth-popup.ts","../src/browser/app-connect-controller/utils/iframe-utils.ts","../src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts","../src/browser/app-connect-controller/utils/timeout-utils.ts","../src/browser/app-connect-controller/connect-start.ts","../src/browser/app-connect-controller/default-session-storage.ts","../src/browser/app-connect-controller/disconnect.ts","../src/browser/app-connect-controller/init.ts","../src/browser/app-connect-controller/refresh.ts","../src/browser/app-connect-controller/utils/memoize-utils.ts","../src/browser/app-connect-controller/view-state.ts","../src/browser/app-connect-controller/create.ts","../../../node_modules/.pnpm/@vanilla-extract+css@1.20.1/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.cjs.d.ts","../src/browser/theme-tokens.generated.css.ts","../src/browser/theme.css.ts","../src/browser/index.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.6/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/types.d-bcelap-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.6/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.6/node_modules/@vitest/runner/dist/tasks.d-deyaimiu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.6/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/traces.d.d2t_r8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/types/hmrpayload.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/dist/node/chunks/modulerunnertransport.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/types/customevent.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.6/node_modules/@vitest/snapshot/dist/environment.d-dojxxzv9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.6/node_modules/@vitest/snapshot/dist/rawsnapshot.d-d_x3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.6/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/config.d.a1h_y6jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/environment.d.crsxczp1.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/rpc.d.b_8spu0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/worker.d.zphpo4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/browser.d.bcoexmfg.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.6/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.6/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.6/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.6/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/benchmark.d.daahlpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/global.d.dvssrdq5.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.6_vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7_/node_modules/@vitest/mocker/dist/types.d-bji5eawu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.6_vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7_/node_modules/@vitest/mocker/dist/index.d-b41z0auw.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.6_vite@8.0.7_@types+node@25.9.0_esbuild@0.27.7_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/suite.d.udjtyagw.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/chunks/evaluatedmodules.d.bxj5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.6_@types+node@25.9.0_esbuild@0.27.7/node_modules/vitest/dist/index.d.ts","../src/browser/app-connect-controller/connect-start.test.ts","../src/browser/app-connect-controller/init.test.ts","../src/browser/app-connect-controller/oauth-complete.test.ts","../src/browser/app-connect-controller/oauth-popup.test.ts","../src/browser/app-connect-controller/view-state.test.ts","../src/shared/encoding/base64.ts","../src/shared/encoding/sha256.ts","../src/browser/app-connect-controller/utils/crypto-utils.ts","../src/browser/app-connect-controller/utils/encode-utils.ts","../src/browser/app-connect-controller/utils/memoize-utils.test.ts","../src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.test.ts","../src/browser/app-connect-controller/utils/session-utils.test.ts","../src/browser/app-connect-controller/utils/store-utils.test.ts","../src/browser/react/context.ts","../src/browser/react/hooks.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.8_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/reason-parts.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/reasons.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/createbaseuieventdetails.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useinteractions.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtreestore.d.ts","../../../node_modules/.pnpm/reselect@5.1.1/node_modules/reselect/dist/reselect.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/createselector.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/createselectormemoized.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/fasthooks.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/store.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/usestore.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/reactstore.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/storeinspector.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/store/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/usetransitionstatus.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/popuptriggermap.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/types/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/types.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/store.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/popupstoreutils.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/popups/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingrootstore.d.ts","../../../node_modules/.pnpm/@base-ui+utils@0.2.8_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/utils/esm/useenhancedclickhandler.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingfocusmanager.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/getstateattributesprops.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/internals/userenderelement.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingportal.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclientpoint.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usedismiss.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefocus.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehovershared.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehover.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverfloatinginteraction.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverreferenceinteraction.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/uselistnavigation.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/userole.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usetypeahead.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloatingrootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/safepolygon.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtree.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/types.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/components/floatingdelaygroup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclick.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloating.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/hooks/usesyncedfloatingrootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/floating-ui-react/index.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/utils/useanchorpositioning.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/arrow/menuarrow.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/backdrop/menubackdrop.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/store/menustore.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/root/menurootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menubar/menubarcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/context-menu/root/contextmenuroot.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/context-menu/root/contextmenurootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/store/menuhandle.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/root/menuroot.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/checkbox-item/menucheckboxitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/checkbox-item-indicator/menucheckboxitemindicator.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/group/menugroup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/group-label/menugrouplabel.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/item/menuitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/link-item/menulinkitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/popup/menupopup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/portal/menuportal.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/positioner/menupositioner.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/radio-group/menuradiogroup.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/radio-item/menuradioitem.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/radio-item-indicator/menuradioitemindicator.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenurootcontext.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenuroot.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/trigger/menutrigger.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/viewport/menuviewport.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/separator/separator.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/submenu-trigger/menusubmenutrigger.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/index.parts.d.ts","../../../node_modules/.pnpm/@base-ui+react@1.4.1_@types+react@19.2.14_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@base-ui/react/esm/menu/index.d.ts","../src/browser/react/components/button/button.css.ts","../src/browser/react/components/button/button.tsx","../src/browser/react/components/connectbutton/connectbutton.css.ts","../src/browser/react/components/connectbutton/connectbutton.tsx","../src/browser/react/components/icons/chevrondownicon.tsx","../src/browser/react/components/icons/externallinkicon.tsx","../src/browser/react/components/icons/hubspotdatasourceicon.tsx","../src/browser/react/components/icons/logouticon.tsx","../src/browser/react/components/icons/shareicon.tsx","../src/browser/react/components/sharebutton/sharebutton.css.ts","../src/browser/react/components/sharebutton/sharebutton.tsx","../src/browser/react/components/appconnectheader/appconnectheader.css.ts","../src/browser/react/components/appconnectheader/appconnectheader.tsx","../src/browser/react/components/disconnectedbody/disconnectedbody.css.ts","../src/browser/react/components/disconnectedbody/disconnectedbody.tsx","../src/browser/react/components/loadingindicator/loadingindicator.css.ts","../src/browser/react/components/loadingindicator/loadingindicator.tsx","../src/browser/react/components/hubspotappconnect/hubspotappconnect.css.ts","../src/browser/react/components/hubspotappconnect/hubspotappconnect.tsx","../src/browser/react/index.ts","../src/browser/react/lovable/lovablehubspotappconnect.tsx","../src/browser/react/lovable/index.ts","../src/shared/encoding/base64.test.ts","../src/shared/encoding/sha256.test.ts"],"fileIdsList":[[75,187,226,246],[74,223],[74,211],[74,175,193,211],[74,188,196],[74,172,184,185,191,211],[74,175,211],[211],[171,211],[175,211],[172,192,211],[201,211],[74,175,188,201,211],[74,173,211],[184,187,191,192],[169,174,175,194,197,198,199,200,202,203,204,205,206,207,208,209,210,211,212,213,214,215],[201],[74,169,172,174,175,192,194,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,216],[171],[170],[74,187],[74,188,195],[74],[74,188,217],[74,185,188],[74,188,226],[74,188],[218,219,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,244,245],[218,219,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,243,244],[74,185,188,193,217],[74,216],[74,75,171,172,191,220,221,222,224,225],[74,220,226],[220],[74,175,184,185,188,191,192,193,216,226,246],[75,226,239],[74,220],[74,188,225],[74,226],[74,172],[186,189,190],[74,184,185,189],[185,186,188,192,216],[74,165,216],[176],[177],[177,178,180,181,182,183],[180],[74,75,180],[179,180],[165],[166,167],[74,168],[129,130],[72,73],[73],[102,108,126,127,128,131],[138],[138,139],[106,108,109],[106,108],[106],[101,106,117,118],[101,106,117],[125],[101,107],[101],[103],[101,102,103,104,105],[144,145],[144,145,146,147],[144,146],[144],[112],[112,113,114,115],[114],[110,133,134,136],[110,111,123,136],[101,108,110,111,119,136],[116],[101,110,111,119,132,135,136],[110,111,116,119,136],[110,133,134,135,136],[110,116,120,121,122,136],[101,106,108,110,111,116,119,120,121,122,123,124,126,132,133,134,135,136,137,140,141,142,143,148],[101,108,110,111,119,120,133,134,135,136,141],[75,76,80,81,89,149],[75,78,81,85,87,88],[75,79],[75,76,77,80,81,83,89,90,91,92,93,94,95],[75,81],[75,78,81,83],[75,76,79,80,81,82,85,92,149],[75,79,81,83,84,85],[75,76,80,81,82,84,149],[75,78,79,81,83],[75,76,79,80,81,85,149],[75,79,81,83,84],[75,78,81,82,83],[75,77,80,100],[75,156],[75,155],[75],[75,94,149],[75,87,149],[75,77,86],[75,76,80,81,82,83,149],[75,81,82],[75,80,149],[75,81,95,149],[75,77,81],[75,76,77,96,99],[75,97,99],[75,164,246,250,251,252,253,254,257,258],[74,75,247],[75,164,248,249],[74,75,164,250,260],[74,75,77,99,163,164,259,261,263,264],[75,262],[75,255,256],[74,75,77],[74,75,77,163],[75,164,265],[75,267],[74,75,77,96,265],[75,97],[75,97,98],[75,149,155],[75,149,156]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"407b24a104bd1c82b647c108280c94e08d5cf45b20940a638ae6101273b8ded6","signature":"55a4c5e9f9e2d6074dd006f989ae5761c9411b8ac354af95b793b2444a426588","impliedFormat":99},{"version":"de6e751e0c761e783b890e313374dde38c360aed11fb5b524d7d54fafddcf402","signature":"de349a5f8d6f7d801f4f6069eff776a198214e11aeec487c50b50aa720261d8a","impliedFormat":99},{"version":"5785dbfb0d38c77312f71ee976649f44fb78e9641fa78eaf066f6780bc8d63dc","signature":"63c2df7bd60dbff1001c52e590ecebbde8c17ffca9ab583d0f236979726c7361","impliedFormat":99},{"version":"54daea00f568b293b5f936ecadc4d9a591cf011e66e685da43f9780d73b67775","signature":"004fdb1ac374d91ffe164a5f32c66963b753248b0cf9a5ec397c6fa535d818a6","impliedFormat":99},{"version":"e6b04201d5efe77792c3153d2be5d5133c74f2e9c707933b97651e1a704eff44","signature":"42ca4564036c5faa5a391b3efc9cd3c48b2ba740429f9ee7ec21e97c78041205","impliedFormat":99},{"version":"177167b0df425a8f16fc50caba04a88ff2153e99a660f32f37c28bb6920b931f","impliedFormat":99},{"version":"905dd97fda250d3b1fbdf89d3f38e8018eb601d6a0dfe2c5b6a5972136d6787a","impliedFormat":99},{"version":"e73bd4945f4a1ae1af1d86469e87a316917c1b44d10a98221802f6ab004f9919","impliedFormat":99},{"version":"7b14b6c25a02ae5f1fad2447f2d751c1b31393a7670307db5115056af4971988","impliedFormat":99},{"version":"6575ab2063d9f1e4880c8edebefb36fdb3a507e4b8ba8ec990e91bfb12169741","signature":"871d817a5d4296909bd25a768c64a22b5fc625b4fb4dd2c20fc5a29a997654ec","impliedFormat":99},{"version":"e425b68101191475f4d3a30846982b9c3ee5d381f3812e0b8597c1b93a849473","signature":"3b18f5a07b8a4a93d67ffe11bc72323dddad0d2eaf6b2d3f5721ce6f87431ce8","impliedFormat":99},{"version":"5ef912c23524b7835669ee90a5ea636602ccd3922b57f6c600cbcfc56670f932","signature":"a762e03b83bbb41c0131c300433ca63441248727a6131b4c97eca980ed9bef4e","impliedFormat":99},{"version":"33e4719d718b1df3c58d87b50751d01a1b6fa94c6e8f95b815e47ed73766c8cd","signature":"95f8beace3ed894e3e5e3ebaae46c855dfc133e2c63d37663a760c801750f7d4","impliedFormat":99},{"version":"3af7e4689b782cc4a7769ecc3f8a3fe941f0a516d9e630d6e97f1ae9b3c35df7","impliedFormat":99},{"version":"204e35686bb23518646947184af42d814b29cc86cea6a25c268185ba8adc46af","impliedFormat":99},{"version":"21325d6b94a1a3a0f2cc1028c239cf87cf01a86b16eabf34af8aa5a0f86d5a95","impliedFormat":99},{"version":"b5df721123eb847985333bb3f314bab61e07d130c91dbb2f93452796af05ccc8","signature":"a1d54f1ceb3d9d4662a725c2bb8fbaa0a2103fd3821f708ef3b8b398f9031c41","impliedFormat":99},{"version":"956f32d0aa7730cd7d844772b423557515adb2ae988098418b73066686800709","impliedFormat":99},{"version":"c2ce3b8e68e587d6b90539e678f9eb76cfdbe2fe9a8a7f679c6c7a88494c8c25","signature":"3f0e5fdc3167c48907ba2b7799026968ca777c6ba644bd3e631f26d92706683b","impliedFormat":99},{"version":"106454bf54dd3894acbc0980a93aad008d4d859ff059c09bfdd706ddfc1307cc","impliedFormat":99},{"version":"7d601442b6e6988b4df400b68381988bd6943542b0d15f0e0b8700f2e6c73b7c","impliedFormat":99},{"version":"6eb5704dff5676bd481938650071eea1664f99c0547e4d7e06e1e569435dbb02","impliedFormat":1},{"version":"84083b9a93a2e291f55ab308485f59c866ff496d3bed4b77f6a486c191b82deb","signature":"747d0c1b48d973e50fe8fad67c18766889129c8d310774a716e5fefc8b4ccd69","impliedFormat":99},{"version":"f57898f71af239f9baf7e8ae45d76079360eedf34f25e9634ad56ca0dc0fbe25","signature":"322e48188eb2292508e887395efa4c30f211f57a543bd7d742f070d8bb3a742a","impliedFormat":99},{"version":"3a719754f6a30eaaa64e7954eeb9b17033dc30365ac35f1efcdd961406770777","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"091546ac9077cddcd7b9479cc2e0c677238bf13e39eab4b13e75046c3328df93","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"9b63533086dc8a7de8d730e118a872a46276b4b3c46720e2c936d5f24304bef2","impliedFormat":99},{"version":"282099020ac1349169d44a4af5d975d83747f5bd0b2810c5184e980fc7daaa16","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"8e4d74dc759f867b3a99320fc292f3237b2877217e6fdcf79ccc2c651d63f27b","impliedFormat":99},{"version":"598fbb316db7fa720950a08664b9daa5f43d5f8a6d55bf1293907c97342917d6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"38dd0b86c6199f19247e6bdbc30738bedad630d1ee19f6dd1249ce8f591bc441","impliedFormat":99},{"version":"8f6beb5dc71bf4831b65d3e18777e0547e5b4bf1c76b0d5ca9d6456a6f143fe7","signature":"a6b102e51051d4ba8f0414aca714f77f9d36b0abae4382b3c84b48ef668a0bc2","impliedFormat":99},{"version":"88275e11e2a66b5da5db136c95c08d90246be02c840d401ffa631169ff1c0e58","signature":"417b173c779116e1713401f08da4a2758eab0f9bbcf45d8b353b22ddb7aae243","impliedFormat":99},{"version":"f4a5c88174e4d19eb4dc2b2e3036a182c73eea10572020fa6374a417470ae140","impliedFormat":99},{"version":"0330abb8203b04e3af5530cb641b6d3ac2e62e86f812ab0affc14844898c84af","impliedFormat":99},{"version":"074232e3e2da286e6c8b8fd5b9a739d25239511249c4b90810810b76cda076b4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"4b3aac16dcdc4191a112344e948803c09287a125359760993096b474addc9b8b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"01a4544a71c4fb4f4b7a5ee83464673f898e0620418b1006d287f3c6e28fd548","impliedFormat":99},{"version":"3bb01f5ce9efb61c09c11dc224fbd3a07c8fdd1a8646a3afd106851da3a81cc7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"920ecbd6e380859b03719b009494501889e15f5665dbb87e3d02350dc58a23cf","impliedFormat":99},{"version":"519439db41fb64755d7cd247bcd7f4a12f8d7d5b4df908004c855046f4ae3cd0","impliedFormat":99},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"7459d85c80f2971be954b562724106b13d5a2a57e8bfde51723e94e838f6fcbf","impliedFormat":99},{"version":"c24ab9ac84d65b417a807ada25456697bb2adf1189fa80cb240625dfb3e61c42","impliedFormat":99},{"version":"03952163760a479246853f7ee56fd231d703e8d6f78deb353c7892efeef3db3e","impliedFormat":99},{"version":"ad98c359284db8c984e88949b2c3394e4a35158880767b772491489788a6c5a0","impliedFormat":99},{"version":"5c117cca0b75ed634fe3085142a931df2e2214e26f2bbcb34c592b767f13c1e8","impliedFormat":99},{"version":"773c18e2bcc18598df8f8b2be930eb26b22608edf368e42e9ca3484828ec4122","impliedFormat":99},{"version":"37f96daaddc2dd96712b2e86f3901f477ac01a5c2539b1bc07fd609d62039ee1","impliedFormat":1},{"version":"4faca872dbd194a17b3ee267bd8ddc3daf3d16df96f4e43a02c7d9a862022c4f","impliedFormat":99},{"version":"f89aeba83b1744a0d697c1b7fb8a06d8dc4cf7c0d469d2419772121f499efa8e","impliedFormat":99},{"version":"144a4e5780b800c0553949169f50be285eccbdb0298afd83ef2ae03fef77e2d2","impliedFormat":99},{"version":"66aeb47bf8638d6767f7b4ff684c2d794391c981590073025e98f98e1afed499","impliedFormat":99},{"version":"26748898fec8579096c776866e8e6f07754845b3d08f5ae98c3a59baa9e85c2e","impliedFormat":99},{"version":"6d805abd62920edbd9ed4b20be26d040d01529f3ce53fdab9ca4d0fa9b589f02","impliedFormat":99},{"version":"edbeff52e73b0ff82898142aaf8ffb336910a8ccdfc31b79960ea4ad4c9f407b","impliedFormat":99},{"version":"b64a8c7a27133db3f181199d21c0c582e86f38ba57a031a126b77229526b4916","impliedFormat":99},{"version":"4d857105510df8011cfb5b3769dec55624a1df92e85d399cd03bc82bb89d090c","impliedFormat":99},{"version":"8eca47167dadd486582ecd4e41f7fba6ae66cc4a4c5202f1f7acf34129a0dadf","impliedFormat":99},{"version":"0d121799b2cbac398e84a4708fcd82f980f33bf3ac7721a3cf9db9f28d9eb2b2","impliedFormat":99},{"version":"b45c2c7da9952665f78397fccb03f67535535939497b11308c9409c8505eb32a","impliedFormat":99},{"version":"755fc4f6a7aca9da7b38e1f7a39abd36538a72711763c741f1bbbf36f999b654","impliedFormat":99},{"version":"c4e79e849fd94553e07d7386552c472ea4f4fbfc9d280c012018fe7a6c50e598","impliedFormat":99},{"version":"062c0cf9641ca90ff3ad8edc61c2e06299fe6585fb9a4014a8acdf7f11810d51","impliedFormat":99},{"version":"f68896096cba0f06ffbf39a67c2280f6f2e5b90c75db56a3f9ae5f7f3bb54460","impliedFormat":99},{"version":"97b02501eb45f487174d5a0ff89b6a95690d50e9eae242e2162118edd5f2705c","impliedFormat":99},{"version":"425a03d68f43164e0214b1c333cd58e777d4186f412b530467c18ef0d2b37a80","impliedFormat":99},{"version":"26cfaec143443411bc7d5363f274f885ced430b8f4bee25a81f7827248848d7b","impliedFormat":99},{"version":"f9a591e5fe0be6728cc84e70325aacafffcf203b051ddef37d65651b43c05056","impliedFormat":99},{"version":"293c0a3e323608f4e20667acc74d7bdba727db954b840ee1db03f2fd5807c761","impliedFormat":99},{"version":"de8b4c367880fe92a0a740b706f08a46d1cf9e3981d55c2701e82423e81ef0ef","impliedFormat":99},{"version":"4a056a71ffda9ff3f2adec60c0189c906f7e46976a0c6650fa196674ff8c4dff","impliedFormat":99},{"version":"3a3fd6f5ca85ceeb293f2a010125f9455404958122b6dd0ba0b34f7dab74feb5","impliedFormat":99},{"version":"42b58bc8da11e9181ecf4ac498d41c74930c73c8ebef091474d0f8cf971b50ac","impliedFormat":99},{"version":"9e003336714371c98108af3dc53342829039327f8b1db97d826ca81805746b7f","impliedFormat":99},{"version":"d8954254110123f6f5c9fda6280674f6b853d47df7fc41c2090e741dc8b6b627","impliedFormat":99},{"version":"cc141bc69488825723b0d638491da8779c4c3e515712d5e1e63709e0136dfb2b","impliedFormat":99},{"version":"df600fddb7f36e4c4b3cc4e36073d0099a5b6352b88be02decf63869c8886313","impliedFormat":99},{"version":"9fe94c8f6b36cb41acd30d89567761a52246932dece21e1ce104baa2e84b07ac","impliedFormat":99},{"version":"5560b9471d610c2543dfaa66a88f7b7cf05cdac61a698d4106b3845b7b7b3b29","impliedFormat":99},{"version":"e80a0ca19ba1ea6d815b5017ce248fc817c076522d1b0f42f062a784897a30a7","impliedFormat":99},{"version":"e96bd939a55117abe6ccbc02839f2f4d9ce3893368fea528ca91c59ebddf496f","impliedFormat":99},{"version":"81f6bf27eedb1ed92466abfcee33795a6b2304691ae01f42e60f8c76894fade7","impliedFormat":99},{"version":"8ae2e6733fc535c43c514f871d28cb0fe5926238dbc3d64c978a1f6f00d73296","impliedFormat":99},{"version":"26a0c2d883e1ed55ba00810d957dedcde5d16d637e33063686e2bc3f58a5c64a","impliedFormat":99},{"version":"68099697ac4e919f6f1832389f32eb67d3d94fae744967f33e0cbc049a222a3a","impliedFormat":99},{"version":"bfb900f7de2066a4be644c269285fda8ccca40b065476a27b082173014d00467","impliedFormat":99},{"version":"fea750ade335a63f707e7fd7410cc11b81805f6b454880e1ed0e178c08fae8ee","impliedFormat":99},{"version":"7e2b8299e85423435784cc6244e2d559ea862d226e7b0ec871c6a53f88e5139f","impliedFormat":99},{"version":"51b6335f5a8e177306647558a3eefa1f6abe259b283c6462223be3d7d0f33300","impliedFormat":99},{"version":"31a63b6b49338cc6ddb1a318beda72d3d8fd523e50f8dd5d5ff3accd39a490d7","impliedFormat":99},{"version":"8fc7615fb8fa095406f5a58b1b817b9a685c516058877a3d2c06d4545fdf5dbe","impliedFormat":99},{"version":"f70e9fcb8172de822a729503eefece37f169e063cd7f97a978e3913dc872a82f","impliedFormat":99},{"version":"d5da26af31358a4883edb6112879018b14c7c1fbcc457aa36961b03ee17bedea","impliedFormat":99},{"version":"4e93fb2d2c59bbc1f1a5211b36c447efe4d0af568d682ef1e5eb5f84ca6ccc2e","impliedFormat":99},{"version":"b6cc07bc56c7418ab500421d2629c26acdb6ec2e9af85c5e2c5d7e8c9f92566d","impliedFormat":99},{"version":"3d13fe973e92e708ad3dbbf1b2385bb799f8e70c8da71a1ac72fcb5521c8a5e9","impliedFormat":99},{"version":"16f3f66b5182e57c554d0e374e29fdc0a899c1321b3f94fa997d19abf9faf931","impliedFormat":99},{"version":"df459c67b9eef71318851331b23926961f0476b4b9d1674addcb627eabe583b2","impliedFormat":99},{"version":"b93915733f1802a8d9093116a5e660385afda0f72a5bab9c9bd356549a61f1cd","impliedFormat":99},{"version":"1dfb1491b28cf3734f3c07745a56d7758a12d546f81a70fbfe8ee9faeb528c54","impliedFormat":99},{"version":"42b00a511331c7f79039ae3be83fd5941b212ce193654c3ac5d82157227b69ad","impliedFormat":99},{"version":"1a5914065c7c6e2b6e98437c4ba6059bfeda3441f0f55cb07189df1e78698922","impliedFormat":99},{"version":"66d3f42196f32c639d8240bbd520852abc024d673c713bc5ab26b4bdde750a74","impliedFormat":99},{"version":"18ce9175445b3edec11bbca1c682a8f3919e74fb3504abd883ac462ea8089a0d","impliedFormat":99},{"version":"aec96f94a27fc61d5f4ead202628e811199f887d48bb7614b7e1706b629cd1ba","impliedFormat":99},{"version":"2ab01a0368f65b3b891e25416ae785dca54808f70d8f6204b99589ed4f7f1d2f","impliedFormat":99},{"version":"efd87ca2190e2d0f905e30343443c8d2f0d32cb2b1c9e05b2cb97b0061abec08","impliedFormat":99},{"version":"3323edd649d2c85d3528912cdf6fb770258d59d75241575fcf25c7850837de79","impliedFormat":99},{"version":"e0c8deca5262879f11ee84fe6664dcd197a60f546930363bf2d78d37c3138c69","impliedFormat":99},{"version":"3b8ba0456ce7763676505d103eb336a6b97659d6fc8a7d7d186558ea0b8c7ea5","impliedFormat":99},{"version":"7bae4a3f50a844fcbdc504d717f5f13dd7178ca99f131b230305db6b55e1dbc3","impliedFormat":99},{"version":"f3a4668046e42e9f5ebfdc8b79238eb27c399443dd1dcfcd4c4c3652692ed031","impliedFormat":99},{"version":"07160ad59d49c6f2999f9703542918df3eb1ef93857bc560b4baa7c6775d22ce","impliedFormat":99},{"version":"642d33e1e66ab109cdcc5a5b5535535768c8b642fd5ef75de4d77de3a5632601","impliedFormat":99},{"version":"c23b9684ab48ea6956f0a510c3cf724277fa457efa7ff85d5907f4e4290ba0aa","impliedFormat":99},{"version":"3859635347ecc10d4ff5dd68bde66420f5a8539b7313dd62020aa025208d2222","impliedFormat":99},{"version":"f49e8feb6d7473579a5ceb5872598bbc1be3723da653993472720629c72fa0ba","impliedFormat":99},{"version":"14c727434cfe6a078b51a88d005033ad01a76bec36292d7b47369d82e48e1cb0","impliedFormat":99},{"version":"76a0fc58ff835fb7502357e4c278dbdb7399f1cf126dead051df9ddb87b586c0","signature":"96bd65650e4d85a16360de962c181f6ce7120f67c7219651d49d01cef241210b","impliedFormat":99},{"version":"a5261652e513e8dac9cba83c92d42655f0160d03a3e53e3717b8a8478b1af4be","signature":"dff2f9c0ddd1bc8f13c656dd33efc2d0d1cc151cb184b433e87296d8b935a181","impliedFormat":99},{"version":"22ab0c23b5ea85800106fb0d37511ed81f70a1a7023f8a91ebb7939e663bda34","signature":"430269ee0899a7c7e08ea98ccbe756fbf2c5789046e30356e73ebf4366e9b2e7","impliedFormat":99},{"version":"ea0c2c49fd65128ac467a07769214768474e1e167be8921f9e84d25846071ee3","impliedFormat":99},{"version":"c647331286df3f858cbd84e409c2fc3396b21dfee949f905560034fbb4168661","signature":"974cf39b95102a109d0c24d0a9f9fd64c1362851f2164121bdd4fa5fd81b3796","impliedFormat":99},{"version":"079e766f00ec70afdbe8da3b8b32fb8ef9a6fe6f1b38cc96b6970550c537bb1e","signature":"74fc0d65517b1d1121a5762e3f42b8c043517d4d368a50948e249163f2e25ca1","impliedFormat":99},{"version":"bef7f492c73eb95204add9d2d028ab8a4fd80dc5a64e509b9d48d5c95102fefb","signature":"beba36f63962c49ba38eae274a87a185ba00480541e7bd5a9c2e4647fde28f9b","impliedFormat":99},{"version":"c0194d10fe7ad387eb6628c7fc9682f28195e6e5c8371812c300079b2a57cc0b","signature":"240aa035c06cd06dfa2adf38760b29831cf0e9915c6a0d983e73f2e6d98db36b","impliedFormat":99},{"version":"589250f6a0fd7184aff9a96c3ad106683fd1f3e274ebc6755da04ef3fa215909","signature":"c89417acd35d8a5b8f1391bfd2d2414426dc657c7c4f88127a0293b5c7d31b52","impliedFormat":99},{"version":"aa11b40e8b90a7e81efcb8b2e19c4c1638ba90c6eda84929472d35b5d04c3f73","signature":"8cb7d3f6fa905df0aa41e82350c9c30e3ce7d106765460068897f82d66531f00","impliedFormat":99},{"version":"af33d6b73e168e87194810551cd91be50effeaa1ac80866c2da82bd60e1cd6fb","signature":"b294c69b6b3e74e6ac727fdcb2a6ac3f93469c5e8fb7dbc0a2767282777cda97","impliedFormat":99},{"version":"18b265aa52209c724b23722673d94237abcc1254d911ab1b0ce0649ac7788ee4","signature":"55d636d4a7989165a31e64fe77e49f67ddb8a0af6ff21a2b5e2c209037d7f659","impliedFormat":99},{"version":"628436a6d2a812d566967b11e5c572619ac2afb39451f485a506d64d317db8bc","impliedFormat":99},{"version":"01feb8c57ba5da706fc523412d6752a74682a4dae5b83535b8bbb792d717474f","signature":"4cf8af5b45737588313400a3ec89839de2508dfe13a8ab7fb8cac800854a7b59","impliedFormat":99},{"version":"7e8342f3f79fd9361a10aa8752a74e8964722b0b28c0a6c576d5bf731a072898","impliedFormat":99},{"version":"2987acfb0e8bb4a6064bc06f8547f8c3f5dd8ae2c23edbcecec9739fdcb5bb23","signature":"efb26f5211a6a84f9137fd6621caf304e00b061745031f7f006af228f11a49bd","impliedFormat":99},{"version":"ed250d5083c4c13c6c362353180c87cc7f894a2118a53867368ae339f8d0bbb0","signature":"6a70b91867e0e6bf86e492ce5d11061eb72b0d1d2f7ec297a565db1b3c253437","impliedFormat":99},{"version":"11e994add6593662c81f5ee86bd7f9bd3f4ef29b6a95a009f79ab99a613a81e4","signature":"ed522c8819f20b1fd6cc851db4e318cd5c613dbb15a4052484f005e347d6a4f8","impliedFormat":99},{"version":"f7c41ff95f4467ea2310eefd744901ffe501614744b9e28ed025a7dc2f036e22","impliedFormat":99},{"version":"d9dd64f0d265efc7863e69e237334c22649294e345759653b5ed3dad3c0de51d","impliedFormat":99},{"version":"ae755f1eed3abd97cba754b98c3d1cb4df9cd85a215fc4d0e67a9a820630d1ae","impliedFormat":99},{"version":"5c80337a6727599acdadb3e16df0200683543e54fcf640e1f98c5d2c4fa20cda","impliedFormat":99},{"version":"38e3da8d8e1114aecba17bb2353050bac90ed935f42fa6771199352921c33017","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"3531e5a62ede7a7264f34340c5a6ba805908ff7dfdf15f5c34fe2729a9218fa9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99}],"root":[[76,96],[98,100],[150,164],[247,270]],"options":{"allowImportingTsExtensions":true,"allowJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"jsx":4,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"rewriteRelativeImportExtensions":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"target":11,"tsBuildInfoFile":"./tsconfig.browser.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[223,1],[224,2],[212,3],[194,4],[197,5],[192,6],[210,7],[175,8],[213,9],[198,8],[199,10],[214,8],[208,11],[200,8],[202,12],[203,8],[204,13],[201,8],[174,14],[205,7],[206,8],[215,15],[207,3],[216,16],[209,17],[211,18],[172,19],[171,20],[188,21],[196,22],[185,23],[218,24],[219,25],[228,25],[227,26],[230,27],[229,27],[246,28],[245,29],[231,27],[232,27],[233,30],[234,31],[235,24],[236,26],[238,25],[237,27],[226,32],[221,33],[225,34],[220,35],[240,36],[239,37],[244,27],[241,38],[242,27],[222,39],[243,27],[187,40],[191,41],[190,42],[189,43],[217,44],[179,23],[177,45],[178,46],[184,47],[182,48],[183,49],[181,50],[193,23],[166,51],[168,52],[169,53],[131,54],[74,55],[75,23],[97,56],[132,57],[139,58],[140,59],[110,60],[109,61],[133,60],[117,62],[119,63],[118,64],[126,65],[108,66],[102,67],[104,68],[106,69],[107,67],[146,70],[148,71],[147,72],[145,73],[113,74],[116,75],[114,74],[115,76],[135,77],[124,78],[120,79],[121,62],[142,80],[136,81],[122,82],[141,83],[123,84],[149,85],[143,86],[150,87],[89,88],[82,89],[96,90],[90,91],[91,92],[151,93],[92,94],[152,95],[84,96],[153,97],[85,98],[93,99],[81,100],[157,101],[158,102],[86,103],[159,104],[94,103],[160,105],[87,106],[161,107],[83,108],[162,109],[80,103],[88,103],[154,110],[95,111],[100,112],[258,113],[259,114],[247,113],[248,115],[249,113],[250,116],[260,113],[261,117],[264,113],[265,118],[251,103],[252,103],[253,103],[254,103],[255,103],[262,113],[263,119],[256,113],[257,120],[163,121],[164,122],[266,123],[268,124],[267,125],[98,126],[99,127],[77,103],[79,103],[269,128],[155,103],[270,129],[156,102],[76,103],[78,103]],"affectedFilesPendingEmit":[[150,17],[89,17],[82,17],[96,17],[90,17],[91,17],[151,17],[92,17],[152,17],[84,17],[153,17],[85,17],[93,17],[81,17],[157,17],[158,17],[86,17],[159,17],[94,17],[160,17],[87,17],[161,17],[83,17],[162,17],[80,17],[88,17],[154,17],[95,17],[100,17],[258,17],[259,17],[247,17],[248,17],[249,17],[250,17],[260,17],[261,17],[264,17],[265,17],[251,17],[252,17],[253,17],[254,17],[255,17],[262,17],[263,17],[256,17],[257,17],[163,17],[164,17],[266,17],[268,17],[267,17],[98,17],[99,17],[77,17],[79,17],[269,17],[155,17],[270,17],[156,17],[76,17],[78,17]],"emitSignatures":[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,98,99,100,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270],"version":"6.0.3"}
@@ -162,6 +162,7 @@ async function waitForHubSpotOAuthPopup(options) {
162
162
  let popup = null;
163
163
  let pollTimer;
164
164
  let isSettled = false;
165
+ let isCallbackReceived = false;
165
166
  const cleanup = () => {
166
167
  window.removeEventListener("message", onMessage);
167
168
  if (pollTimer !== void 0) clearInterval(pollTimer);
@@ -192,6 +193,8 @@ async function waitForHubSpotOAuthPopup(options) {
192
193
  const onMessage = (event) => {
193
194
  if (event.origin !== targetOrigin) return;
194
195
  if (!isOAuthPopupCallbackMessage(event.data)) return;
196
+ if (isCallbackReceived) return;
197
+ isCallbackReceived = true;
195
198
  (async () => {
196
199
  try {
197
200
  settleSuccess((await completeHubSpotOAuthSession(context, {
@@ -210,7 +213,7 @@ async function waitForHubSpotOAuthPopup(options) {
210
213
  return;
211
214
  }
212
215
  pollTimer = setInterval(() => {
213
- if (popup?.closed) settleFailure("Connect to HubSpot was cancelled.");
216
+ if (popup?.closed && !isCallbackReceived) settleFailure("Connect to HubSpot was cancelled.");
214
217
  }, OAUTH_POPUP_POLL_INTERVAL_MS);
215
218
  });
216
219
  }
@@ -240,6 +243,9 @@ function hasOAuthPopupOpener() {
240
243
  return false;
241
244
  }
242
245
  }
246
+ function isOAuthPopupCallback() {
247
+ return window.name === "hubspot-app-connect-oauth" && hasOAuthPopupOpener();
248
+ }
243
249
  //#endregion
244
250
  //#region src/browser/app-connect-controller/utils/iframe-utils.ts
245
251
  /**
@@ -406,13 +412,10 @@ async function consumeOAuthCallback(context) {
406
412
  const code = params.get(AUTH_COMPLETE_CODE_PARAM);
407
413
  const state = params.get(AUTH_COMPLETE_STATE_PARAM);
408
414
  if (!code || !state) return;
409
- if (hasOAuthPopupOpener()) {
410
- relayOAuthCallbackToOpener({
411
- code,
412
- state
413
- });
414
- return;
415
- }
415
+ if (isOAuthPopupCallback() && relayOAuthCallbackToOpener({
416
+ code,
417
+ state
418
+ })) return;
416
419
  const { expires_at: expiresAt, return_path: returnPath } = await completeHubSpotOAuthSession(context, {
417
420
  code,
418
421
  state
@@ -703,4 +706,4 @@ function createAppConnectController(options) {
703
706
  //#endregion
704
707
  export { createLogger as n, createAppConnectController as t };
705
708
 
706
- //# sourceMappingURL=create-D-oTtxX-.js.map
709
+ //# sourceMappingURL=create-BYIPBw_G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-BYIPBw_G.js","names":["disconnectFromHubSpot","runDisconnectFromHubSpot"],"sources":["../../src/shared/logger.ts","../../src/shared/constants.ts","../../src/browser/app-connect-controller/constants.ts","../../src/browser/app-connect-controller/utils/session-utils.ts","../../src/browser/app-connect-controller/oauth-complete.ts","../../src/browser/app-connect-controller/oauth-popup.ts","../../src/browser/app-connect-controller/utils/iframe-utils.ts","../../src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts","../../src/browser/app-connect-controller/utils/timeout-utils.ts","../../src/browser/app-connect-controller/connect-start.ts","../../src/browser/app-connect-controller/default-session-storage.ts","../../src/browser/app-connect-controller/disconnect.ts","../../src/browser/app-connect-controller/init.ts","../../src/browser/app-connect-controller/refresh.ts","../../src/browser/app-connect-controller/utils/memoize-utils.ts","../../src/browser/app-connect-controller/utils/store-utils.ts","../../src/browser/app-connect-controller/view-state.ts","../../src/browser/app-connect-controller/create.ts"],"sourcesContent":["/**\n * Pluggable logger contract used by the SDK on both the browser and\n * server. Consumers can pass `console`-like loggers, structured\n * loggers (pino / winston / etc.) or no-op stubs in tests.\n */\nexport interface Logger {\n debug: (message: string, ...args: unknown[]) => void;\n info: (message: string, ...args: unknown[]) => void;\n warn: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nfunction formatPrefix(name: string): string {\n return `[${name}]`;\n}\n\n/**\n * Creates a console-backed logger that prefixes every line with the\n * supplied `name`. Used as the default when no custom logger is\n * provided.\n */\nexport function createLogger(name: string): Logger {\n const prefix = formatPrefix(name);\n return {\n debug: (message, ...args) => {\n console.debug(prefix, message, ...args);\n },\n info: (message, ...args) => {\n console.info(prefix, message, ...args);\n },\n warn: (message, ...args) => {\n console.warn(prefix, message, ...args);\n },\n error: (message, ...args) => {\n console.error(prefix, message, ...args);\n },\n };\n}\n\n/**\n * Logger that swallows every message. Convenient for tests and for\n * the SDK's server-side handlers when no logger is provided by the\n * host application.\n */\nexport const noopLogger: Logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n};\n","/**\n * Constants whose values are part of the contract between the browser\n * controller and the server-side hubspot-connect routes. Both halves\n * import from this module so the wire format stays in sync.\n */\n\n/**\n * Query parameter on the OAuth return URL that carries the new access\n * token's expiry (Unix epoch milliseconds). The browser controller\n * sets this in the URL after a successful `auth/complete` call and\n * then strips it during `initAppConnect` via `history.replaceState`.\n */\nexport const EXPIRES_AT_URL_PARAM = '__hs_expires_at';\n\n/**\n * Path the browser visits after HubSpot's authorize endpoint\n * redirects back to the app. Mounted on the **frontend** origin (not\n * the SDK's edge function host) so all OAuth-related cookies live in\n * the `(frontend, edge)` CHIPS partition.\n *\n * The SDK's `auth/init-session` builds the OAuth `redirect_uri` as\n * `${requestOrigin}${HUBSPOT_FRONTEND_CALLBACK_PATH}`. The browser\n * controller, on `start()`, recognizes this path on `window.location`\n * and forwards `?code` + `?state` to the SDK's `auth/complete`\n * endpoint via a credentialed cross-site fetch. The host app must\n * register `${app_origin}${HUBSPOT_FRONTEND_CALLBACK_PATH}` as a\n * redirect URI in its HubSpot app settings.\n */\nexport const OAUTH_CALLBACK_PATH = '/__hubspot_oauth_callback';\n\n/**\n * Query parameter on the `auth/complete` POST request carrying the\n * authorization `code` HubSpot returned to the frontend callback.\n */\nexport const AUTH_COMPLETE_CODE_PARAM = 'code';\n\n/**\n * Query parameter on the `auth/complete` POST request carrying the\n * OAuth `state` HubSpot echoed back to the frontend callback.\n */\nexport const AUTH_COMPLETE_STATE_PARAM = 'state';\n\n/**\n * `postMessage` `data.type` value the OAuth popup sends to its opener\n * with the authorization `code` and `state` from the callback URL. The\n * opener POSTs them to `auth/complete` so credentialed cookies stay in\n * the same CHIPS partition as `auth/init-session`.\n */\nexport const OAUTH_POPUP_CALLBACK_MESSAGE_TYPE =\n 'hubspot-app-connect:oauth-callback';\n","export { EXPIRES_AT_URL_PARAM } from '../../shared/constants.ts';\n\n/**\n * Key the controller persists the access-token `expiresAt` (Unix\n * epoch milliseconds) under in `sessionStorage`. Survives full-page\n * navigations within the same tab.\n */\nexport const EXPIRES_AT_KEY = 'hubspot_token_expires_at';\n\n/**\n * Number of milliseconds before `expiresAt` that the refresh\n * scheduler attempts to mint a new access token. 60s is comfortably\n * larger than typical network latency without burning lifetime.\n */\nexport const REFRESH_BUFFER_MS = 60_000;\n","import { EXPIRES_AT_KEY } from '../constants.ts';\nimport type { AppConnectContext } from '../types.ts';\n\ninterface StoreExpiresAtOptions {\n context: AppConnectContext;\n expiresAtMs: number;\n}\n\n/**\n * Persists the access-token `expiresAt` (Unix epoch milliseconds) to\n * both the in-memory store and `sessionStorage` so it survives\n * full-page navigations within the same tab.\n */\nexport function storeExpiresAt(options: StoreExpiresAtOptions): void {\n const { context, expiresAtMs } = options;\n context.store.setState({ expiresAt: expiresAtMs });\n context.sessionStorage.setItem(EXPIRES_AT_KEY, String(expiresAtMs));\n}\n\n/**\n * Reads the persisted `expiresAt` from `sessionStorage`. Removes the\n * value (and returns `null`) if it is malformed or already expired,\n * so a stale entry never reactivates a dead session.\n */\nexport function getExpiresAtFromSessionStorage(\n context: AppConnectContext\n): number | null {\n const raw = context.sessionStorage.getItem(EXPIRES_AT_KEY);\n if (!raw) return null;\n const val = parseInt(raw, 10);\n if (isNaN(val)) {\n context.sessionStorage.removeItem(EXPIRES_AT_KEY);\n return null;\n }\n if (Date.now() > val) {\n context.sessionStorage.removeItem(EXPIRES_AT_KEY);\n return null;\n }\n return val;\n}\n\n/**\n * Clears the persisted session-storage state. Called on disconnect.\n */\nexport function clearSessionStorage(context: AppConnectContext): void {\n context.sessionStorage.removeItem(EXPIRES_AT_KEY);\n}\n\n/**\n * Returns `true` when the controller has an `expiresAt` whose value\n * is still in the future. Used both to drive the UI status and to\n * decide whether the refresh scheduler should run.\n */\nexport function isClientSessionActive(context: AppConnectContext): boolean {\n const state = context.store.getSnapshot();\n const expiresAt = state.expiresAt;\n return expiresAt !== null && Date.now() < expiresAt;\n}\n","import {\n AUTH_COMPLETE_CODE_PARAM,\n AUTH_COMPLETE_STATE_PARAM,\n} from '../../shared/constants.ts';\nimport type { AuthCompleteResponse } from '../../shared/wire-types.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { clearSessionStorage } from './utils/session-utils.ts';\n\ninterface CompleteHubSpotOAuthSessionOptions {\n code: string;\n state: string;\n}\n\n/**\n * Finishes the OAuth token exchange by POSTing `code` and `state` to the\n * SDK's `auth/complete` route with credentialed cookies from the current\n * browsing context (must match the partition used by `auth/init-session`).\n */\nexport async function completeHubSpotOAuthSession(\n context: AppConnectContext,\n options: CompleteHubSpotOAuthSessionOptions\n): Promise<AuthCompleteResponse> {\n const { code, state } = options;\n\n const completeUrl = new URL(\n `${context.config.hubSpotConnectBaseUrl}/auth/complete`,\n window.location.origin\n );\n completeUrl.searchParams.set(AUTH_COMPLETE_CODE_PARAM, code);\n completeUrl.searchParams.set(AUTH_COMPLETE_STATE_PARAM, state);\n\n let response: Response;\n try {\n response = await fetch(completeUrl.toString(), {\n method: 'POST',\n credentials: 'include',\n });\n } catch (err) {\n clearSessionStorage(context);\n throw new Error(\n `Failed to complete HubSpot OAuth: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n\n if (!response.ok) {\n clearSessionStorage(context);\n throw new Error(\n `Failed to complete HubSpot OAuth: ${response.status} ${response.statusText}`\n );\n }\n\n return (await response.json()) as AuthCompleteResponse;\n}\n","import { OAUTH_POPUP_CALLBACK_MESSAGE_TYPE } from '../../shared/constants.ts';\nimport { completeHubSpotOAuthSession } from './oauth-complete.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { storeExpiresAt } from './utils/session-utils.ts';\n\nexport const OAUTH_POPUP_WINDOW_NAME = 'hubspot-app-connect-oauth';\nconst OAUTH_POPUP_POLL_INTERVAL_MS = 300;\n\ninterface OAuthPopupCallbackMessage {\n type: typeof OAUTH_POPUP_CALLBACK_MESSAGE_TYPE;\n code: string;\n state: string;\n}\n\ninterface WaitForHubSpotOAuthPopupOptions {\n context: AppConnectContext;\n authorizationUrl: string;\n}\n\ninterface RelayOAuthCallbackToOpenerOptions {\n code: string;\n state: string;\n}\n\nfunction isOAuthPopupCallbackMessage(\n data: unknown\n): data is OAuthPopupCallbackMessage {\n if (typeof data !== 'object' || data === null) return false;\n const record = data as Record<string, unknown>;\n return (\n record.type === OAUTH_POPUP_CALLBACK_MESSAGE_TYPE &&\n typeof record.code === 'string' &&\n record.code.length > 0 &&\n typeof record.state === 'string' &&\n record.state.length > 0\n );\n}\n\n/**\n * Opens HubSpot's authorize URL in a popup and waits for the callback\n * page to relay `code` + `state` back. The opener POSTs to\n * `auth/complete` so credentialed cookies use the same CHIPS partition\n * as `auth/init-session`.\n */\nexport async function waitForHubSpotOAuthPopup(\n options: WaitForHubSpotOAuthPopupOptions\n): Promise<void> {\n const { context, authorizationUrl } = options;\n const targetOrigin = window.location.origin;\n\n return new Promise<void>((resolve, reject) => {\n let popup: Window | null = null;\n let pollTimer: ReturnType<typeof setInterval> | undefined;\n let isSettled = false;\n let isCallbackReceived = false;\n\n const cleanup = () => {\n window.removeEventListener('message', onMessage);\n if (pollTimer !== undefined) clearInterval(pollTimer);\n };\n\n const settleSuccess = (expiresAtMs: number) => {\n if (isSettled) return;\n isSettled = true;\n cleanup();\n storeExpiresAt({ context, expiresAtMs });\n context.store.setState({ isSessionConnected: true, error: null });\n resolve();\n };\n\n const settleFailure = (message: string) => {\n if (isSettled) return;\n isSettled = true;\n cleanup();\n try {\n popup?.close();\n } catch {\n // ignore close errors\n }\n reject(new Error(message));\n };\n\n const onMessage = (event: MessageEvent) => {\n if (event.origin !== targetOrigin) return;\n if (!isOAuthPopupCallbackMessage(event.data)) return;\n\n if (isCallbackReceived) return;\n isCallbackReceived = true;\n\n void (async () => {\n try {\n const body = await completeHubSpotOAuthSession(context, {\n code: event.data.code,\n state: event.data.state,\n });\n settleSuccess(body.expires_at);\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'HubSpot OAuth failed';\n settleFailure(message);\n }\n })();\n };\n\n window.addEventListener('message', onMessage);\n\n popup = window.open(\n authorizationUrl,\n OAUTH_POPUP_WINDOW_NAME,\n 'popup=yes,width=600,height=700'\n );\n if (!popup) {\n settleFailure('Popup blocked. Allow popups for this site and try again.');\n return;\n }\n\n pollTimer = setInterval(() => {\n if (popup?.closed && !isCallbackReceived) {\n settleFailure('Connect to HubSpot was cancelled.');\n }\n }, OAUTH_POPUP_POLL_INTERVAL_MS);\n });\n}\n\n/**\n * Called from the OAuth callback page inside the popup. Relays `code`\n * and `state` to the opener (which runs `auth/complete`) and closes.\n */\nexport function relayOAuthCallbackToOpener(\n options: RelayOAuthCallbackToOpenerOptions\n): boolean {\n const { code, state } = options;\n const opener = window.opener;\n if (!opener || opener.closed) return false;\n\n const message: OAuthPopupCallbackMessage = {\n type: OAUTH_POPUP_CALLBACK_MESSAGE_TYPE,\n code,\n state,\n };\n opener.postMessage(message, window.location.origin);\n try {\n window.close();\n } catch {\n // ignore close errors\n }\n return true;\n}\n\nexport function hasOAuthPopupOpener(): boolean {\n try {\n return Boolean(window.opener && !window.opener.closed);\n } catch {\n return false;\n }\n}\n\nexport function isOAuthPopupCallback(): boolean {\n return window.name === OAUTH_POPUP_WINDOW_NAME && hasOAuthPopupOpener();\n}\n","/**\n * Returns `true` when the app runs inside a parent frame (same-origin\n * or cross-origin). Cross-origin parent access throws; treat that as\n * embedded so OAuth uses a popup instead of a top-level redirect.\n */\nexport function isAppEmbeddedInIframe(): boolean {\n try {\n return window.self !== window.top;\n } catch {\n return true;\n }\n}\n","import type { OAuthConnectMode } from '../../types.ts';\nimport { isAppEmbeddedInIframe } from './iframe-utils.ts';\n\nexport type ResolvedOAuthConnectMode = 'redirect' | 'popup';\n\ninterface ResolveOAuthConnectModeOptions {\n oauthConnectMode?: OAuthConnectMode;\n}\n\n/**\n * Maps the configured {@link OAuthConnectMode} to the concrete connect\n * behavior for the current browsing context.\n */\nexport function resolveOAuthConnectMode(\n options: ResolveOAuthConnectModeOptions\n): ResolvedOAuthConnectMode {\n const mode = options.oauthConnectMode ?? 'auto';\n if (mode === 'popup') return 'popup';\n if (mode === 'redirect') return 'redirect';\n return isAppEmbeddedInIframe() ? 'popup' : 'redirect';\n}\n","export function delay(ms: number): Promise<void> {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","import type { InitSessionResponse } from '../../shared/wire-types.ts';\nimport { waitForHubSpotOAuthPopup } from './oauth-popup.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { resolveOAuthConnectMode } from './utils/resolve-oauth-connect-mode.ts';\nimport { delay } from './utils/timeout-utils.ts';\n\n/** Extra wait before redirect so the connect progress UI is visible; set to `0` to disable. */\nconst ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS = 500;\n\n/**\n * Begins the OAuth connect flow:\n *\n * 1. Calls the SDK's `auth/init-session` route to mint a fresh PKCE\n * verifier + state and obtain HubSpot's `authorize` URL.\n * 2. Navigates to that URL via full-page redirect, or opens it in a\n * popup when embedded in an iframe or when `oauthConnectMode` is\n * `'popup'`.\n *\n * The `return_path` is the current path + query so the user lands\n * back where they started after authorizing (redirect mode only).\n *\n * Throws when the init call fails. Does not return after a redirect\n * begins because the page is unloaded.\n */\nexport async function startHubSpotConnection(\n context: AppConnectContext\n): Promise<void> {\n const { config } = context;\n\n const returnPath = `${window.location.pathname}${window.location.search}`;\n\n const initUrl = new URL(\n `${config.hubSpotConnectBaseUrl}/auth/init-session`,\n window.location.origin\n );\n initUrl.searchParams.set('return_path', returnPath);\n\n const initResponse = await fetch(initUrl.toString(), {\n credentials: 'include',\n });\n if (!initResponse.ok)\n throw new Error(`Failed to init session: ${initResponse.status}`);\n const { authorization_url: authorizationUrl } =\n (await initResponse.json()) as InitSessionResponse;\n\n await delay(ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS);\n\n const connectMode = resolveOAuthConnectMode(\n config.oauthConnectMode !== undefined\n ? { oauthConnectMode: config.oauthConnectMode }\n : {}\n );\n\n if (connectMode === 'popup') {\n await waitForHubSpotOAuthPopup({ context, authorizationUrl });\n return;\n }\n\n window.location.href = authorizationUrl;\n}\n","import type { SessionStorage } from './types.ts';\n\n/**\n * Builds a `SessionStorage` adapter that delegates to the global\n * `sessionStorage` object exposed by browsers. The controller uses\n * this when no custom storage is supplied (e.g. for tests or non-DOM\n * environments).\n */\nexport function createDefaultSessionStorage(): SessionStorage {\n return {\n setItem: (key, value) => {\n sessionStorage.setItem(key, value);\n },\n getItem: (key) => {\n return sessionStorage.getItem(key);\n },\n removeItem: (key) => {\n sessionStorage.removeItem(key);\n },\n };\n}\n","import type { LogoutResponse } from '../../shared/wire-types.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { clearSessionStorage } from './utils/session-utils.ts';\n\n/**\n * Disconnect flow:\n *\n * 1. Calls the SDK's `auth/logout` route to revoke the upstream token\n * and clear the refresh-token cookie.\n * 2. Clears the local session-storage `expiresAt` entry.\n * 3. Updates the controller state to `disconnected` and navigates the\n * browser to the URL the server returned in `redirect_to`.\n *\n * Errors are caught, logged, and surfaced via the controller's\n * `error` field so the UI can show a retry state.\n */\nexport async function disconnectFromHubSpot(\n context: AppConnectContext\n): Promise<void> {\n const { config, logger, store } = context;\n logger.info('disconnectFromHubSpot: starting');\n store.setState({ error: null, isDisconnectInFlight: true });\n const { hubSpotConnectBaseUrl: appConnectBaseUrl } = config;\n\n try {\n clearSessionStorage(context);\n\n const response = await fetch(`${appConnectBaseUrl}/auth/logout`, {\n method: 'POST',\n credentials: 'include',\n });\n if (!response.ok) {\n throw new Error(`Logout failed: ${response.status}`);\n }\n const { redirect_to: redirectTo } =\n (await response.json()) as LogoutResponse;\n\n store.setState({\n expiresAt: null,\n isSessionConnected: false,\n isDisconnectInFlight: false,\n });\n\n window.location.href = redirectTo;\n logger.info('disconnectFromHubSpot: redirecting');\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Disconnect failed';\n logger.error('disconnectFromHubSpot: failed', err);\n store.setState({\n error: message,\n isDisconnectInFlight: false,\n });\n }\n}\n","import {\n AUTH_COMPLETE_CODE_PARAM,\n AUTH_COMPLETE_STATE_PARAM,\n OAUTH_CALLBACK_PATH,\n} from '../../shared/constants.ts';\nimport { completeHubSpotOAuthSession } from './oauth-complete.ts';\nimport {\n isOAuthPopupCallback,\n relayOAuthCallbackToOpener,\n} from './oauth-popup.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { storeExpiresAt } from './utils/session-utils.ts';\n\n/**\n * On `controller.start()`:\n *\n * 1. If the browser has been redirected back to the SDK's frontend\n * OAuth callback path (`/__hubspot_oauth_callback`) with `?code` +\n * `?state`:\n * - **Redirect flow** (no `window.opener`): POST to `auth/complete`\n * from this window, persist `expires_at`, and `history.replaceState`\n * to `return_path`.\n * - **Popup flow** (`window.opener` present): relay `code` + `state`\n * to the opener via `postMessage` and close. The opener POSTs to\n * `auth/complete` so partitioned cookies match `init-session`.\n * 2. Pick up `?__hs_expires_at` from `window.location` (refresh hop),\n * persist it, and strip it from the address bar.\n *\n * A no-op when neither set of parameters is present.\n */\nexport async function initAppConnect(\n context: AppConnectContext\n): Promise<void> {\n await consumeOAuthCallback(context);\n}\n\nasync function consumeOAuthCallback(context: AppConnectContext): Promise<void> {\n if (window.location.pathname !== OAUTH_CALLBACK_PATH) return;\n\n const params = new URLSearchParams(window.location.search);\n const code = params.get(AUTH_COMPLETE_CODE_PARAM);\n const state = params.get(AUTH_COMPLETE_STATE_PARAM);\n if (!code || !state) return;\n\n if (isOAuthPopupCallback() && relayOAuthCallbackToOpener({ code, state })) {\n return;\n }\n\n const body = await completeHubSpotOAuthSession(context, { code, state });\n const { expires_at: expiresAt, return_path: returnPath } = body;\n\n storeExpiresAt({ context, expiresAtMs: expiresAt });\n\n const targetUrl = new URL(returnPath, window.location.origin);\n history.replaceState(\n null,\n '',\n `${targetUrl.pathname}${targetUrl.search}${targetUrl.hash}`\n );\n}\n","import type { RefreshTokenResponse } from '../../shared/wire-types.ts';\nimport { REFRESH_BUFFER_MS } from './constants.ts';\nimport type { AppConnectContext } from './types.ts';\nimport {\n isClientSessionActive,\n storeExpiresAt,\n} from './utils/session-utils.ts';\n\n/**\n * Tear-down handle returned by {@link startRefreshScheduler}. Calling\n * `stop()` clears any pending refresh timer and unsubscribes from the\n * store so the controller can be garbage-collected.\n */\nexport interface RefreshSchedulerHandle {\n stop: () => void;\n}\n\nasync function refreshAccessToken(context: AppConnectContext): Promise<void> {\n const { config } = context;\n\n const refreshResponse = await fetch(\n `${config.hubSpotConnectBaseUrl}/auth/refresh`,\n {\n method: 'POST',\n credentials: 'include',\n }\n );\n if (!refreshResponse.ok) {\n throw new Error(`Refresh failed: ${refreshResponse.status}`);\n }\n const { expires_in: expiresInSeconds } =\n (await refreshResponse.json()) as RefreshTokenResponse;\n if (\n typeof expiresInSeconds !== 'number' ||\n !Number.isFinite(expiresInSeconds) ||\n expiresInSeconds <= 0\n ) {\n throw new Error('Refresh response missing or invalid expires_in');\n }\n const expiresAtMs = Date.now() + expiresInSeconds * 1000;\n\n storeExpiresAt({ context, expiresAtMs });\n}\n\n/**\n * Subscribes to store changes and (re)schedules a token refresh\n * whenever `expiresAt` moves. Returns a handle that the caller can\n * use to stop the scheduler when the controller is destroyed.\n */\nexport function startRefreshScheduler(\n context: AppConnectContext\n): RefreshSchedulerHandle {\n const { logger, store } = context;\n\n let refreshTimer: ReturnType<typeof setTimeout> | null = null;\n let stopped = false;\n\n const scheduleRefresh = () => {\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n if (stopped) return;\n\n const state = store.getSnapshot();\n if (!state.isInitComplete || !state.isSessionConnected) {\n return;\n }\n\n const expiresAt = state.expiresAt;\n if (!expiresAt) {\n logger.debug('scheduleRefresh: no expiresAt, skipping');\n return;\n }\n const delayMs = Math.max(0, expiresAt - Date.now() - REFRESH_BUFFER_MS);\n logger.debug(\n 'scheduleRefresh: next refresh in ',\n (delayMs / 1000).toFixed(1),\n 's',\n {\n expiresAt,\n }\n );\n refreshTimer = setTimeout(() => {\n logger.debug('scheduleRefresh: timer fired, refreshing token');\n refreshTimer = null;\n if (stopped) return;\n\n void (async () => {\n try {\n await refreshAccessToken(context);\n if (stopped) return;\n if (isClientSessionActive(context)) {\n logger.info('token refresh: success, session still active');\n } else {\n logger.warn(\n 'token refresh: success but no active session in storage'\n );\n store.setState({ isSessionConnected: false });\n }\n } catch (err) {\n logger.error('token refresh: failed', err);\n if (stopped) return;\n store.setState({ isSessionConnected: false });\n }\n })();\n }, delayMs);\n };\n\n const unsubscribe = store.subscribe(() => {\n scheduleRefresh();\n });\n\n return {\n stop: () => {\n stopped = true;\n unsubscribe();\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n },\n };\n}\n","/**\n * Wraps `fn` so that calls with the same input (compared via\n * `Object.is`) return the previous output without re-invoking `fn`.\n * The cache holds at most one entry, so this is safe to use for\n * derived view-state from a single store snapshot.\n *\n * Used by `getSnapshot` to keep the React state reference stable\n * between unrelated store updates — `useSyncExternalStore` would\n * otherwise re-render every consumer on every change.\n */\nexport function memoizeLast<TInput, TOutput>(\n fn: (input: TInput) => TOutput\n): (input: TInput) => TOutput {\n let lastInput: TInput;\n let lastOutput: TOutput;\n let hasValue = false;\n return (input: TInput): TOutput => {\n if (hasValue && Object.is(lastInput, input)) {\n return lastOutput;\n }\n lastInput = input;\n lastOutput = fn(input);\n hasValue = true;\n return lastOutput;\n };\n}\n","/**\n * Tiny external store used by the controller. Shaped to be compatible\n * with React's `useSyncExternalStore` while remaining usable outside\n * React.\n */\nexport interface Store<TState extends object> {\n /** Returns the current state. The reference changes on every update. */\n getSnapshot: () => Readonly<TState>;\n /**\n * Subscribes to state changes. Returns an unsubscribe function the\n * caller can invoke at teardown.\n */\n subscribe: (onChange: () => void) => () => void;\n /**\n * Merges `update` into the current state. When `update` is a\n * function, it receives the current state and returns a partial.\n * Listeners are only notified when at least one key actually\n * changed (shallow compare).\n */\n setState: (\n update:\n | Partial<TState>\n | ((prev: Readonly<TState>) => Partial<TState> | TState)\n ) => void;\n /** Reads a single key from the current state. */\n get: <K extends keyof TState>(key: K) => TState[K];\n /** Writes a single key. Listeners only fire when the value changes. */\n set: <K extends keyof TState>(key: K, value: TState[K]) => void;\n /**\n * Drops every listener and prevents future `setState`/`set` calls\n * from notifying. Used by `controller.destroy()`.\n */\n destroy: () => void;\n}\n\nfunction shallowEqualState<TState extends object>(\n a: TState,\n b: TState\n): boolean {\n const keys = new Set([\n ...Object.keys(a),\n ...Object.keys(b),\n ] as (keyof TState)[]);\n for (const k of keys) {\n if (!Object.is(a[k], b[k])) {\n return false;\n }\n }\n return true;\n}\n\nfunction mergeState<TState extends object>(\n prev: TState,\n partial: Partial<TState>\n): TState {\n return { ...prev, ...partial } as TState;\n}\n\n/**\n * Creates a new {@link Store}. The store starts with a shallow copy\n * of `initialState`; subsequent mutations never touch the caller's\n * object.\n */\nexport function createStore<TState extends object>(\n initialState: TState\n): Store<TState> {\n let state: TState = { ...initialState };\n const listeners = new Set<() => void>();\n let destroyed = false;\n\n const notify = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n return {\n getSnapshot() {\n return state as Readonly<TState>;\n },\n subscribe(onChange) {\n listeners.add(onChange);\n return () => {\n listeners.delete(onChange);\n };\n },\n setState(update) {\n if (destroyed) return;\n const patch =\n typeof update === 'function'\n ? update(state as Readonly<TState>)\n : update;\n if (typeof patch !== 'object' || patch == null) {\n return;\n }\n const next = mergeState(state, patch as Partial<TState>);\n if (shallowEqualState(state, next)) {\n return;\n }\n state = next;\n notify();\n },\n get(key) {\n return state[key];\n },\n set(key, value) {\n if (destroyed) return;\n if (Object.is(state[key], value)) {\n return;\n }\n state = { ...state, [key]: value } as TState;\n notify();\n },\n destroy() {\n destroyed = true;\n listeners.clear();\n },\n };\n}\n","import type { AppConnectState, AppConnectStatus } from '../types.ts';\nimport type { AppConnectInternalState } from './types.ts';\n\nconst noop = (): Promise<void> => Promise.resolve();\n\n/**\n * Snapshot returned by `getServerSnapshot` for SSR. Has stable\n * references and inert connect/disconnect actions because actions are\n * meaningless before hydration.\n */\nexport const SERVER_VIEW: AppConnectState = {\n status: 'initializing',\n error: null,\n connectToHubSpot: noop,\n disconnectFromHubSpot: noop,\n};\n\n/**\n * Reduces the boolean lifecycle flags into the user-facing\n * `AppConnectStatus` enum value. The order of checks matters:\n * disconnect-in-flight beats connect-in-flight (a transitional logout\n * shouldn't show a \"connecting\" spinner), and connected beats default.\n */\nexport function getDerivedStatus(\n state: AppConnectInternalState\n): AppConnectStatus {\n const {\n isInitComplete,\n isConnectInFlight,\n isSessionConnected,\n isDisconnectInFlight,\n } = state;\n if (!isInitComplete) {\n return 'initializing';\n }\n if (isDisconnectInFlight) return 'disconnecting';\n if (isConnectInFlight) return 'connecting';\n if (isSessionConnected) return 'connected';\n return 'disconnected';\n}\n","import { noopLogger, type Logger } from '../../shared/logger.ts';\nimport type {\n AppConnectBrowserConfig,\n AppConnectController,\n AppConnectState,\n} from '../types.ts';\nimport { startHubSpotConnection } from './connect-start.ts';\nimport { createDefaultSessionStorage } from './default-session-storage.ts';\nimport { disconnectFromHubSpot as runDisconnectFromHubSpot } from './disconnect.ts';\nimport { initAppConnect } from './init.ts';\nimport { startRefreshScheduler } from './refresh.ts';\nimport type {\n AppConnectContext,\n AppConnectInternalState,\n AppConnectStore,\n} from './types.ts';\nimport { memoizeLast } from './utils/memoize-utils.ts';\nimport {\n getExpiresAtFromSessionStorage,\n isClientSessionActive,\n} from './utils/session-utils.ts';\nimport { createStore } from './utils/store-utils.ts';\nimport { getDerivedStatus, SERVER_VIEW } from './view-state.ts';\n\n/**\n * Options accepted by {@link createAppConnectController}.\n */\nexport interface CreateAppConnectControllerOptions {\n /** Runtime configuration; see {@link AppConnectBrowserConfig}. */\n config: AppConnectBrowserConfig;\n /** Logger the controller uses for status/debug messages. */\n logger?: Logger;\n}\n\n/**\n * Creates an `AppConnectController`. Exactly one controller should be\n * shared by the entire app — the React provider takes the controller\n * as a prop and exposes it via context.\n *\n * The returned controller is inert until `start()` is called: nothing\n * is read from session storage, no refresh timer is scheduled, and no\n * fetches are issued. Tests can construct a controller and inspect\n * its initial snapshot without triggering side effects.\n */\nexport function createAppConnectController(\n options: CreateAppConnectControllerOptions\n): AppConnectController {\n const { config, logger = noopLogger } = options;\n const sessionStorage = createDefaultSessionStorage();\n const store: AppConnectStore = createStore<AppConnectInternalState>({\n isInitComplete: false,\n isConnectInFlight: false,\n isDisconnectInFlight: false,\n isSessionConnected: false,\n error: null,\n expiresAt: null,\n });\n const context: AppConnectContext = {\n config,\n logger,\n sessionStorage,\n store,\n };\n\n store.setState({ expiresAt: getExpiresAtFromSessionStorage(context) });\n\n let hasStarted = false;\n\n const connectToHubSpot = async () => {\n logger.info('connectToHubSpot: starting');\n store.setState({ error: null, isConnectInFlight: true });\n try {\n await startHubSpotConnection(context);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Connection failed';\n logger.error('connectToHubSpot: failed', err);\n store.setState({ error: message });\n } finally {\n logger.debug(\n 'connectToHubSpot: connect flow step finished (may redirect to HubSpot)'\n );\n store.setState({ isConnectInFlight: false });\n }\n };\n const disconnectFromHubSpot = () => runDisconnectFromHubSpot(context);\n\n const getViewStateMemoized = memoizeLast<\n Readonly<AppConnectInternalState>,\n AppConnectState\n >((storeState) => ({\n status: getDerivedStatus(storeState),\n error: storeState.error,\n connectToHubSpot,\n disconnectFromHubSpot,\n }));\n\n function getSnapshot() {\n return getViewStateMemoized(store.getSnapshot());\n }\n\n return {\n start() {\n if (hasStarted) {\n logger.debug('start skipped (already started)');\n return;\n }\n hasStarted = true;\n startRefreshScheduler(context);\n\n logger.info('start: initSdk (OAuth return handling if applicable)');\n void (async () => {\n try {\n await initAppConnect(context);\n logger.info('initSdk: completed without error');\n } catch (err) {\n logger.error('initSdk: failed', err);\n store.setState({\n error:\n err instanceof Error\n ? err.message\n : 'App Connect initialization failed',\n });\n } finally {\n const sessionActive = isClientSessionActive(context);\n logger.info('start: init complete, session active:', sessionActive);\n store.setState({\n isInitComplete: true,\n isSessionConnected: sessionActive,\n });\n }\n })();\n },\n subscribe: (fn) => store.subscribe(fn),\n getSnapshot,\n getServerSnapshot: () => SERVER_VIEW,\n };\n}\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { n as createLogger, t as createAppConnectController } from "./create-D-oTtxX-.js";
1
+ import { n as createLogger, t as createAppConnectController } from "./create-BYIPBw_G.js";
2
2
  import { n as themeVars, t as themeClass } from "./theme.css-CJbxi5hC.js";
3
3
  export { createAppConnectController, createLogger, themeClass, themeVars };
@@ -1,4 +1,4 @@
1
- import { t as createAppConnectController } from "../create-D-oTtxX-.js";
1
+ import { t as createAppConnectController } from "../create-BYIPBw_G.js";
2
2
  import { t as HubSpotAppConnect } from "../HubSpotAppConnect-DFe9b90e.js";
3
3
  import { useRef } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hubspot/app-connect-sdk",
3
- "version": "1.0.0-alpha.16",
3
+ "version": "1.0.0-alpha.17",
4
4
  "description": "HubSpot App Connect SDK (alpha release). Documentation and integration guidance forthcoming.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -44,8 +44,8 @@
44
44
  "tsdown": "0.22.0",
45
45
  "typescript": "6.0.3",
46
46
  "vitest": "4.1.6",
47
- "@private/prettier-config": "0.1.0",
48
47
  "@private/tsconfig": "0.1.0",
48
+ "@private/prettier-config": "0.1.0",
49
49
  "@private/eslint-config": "0.1.0"
50
50
  },
51
51
  "scripts": {
@@ -7,6 +7,7 @@ import {
7
7
  import { noopLogger } from '../../shared/logger.ts';
8
8
  import { EXPIRES_AT_KEY } from './constants.ts';
9
9
  import { initAppConnect } from './init.ts';
10
+ import { OAUTH_POPUP_WINDOW_NAME } from './oauth-popup.ts';
10
11
  import type {
11
12
  AppConnectContext,
12
13
  AppConnectInternalState,
@@ -49,6 +50,7 @@ function createTestContext(): AppConnectContext {
49
50
 
50
51
  interface FakeWindowOptions {
51
52
  href: string;
53
+ name?: string;
52
54
  opener?: { closed: boolean; postMessage: ReturnType<typeof vi.fn> };
53
55
  }
54
56
 
@@ -72,6 +74,7 @@ function installFakeWindow(options: FakeWindowOptions): FakeWindow {
72
74
  search: url.search,
73
75
  origin: url.origin,
74
76
  },
77
+ name: options.name ?? '',
75
78
  opener: options.opener,
76
79
  close,
77
80
  };
@@ -172,6 +175,7 @@ describe('initAppConnect', () => {
172
175
  const openerPostMessage = vi.fn();
173
176
  const fake = installFakeWindow({
174
177
  href: `https://app.example.com${OAUTH_CALLBACK_PATH}?code=auth-code&state=auth-state`,
178
+ name: OAUTH_POPUP_WINDOW_NAME,
175
179
  opener: { closed: false, postMessage: openerPostMessage },
176
180
  });
177
181
  const fetchSpy = vi.spyOn(globalThis, 'fetch');
@@ -194,6 +198,54 @@ describe('initAppConnect', () => {
194
198
  expect(window.location.pathname).toBe(OAUTH_CALLBACK_PATH);
195
199
  });
196
200
 
201
+ it('falls through to redirect flow when window.opener is set but window.name does not match the popup name', async () => {
202
+ const expiresAt = Date.now() + 1800 * 1000;
203
+ const openerPostMessage = vi.fn();
204
+ const fake = installFakeWindow({
205
+ href: `https://app.example.com${OAUTH_CALLBACK_PATH}?code=auth-code&state=auth-state`,
206
+ name: '',
207
+ opener: { closed: false, postMessage: openerPostMessage },
208
+ });
209
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue(
210
+ new Response(
211
+ JSON.stringify({ expires_at: expiresAt, return_path: '/dashboard' }),
212
+ { status: 200 }
213
+ )
214
+ );
215
+ const context = createTestContext();
216
+
217
+ await initAppConnect(context);
218
+
219
+ expect(openerPostMessage).not.toHaveBeenCalled();
220
+ expect(fake.close).not.toHaveBeenCalled();
221
+ expect(context.store.getSnapshot().expiresAt).toBe(expiresAt);
222
+ expect(window.location.pathname).toBe('/dashboard');
223
+ });
224
+
225
+ it('falls through to redirect flow when the popup relay fails because the opener is closed', async () => {
226
+ const expiresAt = Date.now() + 1800 * 1000;
227
+ const openerPostMessage = vi.fn();
228
+ const fake = installFakeWindow({
229
+ href: `https://app.example.com${OAUTH_CALLBACK_PATH}?code=auth-code&state=auth-state`,
230
+ name: OAUTH_POPUP_WINDOW_NAME,
231
+ opener: { closed: true, postMessage: openerPostMessage },
232
+ });
233
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue(
234
+ new Response(
235
+ JSON.stringify({ expires_at: expiresAt, return_path: '/dashboard' }),
236
+ { status: 200 }
237
+ )
238
+ );
239
+ const context = createTestContext();
240
+
241
+ await initAppConnect(context);
242
+
243
+ expect(openerPostMessage).not.toHaveBeenCalled();
244
+ expect(fake.close).not.toHaveBeenCalled();
245
+ expect(context.store.getSnapshot().expiresAt).toBe(expiresAt);
246
+ expect(window.location.pathname).toBe('/dashboard');
247
+ });
248
+
197
249
  it('skips the callback step on the callback path when code or state are missing', async () => {
198
250
  installFakeWindow({
199
251
  href: `https://app.example.com${OAUTH_CALLBACK_PATH}`,
@@ -5,7 +5,7 @@ import {
5
5
  } from '../../shared/constants.ts';
6
6
  import { completeHubSpotOAuthSession } from './oauth-complete.ts';
7
7
  import {
8
- hasOAuthPopupOpener,
8
+ isOAuthPopupCallback,
9
9
  relayOAuthCallbackToOpener,
10
10
  } from './oauth-popup.ts';
11
11
  import type { AppConnectContext } from './types.ts';
@@ -42,8 +42,7 @@ async function consumeOAuthCallback(context: AppConnectContext): Promise<void> {
42
42
  const state = params.get(AUTH_COMPLETE_STATE_PARAM);
43
43
  if (!code || !state) return;
44
44
 
45
- if (hasOAuthPopupOpener()) {
46
- relayOAuthCallbackToOpener({ code, state });
45
+ if (isOAuthPopupCallback() && relayOAuthCallbackToOpener({ code, state })) {
47
46
  return;
48
47
  }
49
48
 
@@ -149,6 +149,52 @@ describe('waitForHubSpotOAuthPopup', () => {
149
149
  ).rejects.toThrow(/Popup blocked/i);
150
150
  });
151
151
 
152
+ it('succeeds when popup closes immediately after relaying code and state', async () => {
153
+ const expiresAt = Date.now() + 1800 * 1000;
154
+ const popup = { closed: false, close: vi.fn() };
155
+ const messageListeners: Array<(event: MessageEvent) => void> = [];
156
+
157
+ vi.stubGlobal('window', {
158
+ location: { origin: 'https://app.example.com' },
159
+ addEventListener: (
160
+ type: string,
161
+ listener: (event: MessageEvent) => void
162
+ ) => {
163
+ if (type === 'message') messageListeners.push(listener);
164
+ },
165
+ removeEventListener: vi.fn(),
166
+ open: vi.fn(() => popup),
167
+ });
168
+
169
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue(
170
+ new Response(
171
+ JSON.stringify({ expires_at: expiresAt, return_path: '/dashboard' }),
172
+ { status: 200 }
173
+ )
174
+ );
175
+
176
+ const context = createTestContext();
177
+ const waitPromise = waitForHubSpotOAuthPopup({
178
+ context,
179
+ authorizationUrl: 'https://auth.example/authorize',
180
+ });
181
+
182
+ messageListeners[0]!({
183
+ origin: 'https://app.example.com',
184
+ data: {
185
+ type: OAUTH_POPUP_CALLBACK_MESSAGE_TYPE,
186
+ code: 'auth-code',
187
+ state: 'auth-state',
188
+ },
189
+ } as MessageEvent);
190
+
191
+ popup.closed = true;
192
+ await vi.advanceTimersByTimeAsync(300);
193
+
194
+ await expect(waitPromise).resolves.toBeUndefined();
195
+ expect(context.store.getSnapshot().isSessionConnected).toBe(true);
196
+ });
197
+
152
198
  it('ignores postMessage from a foreign origin', async () => {
153
199
  const popup = { closed: false, close: vi.fn() };
154
200
  const messageListeners: Array<(event: MessageEvent) => void> = [];
@@ -3,7 +3,7 @@ import { completeHubSpotOAuthSession } from './oauth-complete.ts';
3
3
  import type { AppConnectContext } from './types.ts';
4
4
  import { storeExpiresAt } from './utils/session-utils.ts';
5
5
 
6
- const OAUTH_POPUP_WINDOW_NAME = 'hubspot-app-connect-oauth';
6
+ export const OAUTH_POPUP_WINDOW_NAME = 'hubspot-app-connect-oauth';
7
7
  const OAUTH_POPUP_POLL_INTERVAL_MS = 300;
8
8
 
9
9
  interface OAuthPopupCallbackMessage {
@@ -52,6 +52,7 @@ export async function waitForHubSpotOAuthPopup(
52
52
  let popup: Window | null = null;
53
53
  let pollTimer: ReturnType<typeof setInterval> | undefined;
54
54
  let isSettled = false;
55
+ let isCallbackReceived = false;
55
56
 
56
57
  const cleanup = () => {
57
58
  window.removeEventListener('message', onMessage);
@@ -83,6 +84,9 @@ export async function waitForHubSpotOAuthPopup(
83
84
  if (event.origin !== targetOrigin) return;
84
85
  if (!isOAuthPopupCallbackMessage(event.data)) return;
85
86
 
87
+ if (isCallbackReceived) return;
88
+ isCallbackReceived = true;
89
+
86
90
  void (async () => {
87
91
  try {
88
92
  const body = await completeHubSpotOAuthSession(context, {
@@ -111,7 +115,7 @@ export async function waitForHubSpotOAuthPopup(
111
115
  }
112
116
 
113
117
  pollTimer = setInterval(() => {
114
- if (popup?.closed) {
118
+ if (popup?.closed && !isCallbackReceived) {
115
119
  settleFailure('Connect to HubSpot was cancelled.');
116
120
  }
117
121
  }, OAUTH_POPUP_POLL_INTERVAL_MS);
@@ -150,3 +154,7 @@ export function hasOAuthPopupOpener(): boolean {
150
154
  return false;
151
155
  }
152
156
  }
157
+
158
+ export function isOAuthPopupCallback(): boolean {
159
+ return window.name === OAUTH_POPUP_WINDOW_NAME && hasOAuthPopupOpener();
160
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-D-oTtxX-.js","names":["disconnectFromHubSpot","runDisconnectFromHubSpot"],"sources":["../../src/shared/logger.ts","../../src/shared/constants.ts","../../src/browser/app-connect-controller/constants.ts","../../src/browser/app-connect-controller/utils/session-utils.ts","../../src/browser/app-connect-controller/oauth-complete.ts","../../src/browser/app-connect-controller/oauth-popup.ts","../../src/browser/app-connect-controller/utils/iframe-utils.ts","../../src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts","../../src/browser/app-connect-controller/utils/timeout-utils.ts","../../src/browser/app-connect-controller/connect-start.ts","../../src/browser/app-connect-controller/default-session-storage.ts","../../src/browser/app-connect-controller/disconnect.ts","../../src/browser/app-connect-controller/init.ts","../../src/browser/app-connect-controller/refresh.ts","../../src/browser/app-connect-controller/utils/memoize-utils.ts","../../src/browser/app-connect-controller/utils/store-utils.ts","../../src/browser/app-connect-controller/view-state.ts","../../src/browser/app-connect-controller/create.ts"],"sourcesContent":["/**\n * Pluggable logger contract used by the SDK on both the browser and\n * server. Consumers can pass `console`-like loggers, structured\n * loggers (pino / winston / etc.) or no-op stubs in tests.\n */\nexport interface Logger {\n debug: (message: string, ...args: unknown[]) => void;\n info: (message: string, ...args: unknown[]) => void;\n warn: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nfunction formatPrefix(name: string): string {\n return `[${name}]`;\n}\n\n/**\n * Creates a console-backed logger that prefixes every line with the\n * supplied `name`. Used as the default when no custom logger is\n * provided.\n */\nexport function createLogger(name: string): Logger {\n const prefix = formatPrefix(name);\n return {\n debug: (message, ...args) => {\n console.debug(prefix, message, ...args);\n },\n info: (message, ...args) => {\n console.info(prefix, message, ...args);\n },\n warn: (message, ...args) => {\n console.warn(prefix, message, ...args);\n },\n error: (message, ...args) => {\n console.error(prefix, message, ...args);\n },\n };\n}\n\n/**\n * Logger that swallows every message. Convenient for tests and for\n * the SDK's server-side handlers when no logger is provided by the\n * host application.\n */\nexport const noopLogger: Logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n};\n","/**\n * Constants whose values are part of the contract between the browser\n * controller and the server-side hubspot-connect routes. Both halves\n * import from this module so the wire format stays in sync.\n */\n\n/**\n * Query parameter on the OAuth return URL that carries the new access\n * token's expiry (Unix epoch milliseconds). The browser controller\n * sets this in the URL after a successful `auth/complete` call and\n * then strips it during `initAppConnect` via `history.replaceState`.\n */\nexport const EXPIRES_AT_URL_PARAM = '__hs_expires_at';\n\n/**\n * Path the browser visits after HubSpot's authorize endpoint\n * redirects back to the app. Mounted on the **frontend** origin (not\n * the SDK's edge function host) so all OAuth-related cookies live in\n * the `(frontend, edge)` CHIPS partition.\n *\n * The SDK's `auth/init-session` builds the OAuth `redirect_uri` as\n * `${requestOrigin}${HUBSPOT_FRONTEND_CALLBACK_PATH}`. The browser\n * controller, on `start()`, recognizes this path on `window.location`\n * and forwards `?code` + `?state` to the SDK's `auth/complete`\n * endpoint via a credentialed cross-site fetch. The host app must\n * register `${app_origin}${HUBSPOT_FRONTEND_CALLBACK_PATH}` as a\n * redirect URI in its HubSpot app settings.\n */\nexport const OAUTH_CALLBACK_PATH = '/__hubspot_oauth_callback';\n\n/**\n * Query parameter on the `auth/complete` POST request carrying the\n * authorization `code` HubSpot returned to the frontend callback.\n */\nexport const AUTH_COMPLETE_CODE_PARAM = 'code';\n\n/**\n * Query parameter on the `auth/complete` POST request carrying the\n * OAuth `state` HubSpot echoed back to the frontend callback.\n */\nexport const AUTH_COMPLETE_STATE_PARAM = 'state';\n\n/**\n * `postMessage` `data.type` value the OAuth popup sends to its opener\n * with the authorization `code` and `state` from the callback URL. The\n * opener POSTs them to `auth/complete` so credentialed cookies stay in\n * the same CHIPS partition as `auth/init-session`.\n */\nexport const OAUTH_POPUP_CALLBACK_MESSAGE_TYPE =\n 'hubspot-app-connect:oauth-callback';\n","export { EXPIRES_AT_URL_PARAM } from '../../shared/constants.ts';\n\n/**\n * Key the controller persists the access-token `expiresAt` (Unix\n * epoch milliseconds) under in `sessionStorage`. Survives full-page\n * navigations within the same tab.\n */\nexport const EXPIRES_AT_KEY = 'hubspot_token_expires_at';\n\n/**\n * Number of milliseconds before `expiresAt` that the refresh\n * scheduler attempts to mint a new access token. 60s is comfortably\n * larger than typical network latency without burning lifetime.\n */\nexport const REFRESH_BUFFER_MS = 60_000;\n","import { EXPIRES_AT_KEY } from '../constants.ts';\nimport type { AppConnectContext } from '../types.ts';\n\ninterface StoreExpiresAtOptions {\n context: AppConnectContext;\n expiresAtMs: number;\n}\n\n/**\n * Persists the access-token `expiresAt` (Unix epoch milliseconds) to\n * both the in-memory store and `sessionStorage` so it survives\n * full-page navigations within the same tab.\n */\nexport function storeExpiresAt(options: StoreExpiresAtOptions): void {\n const { context, expiresAtMs } = options;\n context.store.setState({ expiresAt: expiresAtMs });\n context.sessionStorage.setItem(EXPIRES_AT_KEY, String(expiresAtMs));\n}\n\n/**\n * Reads the persisted `expiresAt` from `sessionStorage`. Removes the\n * value (and returns `null`) if it is malformed or already expired,\n * so a stale entry never reactivates a dead session.\n */\nexport function getExpiresAtFromSessionStorage(\n context: AppConnectContext\n): number | null {\n const raw = context.sessionStorage.getItem(EXPIRES_AT_KEY);\n if (!raw) return null;\n const val = parseInt(raw, 10);\n if (isNaN(val)) {\n context.sessionStorage.removeItem(EXPIRES_AT_KEY);\n return null;\n }\n if (Date.now() > val) {\n context.sessionStorage.removeItem(EXPIRES_AT_KEY);\n return null;\n }\n return val;\n}\n\n/**\n * Clears the persisted session-storage state. Called on disconnect.\n */\nexport function clearSessionStorage(context: AppConnectContext): void {\n context.sessionStorage.removeItem(EXPIRES_AT_KEY);\n}\n\n/**\n * Returns `true` when the controller has an `expiresAt` whose value\n * is still in the future. Used both to drive the UI status and to\n * decide whether the refresh scheduler should run.\n */\nexport function isClientSessionActive(context: AppConnectContext): boolean {\n const state = context.store.getSnapshot();\n const expiresAt = state.expiresAt;\n return expiresAt !== null && Date.now() < expiresAt;\n}\n","import {\n AUTH_COMPLETE_CODE_PARAM,\n AUTH_COMPLETE_STATE_PARAM,\n} from '../../shared/constants.ts';\nimport type { AuthCompleteResponse } from '../../shared/wire-types.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { clearSessionStorage } from './utils/session-utils.ts';\n\ninterface CompleteHubSpotOAuthSessionOptions {\n code: string;\n state: string;\n}\n\n/**\n * Finishes the OAuth token exchange by POSTing `code` and `state` to the\n * SDK's `auth/complete` route with credentialed cookies from the current\n * browsing context (must match the partition used by `auth/init-session`).\n */\nexport async function completeHubSpotOAuthSession(\n context: AppConnectContext,\n options: CompleteHubSpotOAuthSessionOptions\n): Promise<AuthCompleteResponse> {\n const { code, state } = options;\n\n const completeUrl = new URL(\n `${context.config.hubSpotConnectBaseUrl}/auth/complete`,\n window.location.origin\n );\n completeUrl.searchParams.set(AUTH_COMPLETE_CODE_PARAM, code);\n completeUrl.searchParams.set(AUTH_COMPLETE_STATE_PARAM, state);\n\n let response: Response;\n try {\n response = await fetch(completeUrl.toString(), {\n method: 'POST',\n credentials: 'include',\n });\n } catch (err) {\n clearSessionStorage(context);\n throw new Error(\n `Failed to complete HubSpot OAuth: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n\n if (!response.ok) {\n clearSessionStorage(context);\n throw new Error(\n `Failed to complete HubSpot OAuth: ${response.status} ${response.statusText}`\n );\n }\n\n return (await response.json()) as AuthCompleteResponse;\n}\n","import { OAUTH_POPUP_CALLBACK_MESSAGE_TYPE } from '../../shared/constants.ts';\nimport { completeHubSpotOAuthSession } from './oauth-complete.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { storeExpiresAt } from './utils/session-utils.ts';\n\nconst OAUTH_POPUP_WINDOW_NAME = 'hubspot-app-connect-oauth';\nconst OAUTH_POPUP_POLL_INTERVAL_MS = 300;\n\ninterface OAuthPopupCallbackMessage {\n type: typeof OAUTH_POPUP_CALLBACK_MESSAGE_TYPE;\n code: string;\n state: string;\n}\n\ninterface WaitForHubSpotOAuthPopupOptions {\n context: AppConnectContext;\n authorizationUrl: string;\n}\n\ninterface RelayOAuthCallbackToOpenerOptions {\n code: string;\n state: string;\n}\n\nfunction isOAuthPopupCallbackMessage(\n data: unknown\n): data is OAuthPopupCallbackMessage {\n if (typeof data !== 'object' || data === null) return false;\n const record = data as Record<string, unknown>;\n return (\n record.type === OAUTH_POPUP_CALLBACK_MESSAGE_TYPE &&\n typeof record.code === 'string' &&\n record.code.length > 0 &&\n typeof record.state === 'string' &&\n record.state.length > 0\n );\n}\n\n/**\n * Opens HubSpot's authorize URL in a popup and waits for the callback\n * page to relay `code` + `state` back. The opener POSTs to\n * `auth/complete` so credentialed cookies use the same CHIPS partition\n * as `auth/init-session`.\n */\nexport async function waitForHubSpotOAuthPopup(\n options: WaitForHubSpotOAuthPopupOptions\n): Promise<void> {\n const { context, authorizationUrl } = options;\n const targetOrigin = window.location.origin;\n\n return new Promise<void>((resolve, reject) => {\n let popup: Window | null = null;\n let pollTimer: ReturnType<typeof setInterval> | undefined;\n let isSettled = false;\n\n const cleanup = () => {\n window.removeEventListener('message', onMessage);\n if (pollTimer !== undefined) clearInterval(pollTimer);\n };\n\n const settleSuccess = (expiresAtMs: number) => {\n if (isSettled) return;\n isSettled = true;\n cleanup();\n storeExpiresAt({ context, expiresAtMs });\n context.store.setState({ isSessionConnected: true, error: null });\n resolve();\n };\n\n const settleFailure = (message: string) => {\n if (isSettled) return;\n isSettled = true;\n cleanup();\n try {\n popup?.close();\n } catch {\n // ignore close errors\n }\n reject(new Error(message));\n };\n\n const onMessage = (event: MessageEvent) => {\n if (event.origin !== targetOrigin) return;\n if (!isOAuthPopupCallbackMessage(event.data)) return;\n\n void (async () => {\n try {\n const body = await completeHubSpotOAuthSession(context, {\n code: event.data.code,\n state: event.data.state,\n });\n settleSuccess(body.expires_at);\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'HubSpot OAuth failed';\n settleFailure(message);\n }\n })();\n };\n\n window.addEventListener('message', onMessage);\n\n popup = window.open(\n authorizationUrl,\n OAUTH_POPUP_WINDOW_NAME,\n 'popup=yes,width=600,height=700'\n );\n if (!popup) {\n settleFailure('Popup blocked. Allow popups for this site and try again.');\n return;\n }\n\n pollTimer = setInterval(() => {\n if (popup?.closed) {\n settleFailure('Connect to HubSpot was cancelled.');\n }\n }, OAUTH_POPUP_POLL_INTERVAL_MS);\n });\n}\n\n/**\n * Called from the OAuth callback page inside the popup. Relays `code`\n * and `state` to the opener (which runs `auth/complete`) and closes.\n */\nexport function relayOAuthCallbackToOpener(\n options: RelayOAuthCallbackToOpenerOptions\n): boolean {\n const { code, state } = options;\n const opener = window.opener;\n if (!opener || opener.closed) return false;\n\n const message: OAuthPopupCallbackMessage = {\n type: OAUTH_POPUP_CALLBACK_MESSAGE_TYPE,\n code,\n state,\n };\n opener.postMessage(message, window.location.origin);\n try {\n window.close();\n } catch {\n // ignore close errors\n }\n return true;\n}\n\nexport function hasOAuthPopupOpener(): boolean {\n try {\n return Boolean(window.opener && !window.opener.closed);\n } catch {\n return false;\n }\n}\n","/**\n * Returns `true` when the app runs inside a parent frame (same-origin\n * or cross-origin). Cross-origin parent access throws; treat that as\n * embedded so OAuth uses a popup instead of a top-level redirect.\n */\nexport function isAppEmbeddedInIframe(): boolean {\n try {\n return window.self !== window.top;\n } catch {\n return true;\n }\n}\n","import type { OAuthConnectMode } from '../../types.ts';\nimport { isAppEmbeddedInIframe } from './iframe-utils.ts';\n\nexport type ResolvedOAuthConnectMode = 'redirect' | 'popup';\n\ninterface ResolveOAuthConnectModeOptions {\n oauthConnectMode?: OAuthConnectMode;\n}\n\n/**\n * Maps the configured {@link OAuthConnectMode} to the concrete connect\n * behavior for the current browsing context.\n */\nexport function resolveOAuthConnectMode(\n options: ResolveOAuthConnectModeOptions\n): ResolvedOAuthConnectMode {\n const mode = options.oauthConnectMode ?? 'auto';\n if (mode === 'popup') return 'popup';\n if (mode === 'redirect') return 'redirect';\n return isAppEmbeddedInIframe() ? 'popup' : 'redirect';\n}\n","export function delay(ms: number): Promise<void> {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","import type { InitSessionResponse } from '../../shared/wire-types.ts';\nimport { waitForHubSpotOAuthPopup } from './oauth-popup.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { resolveOAuthConnectMode } from './utils/resolve-oauth-connect-mode.ts';\nimport { delay } from './utils/timeout-utils.ts';\n\n/** Extra wait before redirect so the connect progress UI is visible; set to `0` to disable. */\nconst ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS = 500;\n\n/**\n * Begins the OAuth connect flow:\n *\n * 1. Calls the SDK's `auth/init-session` route to mint a fresh PKCE\n * verifier + state and obtain HubSpot's `authorize` URL.\n * 2. Navigates to that URL via full-page redirect, or opens it in a\n * popup when embedded in an iframe or when `oauthConnectMode` is\n * `'popup'`.\n *\n * The `return_path` is the current path + query so the user lands\n * back where they started after authorizing (redirect mode only).\n *\n * Throws when the init call fails. Does not return after a redirect\n * begins because the page is unloaded.\n */\nexport async function startHubSpotConnection(\n context: AppConnectContext\n): Promise<void> {\n const { config } = context;\n\n const returnPath = `${window.location.pathname}${window.location.search}`;\n\n const initUrl = new URL(\n `${config.hubSpotConnectBaseUrl}/auth/init-session`,\n window.location.origin\n );\n initUrl.searchParams.set('return_path', returnPath);\n\n const initResponse = await fetch(initUrl.toString(), {\n credentials: 'include',\n });\n if (!initResponse.ok)\n throw new Error(`Failed to init session: ${initResponse.status}`);\n const { authorization_url: authorizationUrl } =\n (await initResponse.json()) as InitSessionResponse;\n\n await delay(ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS);\n\n const connectMode = resolveOAuthConnectMode(\n config.oauthConnectMode !== undefined\n ? { oauthConnectMode: config.oauthConnectMode }\n : {}\n );\n\n if (connectMode === 'popup') {\n await waitForHubSpotOAuthPopup({ context, authorizationUrl });\n return;\n }\n\n window.location.href = authorizationUrl;\n}\n","import type { SessionStorage } from './types.ts';\n\n/**\n * Builds a `SessionStorage` adapter that delegates to the global\n * `sessionStorage` object exposed by browsers. The controller uses\n * this when no custom storage is supplied (e.g. for tests or non-DOM\n * environments).\n */\nexport function createDefaultSessionStorage(): SessionStorage {\n return {\n setItem: (key, value) => {\n sessionStorage.setItem(key, value);\n },\n getItem: (key) => {\n return sessionStorage.getItem(key);\n },\n removeItem: (key) => {\n sessionStorage.removeItem(key);\n },\n };\n}\n","import type { LogoutResponse } from '../../shared/wire-types.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { clearSessionStorage } from './utils/session-utils.ts';\n\n/**\n * Disconnect flow:\n *\n * 1. Calls the SDK's `auth/logout` route to revoke the upstream token\n * and clear the refresh-token cookie.\n * 2. Clears the local session-storage `expiresAt` entry.\n * 3. Updates the controller state to `disconnected` and navigates the\n * browser to the URL the server returned in `redirect_to`.\n *\n * Errors are caught, logged, and surfaced via the controller's\n * `error` field so the UI can show a retry state.\n */\nexport async function disconnectFromHubSpot(\n context: AppConnectContext\n): Promise<void> {\n const { config, logger, store } = context;\n logger.info('disconnectFromHubSpot: starting');\n store.setState({ error: null, isDisconnectInFlight: true });\n const { hubSpotConnectBaseUrl: appConnectBaseUrl } = config;\n\n try {\n clearSessionStorage(context);\n\n const response = await fetch(`${appConnectBaseUrl}/auth/logout`, {\n method: 'POST',\n credentials: 'include',\n });\n if (!response.ok) {\n throw new Error(`Logout failed: ${response.status}`);\n }\n const { redirect_to: redirectTo } =\n (await response.json()) as LogoutResponse;\n\n store.setState({\n expiresAt: null,\n isSessionConnected: false,\n isDisconnectInFlight: false,\n });\n\n window.location.href = redirectTo;\n logger.info('disconnectFromHubSpot: redirecting');\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Disconnect failed';\n logger.error('disconnectFromHubSpot: failed', err);\n store.setState({\n error: message,\n isDisconnectInFlight: false,\n });\n }\n}\n","import {\n AUTH_COMPLETE_CODE_PARAM,\n AUTH_COMPLETE_STATE_PARAM,\n OAUTH_CALLBACK_PATH,\n} from '../../shared/constants.ts';\nimport { completeHubSpotOAuthSession } from './oauth-complete.ts';\nimport {\n hasOAuthPopupOpener,\n relayOAuthCallbackToOpener,\n} from './oauth-popup.ts';\nimport type { AppConnectContext } from './types.ts';\nimport { storeExpiresAt } from './utils/session-utils.ts';\n\n/**\n * On `controller.start()`:\n *\n * 1. If the browser has been redirected back to the SDK's frontend\n * OAuth callback path (`/__hubspot_oauth_callback`) with `?code` +\n * `?state`:\n * - **Redirect flow** (no `window.opener`): POST to `auth/complete`\n * from this window, persist `expires_at`, and `history.replaceState`\n * to `return_path`.\n * - **Popup flow** (`window.opener` present): relay `code` + `state`\n * to the opener via `postMessage` and close. The opener POSTs to\n * `auth/complete` so partitioned cookies match `init-session`.\n * 2. Pick up `?__hs_expires_at` from `window.location` (refresh hop),\n * persist it, and strip it from the address bar.\n *\n * A no-op when neither set of parameters is present.\n */\nexport async function initAppConnect(\n context: AppConnectContext\n): Promise<void> {\n await consumeOAuthCallback(context);\n}\n\nasync function consumeOAuthCallback(context: AppConnectContext): Promise<void> {\n if (window.location.pathname !== OAUTH_CALLBACK_PATH) return;\n\n const params = new URLSearchParams(window.location.search);\n const code = params.get(AUTH_COMPLETE_CODE_PARAM);\n const state = params.get(AUTH_COMPLETE_STATE_PARAM);\n if (!code || !state) return;\n\n if (hasOAuthPopupOpener()) {\n relayOAuthCallbackToOpener({ code, state });\n return;\n }\n\n const body = await completeHubSpotOAuthSession(context, { code, state });\n const { expires_at: expiresAt, return_path: returnPath } = body;\n\n storeExpiresAt({ context, expiresAtMs: expiresAt });\n\n const targetUrl = new URL(returnPath, window.location.origin);\n history.replaceState(\n null,\n '',\n `${targetUrl.pathname}${targetUrl.search}${targetUrl.hash}`\n );\n}\n","import type { RefreshTokenResponse } from '../../shared/wire-types.ts';\nimport { REFRESH_BUFFER_MS } from './constants.ts';\nimport type { AppConnectContext } from './types.ts';\nimport {\n isClientSessionActive,\n storeExpiresAt,\n} from './utils/session-utils.ts';\n\n/**\n * Tear-down handle returned by {@link startRefreshScheduler}. Calling\n * `stop()` clears any pending refresh timer and unsubscribes from the\n * store so the controller can be garbage-collected.\n */\nexport interface RefreshSchedulerHandle {\n stop: () => void;\n}\n\nasync function refreshAccessToken(context: AppConnectContext): Promise<void> {\n const { config } = context;\n\n const refreshResponse = await fetch(\n `${config.hubSpotConnectBaseUrl}/auth/refresh`,\n {\n method: 'POST',\n credentials: 'include',\n }\n );\n if (!refreshResponse.ok) {\n throw new Error(`Refresh failed: ${refreshResponse.status}`);\n }\n const { expires_in: expiresInSeconds } =\n (await refreshResponse.json()) as RefreshTokenResponse;\n if (\n typeof expiresInSeconds !== 'number' ||\n !Number.isFinite(expiresInSeconds) ||\n expiresInSeconds <= 0\n ) {\n throw new Error('Refresh response missing or invalid expires_in');\n }\n const expiresAtMs = Date.now() + expiresInSeconds * 1000;\n\n storeExpiresAt({ context, expiresAtMs });\n}\n\n/**\n * Subscribes to store changes and (re)schedules a token refresh\n * whenever `expiresAt` moves. Returns a handle that the caller can\n * use to stop the scheduler when the controller is destroyed.\n */\nexport function startRefreshScheduler(\n context: AppConnectContext\n): RefreshSchedulerHandle {\n const { logger, store } = context;\n\n let refreshTimer: ReturnType<typeof setTimeout> | null = null;\n let stopped = false;\n\n const scheduleRefresh = () => {\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n if (stopped) return;\n\n const state = store.getSnapshot();\n if (!state.isInitComplete || !state.isSessionConnected) {\n return;\n }\n\n const expiresAt = state.expiresAt;\n if (!expiresAt) {\n logger.debug('scheduleRefresh: no expiresAt, skipping');\n return;\n }\n const delayMs = Math.max(0, expiresAt - Date.now() - REFRESH_BUFFER_MS);\n logger.debug(\n 'scheduleRefresh: next refresh in ',\n (delayMs / 1000).toFixed(1),\n 's',\n {\n expiresAt,\n }\n );\n refreshTimer = setTimeout(() => {\n logger.debug('scheduleRefresh: timer fired, refreshing token');\n refreshTimer = null;\n if (stopped) return;\n\n void (async () => {\n try {\n await refreshAccessToken(context);\n if (stopped) return;\n if (isClientSessionActive(context)) {\n logger.info('token refresh: success, session still active');\n } else {\n logger.warn(\n 'token refresh: success but no active session in storage'\n );\n store.setState({ isSessionConnected: false });\n }\n } catch (err) {\n logger.error('token refresh: failed', err);\n if (stopped) return;\n store.setState({ isSessionConnected: false });\n }\n })();\n }, delayMs);\n };\n\n const unsubscribe = store.subscribe(() => {\n scheduleRefresh();\n });\n\n return {\n stop: () => {\n stopped = true;\n unsubscribe();\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n },\n };\n}\n","/**\n * Wraps `fn` so that calls with the same input (compared via\n * `Object.is`) return the previous output without re-invoking `fn`.\n * The cache holds at most one entry, so this is safe to use for\n * derived view-state from a single store snapshot.\n *\n * Used by `getSnapshot` to keep the React state reference stable\n * between unrelated store updates — `useSyncExternalStore` would\n * otherwise re-render every consumer on every change.\n */\nexport function memoizeLast<TInput, TOutput>(\n fn: (input: TInput) => TOutput\n): (input: TInput) => TOutput {\n let lastInput: TInput;\n let lastOutput: TOutput;\n let hasValue = false;\n return (input: TInput): TOutput => {\n if (hasValue && Object.is(lastInput, input)) {\n return lastOutput;\n }\n lastInput = input;\n lastOutput = fn(input);\n hasValue = true;\n return lastOutput;\n };\n}\n","/**\n * Tiny external store used by the controller. Shaped to be compatible\n * with React's `useSyncExternalStore` while remaining usable outside\n * React.\n */\nexport interface Store<TState extends object> {\n /** Returns the current state. The reference changes on every update. */\n getSnapshot: () => Readonly<TState>;\n /**\n * Subscribes to state changes. Returns an unsubscribe function the\n * caller can invoke at teardown.\n */\n subscribe: (onChange: () => void) => () => void;\n /**\n * Merges `update` into the current state. When `update` is a\n * function, it receives the current state and returns a partial.\n * Listeners are only notified when at least one key actually\n * changed (shallow compare).\n */\n setState: (\n update:\n | Partial<TState>\n | ((prev: Readonly<TState>) => Partial<TState> | TState)\n ) => void;\n /** Reads a single key from the current state. */\n get: <K extends keyof TState>(key: K) => TState[K];\n /** Writes a single key. Listeners only fire when the value changes. */\n set: <K extends keyof TState>(key: K, value: TState[K]) => void;\n /**\n * Drops every listener and prevents future `setState`/`set` calls\n * from notifying. Used by `controller.destroy()`.\n */\n destroy: () => void;\n}\n\nfunction shallowEqualState<TState extends object>(\n a: TState,\n b: TState\n): boolean {\n const keys = new Set([\n ...Object.keys(a),\n ...Object.keys(b),\n ] as (keyof TState)[]);\n for (const k of keys) {\n if (!Object.is(a[k], b[k])) {\n return false;\n }\n }\n return true;\n}\n\nfunction mergeState<TState extends object>(\n prev: TState,\n partial: Partial<TState>\n): TState {\n return { ...prev, ...partial } as TState;\n}\n\n/**\n * Creates a new {@link Store}. The store starts with a shallow copy\n * of `initialState`; subsequent mutations never touch the caller's\n * object.\n */\nexport function createStore<TState extends object>(\n initialState: TState\n): Store<TState> {\n let state: TState = { ...initialState };\n const listeners = new Set<() => void>();\n let destroyed = false;\n\n const notify = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n return {\n getSnapshot() {\n return state as Readonly<TState>;\n },\n subscribe(onChange) {\n listeners.add(onChange);\n return () => {\n listeners.delete(onChange);\n };\n },\n setState(update) {\n if (destroyed) return;\n const patch =\n typeof update === 'function'\n ? update(state as Readonly<TState>)\n : update;\n if (typeof patch !== 'object' || patch == null) {\n return;\n }\n const next = mergeState(state, patch as Partial<TState>);\n if (shallowEqualState(state, next)) {\n return;\n }\n state = next;\n notify();\n },\n get(key) {\n return state[key];\n },\n set(key, value) {\n if (destroyed) return;\n if (Object.is(state[key], value)) {\n return;\n }\n state = { ...state, [key]: value } as TState;\n notify();\n },\n destroy() {\n destroyed = true;\n listeners.clear();\n },\n };\n}\n","import type { AppConnectState, AppConnectStatus } from '../types.ts';\nimport type { AppConnectInternalState } from './types.ts';\n\nconst noop = (): Promise<void> => Promise.resolve();\n\n/**\n * Snapshot returned by `getServerSnapshot` for SSR. Has stable\n * references and inert connect/disconnect actions because actions are\n * meaningless before hydration.\n */\nexport const SERVER_VIEW: AppConnectState = {\n status: 'initializing',\n error: null,\n connectToHubSpot: noop,\n disconnectFromHubSpot: noop,\n};\n\n/**\n * Reduces the boolean lifecycle flags into the user-facing\n * `AppConnectStatus` enum value. The order of checks matters:\n * disconnect-in-flight beats connect-in-flight (a transitional logout\n * shouldn't show a \"connecting\" spinner), and connected beats default.\n */\nexport function getDerivedStatus(\n state: AppConnectInternalState\n): AppConnectStatus {\n const {\n isInitComplete,\n isConnectInFlight,\n isSessionConnected,\n isDisconnectInFlight,\n } = state;\n if (!isInitComplete) {\n return 'initializing';\n }\n if (isDisconnectInFlight) return 'disconnecting';\n if (isConnectInFlight) return 'connecting';\n if (isSessionConnected) return 'connected';\n return 'disconnected';\n}\n","import { noopLogger, type Logger } from '../../shared/logger.ts';\nimport type {\n AppConnectBrowserConfig,\n AppConnectController,\n AppConnectState,\n} from '../types.ts';\nimport { startHubSpotConnection } from './connect-start.ts';\nimport { createDefaultSessionStorage } from './default-session-storage.ts';\nimport { disconnectFromHubSpot as runDisconnectFromHubSpot } from './disconnect.ts';\nimport { initAppConnect } from './init.ts';\nimport { startRefreshScheduler } from './refresh.ts';\nimport type {\n AppConnectContext,\n AppConnectInternalState,\n AppConnectStore,\n} from './types.ts';\nimport { memoizeLast } from './utils/memoize-utils.ts';\nimport {\n getExpiresAtFromSessionStorage,\n isClientSessionActive,\n} from './utils/session-utils.ts';\nimport { createStore } from './utils/store-utils.ts';\nimport { getDerivedStatus, SERVER_VIEW } from './view-state.ts';\n\n/**\n * Options accepted by {@link createAppConnectController}.\n */\nexport interface CreateAppConnectControllerOptions {\n /** Runtime configuration; see {@link AppConnectBrowserConfig}. */\n config: AppConnectBrowserConfig;\n /** Logger the controller uses for status/debug messages. */\n logger?: Logger;\n}\n\n/**\n * Creates an `AppConnectController`. Exactly one controller should be\n * shared by the entire app — the React provider takes the controller\n * as a prop and exposes it via context.\n *\n * The returned controller is inert until `start()` is called: nothing\n * is read from session storage, no refresh timer is scheduled, and no\n * fetches are issued. Tests can construct a controller and inspect\n * its initial snapshot without triggering side effects.\n */\nexport function createAppConnectController(\n options: CreateAppConnectControllerOptions\n): AppConnectController {\n const { config, logger = noopLogger } = options;\n const sessionStorage = createDefaultSessionStorage();\n const store: AppConnectStore = createStore<AppConnectInternalState>({\n isInitComplete: false,\n isConnectInFlight: false,\n isDisconnectInFlight: false,\n isSessionConnected: false,\n error: null,\n expiresAt: null,\n });\n const context: AppConnectContext = {\n config,\n logger,\n sessionStorage,\n store,\n };\n\n store.setState({ expiresAt: getExpiresAtFromSessionStorage(context) });\n\n let hasStarted = false;\n\n const connectToHubSpot = async () => {\n logger.info('connectToHubSpot: starting');\n store.setState({ error: null, isConnectInFlight: true });\n try {\n await startHubSpotConnection(context);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Connection failed';\n logger.error('connectToHubSpot: failed', err);\n store.setState({ error: message });\n } finally {\n logger.debug(\n 'connectToHubSpot: connect flow step finished (may redirect to HubSpot)'\n );\n store.setState({ isConnectInFlight: false });\n }\n };\n const disconnectFromHubSpot = () => runDisconnectFromHubSpot(context);\n\n const getViewStateMemoized = memoizeLast<\n Readonly<AppConnectInternalState>,\n AppConnectState\n >((storeState) => ({\n status: getDerivedStatus(storeState),\n error: storeState.error,\n connectToHubSpot,\n disconnectFromHubSpot,\n }));\n\n function getSnapshot() {\n return getViewStateMemoized(store.getSnapshot());\n }\n\n return {\n start() {\n if (hasStarted) {\n logger.debug('start skipped (already started)');\n return;\n }\n hasStarted = true;\n startRefreshScheduler(context);\n\n logger.info('start: initSdk (OAuth return handling if applicable)');\n void (async () => {\n try {\n await initAppConnect(context);\n logger.info('initSdk: completed without error');\n } catch (err) {\n logger.error('initSdk: failed', err);\n store.setState({\n error:\n err instanceof Error\n ? err.message\n : 'App Connect initialization failed',\n });\n } finally {\n const sessionActive = isClientSessionActive(context);\n logger.info('start: init complete, session active:', sessionActive);\n store.setState({\n isInitComplete: true,\n isSessionConnected: sessionActive,\n });\n }\n })();\n },\n subscribe: (fn) => store.subscribe(fn),\n getSnapshot,\n getServerSnapshot: () => SERVER_VIEW,\n };\n}\n"],"mappings":"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"}