@hubspot/app-connect-sdk 1.0.0-alpha.2 → 1.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (731) hide show
  1. package/.turbo/turbo-format$colon$check.log +1 -1
  2. package/.turbo/turbo-test.log +101 -57
  3. package/.turbo/turbo-tsdown.log +474 -469
  4. package/build/tsconfig.browser.tsbuildinfo +1 -1
  5. package/build/tsconfig.server.tsbuildinfo +1 -1
  6. package/dist/browser/{HubSpotAppConnect-BW45gyDs.js → HubSpotAppConnect-721kYr9d.js} +17 -23
  7. package/dist/browser/HubSpotAppConnect-721kYr9d.js.map +1 -0
  8. package/dist/browser/{create-vctOhpX9.js → create-DxEyGG-k.js} +336 -100
  9. package/dist/browser/create-DxEyGG-k.js.map +1 -0
  10. package/dist/browser/index.d.ts +2 -2
  11. package/dist/browser/index.js +1 -1
  12. package/dist/browser/react/lovable.d.ts +9 -2
  13. package/dist/browser/react/lovable.js +7 -4
  14. package/dist/browser/react/lovable.js.map +1 -1
  15. package/dist/browser/react.d.ts +2 -3
  16. package/dist/browser/react.js +1 -1
  17. package/dist/browser/{types-rTQw6A54.d.ts → types-C3wed8dU.d.ts} +52 -7
  18. package/dist/server/api-client-core/apis/account/account-info-types.generated.d.ts +73 -85
  19. package/dist/server/api-client-core/apis/account/account-info.generated.d.ts +3 -3
  20. package/dist/server/api-client-core/apis/account/account-info.generated.js +4 -3
  21. package/dist/server/api-client-core/apis/account/account-info.generated.js.map +1 -1
  22. package/dist/server/api-client-core/apis/account/audit-logs-types.generated.d.ts +203 -215
  23. package/dist/server/api-client-core/apis/account/audit-logs.generated.d.ts +3 -3
  24. package/dist/server/api-client-core/apis/account/audit-logs.generated.js +4 -3
  25. package/dist/server/api-client-core/apis/account/audit-logs.generated.js.map +1 -1
  26. package/dist/server/api-client-core/apis/auth/oauth-types.generated.d.ts +78 -90
  27. package/dist/server/api-client-core/apis/auth/oauth.generated.d.ts +1 -1
  28. package/dist/server/api-client-core/apis/auth/oauth.generated.js +3 -2
  29. package/dist/server/api-client-core/apis/auth/oauth.generated.js.map +1 -1
  30. package/dist/server/api-client-core/apis/automation/actions-types.generated.d.ts +779 -794
  31. package/dist/server/api-client-core/apis/automation/actions.generated.d.ts +6 -3
  32. package/dist/server/api-client-core/apis/automation/actions.generated.js +101 -102
  33. package/dist/server/api-client-core/apis/automation/actions.generated.js.map +1 -1
  34. package/dist/server/api-client-core/apis/automation/sequences-types.generated.d.ts +370 -382
  35. package/dist/server/api-client-core/apis/automation/sequences.generated.d.ts +1 -1
  36. package/dist/server/api-client-core/apis/automation/sequences.generated.js +3 -2
  37. package/dist/server/api-client-core/apis/automation/sequences.generated.js.map +1 -1
  38. package/dist/server/api-client-core/apis/business-units-types.generated.d.ts +43 -55
  39. package/dist/server/api-client-core/apis/business-units.generated.d.ts +3 -3
  40. package/dist/server/api-client-core/apis/business-units.generated.js +4 -3
  41. package/dist/server/api-client-core/apis/business-units.generated.js.map +1 -1
  42. package/dist/server/api-client-core/apis/cms/authors-types.generated.d.ts +420 -445
  43. package/dist/server/api-client-core/apis/cms/authors.generated.d.ts +4 -3
  44. package/dist/server/api-client-core/apis/cms/authors.generated.js +155 -158
  45. package/dist/server/api-client-core/apis/cms/authors.generated.js.map +1 -1
  46. package/dist/server/api-client-core/apis/cms/blog-settings-types.generated.d.ts +270 -295
  47. package/dist/server/api-client-core/apis/cms/blog-settings.generated.d.ts +4 -3
  48. package/dist/server/api-client-core/apis/cms/blog-settings.generated.js +35 -38
  49. package/dist/server/api-client-core/apis/cms/blog-settings.generated.js.map +1 -1
  50. package/dist/server/api-client-core/apis/cms/cms-content-audit-types.generated.d.ts +107 -131
  51. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.d.ts +3 -3
  52. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js +6 -5
  53. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js.map +1 -1
  54. package/dist/server/api-client-core/apis/cms/domains-types.generated.d.ts +155 -167
  55. package/dist/server/api-client-core/apis/cms/domains.generated.d.ts +2 -2
  56. package/dist/server/api-client-core/apis/cms/domains.generated.js +3 -2
  57. package/dist/server/api-client-core/apis/cms/domains.generated.js.map +1 -1
  58. package/dist/server/api-client-core/apis/cms/hubdb-types.generated.d.ts +876 -889
  59. package/dist/server/api-client-core/apis/cms/hubdb.generated.d.ts +4 -3
  60. package/dist/server/api-client-core/apis/cms/hubdb.generated.js +184 -185
  61. package/dist/server/api-client-core/apis/cms/hubdb.generated.js.map +1 -1
  62. package/dist/server/api-client-core/apis/cms/media-bridge-types.generated.d.ts +1550 -1575
  63. package/dist/server/api-client-core/apis/cms/media-bridge.generated.d.ts +4 -3
  64. package/dist/server/api-client-core/apis/cms/media-bridge.generated.js +161 -164
  65. package/dist/server/api-client-core/apis/cms/media-bridge.generated.js.map +1 -1
  66. package/dist/server/api-client-core/apis/cms/pages-types.generated.d.ts +1583 -1547
  67. package/dist/server/api-client-core/apis/cms/pages.generated.d.ts +15 -3
  68. package/dist/server/api-client-core/apis/cms/pages.generated.js +335 -326
  69. package/dist/server/api-client-core/apis/cms/pages.generated.js.map +1 -1
  70. package/dist/server/api-client-core/apis/cms/posts-types.generated.d.ts +900 -904
  71. package/dist/server/api-client-core/apis/cms/posts.generated.d.ts +7 -3
  72. package/dist/server/api-client-core/apis/cms/posts.generated.js +197 -196
  73. package/dist/server/api-client-core/apis/cms/posts.generated.js.map +1 -1
  74. package/dist/server/api-client-core/apis/cms/site-search-types.generated.d.ts +162 -174
  75. package/dist/server/api-client-core/apis/cms/site-search.generated.d.ts +3 -3
  76. package/dist/server/api-client-core/apis/cms/site-search.generated.js +4 -3
  77. package/dist/server/api-client-core/apis/cms/site-search.generated.js.map +1 -1
  78. package/dist/server/api-client-core/apis/cms/source-code-types.generated.d.ts +148 -172
  79. package/dist/server/api-client-core/apis/cms/source-code.generated.d.ts +3 -3
  80. package/dist/server/api-client-core/apis/cms/source-code.generated.js +40 -43
  81. package/dist/server/api-client-core/apis/cms/source-code.generated.js.map +1 -1
  82. package/dist/server/api-client-core/apis/cms/tags-types.generated.d.ts +406 -420
  83. package/dist/server/api-client-core/apis/cms/tags.generated.d.ts +5 -3
  84. package/dist/server/api-client-core/apis/cms/tags.generated.js +157 -158
  85. package/dist/server/api-client-core/apis/cms/tags.generated.js.map +1 -1
  86. package/dist/server/api-client-core/apis/cms/url-mappings-types.generated.d.ts +127 -139
  87. package/dist/server/api-client-core/apis/cms/url-mappings.generated.d.ts +3 -3
  88. package/dist/server/api-client-core/apis/cms/url-mappings.generated.js +4 -3
  89. package/dist/server/api-client-core/apis/cms/url-mappings.generated.js.map +1 -1
  90. package/dist/server/api-client-core/apis/cms/url-redirects-types.generated.d.ts +170 -182
  91. package/dist/server/api-client-core/apis/cms/url-redirects.generated.d.ts +3 -3
  92. package/dist/server/api-client-core/apis/cms/url-redirects.generated.js +4 -3
  93. package/dist/server/api-client-core/apis/cms/url-redirects.generated.js.map +1 -1
  94. package/dist/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.d.ts +728 -742
  95. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.d.ts +5 -3
  96. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js +66 -69
  97. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js.map +1 -1
  98. package/dist/server/api-client-core/apis/conversations/custom-channels-types.generated.d.ts +445 -471
  99. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.d.ts +5 -3
  100. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js +70 -73
  101. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js.map +1 -1
  102. package/dist/server/api-client-core/apis/conversations/visitor-identification-types.generated.d.ts +28 -40
  103. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.d.ts +3 -3
  104. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js +3 -2
  105. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js.map +1 -1
  106. package/dist/server/api-client-core/apis/conversations-types.generated.d.ts +768 -781
  107. package/dist/server/api-client-core/apis/conversations.generated.d.ts +4 -3
  108. package/dist/server/api-client-core/apis/conversations.generated.js +101 -102
  109. package/dist/server/api-client-core/apis/conversations.generated.js.map +1 -1
  110. package/dist/server/api-client-core/apis/crm/app-uninstalls-types.generated.d.ts +8 -19
  111. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.d.ts +3 -3
  112. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js +3 -2
  113. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js.map +1 -1
  114. package/dist/server/api-client-core/apis/crm/appointments-types.generated.d.ts +887 -891
  115. package/dist/server/api-client-core/apis/crm/appointments.generated.d.ts +7 -3
  116. package/dist/server/api-client-core/apis/crm/appointments.generated.js +105 -106
  117. package/dist/server/api-client-core/apis/crm/appointments.generated.js.map +1 -1
  118. package/dist/server/api-client-core/apis/crm/associations-schema-types.generated.d.ts +247 -260
  119. package/dist/server/api-client-core/apis/crm/associations-schema.generated.d.ts +4 -3
  120. package/dist/server/api-client-core/apis/crm/associations-schema.generated.js +48 -49
  121. package/dist/server/api-client-core/apis/crm/associations-schema.generated.js.map +1 -1
  122. package/dist/server/api-client-core/apis/crm/associations-types.generated.d.ts +576 -590
  123. package/dist/server/api-client-core/apis/crm/associations.generated.d.ts +5 -3
  124. package/dist/server/api-client-core/apis/crm/associations.generated.js +71 -72
  125. package/dist/server/api-client-core/apis/crm/associations.generated.js.map +1 -1
  126. package/dist/server/api-client-core/apis/crm/calling-extensions-types.generated.d.ts +355 -379
  127. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.d.ts +3 -3
  128. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js +34 -37
  129. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js.map +1 -1
  130. package/dist/server/api-client-core/apis/crm/calls-types.generated.d.ts +755 -769
  131. package/dist/server/api-client-core/apis/crm/calls.generated.d.ts +5 -3
  132. package/dist/server/api-client-core/apis/crm/calls.generated.js +58 -57
  133. package/dist/server/api-client-core/apis/crm/calls.generated.js.map +1 -1
  134. package/dist/server/api-client-core/apis/crm/carts-types.generated.d.ts +755 -769
  135. package/dist/server/api-client-core/apis/crm/carts.generated.d.ts +5 -3
  136. package/dist/server/api-client-core/apis/crm/carts.generated.js +58 -57
  137. package/dist/server/api-client-core/apis/crm/carts.generated.js.map +1 -1
  138. package/dist/server/api-client-core/apis/crm/commerce-payments-types.generated.d.ts +755 -769
  139. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.d.ts +5 -3
  140. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js +58 -57
  141. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js.map +1 -1
  142. package/dist/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.d.ts +752 -766
  143. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.d.ts +5 -3
  144. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js +58 -57
  145. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js.map +1 -1
  146. package/dist/server/api-client-core/apis/crm/communications-types.generated.d.ts +755 -769
  147. package/dist/server/api-client-core/apis/crm/communications.generated.d.ts +5 -3
  148. package/dist/server/api-client-core/apis/crm/communications.generated.js +58 -57
  149. package/dist/server/api-client-core/apis/crm/communications.generated.js.map +1 -1
  150. package/dist/server/api-client-core/apis/crm/companies-types.generated.d.ts +769 -795
  151. package/dist/server/api-client-core/apis/crm/companies.generated.d.ts +5 -3
  152. package/dist/server/api-client-core/apis/crm/companies.generated.js +59 -58
  153. package/dist/server/api-client-core/apis/crm/companies.generated.js.map +1 -1
  154. package/dist/server/api-client-core/apis/crm/contacts-types.generated.d.ts +786 -812
  155. package/dist/server/api-client-core/apis/crm/contacts.generated.d.ts +5 -3
  156. package/dist/server/api-client-core/apis/crm/contacts.generated.js +60 -61
  157. package/dist/server/api-client-core/apis/crm/contacts.generated.js.map +1 -1
  158. package/dist/server/api-client-core/apis/crm/contracts-types.generated.d.ts +796 -777
  159. package/dist/server/api-client-core/apis/crm/contracts.generated.d.ts +8 -3
  160. package/dist/server/api-client-core/apis/crm/contracts.generated.js +60 -57
  161. package/dist/server/api-client-core/apis/crm/contracts.generated.js.map +1 -1
  162. package/dist/server/api-client-core/apis/crm/courses-types.generated.d.ts +758 -772
  163. package/dist/server/api-client-core/apis/crm/courses.generated.d.ts +5 -3
  164. package/dist/server/api-client-core/apis/crm/courses.generated.js +58 -57
  165. package/dist/server/api-client-core/apis/crm/courses.generated.js.map +1 -1
  166. package/dist/server/api-client-core/apis/crm/crm-owners-types.generated.d.ts +103 -115
  167. package/dist/server/api-client-core/apis/crm/crm-owners.generated.d.ts +3 -3
  168. package/dist/server/api-client-core/apis/crm/crm-owners.generated.js +4 -3
  169. package/dist/server/api-client-core/apis/crm/crm-owners.generated.js.map +1 -1
  170. package/dist/server/api-client-core/apis/crm/custom-objects-types.generated.d.ts +833 -848
  171. package/dist/server/api-client-core/apis/crm/custom-objects.generated.d.ts +6 -3
  172. package/dist/server/api-client-core/apis/crm/custom-objects.generated.js +91 -90
  173. package/dist/server/api-client-core/apis/crm/custom-objects.generated.js.map +1 -1
  174. package/dist/server/api-client-core/apis/crm/deal-splits-types.generated.d.ts +158 -170
  175. package/dist/server/api-client-core/apis/crm/deal-splits.generated.d.ts +3 -3
  176. package/dist/server/api-client-core/apis/crm/deal-splits.generated.js +4 -3
  177. package/dist/server/api-client-core/apis/crm/deal-splits.generated.js.map +1 -1
  178. package/dist/server/api-client-core/apis/crm/deals-types.generated.d.ts +771 -785
  179. package/dist/server/api-client-core/apis/crm/deals.generated.d.ts +5 -3
  180. package/dist/server/api-client-core/apis/crm/deals.generated.js +59 -58
  181. package/dist/server/api-client-core/apis/crm/deals.generated.js.map +1 -1
  182. package/dist/server/api-client-core/apis/crm/discounts-types.generated.d.ts +754 -768
  183. package/dist/server/api-client-core/apis/crm/discounts.generated.d.ts +5 -3
  184. package/dist/server/api-client-core/apis/crm/discounts.generated.js +58 -57
  185. package/dist/server/api-client-core/apis/crm/discounts.generated.js.map +1 -1
  186. package/dist/server/api-client-core/apis/crm/emails-types.generated.d.ts +755 -769
  187. package/dist/server/api-client-core/apis/crm/emails.generated.d.ts +5 -3
  188. package/dist/server/api-client-core/apis/crm/emails.generated.js +58 -57
  189. package/dist/server/api-client-core/apis/crm/emails.generated.js.map +1 -1
  190. package/dist/server/api-client-core/apis/crm/exports-types.generated.d.ts +227 -251
  191. package/dist/server/api-client-core/apis/crm/exports.generated.d.ts +2 -2
  192. package/dist/server/api-client-core/apis/crm/exports.generated.js +4 -5
  193. package/dist/server/api-client-core/apis/crm/exports.generated.js.map +1 -1
  194. package/dist/server/api-client-core/apis/crm/feedback-submissions-types.generated.d.ts +551 -565
  195. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.d.ts +5 -3
  196. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js +45 -46
  197. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js.map +1 -1
  198. package/dist/server/api-client-core/apis/crm/fees-types.generated.d.ts +755 -769
  199. package/dist/server/api-client-core/apis/crm/fees.generated.d.ts +5 -3
  200. package/dist/server/api-client-core/apis/crm/fees.generated.js +58 -57
  201. package/dist/server/api-client-core/apis/crm/fees.generated.js.map +1 -1
  202. package/dist/server/api-client-core/apis/crm/goal-targets-types.generated.d.ts +755 -769
  203. package/dist/server/api-client-core/apis/crm/goal-targets.generated.d.ts +5 -3
  204. package/dist/server/api-client-core/apis/crm/goal-targets.generated.js +58 -57
  205. package/dist/server/api-client-core/apis/crm/goal-targets.generated.js.map +1 -1
  206. package/dist/server/api-client-core/apis/crm/imports-types.generated.d.ts +305 -329
  207. package/dist/server/api-client-core/apis/crm/imports.generated.d.ts +2 -2
  208. package/dist/server/api-client-core/apis/crm/imports.generated.js +20 -23
  209. package/dist/server/api-client-core/apis/crm/imports.generated.js.map +1 -1
  210. package/dist/server/api-client-core/apis/crm/invoices-types.generated.d.ts +755 -769
  211. package/dist/server/api-client-core/apis/crm/invoices.generated.d.ts +5 -3
  212. package/dist/server/api-client-core/apis/crm/invoices.generated.js +58 -57
  213. package/dist/server/api-client-core/apis/crm/invoices.generated.js.map +1 -1
  214. package/dist/server/api-client-core/apis/crm/leads-types.generated.d.ts +755 -769
  215. package/dist/server/api-client-core/apis/crm/leads.generated.d.ts +5 -3
  216. package/dist/server/api-client-core/apis/crm/leads.generated.js +58 -57
  217. package/dist/server/api-client-core/apis/crm/leads.generated.js.map +1 -1
  218. package/dist/server/api-client-core/apis/crm/limits-tracking-types.generated.d.ts +251 -263
  219. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.d.ts +3 -3
  220. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js +4 -3
  221. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js.map +1 -1
  222. package/dist/server/api-client-core/apis/crm/line-items-types.generated.d.ts +755 -769
  223. package/dist/server/api-client-core/apis/crm/line-items.generated.d.ts +5 -3
  224. package/dist/server/api-client-core/apis/crm/line-items.generated.js +58 -57
  225. package/dist/server/api-client-core/apis/crm/line-items.generated.js.map +1 -1
  226. package/dist/server/api-client-core/apis/crm/listings-types.generated.d.ts +758 -772
  227. package/dist/server/api-client-core/apis/crm/listings.generated.d.ts +5 -3
  228. package/dist/server/api-client-core/apis/crm/listings.generated.js +58 -57
  229. package/dist/server/api-client-core/apis/crm/listings.generated.js.map +1 -1
  230. package/dist/server/api-client-core/apis/crm/lists-types.generated.d.ts +2075 -2111
  231. package/dist/server/api-client-core/apis/crm/lists.generated.d.ts +2 -2
  232. package/dist/server/api-client-core/apis/crm/lists.generated.js +97 -98
  233. package/dist/server/api-client-core/apis/crm/lists.generated.js.map +1 -1
  234. package/dist/server/api-client-core/apis/crm/meetings-types.generated.d.ts +755 -769
  235. package/dist/server/api-client-core/apis/crm/meetings.generated.d.ts +5 -3
  236. package/dist/server/api-client-core/apis/crm/meetings.generated.js +58 -57
  237. package/dist/server/api-client-core/apis/crm/meetings.generated.js.map +1 -1
  238. package/dist/server/api-client-core/apis/crm/notes-types.generated.d.ts +755 -769
  239. package/dist/server/api-client-core/apis/crm/notes.generated.d.ts +5 -3
  240. package/dist/server/api-client-core/apis/crm/notes.generated.js +58 -57
  241. package/dist/server/api-client-core/apis/crm/notes.generated.js.map +1 -1
  242. package/dist/server/api-client-core/apis/crm/object-library-types.generated.d.ts +24 -36
  243. package/dist/server/api-client-core/apis/crm/object-library.generated.d.ts +3 -3
  244. package/dist/server/api-client-core/apis/crm/object-library.generated.js +4 -3
  245. package/dist/server/api-client-core/apis/crm/object-library.generated.js.map +1 -1
  246. package/dist/server/api-client-core/apis/crm/objects-types.generated.d.ts +620 -645
  247. package/dist/server/api-client-core/apis/crm/objects.generated.d.ts +4 -3
  248. package/dist/server/api-client-core/apis/crm/objects.generated.js +66 -67
  249. package/dist/server/api-client-core/apis/crm/objects.generated.js.map +1 -1
  250. package/dist/server/api-client-core/apis/crm/orders-types.generated.d.ts +747 -761
  251. package/dist/server/api-client-core/apis/crm/orders.generated.d.ts +5 -3
  252. package/dist/server/api-client-core/apis/crm/orders.generated.js +58 -57
  253. package/dist/server/api-client-core/apis/crm/orders.generated.js.map +1 -1
  254. package/dist/server/api-client-core/apis/crm/partner-clients-types.generated.d.ts +646 -660
  255. package/dist/server/api-client-core/apis/crm/partner-clients.generated.d.ts +5 -3
  256. package/dist/server/api-client-core/apis/crm/partner-clients.generated.js +63 -62
  257. package/dist/server/api-client-core/apis/crm/partner-clients.generated.js.map +1 -1
  258. package/dist/server/api-client-core/apis/crm/partner-services-types.generated.d.ts +646 -660
  259. package/dist/server/api-client-core/apis/crm/partner-services.generated.d.ts +5 -3
  260. package/dist/server/api-client-core/apis/crm/partner-services.generated.js +63 -62
  261. package/dist/server/api-client-core/apis/crm/partner-services.generated.js.map +1 -1
  262. package/dist/server/api-client-core/apis/crm/pipelines-types.generated.d.ts +320 -332
  263. package/dist/server/api-client-core/apis/crm/pipelines.generated.d.ts +2 -2
  264. package/dist/server/api-client-core/apis/crm/pipelines.generated.js +3 -2
  265. package/dist/server/api-client-core/apis/crm/pipelines.generated.js.map +1 -1
  266. package/dist/server/api-client-core/apis/crm/postal-mail-types.generated.d.ts +744 -758
  267. package/dist/server/api-client-core/apis/crm/postal-mail.generated.d.ts +5 -3
  268. package/dist/server/api-client-core/apis/crm/postal-mail.generated.js +58 -57
  269. package/dist/server/api-client-core/apis/crm/postal-mail.generated.js.map +1 -1
  270. package/dist/server/api-client-core/apis/crm/products-types.generated.d.ts +747 -761
  271. package/dist/server/api-client-core/apis/crm/products.generated.d.ts +5 -3
  272. package/dist/server/api-client-core/apis/crm/products.generated.js +58 -57
  273. package/dist/server/api-client-core/apis/crm/products.generated.js.map +1 -1
  274. package/dist/server/api-client-core/apis/crm/projects-types.generated.d.ts +761 -787
  275. package/dist/server/api-client-core/apis/crm/projects.generated.d.ts +5 -3
  276. package/dist/server/api-client-core/apis/crm/projects.generated.js +59 -58
  277. package/dist/server/api-client-core/apis/crm/projects.generated.js.map +1 -1
  278. package/dist/server/api-client-core/apis/crm/properties-types.generated.d.ts +526 -528
  279. package/dist/server/api-client-core/apis/crm/properties.generated.d.ts +5 -3
  280. package/dist/server/api-client-core/apis/crm/properties.generated.js +79 -78
  281. package/dist/server/api-client-core/apis/crm/properties.generated.js.map +1 -1
  282. package/dist/server/api-client-core/apis/crm/property-validations-types.generated.d.ts +71 -83
  283. package/dist/server/api-client-core/apis/crm/property-validations.generated.d.ts +3 -3
  284. package/dist/server/api-client-core/apis/crm/property-validations.generated.js +4 -3
  285. package/dist/server/api-client-core/apis/crm/property-validations.generated.js.map +1 -1
  286. package/dist/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.d.ts +409 -433
  287. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.d.ts +3 -3
  288. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js +24 -25
  289. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js.map +1 -1
  290. package/dist/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.d.ts +156 -169
  291. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.d.ts +4 -3
  292. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js +55 -56
  293. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js.map +1 -1
  294. package/dist/server/api-client-core/apis/crm/quotes-types.generated.d.ts +747 -761
  295. package/dist/server/api-client-core/apis/crm/quotes.generated.d.ts +5 -3
  296. package/dist/server/api-client-core/apis/crm/quotes.generated.js +58 -57
  297. package/dist/server/api-client-core/apis/crm/quotes.generated.js.map +1 -1
  298. package/dist/server/api-client-core/apis/crm/schemas-types.generated.d.ts +575 -600
  299. package/dist/server/api-client-core/apis/crm/schemas.generated.d.ts +4 -3
  300. package/dist/server/api-client-core/apis/crm/schemas.generated.js +33 -34
  301. package/dist/server/api-client-core/apis/crm/schemas.generated.js.map +1 -1
  302. package/dist/server/api-client-core/apis/crm/services-types.generated.d.ts +750 -764
  303. package/dist/server/api-client-core/apis/crm/services.generated.d.ts +5 -3
  304. package/dist/server/api-client-core/apis/crm/services.generated.js +58 -57
  305. package/dist/server/api-client-core/apis/crm/services.generated.js.map +1 -1
  306. package/dist/server/api-client-core/apis/crm/tasks-types.generated.d.ts +747 -761
  307. package/dist/server/api-client-core/apis/crm/tasks.generated.d.ts +5 -3
  308. package/dist/server/api-client-core/apis/crm/tasks.generated.js +58 -57
  309. package/dist/server/api-client-core/apis/crm/tasks.generated.js.map +1 -1
  310. package/dist/server/api-client-core/apis/crm/taxes-types.generated.d.ts +747 -761
  311. package/dist/server/api-client-core/apis/crm/taxes.generated.d.ts +5 -3
  312. package/dist/server/api-client-core/apis/crm/taxes.generated.js +58 -57
  313. package/dist/server/api-client-core/apis/crm/taxes.generated.js.map +1 -1
  314. package/dist/server/api-client-core/apis/crm/tickets-types.generated.d.ts +764 -790
  315. package/dist/server/api-client-core/apis/crm/tickets.generated.d.ts +5 -3
  316. package/dist/server/api-client-core/apis/crm/tickets.generated.js +59 -58
  317. package/dist/server/api-client-core/apis/crm/tickets.generated.js.map +1 -1
  318. package/dist/server/api-client-core/apis/crm/timeline-types.generated.d.ts +136 -149
  319. package/dist/server/api-client-core/apis/crm/timeline.generated.d.ts +4 -3
  320. package/dist/server/api-client-core/apis/crm/timeline.generated.js +5 -6
  321. package/dist/server/api-client-core/apis/crm/timeline.generated.js.map +1 -1
  322. package/dist/server/api-client-core/apis/crm/transcriptions-types.generated.d.ts +104 -117
  323. package/dist/server/api-client-core/apis/crm/transcriptions.generated.d.ts +4 -3
  324. package/dist/server/api-client-core/apis/crm/transcriptions.generated.js +7 -10
  325. package/dist/server/api-client-core/apis/crm/transcriptions.generated.js.map +1 -1
  326. package/dist/server/api-client-core/apis/crm/users-types.generated.d.ts +747 -761
  327. package/dist/server/api-client-core/apis/crm/users.generated.d.ts +5 -3
  328. package/dist/server/api-client-core/apis/crm/users.generated.js +58 -57
  329. package/dist/server/api-client-core/apis/crm/users.generated.js.map +1 -1
  330. package/dist/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.d.ts +28 -40
  331. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.d.ts +3 -3
  332. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js +4 -3
  333. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js.map +1 -1
  334. package/dist/server/api-client-core/apis/events/manage-event-definitions-types.generated.d.ts +909 -945
  335. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.d.ts +3 -3
  336. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js +29 -30
  337. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js.map +1 -1
  338. package/dist/server/api-client-core/apis/events/send-event-completions-types.generated.d.ts +49 -62
  339. package/dist/server/api-client-core/apis/events/send-event-completions.generated.d.ts +4 -3
  340. package/dist/server/api-client-core/apis/events/send-event-completions.generated.js +4 -5
  341. package/dist/server/api-client-core/apis/events/send-event-completions.generated.js.map +1 -1
  342. package/dist/server/api-client-core/apis/events-types.generated.d.ts +99 -111
  343. package/dist/server/api-client-core/apis/events.generated.d.ts +3 -3
  344. package/dist/server/api-client-core/apis/events.generated.js +4 -3
  345. package/dist/server/api-client-core/apis/events.generated.js.map +1 -1
  346. package/dist/server/api-client-core/apis/files-types.generated.d.ts +636 -649
  347. package/dist/server/api-client-core/apis/files.generated.d.ts +4 -3
  348. package/dist/server/api-client-core/apis/files.generated.js +112 -113
  349. package/dist/server/api-client-core/apis/files.generated.js.map +1 -1
  350. package/dist/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.d.ts +799 -816
  351. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.d.ts +8 -3
  352. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js +126 -127
  353. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js.map +1 -1
  354. package/dist/server/api-client-core/apis/marketing/marketing-emails-types.generated.d.ts +745 -769
  355. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.d.ts +3 -3
  356. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js +100 -103
  357. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js.map +1 -1
  358. package/dist/server/api-client-core/apis/marketing/marketing-events-types.generated.d.ts +1504 -1546
  359. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.d.ts +9 -3
  360. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js +162 -167
  361. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js.map +1 -1
  362. package/dist/server/api-client-core/apis/marketing/single-send-types.generated.d.ts +91 -103
  363. package/dist/server/api-client-core/apis/marketing/single-send.generated.d.ts +3 -3
  364. package/dist/server/api-client-core/apis/marketing/single-send.generated.js +3 -2
  365. package/dist/server/api-client-core/apis/marketing/single-send.generated.js.map +1 -1
  366. package/dist/server/api-client-core/apis/marketing/transactional-single-send-types.generated.d.ts +187 -200
  367. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.d.ts +4 -3
  368. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js +14 -15
  369. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js.map +1 -1
  370. package/dist/server/api-client-core/apis/meta/origins-types.generated.d.ts +41 -53
  371. package/dist/server/api-client-core/apis/meta/origins.generated.d.ts +3 -3
  372. package/dist/server/api-client-core/apis/meta/origins.generated.js +4 -3
  373. package/dist/server/api-client-core/apis/meta/origins.generated.js.map +1 -1
  374. package/dist/server/api-client-core/apis/scheduler/meetings-types.generated.d.ts +850 -863
  375. package/dist/server/api-client-core/apis/scheduler/meetings.generated.d.ts +4 -3
  376. package/dist/server/api-client-core/apis/scheduler/meetings.generated.js +28 -29
  377. package/dist/server/api-client-core/apis/scheduler/meetings.generated.js.map +1 -1
  378. package/dist/server/api-client-core/apis/settings/multicurrency-types.generated.d.ts +281 -296
  379. package/dist/server/api-client-core/apis/settings/multicurrency.generated.d.ts +6 -3
  380. package/dist/server/api-client-core/apis/settings/multicurrency.generated.js +32 -33
  381. package/dist/server/api-client-core/apis/settings/multicurrency.generated.js.map +1 -1
  382. package/dist/server/api-client-core/apis/settings/tax-rates-types.generated.d.ts +71 -83
  383. package/dist/server/api-client-core/apis/settings/tax-rates.generated.d.ts +3 -3
  384. package/dist/server/api-client-core/apis/settings/tax-rates.generated.js +4 -3
  385. package/dist/server/api-client-core/apis/settings/tax-rates.generated.js.map +1 -1
  386. package/dist/server/api-client-core/apis/settings/user-provisioning-types.generated.d.ts +202 -250
  387. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.d.ts +3 -3
  388. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js +23 -26
  389. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js.map +1 -1
  390. package/dist/server/api-client-core/apis/webhooks-journal-types.generated.d.ts +490 -526
  391. package/dist/server/api-client-core/apis/webhooks-journal.generated.d.ts +3 -3
  392. package/dist/server/api-client-core/apis/webhooks-journal.generated.js +65 -70
  393. package/dist/server/api-client-core/apis/webhooks-journal.generated.js.map +1 -1
  394. package/dist/server/api-client-core/apis/webhooks-types.generated.d.ts +816 -852
  395. package/dist/server/api-client-core/apis/webhooks.generated.d.ts +3 -3
  396. package/dist/server/api-client-core/apis/webhooks.generated.js +93 -98
  397. package/dist/server/api-client-core/apis/webhooks.generated.js.map +1 -1
  398. package/dist/server/api-client-core/binary-data.js.map +1 -1
  399. package/dist/server/api-client-core/client.js +5 -1
  400. package/dist/server/api-client-core/client.js.map +1 -1
  401. package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js.map +1 -1
  402. package/dist/server/api-client-core/errors.js.map +1 -1
  403. package/dist/server/api-client-core/op.js.map +1 -1
  404. package/dist/server/api-client-core/pagination.d.ts +2 -2
  405. package/dist/server/api-client-core/pagination.js +2 -2
  406. package/dist/server/api-client-core/pagination.js.map +1 -1
  407. package/dist/server/api-client-core/plugins/fetch-transport.js +33 -9
  408. package/dist/server/api-client-core/plugins/fetch-transport.js.map +1 -1
  409. package/dist/server/api-client-core/types.d.ts +1 -1
  410. package/dist/server/api-client.d.ts +184 -184
  411. package/dist/server/api-client.js +89 -89
  412. package/dist/server/constants.js +33 -6
  413. package/dist/server/constants.js.map +1 -1
  414. package/dist/server/deno/start.js.map +1 -1
  415. package/dist/server/hono/hono-request-handler.js +32 -23
  416. package/dist/server/hono/hono-request-handler.js.map +1 -1
  417. package/dist/server/hono/hubspot-connect-routes/auth-complete.js +158 -0
  418. package/dist/server/hono/hubspot-connect-routes/auth-complete.js.map +1 -0
  419. package/dist/server/hono/hubspot-connect-routes/auth-init-session.js +25 -12
  420. package/dist/server/hono/hubspot-connect-routes/auth-init-session.js.map +1 -1
  421. package/dist/server/hono/hubspot-connect-routes/auth-logout.js +32 -9
  422. package/dist/server/hono/hubspot-connect-routes/auth-logout.js.map +1 -1
  423. package/dist/server/hono/hubspot-connect-routes/auth-refresh.js +32 -18
  424. package/dist/server/hono/hubspot-connect-routes/auth-refresh.js.map +1 -1
  425. package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js.map +1 -1
  426. package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js +4 -1
  427. package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js.map +1 -1
  428. package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js.map +1 -1
  429. package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js +4 -2
  430. package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js.map +1 -1
  431. package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js +5 -5
  432. package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js.map +1 -1
  433. package/dist/server/hono/hubspot-connect-routes/oauth-client.js.map +1 -1
  434. package/dist/server/hono/hubspot-connect-routes/utils.js +53 -6
  435. package/dist/server/hono/hubspot-connect-routes/utils.js.map +1 -1
  436. package/dist/server/hono/hubspot-connect-routes/whoami.js +51 -0
  437. package/dist/server/hono/hubspot-connect-routes/whoami.js.map +1 -0
  438. package/dist/server/hono/types.d.ts +9 -10
  439. package/dist/server/hono/utils/cookie-utils.js +2 -1
  440. package/dist/server/hono/utils/cookie-utils.js.map +1 -1
  441. package/dist/server/hono/utils/cors-middleware.js +85 -0
  442. package/dist/server/hono/utils/cors-middleware.js.map +1 -0
  443. package/dist/server/import-app-keys.js.map +1 -1
  444. package/dist/server/lovable/create-app-function-start.d.ts +1 -1
  445. package/dist/server/lovable/create-app-function-start.js +4 -6
  446. package/dist/server/lovable/create-app-function-start.js.map +1 -1
  447. package/dist/server/lovable/hubspot-connect/index.js.map +1 -1
  448. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js +14 -15
  449. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js.map +1 -1
  450. package/dist/server/sanitize-request.js +14 -11
  451. package/dist/server/sanitize-request.js.map +1 -1
  452. package/dist/server/secure-start-core.js +4 -5
  453. package/dist/server/secure-start-core.js.map +1 -1
  454. package/dist/server/shared/constants.js +22 -9
  455. package/dist/server/shared/constants.js.map +1 -1
  456. package/dist/server/shared/encoding/base64.js.map +1 -1
  457. package/dist/server/shared/encoding/sha256.js.map +1 -1
  458. package/dist/server/shared/logger.js.map +1 -1
  459. package/dist/server/types.d.ts +1 -35
  460. package/dist/server/utils/cookie-utils.js.map +1 -1
  461. package/dist/server/utils/dpop-utils.js.map +1 -1
  462. package/dist/server/utils/env-utils.js +60 -7
  463. package/dist/server/utils/env-utils.js.map +1 -1
  464. package/dist/server/utils/hubspot-dpop-auth-headers.js +38 -0
  465. package/dist/server/utils/hubspot-dpop-auth-headers.js.map +1 -0
  466. package/dist/server/utils/jwk-utils.js.map +1 -1
  467. package/dist/server/utils/jwt-utils.js.map +1 -1
  468. package/package.json +15 -21
  469. package/src/browser/app-connect-controller/README.md +5 -2
  470. package/src/browser/app-connect-controller/connect-start.test.ts +157 -0
  471. package/src/browser/app-connect-controller/connect-start.ts +18 -3
  472. package/src/browser/app-connect-controller/constants.ts +6 -4
  473. package/src/browser/app-connect-controller/create.ts +8 -2
  474. package/src/browser/app-connect-controller/disconnect.ts +5 -7
  475. package/src/browser/app-connect-controller/init.test.ts +275 -0
  476. package/src/browser/app-connect-controller/init.ts +44 -19
  477. package/src/browser/app-connect-controller/oauth-complete.test.ts +110 -0
  478. package/src/browser/app-connect-controller/oauth-complete.ts +53 -0
  479. package/src/browser/app-connect-controller/oauth-popup.test.ts +239 -0
  480. package/src/browser/app-connect-controller/oauth-popup.ts +160 -0
  481. package/src/browser/app-connect-controller/types.ts +3 -0
  482. package/src/browser/app-connect-controller/utils/iframe-utils.ts +12 -0
  483. package/src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.test.ts +35 -0
  484. package/src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts +21 -0
  485. package/src/browser/app-connect-controller/utils/session-utils.test.ts +73 -22
  486. package/src/browser/app-connect-controller/utils/session-utils.ts +74 -33
  487. package/src/browser/app-connect-controller/view-state.test.ts +1 -0
  488. package/src/browser/app-connect-controller/view-state.ts +1 -0
  489. package/src/browser/index.ts +1 -0
  490. package/src/browser/react/components/AppConnectHeader/AppConnectHeader.tsx +21 -34
  491. package/src/browser/react/components/ConnectButton/ConnectButton.tsx +1 -1
  492. package/src/browser/react/lovable/LovableHubSpotAppConnect.tsx +12 -2
  493. package/src/browser/types.ts +30 -5
  494. package/src/server/api-client-core/__tests__/errors.test.ts +309 -0
  495. package/src/server/api-client-core/__tests__/operation-headers.test.ts +251 -0
  496. package/src/server/api-client-core/apis/account/account-info-types.generated.ts +74 -88
  497. package/src/server/api-client-core/apis/account/account-info.generated.ts +2 -4
  498. package/src/server/api-client-core/apis/account/audit-logs-types.generated.ts +346 -360
  499. package/src/server/api-client-core/apis/account/audit-logs.generated.ts +2 -4
  500. package/src/server/api-client-core/apis/auth/oauth-types.generated.ts +81 -99
  501. package/src/server/api-client-core/apis/auth/oauth.generated.ts +1 -3
  502. package/src/server/api-client-core/apis/automation/actions-types.generated.ts +1162 -1188
  503. package/src/server/api-client-core/apis/automation/actions.generated.ts +10 -12
  504. package/src/server/api-client-core/apis/automation/sequences-types.generated.ts +379 -393
  505. package/src/server/api-client-core/apis/automation/sequences.generated.ts +1 -3
  506. package/src/server/api-client-core/apis/business-units-types.generated.ts +43 -59
  507. package/src/server/api-client-core/apis/business-units.generated.ts +9 -10
  508. package/src/server/api-client-core/apis/cms/authors-types.generated.ts +3823 -3853
  509. package/src/server/api-client-core/apis/cms/authors.generated.ts +31 -37
  510. package/src/server/api-client-core/apis/cms/blog-settings-types.generated.ts +3667 -3696
  511. package/src/server/api-client-core/apis/cms/blog-settings.generated.ts +46 -51
  512. package/src/server/api-client-core/apis/cms/cms-content-audit-types.generated.ts +138 -163
  513. package/src/server/api-client-core/apis/cms/cms-content-audit.generated.ts +2 -10
  514. package/src/server/api-client-core/apis/cms/domains-types.generated.ts +153 -167
  515. package/src/server/api-client-core/apis/cms/domains.generated.ts +2 -4
  516. package/src/server/api-client-core/apis/cms/hubdb-types.generated.ts +1013 -1063
  517. package/src/server/api-client-core/apis/cms/hubdb.generated.ts +3 -5
  518. package/src/server/api-client-core/apis/cms/media-bridge-types.generated.ts +8623 -8657
  519. package/src/server/api-client-core/apis/cms/media-bridge.generated.ts +16 -22
  520. package/src/server/api-client-core/apis/cms/pages-types.generated.ts +5259 -5272
  521. package/src/server/api-client-core/apis/cms/pages.generated.ts +262 -226
  522. package/src/server/api-client-core/apis/cms/posts-types.generated.ts +4420 -4438
  523. package/src/server/api-client-core/apis/cms/posts.generated.ts +108 -106
  524. package/src/server/api-client-core/apis/cms/site-search-types.generated.ts +1867 -1881
  525. package/src/server/api-client-core/apis/cms/site-search.generated.ts +2 -4
  526. package/src/server/api-client-core/apis/cms/source-code-types.generated.ts +144 -177
  527. package/src/server/api-client-core/apis/cms/source-code.generated.ts +15 -23
  528. package/src/server/api-client-core/apis/cms/tags-types.generated.ts +3820 -3845
  529. package/src/server/api-client-core/apis/cms/tags.generated.ts +80 -82
  530. package/src/server/api-client-core/apis/cms/url-mappings-types.generated.ts +188 -202
  531. package/src/server/api-client-core/apis/cms/url-mappings.generated.ts +2 -4
  532. package/src/server/api-client-core/apis/cms/url-redirects-types.generated.ts +182 -196
  533. package/src/server/api-client-core/apis/cms/url-redirects.generated.ts +2 -4
  534. package/src/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.ts +810 -828
  535. package/src/server/api-client-core/apis/communication-preferences/subscriptions.generated.ts +66 -63
  536. package/src/server/api-client-core/apis/conversations/custom-channels-types.generated.ts +564 -601
  537. package/src/server/api-client-core/apis/conversations/custom-channels.generated.ts +90 -86
  538. package/src/server/api-client-core/apis/conversations/visitor-identification-types.generated.ts +31 -44
  539. package/src/server/api-client-core/apis/conversations/visitor-identification.generated.ts +6 -8
  540. package/src/server/api-client-core/apis/conversations-types.generated.ts +955 -991
  541. package/src/server/api-client-core/apis/conversations.generated.ts +6 -5
  542. package/src/server/api-client-core/apis/crm/app-uninstalls-types.generated.ts +7 -19
  543. package/src/server/api-client-core/apis/crm/app-uninstalls.generated.ts +2 -4
  544. package/src/server/api-client-core/apis/crm/appointments-types.generated.ts +965 -969
  545. package/src/server/api-client-core/apis/crm/appointments.generated.ts +143 -137
  546. package/src/server/api-client-core/apis/crm/associations-schema-types.generated.ts +292 -322
  547. package/src/server/api-client-core/apis/crm/associations-schema.generated.ts +17 -19
  548. package/src/server/api-client-core/apis/crm/associations-types.generated.ts +657 -675
  549. package/src/server/api-client-core/apis/crm/associations.generated.ts +70 -70
  550. package/src/server/api-client-core/apis/crm/calling-extensions-types.generated.ts +417 -441
  551. package/src/server/api-client-core/apis/crm/calling-extensions.generated.ts +62 -69
  552. package/src/server/api-client-core/apis/crm/calls-types.generated.ts +839 -856
  553. package/src/server/api-client-core/apis/crm/calls.generated.ts +42 -44
  554. package/src/server/api-client-core/apis/crm/carts-types.generated.ts +839 -856
  555. package/src/server/api-client-core/apis/crm/carts.generated.ts +42 -44
  556. package/src/server/api-client-core/apis/crm/commerce-payments-types.generated.ts +847 -856
  557. package/src/server/api-client-core/apis/crm/commerce-payments.generated.ts +73 -73
  558. package/src/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.ts +844 -853
  559. package/src/server/api-client-core/apis/crm/commerce-subscriptions.generated.ts +50 -51
  560. package/src/server/api-client-core/apis/crm/communications-types.generated.ts +846 -856
  561. package/src/server/api-client-core/apis/crm/communications.generated.ts +73 -73
  562. package/src/server/api-client-core/apis/crm/companies-types.generated.ts +859 -885
  563. package/src/server/api-client-core/apis/crm/companies.generated.ts +44 -50
  564. package/src/server/api-client-core/apis/crm/contacts-types.generated.ts +875 -907
  565. package/src/server/api-client-core/apis/crm/contacts.generated.ts +46 -52
  566. package/src/server/api-client-core/apis/crm/contracts-types.generated.ts +894 -862
  567. package/src/server/api-client-core/apis/crm/contracts.generated.ts +66 -56
  568. package/src/server/api-client-core/apis/crm/courses-types.generated.ts +842 -859
  569. package/src/server/api-client-core/apis/crm/courses.generated.ts +42 -44
  570. package/src/server/api-client-core/apis/crm/crm-owners-types.generated.ts +102 -115
  571. package/src/server/api-client-core/apis/crm/crm-owners.generated.ts +2 -4
  572. package/src/server/api-client-core/apis/crm/custom-objects-types.generated.ts +900 -915
  573. package/src/server/api-client-core/apis/crm/custom-objects.generated.ts +128 -126
  574. package/src/server/api-client-core/apis/crm/deal-splits-types.generated.ts +157 -170
  575. package/src/server/api-client-core/apis/crm/deal-splits.generated.ts +2 -4
  576. package/src/server/api-client-core/apis/crm/deals-types.generated.ts +858 -875
  577. package/src/server/api-client-core/apis/crm/deals.generated.ts +42 -44
  578. package/src/server/api-client-core/apis/crm/discounts-types.generated.ts +842 -855
  579. package/src/server/api-client-core/apis/crm/discounts.generated.ts +42 -44
  580. package/src/server/api-client-core/apis/crm/emails-types.generated.ts +839 -856
  581. package/src/server/api-client-core/apis/crm/emails.generated.ts +42 -44
  582. package/src/server/api-client-core/apis/crm/exports-types.generated.ts +284 -314
  583. package/src/server/api-client-core/apis/crm/exports.generated.ts +6 -11
  584. package/src/server/api-client-core/apis/crm/feedback-submissions-types.generated.ts +607 -622
  585. package/src/server/api-client-core/apis/crm/feedback-submissions.generated.ts +84 -80
  586. package/src/server/api-client-core/apis/crm/fees-types.generated.ts +839 -856
  587. package/src/server/api-client-core/apis/crm/fees.generated.ts +42 -44
  588. package/src/server/api-client-core/apis/crm/goal-targets-types.generated.ts +845 -856
  589. package/src/server/api-client-core/apis/crm/goal-targets.generated.ts +50 -51
  590. package/src/server/api-client-core/apis/crm/imports-types.generated.ts +663 -692
  591. package/src/server/api-client-core/apis/crm/imports.generated.ts +2 -7
  592. package/src/server/api-client-core/apis/crm/invoices-types.generated.ts +839 -856
  593. package/src/server/api-client-core/apis/crm/invoices.generated.ts +42 -44
  594. package/src/server/api-client-core/apis/crm/leads-types.generated.ts +839 -856
  595. package/src/server/api-client-core/apis/crm/leads.generated.ts +42 -44
  596. package/src/server/api-client-core/apis/crm/limits-tracking-types.generated.ts +263 -275
  597. package/src/server/api-client-core/apis/crm/limits-tracking.generated.ts +2 -4
  598. package/src/server/api-client-core/apis/crm/line-items-types.generated.ts +843 -856
  599. package/src/server/api-client-core/apis/crm/line-items.generated.ts +42 -44
  600. package/src/server/api-client-core/apis/crm/listings-types.generated.ts +842 -859
  601. package/src/server/api-client-core/apis/crm/listings.generated.ts +42 -44
  602. package/src/server/api-client-core/apis/crm/lists-types.generated.ts +2794 -2845
  603. package/src/server/api-client-core/apis/crm/lists.generated.ts +8 -20
  604. package/src/server/api-client-core/apis/crm/meetings-types.generated.ts +839 -856
  605. package/src/server/api-client-core/apis/crm/meetings.generated.ts +42 -44
  606. package/src/server/api-client-core/apis/crm/notes-types.generated.ts +839 -856
  607. package/src/server/api-client-core/apis/crm/notes.generated.ts +42 -44
  608. package/src/server/api-client-core/apis/crm/object-library-types.generated.ts +26 -39
  609. package/src/server/api-client-core/apis/crm/object-library.generated.ts +2 -4
  610. package/src/server/api-client-core/apis/crm/objects-types.generated.ts +688 -716
  611. package/src/server/api-client-core/apis/crm/objects.generated.ts +79 -83
  612. package/src/server/api-client-core/apis/crm/orders-types.generated.ts +829 -846
  613. package/src/server/api-client-core/apis/crm/orders.generated.ts +45 -47
  614. package/src/server/api-client-core/apis/crm/partner-clients-types.generated.ts +721 -735
  615. package/src/server/api-client-core/apis/crm/partner-clients.generated.ts +60 -60
  616. package/src/server/api-client-core/apis/crm/partner-services-types.generated.ts +720 -734
  617. package/src/server/api-client-core/apis/crm/partner-services.generated.ts +60 -60
  618. package/src/server/api-client-core/apis/crm/pipelines-types.generated.ts +366 -388
  619. package/src/server/api-client-core/apis/crm/pipelines.generated.ts +2 -4
  620. package/src/server/api-client-core/apis/crm/postal-mail-types.generated.ts +830 -843
  621. package/src/server/api-client-core/apis/crm/postal-mail.generated.ts +45 -47
  622. package/src/server/api-client-core/apis/crm/products-types.generated.ts +829 -846
  623. package/src/server/api-client-core/apis/crm/products.generated.ts +45 -47
  624. package/src/server/api-client-core/apis/crm/projects-types.generated.ts +845 -875
  625. package/src/server/api-client-core/apis/crm/projects.generated.ts +47 -53
  626. package/src/server/api-client-core/apis/crm/properties-types.generated.ts +623 -626
  627. package/src/server/api-client-core/apis/crm/properties.generated.ts +33 -28
  628. package/src/server/api-client-core/apis/crm/property-validations-types.generated.ts +160 -174
  629. package/src/server/api-client-core/apis/crm/property-validations.generated.ts +2 -6
  630. package/src/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.ts +467 -494
  631. package/src/server/api-client-core/apis/crm/public-app-crm-cards.generated.ts +7 -15
  632. package/src/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.ts +166 -177
  633. package/src/server/api-client-core/apis/crm/public-app-feature-flags.generated.ts +6 -8
  634. package/src/server/api-client-core/apis/crm/quotes-types.generated.ts +829 -846
  635. package/src/server/api-client-core/apis/crm/quotes.generated.ts +45 -47
  636. package/src/server/api-client-core/apis/crm/schemas-types.generated.ts +613 -640
  637. package/src/server/api-client-core/apis/crm/schemas.generated.ts +8 -14
  638. package/src/server/api-client-core/apis/crm/services-types.generated.ts +832 -849
  639. package/src/server/api-client-core/apis/crm/services.generated.ts +45 -47
  640. package/src/server/api-client-core/apis/crm/tasks-types.generated.ts +829 -846
  641. package/src/server/api-client-core/apis/crm/tasks.generated.ts +45 -47
  642. package/src/server/api-client-core/apis/crm/taxes-types.generated.ts +829 -846
  643. package/src/server/api-client-core/apis/crm/taxes.generated.ts +45 -47
  644. package/src/server/api-client-core/apis/crm/tickets-types.generated.ts +848 -878
  645. package/src/server/api-client-core/apis/crm/tickets.generated.ts +47 -53
  646. package/src/server/api-client-core/apis/crm/timeline-types.generated.ts +144 -161
  647. package/src/server/api-client-core/apis/crm/timeline.generated.ts +6 -8
  648. package/src/server/api-client-core/apis/crm/transcriptions-types.generated.ts +149 -164
  649. package/src/server/api-client-core/apis/crm/transcriptions.generated.ts +22 -22
  650. package/src/server/api-client-core/apis/crm/users-types.generated.ts +829 -846
  651. package/src/server/api-client-core/apis/crm/users.generated.ts +45 -47
  652. package/src/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.ts +29 -42
  653. package/src/server/api-client-core/apis/crm/video-conferencing-extension.generated.ts +17 -19
  654. package/src/server/api-client-core/apis/events/manage-event-definitions-types.generated.ts +1509 -1558
  655. package/src/server/api-client-core/apis/events/manage-event-definitions.generated.ts +55 -65
  656. package/src/server/api-client-core/apis/events/send-event-completions-types.generated.ts +51 -68
  657. package/src/server/api-client-core/apis/events/send-event-completions.generated.ts +10 -10
  658. package/src/server/api-client-core/apis/events-types.generated.ts +97 -110
  659. package/src/server/api-client-core/apis/events.generated.ts +2 -4
  660. package/src/server/api-client-core/apis/files-types.generated.ts +727 -757
  661. package/src/server/api-client-core/apis/files.generated.ts +3 -5
  662. package/src/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.ts +1221 -1234
  663. package/src/server/api-client-core/apis/marketing/campaigns-public-api.generated.ts +45 -47
  664. package/src/server/api-client-core/apis/marketing/marketing-emails-types.generated.ts +3704 -3733
  665. package/src/server/api-client-core/apis/marketing/marketing-emails.generated.ts +44 -52
  666. package/src/server/api-client-core/apis/marketing/marketing-events-types.generated.ts +1787 -1848
  667. package/src/server/api-client-core/apis/marketing/marketing-events.generated.ts +236 -241
  668. package/src/server/api-client-core/apis/marketing/single-send-types.generated.ts +142 -155
  669. package/src/server/api-client-core/apis/marketing/single-send.generated.ts +2 -6
  670. package/src/server/api-client-core/apis/marketing/transactional-single-send-types.generated.ts +253 -269
  671. package/src/server/api-client-core/apis/marketing/transactional-single-send.generated.ts +32 -31
  672. package/src/server/api-client-core/apis/meta/origins-types.generated.ts +40 -56
  673. package/src/server/api-client-core/apis/meta/origins.generated.ts +2 -4
  674. package/src/server/api-client-core/apis/scheduler/meetings-types.generated.ts +1001 -1014
  675. package/src/server/api-client-core/apis/scheduler/meetings.generated.ts +6 -8
  676. package/src/server/api-client-core/apis/settings/multicurrency-types.generated.ts +1906 -1912
  677. package/src/server/api-client-core/apis/settings/multicurrency.generated.ts +64 -63
  678. package/src/server/api-client-core/apis/settings/tax-rates-types.generated.ts +71 -85
  679. package/src/server/api-client-core/apis/settings/tax-rates.generated.ts +2 -4
  680. package/src/server/api-client-core/apis/settings/user-provisioning-types.generated.ts +207 -257
  681. package/src/server/api-client-core/apis/settings/user-provisioning.generated.ts +8 -24
  682. package/src/server/api-client-core/apis/webhooks-journal-types.generated.ts +740 -771
  683. package/src/server/api-client-core/apis/webhooks-journal.generated.ts +47 -59
  684. package/src/server/api-client-core/apis/webhooks-types.generated.ts +1194 -1228
  685. package/src/server/api-client-core/apis/webhooks.generated.ts +52 -64
  686. package/src/server/api-client-core/client.ts +5 -1
  687. package/src/server/api-client-core/pagination.ts +2 -2
  688. package/src/server/api-client-core/plugins/fetch-transport.ts +70 -12
  689. package/src/server/api-client-core/types.ts +1 -1
  690. package/src/server/constants.ts +29 -4
  691. package/src/server/hono/hono-request-handler.ts +68 -27
  692. package/src/server/hono/hubspot-connect-routes/auth-complete.test.ts +394 -0
  693. package/src/server/hono/hubspot-connect-routes/{auth-callback.ts → auth-complete.ts} +81 -30
  694. package/src/server/hono/hubspot-connect-routes/auth-init-session.test.ts +114 -30
  695. package/src/server/hono/hubspot-connect-routes/auth-init-session.ts +35 -10
  696. package/src/server/hono/hubspot-connect-routes/auth-logout.test.ts +13 -0
  697. package/src/server/hono/hubspot-connect-routes/auth-logout.ts +39 -10
  698. package/src/server/hono/hubspot-connect-routes/auth-refresh.test.ts +6 -0
  699. package/src/server/hono/hubspot-connect-routes/auth-refresh.ts +24 -9
  700. package/src/server/hono/hubspot-connect-routes/cimd-public-routes.test.ts +7 -6
  701. package/src/server/hono/hubspot-connect-routes/cimd-public-routes.ts +5 -1
  702. package/src/server/hono/hubspot-connect-routes/hubspot-connect-routes.ts +11 -3
  703. package/src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.test.ts +17 -24
  704. package/src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.ts +8 -8
  705. package/src/server/hono/hubspot-connect-routes/utils.test.ts +16 -46
  706. package/src/server/hono/hubspot-connect-routes/utils.ts +61 -5
  707. package/src/server/hono/hubspot-connect-routes/whoami.ts +74 -0
  708. package/src/server/hono/types.ts +11 -10
  709. package/src/server/hono/utils/cookie-utils.ts +27 -2
  710. package/src/server/hono/utils/cors-middleware.test.ts +80 -0
  711. package/src/server/hono/utils/cors-middleware.ts +95 -0
  712. package/src/server/lovable/create-app-function-start.ts +4 -7
  713. package/src/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.ts +21 -16
  714. package/src/server/sanitize-request.ts +15 -12
  715. package/src/server/secure-start-core.ts +7 -6
  716. package/src/server/types.ts +2 -38
  717. package/src/server/utils/env-utils.test.ts +140 -12
  718. package/src/server/utils/env-utils.ts +80 -6
  719. package/src/server/utils/hubspot-dpop-auth-headers.test.ts +43 -0
  720. package/src/server/utils/hubspot-dpop-auth-headers.ts +48 -0
  721. package/src/shared/constants.ts +40 -3
  722. package/src/shared/wire-types.ts +49 -0
  723. package/dist/browser/HubSpotAppConnect-BW45gyDs.js.map +0 -1
  724. package/dist/browser/create-vctOhpX9.js.map +0 -1
  725. package/dist/server/hono/hubspot-connect-routes/auth-callback.js +0 -125
  726. package/dist/server/hono/hubspot-connect-routes/auth-callback.js.map +0 -1
  727. package/dist/server/proxy.js +0 -68
  728. package/dist/server/proxy.js.map +0 -1
  729. package/src/server/hono/hubspot-connect-routes/auth-callback.test.ts +0 -225
  730. package/src/server/proxy.test.ts +0 -80
  731. package/src/server/proxy.ts +0 -116
@@ -35,6 +35,278 @@ const noopLogger = {
35
35
  warn: () => {},
36
36
  error: () => {}
37
37
  };
38
+ /**
39
+ * Query parameter on the `auth/complete` POST request carrying the
40
+ * authorization `code` HubSpot returned to the frontend callback.
41
+ */
42
+ const AUTH_COMPLETE_CODE_PARAM = "code";
43
+ /**
44
+ * Query parameter on the `auth/complete` POST request carrying the
45
+ * OAuth `state` HubSpot echoed back to the frontend callback.
46
+ */
47
+ const AUTH_COMPLETE_STATE_PARAM = "state";
48
+ /**
49
+ * `postMessage` `data.type` value the OAuth popup sends to its opener
50
+ * with the authorization `code` and `state` from the callback URL. The
51
+ * opener POSTs them to `auth/complete` so credentialed cookies stay in
52
+ * the same CHIPS partition as `auth/init-session`.
53
+ */
54
+ const OAUTH_POPUP_CALLBACK_MESSAGE_TYPE = "hubspot-app-connect:oauth-callback";
55
+ //#endregion
56
+ //#region src/browser/app-connect-controller/constants.ts
57
+ /**
58
+ * Key under which the controller persists the entire session blob
59
+ * (expiresAt + whoami) as a single JSON string in `sessionStorage`.
60
+ * Using one key makes logout trivially correct — one `removeItem` call
61
+ * clears all session state. Survives full-page navigations within the
62
+ * same tab.
63
+ */
64
+ const SESSION_STORAGE_KEY = "hubspot_connect_session";
65
+ /**
66
+ * Number of milliseconds before `expiresAt` that the refresh
67
+ * scheduler attempts to mint a new access token. 60s is comfortably
68
+ * larger than typical network latency without burning lifetime.
69
+ */
70
+ const REFRESH_BUFFER_MS = 6e4;
71
+ //#endregion
72
+ //#region src/browser/app-connect-controller/utils/session-utils.ts
73
+ function readStoredSession(context) {
74
+ const raw = context.sessionStorage.getItem(SESSION_STORAGE_KEY);
75
+ if (!raw) return null;
76
+ let parsed;
77
+ try {
78
+ parsed = JSON.parse(raw);
79
+ } catch {
80
+ context.sessionStorage.removeItem(SESSION_STORAGE_KEY);
81
+ return null;
82
+ }
83
+ if (typeof parsed.expiresAt !== "number" || isNaN(parsed.expiresAt)) {
84
+ context.sessionStorage.removeItem(SESSION_STORAGE_KEY);
85
+ return null;
86
+ }
87
+ if (Date.now() > parsed.expiresAt) {
88
+ context.sessionStorage.removeItem(SESSION_STORAGE_KEY);
89
+ return null;
90
+ }
91
+ return parsed;
92
+ }
93
+ function writeStoredSession(context, session) {
94
+ context.sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(session));
95
+ }
96
+ /**
97
+ * Reads the persisted session blob from `sessionStorage`. Returns
98
+ * `null` (and auto-removes the entry) if the blob is missing,
99
+ * malformed, or already expired.
100
+ */
101
+ function getSessionFromSessionStorage(context) {
102
+ return readStoredSession(context);
103
+ }
104
+ /**
105
+ * Persists both `expiresAt` and `whoami` to the in-memory store and
106
+ * `sessionStorage` as a single JSON blob. Called from `init.ts` after
107
+ * a successful OAuth token exchange.
108
+ */
109
+ function storeSession(options) {
110
+ const { context, expiresAtMs, whoami } = options;
111
+ context.store.setState({
112
+ expiresAt: expiresAtMs,
113
+ whoami
114
+ });
115
+ writeStoredSession(context, {
116
+ expiresAt: expiresAtMs,
117
+ whoami
118
+ });
119
+ }
120
+ /**
121
+ * Updates only `expiresAt` in both the store and `sessionStorage`,
122
+ * preserving the existing `whoami` from in-memory store state. Called
123
+ * from `refresh.ts` after a successful token refresh.
124
+ */
125
+ function storeExpiresAt(options) {
126
+ const { context, expiresAtMs } = options;
127
+ const currentWhoami = context.store.getSnapshot().whoami;
128
+ context.store.setState({ expiresAt: expiresAtMs });
129
+ writeStoredSession(context, {
130
+ expiresAt: expiresAtMs,
131
+ whoami: currentWhoami
132
+ });
133
+ }
134
+ /**
135
+ * Removes the single session-storage key, clearing all persisted
136
+ * session state. Called on disconnect and on auth-complete errors.
137
+ */
138
+ function clearSessionStorage(context) {
139
+ context.sessionStorage.removeItem(SESSION_STORAGE_KEY);
140
+ }
141
+ /**
142
+ * Returns `true` when the controller has an `expiresAt` whose value
143
+ * is still in the future. Used to drive the UI status and the refresh
144
+ * scheduler.
145
+ */
146
+ function isClientSessionActive(context) {
147
+ const expiresAt = context.store.getSnapshot().expiresAt;
148
+ return expiresAt !== null && Date.now() < expiresAt;
149
+ }
150
+ //#endregion
151
+ //#region src/browser/app-connect-controller/oauth-complete.ts
152
+ /**
153
+ * Finishes the OAuth token exchange by POSTing `code` and `state` to the
154
+ * SDK's `auth/complete` route with credentialed cookies from the current
155
+ * browsing context (must match the partition used by `auth/init-session`).
156
+ */
157
+ async function completeHubSpotOAuthSession(context, options) {
158
+ const { code, state } = options;
159
+ const completeUrl = new URL(`${context.config.hubSpotConnectBaseUrl}/auth/complete`, window.location.origin);
160
+ completeUrl.searchParams.set(AUTH_COMPLETE_CODE_PARAM, code);
161
+ completeUrl.searchParams.set(AUTH_COMPLETE_STATE_PARAM, state);
162
+ let response;
163
+ try {
164
+ response = await fetch(completeUrl.toString(), {
165
+ method: "POST",
166
+ credentials: "include"
167
+ });
168
+ } catch (err) {
169
+ clearSessionStorage(context);
170
+ throw new Error(`Failed to complete HubSpot OAuth: ${err instanceof Error ? err.message : String(err)}`);
171
+ }
172
+ if (!response.ok) {
173
+ clearSessionStorage(context);
174
+ throw new Error(`Failed to complete HubSpot OAuth: ${response.status} ${response.statusText}`);
175
+ }
176
+ return await response.json();
177
+ }
178
+ //#endregion
179
+ //#region src/browser/app-connect-controller/oauth-popup.ts
180
+ const OAUTH_POPUP_WINDOW_NAME = "hubspot-app-connect-oauth";
181
+ const OAUTH_POPUP_POLL_INTERVAL_MS = 300;
182
+ function isOAuthPopupCallbackMessage(data) {
183
+ if (typeof data !== "object" || data === null) return false;
184
+ const record = data;
185
+ return record.type === "hubspot-app-connect:oauth-callback" && typeof record.code === "string" && record.code.length > 0 && typeof record.state === "string" && record.state.length > 0;
186
+ }
187
+ /**
188
+ * Opens HubSpot's authorize URL in a popup and waits for the callback
189
+ * page to relay `code` + `state` back. The opener POSTs to
190
+ * `auth/complete` so credentialed cookies use the same CHIPS partition
191
+ * as `auth/init-session`.
192
+ */
193
+ async function waitForHubSpotOAuthPopup(options) {
194
+ const { context, authorizationUrl } = options;
195
+ const targetOrigin = window.location.origin;
196
+ return new Promise((resolve, reject) => {
197
+ let popup = null;
198
+ let pollTimer;
199
+ let isSettled = false;
200
+ let isCallbackReceived = false;
201
+ const cleanup = () => {
202
+ window.removeEventListener("message", onMessage);
203
+ if (pollTimer !== void 0) clearInterval(pollTimer);
204
+ };
205
+ const settleSuccess = (expiresAtMs) => {
206
+ if (isSettled) return;
207
+ isSettled = true;
208
+ cleanup();
209
+ storeExpiresAt({
210
+ context,
211
+ expiresAtMs
212
+ });
213
+ context.store.setState({
214
+ isSessionConnected: true,
215
+ error: null
216
+ });
217
+ resolve();
218
+ };
219
+ const settleFailure = (message) => {
220
+ if (isSettled) return;
221
+ isSettled = true;
222
+ cleanup();
223
+ try {
224
+ popup?.close();
225
+ } catch {}
226
+ reject(new Error(message));
227
+ };
228
+ const onMessage = (event) => {
229
+ if (event.origin !== targetOrigin) return;
230
+ if (!isOAuthPopupCallbackMessage(event.data)) return;
231
+ if (isCallbackReceived) return;
232
+ isCallbackReceived = true;
233
+ (async () => {
234
+ try {
235
+ settleSuccess((await completeHubSpotOAuthSession(context, {
236
+ code: event.data.code,
237
+ state: event.data.state
238
+ })).expires_at);
239
+ } catch (err) {
240
+ settleFailure(err instanceof Error ? err.message : "HubSpot OAuth failed");
241
+ }
242
+ })();
243
+ };
244
+ window.addEventListener("message", onMessage);
245
+ popup = window.open(authorizationUrl, OAUTH_POPUP_WINDOW_NAME, "popup=yes,width=600,height=700");
246
+ if (!popup) {
247
+ settleFailure("Popup blocked. Allow popups for this site and try again.");
248
+ return;
249
+ }
250
+ pollTimer = setInterval(() => {
251
+ if (popup?.closed && !isCallbackReceived) settleFailure("Connect to HubSpot was cancelled.");
252
+ }, OAUTH_POPUP_POLL_INTERVAL_MS);
253
+ });
254
+ }
255
+ /**
256
+ * Called from the OAuth callback page inside the popup. Relays `code`
257
+ * and `state` to the opener (which runs `auth/complete`) and closes.
258
+ */
259
+ function relayOAuthCallbackToOpener(options) {
260
+ const { code, state } = options;
261
+ const opener = window.opener;
262
+ if (!opener || opener.closed) return false;
263
+ const message = {
264
+ type: OAUTH_POPUP_CALLBACK_MESSAGE_TYPE,
265
+ code,
266
+ state
267
+ };
268
+ opener.postMessage(message, window.location.origin);
269
+ try {
270
+ window.close();
271
+ } catch {}
272
+ return true;
273
+ }
274
+ function hasOAuthPopupOpener() {
275
+ try {
276
+ return Boolean(window.opener && !window.opener.closed);
277
+ } catch {
278
+ return false;
279
+ }
280
+ }
281
+ function isOAuthPopupCallback() {
282
+ return window.name === "hubspot-app-connect-oauth" && hasOAuthPopupOpener();
283
+ }
284
+ //#endregion
285
+ //#region src/browser/app-connect-controller/utils/iframe-utils.ts
286
+ /**
287
+ * Returns `true` when the app runs inside a parent frame (same-origin
288
+ * or cross-origin). Cross-origin parent access throws; treat that as
289
+ * embedded so OAuth uses a popup instead of a top-level redirect.
290
+ */
291
+ function isAppEmbeddedInIframe() {
292
+ try {
293
+ return window.self !== window.top;
294
+ } catch {
295
+ return true;
296
+ }
297
+ }
298
+ //#endregion
299
+ //#region src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts
300
+ /**
301
+ * Maps the configured {@link OAuthConnectMode} to the concrete connect
302
+ * behavior for the current browsing context.
303
+ */
304
+ function resolveOAuthConnectMode(options) {
305
+ const mode = options.oauthConnectMode ?? "auto";
306
+ if (mode === "popup") return "popup";
307
+ if (mode === "redirect") return "redirect";
308
+ return isAppEmbeddedInIframe() ? "popup" : "redirect";
309
+ }
38
310
  //#endregion
39
311
  //#region src/browser/app-connect-controller/utils/timeout-utils.ts
40
312
  function delay(ms) {
@@ -52,12 +324,14 @@ const ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS = 500;
52
324
  *
53
325
  * 1. Calls the SDK's `auth/init-session` route to mint a fresh PKCE
54
326
  * verifier + state and obtain HubSpot's `authorize` URL.
55
- * 2. Navigates the browser to that URL (full-page redirect).
327
+ * 2. Navigates to that URL via full-page redirect, or opens it in a
328
+ * popup when embedded in an iframe or when `oauthConnectMode` is
329
+ * `'popup'`.
56
330
  *
57
331
  * The `return_path` is the current path + query so the user lands
58
- * back where they started after authorizing.
332
+ * back where they started after authorizing (redirect mode only).
59
333
  *
60
- * Throws when the init call fails. Does not return after the redirect
334
+ * Throws when the init call fails. Does not return after a redirect
61
335
  * begins because the page is unloaded.
62
336
  */
63
337
  async function startHubSpotConnection(context) {
@@ -69,6 +343,13 @@ async function startHubSpotConnection(context) {
69
343
  if (!initResponse.ok) throw new Error(`Failed to init session: ${initResponse.status}`);
70
344
  const { authorization_url: authorizationUrl } = await initResponse.json();
71
345
  await delay(ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS);
346
+ if (resolveOAuthConnectMode(config.oauthConnectMode !== void 0 ? { oauthConnectMode: config.oauthConnectMode } : {}) === "popup") {
347
+ await waitForHubSpotOAuthPopup({
348
+ context,
349
+ authorizationUrl
350
+ });
351
+ return;
352
+ }
72
353
  window.location.href = authorizationUrl;
73
354
  }
74
355
  //#endregion
@@ -93,80 +374,6 @@ function createDefaultSessionStorage() {
93
374
  };
94
375
  }
95
376
  //#endregion
96
- //#region src/shared/constants.ts
97
- /**
98
- * Constants whose values are part of the contract between the browser
99
- * controller and the server-side hubspot-connect routes. Both halves
100
- * import from this module so the wire format stays in sync.
101
- */
102
- /**
103
- * Query parameter on the OAuth return URL that carries the new access
104
- * token's expiry (Unix epoch milliseconds). The server emits this on
105
- * the `auth/callback` redirect; the browser parses it during `initSdk`
106
- * and then strips it from the URL via `history.replaceState`.
107
- */
108
- const EXPIRES_AT_URL_PARAM = "__hs_expires_at";
109
- //#endregion
110
- //#region src/browser/app-connect-controller/constants.ts
111
- /**
112
- * Key the controller persists the access-token `expiresAt` (Unix
113
- * epoch milliseconds) under in `sessionStorage`. Survives full-page
114
- * navigations within the same tab.
115
- */
116
- const EXPIRES_AT_KEY = "hubspot_token_expires_at";
117
- /**
118
- * Number of milliseconds before `expiresAt` that the refresh
119
- * scheduler attempts to mint a new access token. 60s is comfortably
120
- * larger than typical network latency without burning lifetime.
121
- */
122
- const REFRESH_BUFFER_MS = 6e4;
123
- //#endregion
124
- //#region src/browser/app-connect-controller/utils/session-utils.ts
125
- /**
126
- * Persists the access-token `expiresAt` (Unix epoch milliseconds) to
127
- * both the in-memory store and `sessionStorage` so it survives
128
- * full-page navigations within the same tab.
129
- */
130
- function storeExpiresAt(options) {
131
- const { context, expiresAtMs } = options;
132
- context.store.setState({ expiresAt: expiresAtMs });
133
- context.sessionStorage.setItem(EXPIRES_AT_KEY, String(expiresAtMs));
134
- }
135
- /**
136
- * Reads the persisted `expiresAt` from `sessionStorage`. Removes the
137
- * value (and returns `null`) if it is malformed or already expired,
138
- * so a stale entry never reactivates a dead session.
139
- */
140
- function getExpiresAtFromSessionStorage(context) {
141
- const raw = context.sessionStorage.getItem(EXPIRES_AT_KEY);
142
- if (!raw) return null;
143
- const val = parseInt(raw, 10);
144
- if (isNaN(val)) {
145
- context.sessionStorage.removeItem(EXPIRES_AT_KEY);
146
- return null;
147
- }
148
- if (Date.now() > val) {
149
- context.sessionStorage.removeItem(EXPIRES_AT_KEY);
150
- return null;
151
- }
152
- return val;
153
- }
154
- /**
155
- * Clears the persisted session-storage state. Called on disconnect.
156
- */
157
- function clearSessionStorage(context) {
158
- context.sessionStorage.removeItem(EXPIRES_AT_KEY);
159
- }
160
- /**
161
- * Returns `true` when the controller has an `expiresAt` whose value
162
- * is still in the future. Used both to drive the UI status and to
163
- * decide whether the refresh scheduler should run.
164
- */
165
- function isClientSessionActive(context) {
166
- const expiresAt = context.store.getSnapshot().expiresAt;
167
- return expiresAt !== null && Date.now() < expiresAt;
168
- }
169
- //#endregion
170
377
  //#region src/browser/app-connect-controller/disconnect.ts
171
378
  /**
172
379
  * Disconnect flow:
@@ -174,8 +381,8 @@ function isClientSessionActive(context) {
174
381
  * 1. Calls the SDK's `auth/logout` route to revoke the upstream token
175
382
  * and clear the refresh-token cookie.
176
383
  * 2. Clears the local session-storage `expiresAt` entry.
177
- * 3. Updates the controller state to `disconnected` and navigates the
178
- * browser to the URL the server returned in `redirect_to`.
384
+ * 3. Updates the controller state to `disconnected` so the UI re-renders
385
+ * without a page reload.
179
386
  *
180
387
  * Errors are caught, logged, and surfaced via the controller's
181
388
  * `error` field so the UI can show a retry state.
@@ -195,14 +402,14 @@ async function disconnectFromHubSpot(context) {
195
402
  credentials: "include"
196
403
  });
197
404
  if (!response.ok) throw new Error(`Logout failed: ${response.status}`);
198
- const { redirect_to: redirectTo } = await response.json();
405
+ await response.body?.cancel();
199
406
  store.setState({
200
407
  expiresAt: null,
408
+ whoami: null,
201
409
  isSessionConnected: false,
202
410
  isDisconnectInFlight: false
203
411
  });
204
- window.location.href = redirectTo;
205
- logger.info("disconnectFromHubSpot: redirecting");
412
+ logger.info("disconnectFromHubSpot: complete");
206
413
  } catch (err) {
207
414
  const message = err instanceof Error ? err.message : "Disconnect failed";
208
415
  logger.error("disconnectFromHubSpot: failed", err);
@@ -215,25 +422,47 @@ async function disconnectFromHubSpot(context) {
215
422
  //#endregion
216
423
  //#region src/browser/app-connect-controller/init.ts
217
424
  /**
218
- * Picks up the `__hs_expires_at` parameter the OAuth callback adds to
219
- * the redirect URL, persists it to the controller, and strips it from
220
- * the address bar so it's not logged or bookmarked.
425
+ * On `controller.start()`:
426
+ *
427
+ * 1. If the browser has been redirected back to the SDK's frontend
428
+ * OAuth callback path (`/__hubspot_oauth_callback`) with `?code` +
429
+ * `?state`:
430
+ * - **Redirect flow** (no `window.opener`): POST to `auth/complete`
431
+ * from this window, persist `expires_at`, and `history.replaceState`
432
+ * to `return_path`.
433
+ * - **Popup flow** (`window.opener` present): relay `code` + `state`
434
+ * to the opener via `postMessage` and close. The opener POSTs to
435
+ * `auth/complete` so partitioned cookies match `init-session`.
436
+ * 2. Pick up `?__hs_expires_at` from `window.location` (refresh hop),
437
+ * persist it, and strip it from the address bar.
221
438
  *
222
- * Called once by `controller.start()`. A no-op when the parameter
223
- * isn't present (e.g. on every page load other than the OAuth return
224
- * trip).
439
+ * A no-op when neither set of parameters is present.
225
440
  */
226
441
  async function initAppConnect(context) {
442
+ await consumeOAuthCallback(context);
443
+ }
444
+ async function consumeOAuthCallback(context) {
445
+ if (window.location.pathname !== "/__hubspot_oauth_callback") return;
227
446
  const params = new URLSearchParams(window.location.search);
228
- const expiresAtStr = params.get(EXPIRES_AT_URL_PARAM);
229
- if (!expiresAtStr) return;
230
- const expiresAt = parseInt(expiresAtStr, 10);
231
- if (isNaN(expiresAt)) return;
232
- params.delete(EXPIRES_AT_URL_PARAM);
233
- const cleanSearch = params.toString();
234
- history.replaceState(null, "", cleanSearch ? `${window.location.pathname}?${cleanSearch}` : window.location.pathname);
235
- context.store.setState({ expiresAt });
236
- context.sessionStorage.setItem(EXPIRES_AT_KEY, String(expiresAt));
447
+ const code = params.get(AUTH_COMPLETE_CODE_PARAM);
448
+ const state = params.get(AUTH_COMPLETE_STATE_PARAM);
449
+ if (!code || !state) return;
450
+ if (isOAuthPopupCallback() && relayOAuthCallbackToOpener({
451
+ code,
452
+ state
453
+ })) return;
454
+ const body = await completeHubSpotOAuthSession(context, {
455
+ code,
456
+ state
457
+ });
458
+ const { expires_at: expiresAt, return_path: returnPath } = body;
459
+ storeSession({
460
+ context,
461
+ expiresAtMs: expiresAt,
462
+ whoami: body.whoami
463
+ });
464
+ const targetUrl = new URL(returnPath, window.location.origin);
465
+ history.replaceState(null, "", `${targetUrl.pathname}${targetUrl.search}${targetUrl.hash}`);
237
466
  }
238
467
  //#endregion
239
468
  //#region src/browser/app-connect-controller/refresh.ts
@@ -405,6 +634,7 @@ const noop = () => Promise.resolve();
405
634
  const SERVER_VIEW = {
406
635
  status: "initializing",
407
636
  error: null,
637
+ whoami: null,
408
638
  connectToHubSpot: noop,
409
639
  disconnectFromHubSpot: noop
410
640
  };
@@ -443,7 +673,8 @@ function createAppConnectController(options) {
443
673
  isDisconnectInFlight: false,
444
674
  isSessionConnected: false,
445
675
  error: null,
446
- expiresAt: null
676
+ expiresAt: null,
677
+ whoami: null
447
678
  });
448
679
  const context = {
449
680
  config,
@@ -451,7 +682,11 @@ function createAppConnectController(options) {
451
682
  sessionStorage,
452
683
  store
453
684
  };
454
- store.setState({ expiresAt: getExpiresAtFromSessionStorage(context) });
685
+ const storedSession = getSessionFromSessionStorage(context);
686
+ store.setState({
687
+ expiresAt: storedSession?.expiresAt ?? null,
688
+ whoami: storedSession?.whoami ?? null
689
+ });
455
690
  let hasStarted = false;
456
691
  const connectToHubSpot = async () => {
457
692
  logger.info("connectToHubSpot: starting");
@@ -474,6 +709,7 @@ function createAppConnectController(options) {
474
709
  const getViewStateMemoized = memoizeLast((storeState) => ({
475
710
  status: getDerivedStatus(storeState),
476
711
  error: storeState.error,
712
+ whoami: storeState.whoami,
477
713
  connectToHubSpot,
478
714
  disconnectFromHubSpot: disconnectFromHubSpot$1
479
715
  }));
@@ -514,4 +750,4 @@ function createAppConnectController(options) {
514
750
  //#endregion
515
751
  export { createLogger as n, createAppConnectController as t };
516
752
 
517
- //# sourceMappingURL=create-vctOhpX9.js.map
753
+ //# sourceMappingURL=create-DxEyGG-k.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-DxEyGG-k.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 under which the controller persists the entire session blob\n * (expiresAt + whoami) as a single JSON string in `sessionStorage`.\n * Using one key makes logout trivially correct — one `removeItem` call\n * clears all session state. Survives full-page navigations within the\n * same tab.\n */\nexport const SESSION_STORAGE_KEY = 'hubspot_connect_session';\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 type { AuthCompleteWhoami } from '../../../shared/wire-types.ts';\nimport { SESSION_STORAGE_KEY } from '../constants.ts';\nimport type { AppConnectContext } from '../types.ts';\n\ninterface StoredSession {\n expiresAt: number;\n whoami: AuthCompleteWhoami | null;\n}\n\nfunction readStoredSession(context: AppConnectContext): StoredSession | null {\n const raw = context.sessionStorage.getItem(SESSION_STORAGE_KEY);\n if (!raw) return null;\n let parsed: StoredSession;\n try {\n parsed = JSON.parse(raw) as StoredSession;\n } catch {\n context.sessionStorage.removeItem(SESSION_STORAGE_KEY);\n return null;\n }\n if (typeof parsed.expiresAt !== 'number' || isNaN(parsed.expiresAt)) {\n context.sessionStorage.removeItem(SESSION_STORAGE_KEY);\n return null;\n }\n if (Date.now() > parsed.expiresAt) {\n context.sessionStorage.removeItem(SESSION_STORAGE_KEY);\n return null;\n }\n return parsed;\n}\n\nfunction writeStoredSession(\n context: AppConnectContext,\n session: StoredSession\n): void {\n context.sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(session));\n}\n\n/**\n * Reads the persisted session blob from `sessionStorage`. Returns\n * `null` (and auto-removes the entry) if the blob is missing,\n * malformed, or already expired.\n */\nexport function getSessionFromSessionStorage(\n context: AppConnectContext\n): StoredSession | null {\n return readStoredSession(context);\n}\n\n/**\n * Persists both `expiresAt` and `whoami` to the in-memory store and\n * `sessionStorage` as a single JSON blob. Called from `init.ts` after\n * a successful OAuth token exchange.\n */\nexport function storeSession(options: {\n context: AppConnectContext;\n expiresAtMs: number;\n whoami: AuthCompleteWhoami;\n}): void {\n const { context, expiresAtMs, whoami } = options;\n context.store.setState({ expiresAt: expiresAtMs, whoami });\n writeStoredSession(context, { expiresAt: expiresAtMs, whoami });\n}\n\n/**\n * Updates only `expiresAt` in both the store and `sessionStorage`,\n * preserving the existing `whoami` from in-memory store state. Called\n * from `refresh.ts` after a successful token refresh.\n */\nexport function storeExpiresAt(options: {\n context: AppConnectContext;\n expiresAtMs: number;\n}): void {\n const { context, expiresAtMs } = options;\n const currentWhoami = context.store.getSnapshot().whoami;\n context.store.setState({ expiresAt: expiresAtMs });\n writeStoredSession(context, {\n expiresAt: expiresAtMs,\n whoami: currentWhoami,\n });\n}\n\n/**\n * Removes the single session-storage key, clearing all persisted\n * session state. Called on disconnect and on auth-complete errors.\n */\nexport function clearSessionStorage(context: AppConnectContext): void {\n context.sessionStorage.removeItem(SESSION_STORAGE_KEY);\n}\n\n/**\n * Returns `true` when the controller has an `expiresAt` whose value\n * is still in the future. Used to drive the UI status and the refresh\n * scheduler.\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 { 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` so the UI re-renders\n * without a page reload.\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 await response.body?.cancel();\n\n store.setState({\n expiresAt: null,\n whoami: null,\n isSessionConnected: false,\n isDisconnectInFlight: false,\n });\n\n logger.info('disconnectFromHubSpot: complete');\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 { storeSession } 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 storeSession({ context, expiresAtMs: expiresAt, whoami: body.whoami });\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 whoami: 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 getSessionFromSessionStorage,\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 whoami: null,\n });\n const context: AppConnectContext = {\n config,\n logger,\n sessionStorage,\n store,\n };\n\n const storedSession = getSessionFromSessionStorage(context);\n store.setState({\n expiresAt: storedSession?.expiresAt ?? null,\n whoami: storedSession?.whoami ?? null,\n });\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 whoami: storeState.whoami,\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,4 +1,4 @@
1
- import { i as AppConnectStatus, n as AppConnectController, r as AppConnectState, t as AppConnectBrowserConfig } from "./types-rTQw6A54.js";
1
+ import { a as OAuthConnectMode, i as AppConnectStatus, n as AppConnectController, r as AppConnectState, t as AppConnectBrowserConfig } from "./types-C3wed8dU.js";
2
2
 
3
3
  //#region src/shared/logger.d.ts
4
4
  /**
@@ -461,5 +461,5 @@ declare const themeClass: string, themeVars: {
461
461
  };
462
462
  };
463
463
  //#endregion
464
- export { type AppConnectBrowserConfig, type AppConnectController, type AppConnectState, type AppConnectStatus, type CreateAppConnectControllerOptions, type Logger, createAppConnectController, createLogger, themeClass, themeVars };
464
+ export { type AppConnectBrowserConfig, type AppConnectController, type AppConnectState, type AppConnectStatus, type CreateAppConnectControllerOptions, type Logger, type OAuthConnectMode, createAppConnectController, createLogger, themeClass, themeVars };
465
465
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
- import { n as createLogger, t as createAppConnectController } from "./create-vctOhpX9.js";
1
+ import { n as createLogger, t as createAppConnectController } from "./create-DxEyGG-k.js";
2
2
  import { n as themeVars, t as themeClass } from "./theme.css-CJbxi5hC.js";
3
3
  export { createAppConnectController, createLogger, themeClass, themeVars };