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

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 (721) hide show
  1. package/.turbo/turbo-format$colon$check.log +1 -1
  2. package/.turbo/turbo-test.log +93 -52
  3. package/.turbo/turbo-tsdown.log +475 -472
  4. package/build/tsconfig.browser.tsbuildinfo +1 -1
  5. package/build/tsconfig.server.tsbuildinfo +1 -1
  6. package/dist/browser/{HubSpotAppConnect-BW45gyDs.js → HubSpotAppConnect-DFe9b90e.js} +4 -3
  7. package/dist/browser/HubSpotAppConnect-DFe9b90e.js.map +1 -0
  8. package/dist/browser/{create-vctOhpX9.js → create-BNQazCF-.js} +277 -86
  9. package/dist/browser/create-BNQazCF-.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-DkAmHcZt.d.ts} +22 -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 +155 -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/types.d.ts +9 -10
  437. package/dist/server/hono/utils/cookie-utils.js +2 -1
  438. package/dist/server/hono/utils/cookie-utils.js.map +1 -1
  439. package/dist/server/hono/utils/cors-middleware.js +85 -0
  440. package/dist/server/hono/utils/cors-middleware.js.map +1 -0
  441. package/dist/server/import-app-keys.js.map +1 -1
  442. package/dist/server/lovable/create-app-function-start.d.ts +1 -1
  443. package/dist/server/lovable/create-app-function-start.js +4 -6
  444. package/dist/server/lovable/create-app-function-start.js.map +1 -1
  445. package/dist/server/lovable/hubspot-connect/index.js.map +1 -1
  446. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js +14 -15
  447. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js.map +1 -1
  448. package/dist/server/sanitize-request.js +14 -11
  449. package/dist/server/sanitize-request.js.map +1 -1
  450. package/dist/server/secure-start-core.js +4 -5
  451. package/dist/server/secure-start-core.js.map +1 -1
  452. package/dist/server/shared/constants.js +22 -9
  453. package/dist/server/shared/constants.js.map +1 -1
  454. package/dist/server/shared/encoding/base64.js.map +1 -1
  455. package/dist/server/shared/encoding/sha256.js.map +1 -1
  456. package/dist/server/shared/logger.js.map +1 -1
  457. package/dist/server/types.d.ts +1 -35
  458. package/dist/server/utils/cookie-utils.js.map +1 -1
  459. package/dist/server/utils/dpop-utils.js.map +1 -1
  460. package/dist/server/utils/env-utils.js +60 -7
  461. package/dist/server/utils/env-utils.js.map +1 -1
  462. package/dist/server/utils/hubspot-dpop-auth-headers.js +38 -0
  463. package/dist/server/utils/hubspot-dpop-auth-headers.js.map +1 -0
  464. package/dist/server/utils/jwk-utils.js.map +1 -1
  465. package/dist/server/utils/jwt-utils.js.map +1 -1
  466. package/package.json +16 -22
  467. package/src/browser/app-connect-controller/README.md +5 -2
  468. package/src/browser/app-connect-controller/connect-start.test.ts +156 -0
  469. package/src/browser/app-connect-controller/connect-start.ts +18 -3
  470. package/src/browser/app-connect-controller/disconnect.ts +4 -7
  471. package/src/browser/app-connect-controller/init.test.ts +260 -0
  472. package/src/browser/app-connect-controller/init.ts +44 -19
  473. package/src/browser/app-connect-controller/oauth-complete.test.ts +106 -0
  474. package/src/browser/app-connect-controller/oauth-complete.ts +53 -0
  475. package/src/browser/app-connect-controller/oauth-popup.test.ts +238 -0
  476. package/src/browser/app-connect-controller/oauth-popup.ts +160 -0
  477. package/src/browser/app-connect-controller/utils/iframe-utils.ts +12 -0
  478. package/src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.test.ts +35 -0
  479. package/src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts +21 -0
  480. package/src/browser/index.ts +1 -0
  481. package/src/browser/react/components/AppConnectHeader/AppConnectHeader.tsx +3 -5
  482. package/src/browser/react/components/ConnectButton/ConnectButton.tsx +1 -1
  483. package/src/browser/react/lovable/LovableHubSpotAppConnect.tsx +12 -2
  484. package/src/browser/types.ts +21 -5
  485. package/src/server/api-client-core/__tests__/errors.test.ts +309 -0
  486. package/src/server/api-client-core/__tests__/operation-headers.test.ts +251 -0
  487. package/src/server/api-client-core/apis/account/account-info-types.generated.ts +74 -88
  488. package/src/server/api-client-core/apis/account/account-info.generated.ts +2 -4
  489. package/src/server/api-client-core/apis/account/audit-logs-types.generated.ts +346 -360
  490. package/src/server/api-client-core/apis/account/audit-logs.generated.ts +2 -4
  491. package/src/server/api-client-core/apis/auth/oauth-types.generated.ts +81 -99
  492. package/src/server/api-client-core/apis/auth/oauth.generated.ts +1 -3
  493. package/src/server/api-client-core/apis/automation/actions-types.generated.ts +1162 -1188
  494. package/src/server/api-client-core/apis/automation/actions.generated.ts +10 -12
  495. package/src/server/api-client-core/apis/automation/sequences-types.generated.ts +379 -393
  496. package/src/server/api-client-core/apis/automation/sequences.generated.ts +1 -3
  497. package/src/server/api-client-core/apis/business-units-types.generated.ts +43 -59
  498. package/src/server/api-client-core/apis/business-units.generated.ts +9 -10
  499. package/src/server/api-client-core/apis/cms/authors-types.generated.ts +3823 -3853
  500. package/src/server/api-client-core/apis/cms/authors.generated.ts +31 -37
  501. package/src/server/api-client-core/apis/cms/blog-settings-types.generated.ts +3667 -3696
  502. package/src/server/api-client-core/apis/cms/blog-settings.generated.ts +46 -51
  503. package/src/server/api-client-core/apis/cms/cms-content-audit-types.generated.ts +138 -163
  504. package/src/server/api-client-core/apis/cms/cms-content-audit.generated.ts +2 -10
  505. package/src/server/api-client-core/apis/cms/domains-types.generated.ts +153 -167
  506. package/src/server/api-client-core/apis/cms/domains.generated.ts +2 -4
  507. package/src/server/api-client-core/apis/cms/hubdb-types.generated.ts +1013 -1063
  508. package/src/server/api-client-core/apis/cms/hubdb.generated.ts +3 -5
  509. package/src/server/api-client-core/apis/cms/media-bridge-types.generated.ts +8623 -8657
  510. package/src/server/api-client-core/apis/cms/media-bridge.generated.ts +16 -22
  511. package/src/server/api-client-core/apis/cms/pages-types.generated.ts +5259 -5272
  512. package/src/server/api-client-core/apis/cms/pages.generated.ts +262 -226
  513. package/src/server/api-client-core/apis/cms/posts-types.generated.ts +4420 -4438
  514. package/src/server/api-client-core/apis/cms/posts.generated.ts +108 -106
  515. package/src/server/api-client-core/apis/cms/site-search-types.generated.ts +1867 -1881
  516. package/src/server/api-client-core/apis/cms/site-search.generated.ts +2 -4
  517. package/src/server/api-client-core/apis/cms/source-code-types.generated.ts +144 -177
  518. package/src/server/api-client-core/apis/cms/source-code.generated.ts +15 -23
  519. package/src/server/api-client-core/apis/cms/tags-types.generated.ts +3820 -3845
  520. package/src/server/api-client-core/apis/cms/tags.generated.ts +80 -82
  521. package/src/server/api-client-core/apis/cms/url-mappings-types.generated.ts +188 -202
  522. package/src/server/api-client-core/apis/cms/url-mappings.generated.ts +2 -4
  523. package/src/server/api-client-core/apis/cms/url-redirects-types.generated.ts +182 -196
  524. package/src/server/api-client-core/apis/cms/url-redirects.generated.ts +2 -4
  525. package/src/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.ts +810 -828
  526. package/src/server/api-client-core/apis/communication-preferences/subscriptions.generated.ts +66 -63
  527. package/src/server/api-client-core/apis/conversations/custom-channels-types.generated.ts +564 -601
  528. package/src/server/api-client-core/apis/conversations/custom-channels.generated.ts +90 -86
  529. package/src/server/api-client-core/apis/conversations/visitor-identification-types.generated.ts +31 -44
  530. package/src/server/api-client-core/apis/conversations/visitor-identification.generated.ts +6 -8
  531. package/src/server/api-client-core/apis/conversations-types.generated.ts +955 -991
  532. package/src/server/api-client-core/apis/conversations.generated.ts +6 -5
  533. package/src/server/api-client-core/apis/crm/app-uninstalls-types.generated.ts +7 -19
  534. package/src/server/api-client-core/apis/crm/app-uninstalls.generated.ts +2 -4
  535. package/src/server/api-client-core/apis/crm/appointments-types.generated.ts +965 -969
  536. package/src/server/api-client-core/apis/crm/appointments.generated.ts +143 -137
  537. package/src/server/api-client-core/apis/crm/associations-schema-types.generated.ts +292 -322
  538. package/src/server/api-client-core/apis/crm/associations-schema.generated.ts +17 -19
  539. package/src/server/api-client-core/apis/crm/associations-types.generated.ts +657 -675
  540. package/src/server/api-client-core/apis/crm/associations.generated.ts +70 -70
  541. package/src/server/api-client-core/apis/crm/calling-extensions-types.generated.ts +417 -441
  542. package/src/server/api-client-core/apis/crm/calling-extensions.generated.ts +62 -69
  543. package/src/server/api-client-core/apis/crm/calls-types.generated.ts +839 -856
  544. package/src/server/api-client-core/apis/crm/calls.generated.ts +42 -44
  545. package/src/server/api-client-core/apis/crm/carts-types.generated.ts +839 -856
  546. package/src/server/api-client-core/apis/crm/carts.generated.ts +42 -44
  547. package/src/server/api-client-core/apis/crm/commerce-payments-types.generated.ts +847 -856
  548. package/src/server/api-client-core/apis/crm/commerce-payments.generated.ts +73 -73
  549. package/src/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.ts +844 -853
  550. package/src/server/api-client-core/apis/crm/commerce-subscriptions.generated.ts +50 -51
  551. package/src/server/api-client-core/apis/crm/communications-types.generated.ts +846 -856
  552. package/src/server/api-client-core/apis/crm/communications.generated.ts +73 -73
  553. package/src/server/api-client-core/apis/crm/companies-types.generated.ts +859 -885
  554. package/src/server/api-client-core/apis/crm/companies.generated.ts +44 -50
  555. package/src/server/api-client-core/apis/crm/contacts-types.generated.ts +875 -907
  556. package/src/server/api-client-core/apis/crm/contacts.generated.ts +46 -52
  557. package/src/server/api-client-core/apis/crm/contracts-types.generated.ts +894 -862
  558. package/src/server/api-client-core/apis/crm/contracts.generated.ts +66 -56
  559. package/src/server/api-client-core/apis/crm/courses-types.generated.ts +842 -859
  560. package/src/server/api-client-core/apis/crm/courses.generated.ts +42 -44
  561. package/src/server/api-client-core/apis/crm/crm-owners-types.generated.ts +102 -115
  562. package/src/server/api-client-core/apis/crm/crm-owners.generated.ts +2 -4
  563. package/src/server/api-client-core/apis/crm/custom-objects-types.generated.ts +900 -915
  564. package/src/server/api-client-core/apis/crm/custom-objects.generated.ts +128 -126
  565. package/src/server/api-client-core/apis/crm/deal-splits-types.generated.ts +157 -170
  566. package/src/server/api-client-core/apis/crm/deal-splits.generated.ts +2 -4
  567. package/src/server/api-client-core/apis/crm/deals-types.generated.ts +858 -875
  568. package/src/server/api-client-core/apis/crm/deals.generated.ts +42 -44
  569. package/src/server/api-client-core/apis/crm/discounts-types.generated.ts +842 -855
  570. package/src/server/api-client-core/apis/crm/discounts.generated.ts +42 -44
  571. package/src/server/api-client-core/apis/crm/emails-types.generated.ts +839 -856
  572. package/src/server/api-client-core/apis/crm/emails.generated.ts +42 -44
  573. package/src/server/api-client-core/apis/crm/exports-types.generated.ts +284 -314
  574. package/src/server/api-client-core/apis/crm/exports.generated.ts +6 -11
  575. package/src/server/api-client-core/apis/crm/feedback-submissions-types.generated.ts +607 -622
  576. package/src/server/api-client-core/apis/crm/feedback-submissions.generated.ts +84 -80
  577. package/src/server/api-client-core/apis/crm/fees-types.generated.ts +839 -856
  578. package/src/server/api-client-core/apis/crm/fees.generated.ts +42 -44
  579. package/src/server/api-client-core/apis/crm/goal-targets-types.generated.ts +845 -856
  580. package/src/server/api-client-core/apis/crm/goal-targets.generated.ts +50 -51
  581. package/src/server/api-client-core/apis/crm/imports-types.generated.ts +663 -692
  582. package/src/server/api-client-core/apis/crm/imports.generated.ts +2 -7
  583. package/src/server/api-client-core/apis/crm/invoices-types.generated.ts +839 -856
  584. package/src/server/api-client-core/apis/crm/invoices.generated.ts +42 -44
  585. package/src/server/api-client-core/apis/crm/leads-types.generated.ts +839 -856
  586. package/src/server/api-client-core/apis/crm/leads.generated.ts +42 -44
  587. package/src/server/api-client-core/apis/crm/limits-tracking-types.generated.ts +263 -275
  588. package/src/server/api-client-core/apis/crm/limits-tracking.generated.ts +2 -4
  589. package/src/server/api-client-core/apis/crm/line-items-types.generated.ts +843 -856
  590. package/src/server/api-client-core/apis/crm/line-items.generated.ts +42 -44
  591. package/src/server/api-client-core/apis/crm/listings-types.generated.ts +842 -859
  592. package/src/server/api-client-core/apis/crm/listings.generated.ts +42 -44
  593. package/src/server/api-client-core/apis/crm/lists-types.generated.ts +2794 -2845
  594. package/src/server/api-client-core/apis/crm/lists.generated.ts +8 -20
  595. package/src/server/api-client-core/apis/crm/meetings-types.generated.ts +839 -856
  596. package/src/server/api-client-core/apis/crm/meetings.generated.ts +42 -44
  597. package/src/server/api-client-core/apis/crm/notes-types.generated.ts +839 -856
  598. package/src/server/api-client-core/apis/crm/notes.generated.ts +42 -44
  599. package/src/server/api-client-core/apis/crm/object-library-types.generated.ts +26 -39
  600. package/src/server/api-client-core/apis/crm/object-library.generated.ts +2 -4
  601. package/src/server/api-client-core/apis/crm/objects-types.generated.ts +688 -716
  602. package/src/server/api-client-core/apis/crm/objects.generated.ts +79 -83
  603. package/src/server/api-client-core/apis/crm/orders-types.generated.ts +829 -846
  604. package/src/server/api-client-core/apis/crm/orders.generated.ts +45 -47
  605. package/src/server/api-client-core/apis/crm/partner-clients-types.generated.ts +721 -735
  606. package/src/server/api-client-core/apis/crm/partner-clients.generated.ts +60 -60
  607. package/src/server/api-client-core/apis/crm/partner-services-types.generated.ts +720 -734
  608. package/src/server/api-client-core/apis/crm/partner-services.generated.ts +60 -60
  609. package/src/server/api-client-core/apis/crm/pipelines-types.generated.ts +366 -388
  610. package/src/server/api-client-core/apis/crm/pipelines.generated.ts +2 -4
  611. package/src/server/api-client-core/apis/crm/postal-mail-types.generated.ts +830 -843
  612. package/src/server/api-client-core/apis/crm/postal-mail.generated.ts +45 -47
  613. package/src/server/api-client-core/apis/crm/products-types.generated.ts +829 -846
  614. package/src/server/api-client-core/apis/crm/products.generated.ts +45 -47
  615. package/src/server/api-client-core/apis/crm/projects-types.generated.ts +845 -875
  616. package/src/server/api-client-core/apis/crm/projects.generated.ts +47 -53
  617. package/src/server/api-client-core/apis/crm/properties-types.generated.ts +623 -626
  618. package/src/server/api-client-core/apis/crm/properties.generated.ts +33 -28
  619. package/src/server/api-client-core/apis/crm/property-validations-types.generated.ts +160 -174
  620. package/src/server/api-client-core/apis/crm/property-validations.generated.ts +2 -6
  621. package/src/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.ts +467 -494
  622. package/src/server/api-client-core/apis/crm/public-app-crm-cards.generated.ts +7 -15
  623. package/src/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.ts +166 -177
  624. package/src/server/api-client-core/apis/crm/public-app-feature-flags.generated.ts +6 -8
  625. package/src/server/api-client-core/apis/crm/quotes-types.generated.ts +829 -846
  626. package/src/server/api-client-core/apis/crm/quotes.generated.ts +45 -47
  627. package/src/server/api-client-core/apis/crm/schemas-types.generated.ts +613 -640
  628. package/src/server/api-client-core/apis/crm/schemas.generated.ts +8 -14
  629. package/src/server/api-client-core/apis/crm/services-types.generated.ts +832 -849
  630. package/src/server/api-client-core/apis/crm/services.generated.ts +45 -47
  631. package/src/server/api-client-core/apis/crm/tasks-types.generated.ts +829 -846
  632. package/src/server/api-client-core/apis/crm/tasks.generated.ts +45 -47
  633. package/src/server/api-client-core/apis/crm/taxes-types.generated.ts +829 -846
  634. package/src/server/api-client-core/apis/crm/taxes.generated.ts +45 -47
  635. package/src/server/api-client-core/apis/crm/tickets-types.generated.ts +848 -878
  636. package/src/server/api-client-core/apis/crm/tickets.generated.ts +47 -53
  637. package/src/server/api-client-core/apis/crm/timeline-types.generated.ts +144 -161
  638. package/src/server/api-client-core/apis/crm/timeline.generated.ts +6 -8
  639. package/src/server/api-client-core/apis/crm/transcriptions-types.generated.ts +149 -164
  640. package/src/server/api-client-core/apis/crm/transcriptions.generated.ts +22 -22
  641. package/src/server/api-client-core/apis/crm/users-types.generated.ts +829 -846
  642. package/src/server/api-client-core/apis/crm/users.generated.ts +45 -47
  643. package/src/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.ts +29 -42
  644. package/src/server/api-client-core/apis/crm/video-conferencing-extension.generated.ts +17 -19
  645. package/src/server/api-client-core/apis/events/manage-event-definitions-types.generated.ts +1509 -1558
  646. package/src/server/api-client-core/apis/events/manage-event-definitions.generated.ts +55 -65
  647. package/src/server/api-client-core/apis/events/send-event-completions-types.generated.ts +51 -68
  648. package/src/server/api-client-core/apis/events/send-event-completions.generated.ts +10 -10
  649. package/src/server/api-client-core/apis/events-types.generated.ts +97 -110
  650. package/src/server/api-client-core/apis/events.generated.ts +2 -4
  651. package/src/server/api-client-core/apis/files-types.generated.ts +727 -757
  652. package/src/server/api-client-core/apis/files.generated.ts +3 -5
  653. package/src/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.ts +1221 -1234
  654. package/src/server/api-client-core/apis/marketing/campaigns-public-api.generated.ts +45 -47
  655. package/src/server/api-client-core/apis/marketing/marketing-emails-types.generated.ts +3704 -3733
  656. package/src/server/api-client-core/apis/marketing/marketing-emails.generated.ts +44 -52
  657. package/src/server/api-client-core/apis/marketing/marketing-events-types.generated.ts +1787 -1848
  658. package/src/server/api-client-core/apis/marketing/marketing-events.generated.ts +236 -241
  659. package/src/server/api-client-core/apis/marketing/single-send-types.generated.ts +142 -155
  660. package/src/server/api-client-core/apis/marketing/single-send.generated.ts +2 -6
  661. package/src/server/api-client-core/apis/marketing/transactional-single-send-types.generated.ts +253 -269
  662. package/src/server/api-client-core/apis/marketing/transactional-single-send.generated.ts +32 -31
  663. package/src/server/api-client-core/apis/meta/origins-types.generated.ts +40 -56
  664. package/src/server/api-client-core/apis/meta/origins.generated.ts +2 -4
  665. package/src/server/api-client-core/apis/scheduler/meetings-types.generated.ts +1001 -1014
  666. package/src/server/api-client-core/apis/scheduler/meetings.generated.ts +6 -8
  667. package/src/server/api-client-core/apis/settings/multicurrency-types.generated.ts +1906 -1912
  668. package/src/server/api-client-core/apis/settings/multicurrency.generated.ts +64 -63
  669. package/src/server/api-client-core/apis/settings/tax-rates-types.generated.ts +71 -85
  670. package/src/server/api-client-core/apis/settings/tax-rates.generated.ts +2 -4
  671. package/src/server/api-client-core/apis/settings/user-provisioning-types.generated.ts +207 -257
  672. package/src/server/api-client-core/apis/settings/user-provisioning.generated.ts +8 -24
  673. package/src/server/api-client-core/apis/webhooks-journal-types.generated.ts +740 -771
  674. package/src/server/api-client-core/apis/webhooks-journal.generated.ts +47 -59
  675. package/src/server/api-client-core/apis/webhooks-types.generated.ts +1194 -1228
  676. package/src/server/api-client-core/apis/webhooks.generated.ts +52 -64
  677. package/src/server/api-client-core/client.ts +5 -1
  678. package/src/server/api-client-core/pagination.ts +2 -2
  679. package/src/server/api-client-core/plugins/fetch-transport.ts +70 -12
  680. package/src/server/api-client-core/types.ts +1 -1
  681. package/src/server/constants.ts +29 -4
  682. package/src/server/hono/hono-request-handler.ts +68 -27
  683. package/src/server/hono/hubspot-connect-routes/auth-complete.test.ts +285 -0
  684. package/src/server/hono/hubspot-connect-routes/{auth-callback.ts → auth-complete.ts} +74 -30
  685. package/src/server/hono/hubspot-connect-routes/auth-init-session.test.ts +114 -30
  686. package/src/server/hono/hubspot-connect-routes/auth-init-session.ts +35 -10
  687. package/src/server/hono/hubspot-connect-routes/auth-logout.test.ts +13 -0
  688. package/src/server/hono/hubspot-connect-routes/auth-logout.ts +39 -10
  689. package/src/server/hono/hubspot-connect-routes/auth-refresh.test.ts +6 -0
  690. package/src/server/hono/hubspot-connect-routes/auth-refresh.ts +24 -9
  691. package/src/server/hono/hubspot-connect-routes/cimd-public-routes.test.ts +7 -6
  692. package/src/server/hono/hubspot-connect-routes/cimd-public-routes.ts +5 -1
  693. package/src/server/hono/hubspot-connect-routes/hubspot-connect-routes.ts +11 -3
  694. package/src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.test.ts +17 -24
  695. package/src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.ts +8 -8
  696. package/src/server/hono/hubspot-connect-routes/utils.test.ts +16 -46
  697. package/src/server/hono/hubspot-connect-routes/utils.ts +61 -5
  698. package/src/server/hono/types.ts +11 -10
  699. package/src/server/hono/utils/cookie-utils.ts +27 -2
  700. package/src/server/hono/utils/cors-middleware.test.ts +80 -0
  701. package/src/server/hono/utils/cors-middleware.ts +95 -0
  702. package/src/server/lovable/create-app-function-start.ts +4 -7
  703. package/src/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.ts +21 -16
  704. package/src/server/sanitize-request.ts +15 -12
  705. package/src/server/secure-start-core.ts +7 -6
  706. package/src/server/types.ts +2 -38
  707. package/src/server/utils/env-utils.test.ts +140 -12
  708. package/src/server/utils/env-utils.ts +80 -6
  709. package/src/server/utils/hubspot-dpop-auth-headers.test.ts +43 -0
  710. package/src/server/utils/hubspot-dpop-auth-headers.ts +48 -0
  711. package/src/shared/constants.ts +40 -3
  712. package/src/shared/wire-types.ts +19 -0
  713. package/dist/browser/HubSpotAppConnect-BW45gyDs.js.map +0 -1
  714. package/dist/browser/create-vctOhpX9.js.map +0 -1
  715. package/dist/server/hono/hubspot-connect-routes/auth-callback.js +0 -125
  716. package/dist/server/hono/hubspot-connect-routes/auth-callback.js.map +0 -1
  717. package/dist/server/proxy.js +0 -68
  718. package/dist/server/proxy.js.map +0 -1
  719. package/src/server/hono/hubspot-connect-routes/auth-callback.test.ts +0 -225
  720. package/src/server/proxy.test.ts +0 -80
  721. package/src/server/proxy.ts +0 -116
@@ -75,7 +75,7 @@ var spinner = "ConnectButton_spinner__db1gqc6";
75
75
  //#region src/browser/react/components/ConnectButton/ConnectButton.tsx
76
76
  function ConnectButton({ variant = "primary", size = "md", className }) {
77
77
  const { status, connectToHubSpot } = useHubSpotAppConnect();
78
- const isConnecting = status === "connecting";
78
+ const isConnecting = status === "connecting" || status === "initializing";
79
79
  return /* @__PURE__ */ jsxs(Button, {
80
80
  variant,
81
81
  size,
@@ -302,6 +302,7 @@ function getFullName(user) {
302
302
  }
303
303
  function AppConnectHeader({ title }) {
304
304
  const { status } = useHubSpotAppConnect();
305
+ const connectButton = status === "initializing" ? null : /* @__PURE__ */ jsx(ConnectButton, { variant: "secondary" });
305
306
  return /* @__PURE__ */ jsxs("header", {
306
307
  className: styles$3.header,
307
308
  children: [/* @__PURE__ */ jsx("div", {
@@ -316,7 +317,7 @@ function AppConnectHeader({ title }) {
316
317
  }), /* @__PURE__ */ jsx(ShareButton, { pageTitle: title })]
317
318
  }), status === "connected" ? /* @__PURE__ */ jsx(ViewingHubSpotContextRow, {}) : null]
318
319
  })
319
- }), status === "connected" ? /* @__PURE__ */ jsx(UserMenu, {}) : /* @__PURE__ */ jsx(ConnectButton, { variant: "secondary" })]
320
+ }), status === "connected" ? /* @__PURE__ */ jsx(UserMenu, {}) : connectButton]
320
321
  });
321
322
  }
322
323
  function ViewingHubSpotContextRow() {
@@ -486,4 +487,4 @@ function HubSpotAppConnectContent({ connected, disconnectedMessage }) {
486
487
  //#endregion
487
488
  export { useHubSpotAppConnect as n, HubSpotAppConnect as t };
488
489
 
489
- //# sourceMappingURL=HubSpotAppConnect-BW45gyDs.js.map
490
+ //# sourceMappingURL=HubSpotAppConnect-DFe9b90e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HubSpotAppConnect-DFe9b90e.js","names":["styles.root","styles.variant","variant","styles.size","size","styles","styles","styles","styles"],"sources":["../../src/browser/react/context.ts","../../src/browser/react/hooks.ts","../../src/browser/react/components/Button/Button.css.ts","../../src/browser/react/components/Button/Button.tsx","../../src/browser/react/components/ConnectButton/ConnectButton.css.ts","../../src/browser/react/components/ConnectButton/ConnectButton.tsx","../../src/browser/react/components/icons/ChevronDownIcon.tsx","../../src/browser/react/components/icons/ExternalLinkIcon.tsx","../../src/browser/react/components/icons/HubSpotDataSourceIcon.tsx","../../src/browser/react/components/icons/LogoutIcon.tsx","../../src/browser/react/components/icons/ShareIcon.tsx","../../src/browser/react/components/ShareButton/ShareButton.css.ts","../../src/browser/react/components/ShareButton/ShareButton.tsx","../../src/browser/react/components/AppConnectHeader/AppConnectHeader.css.ts","../../src/browser/react/components/AppConnectHeader/AppConnectHeader.tsx","../../src/browser/react/components/DisconnectedBody/DisconnectedBody.css.ts","../../src/browser/react/components/DisconnectedBody/DisconnectedBody.tsx","../../src/browser/react/components/LoadingIndicator/LoadingIndicator.css.ts","../../src/browser/react/components/LoadingIndicator/LoadingIndicator.tsx","../../src/browser/react/components/HubSpotAppConnect/HubSpotAppConnect.css.ts","../../src/browser/react/components/HubSpotAppConnect/HubSpotAppConnect.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { AppConnectController } from '../types.ts';\n\n/**\n * React context that carries the `AppConnectController` from the\n * `HubSpotAppConnect` provider down to consumers of\n * `useHubSpotAppConnect`. `null` indicates the hook is being used\n * outside a provider.\n */\nexport const HubSpotAppConnectControllerContext =\n createContext<AppConnectController | null>(null);\n","import { useContext, useSyncExternalStore } from 'react';\n\nimport type { AppConnectState } from '../types.ts';\nimport { HubSpotAppConnectControllerContext } from './context.ts';\n\nexport type UseHubSpotAppConnectResult = AppConnectState;\n\n/**\n * React hook that returns the current `AppConnectState`. Must be\n * called inside a {@link HubSpotAppConnect} provider — throws when\n * no controller is available.\n *\n * The hook subscribes to the controller via `useSyncExternalStore`\n * so React 18+ batched updates and SSR work correctly.\n */\nexport function useHubSpotAppConnect(): UseHubSpotAppConnectResult {\n const controller = useContext(HubSpotAppConnectControllerContext);\n if (controller == null) {\n throw new Error(\n 'useHubSpotAppConnect must be used within HubSpotAppConnect'\n );\n }\n return useSyncExternalStore(\n controller.subscribe,\n controller.getSnapshot,\n controller.getServerSnapshot\n );\n}\n","import { style, styleVariants } from '@vanilla-extract/css';\n\nimport { themeVars } from '../../../theme.css.ts';\n\nexport const root = style({\n appearance: 'none',\n WebkitAppearance: 'none',\n margin: 0,\n font: 'inherit',\n fontWeight: 500,\n lineHeight: 'inherit',\n textAlign: 'center',\n cursor: 'pointer',\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: themeVars.borderRadius[100],\n transition:\n 'background-color 120ms ease, border-color 120ms ease, color 120ms ease, opacity 120ms ease',\n selectors: {\n '&:disabled': {\n cursor: 'wait',\n opacity: 0.55,\n },\n },\n});\n\nexport const variant = styleVariants({\n primary: {\n backgroundColor: themeVars.fill.primary.default,\n color: themeVars.text.primary.default,\n borderColor: themeVars.border.primary.default,\n selectors: {\n '&:hover:not(:disabled)': {\n filter: 'brightness(0.95)',\n },\n },\n },\n secondary: {\n backgroundColor: themeVars.fill.surface.default.default,\n color: themeVars.text.core.default,\n borderColor: themeVars.border.core.default,\n selectors: {\n '&:hover:not(:disabled)': {\n backgroundColor: '#f7f7f7',\n },\n },\n },\n});\n\nexport const size = styleVariants({\n md: {\n padding: `${themeVars.space[200]} ${themeVars.space[300]}`,\n fontSize: 14,\n },\n lg: {\n padding: `${themeVars.space[300]} ${themeVars.space[500]}`,\n fontSize: 16,\n },\n});\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport * as styles from './Button.css.ts';\n\nexport type ButtonVariant = 'primary' | 'secondary';\nexport type ButtonSize = 'md' | 'lg';\n\nexport interface ButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n children: ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nexport function Button({\n children,\n className,\n variant = 'primary',\n size = 'md',\n type = 'button',\n ...rest\n}: ButtonProps) {\n const composedClassName = [\n styles.root,\n styles.variant[variant],\n styles.size[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n return (\n <button {...rest} type={type} className={composedClassName}>\n {children}\n </button>\n );\n}\n","import { keyframes, style, styleVariants } from '@vanilla-extract/css';\n\nimport { themeVars } from '../../../theme.css.ts';\n\nconst spin = keyframes({\n from: { transform: 'rotate(0deg)' },\n to: { transform: 'rotate(360deg)' },\n});\n\nexport const root = style({\n position: 'relative',\n});\n\nexport const label = style({\n position: 'relative',\n zIndex: 0,\n});\n\nexport const labelMuted = style({\n opacity: 0.22,\n});\n\nexport const loadingBackdrop = styleVariants({\n primary: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 36,\n height: 36,\n marginLeft: -18,\n marginTop: -18,\n borderRadius: '50%',\n backgroundColor: 'rgba(255, 255, 255, 0.88)',\n boxShadow: '0 1px 6px rgba(0, 0, 0, 0.14)',\n pointerEvents: 'none',\n },\n secondary: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 36,\n height: 36,\n marginLeft: -18,\n marginTop: -18,\n borderRadius: '50%',\n backgroundColor: 'rgba(255, 255, 255, 0.82)',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: themeVars.border.core.subtle.default,\n boxShadow: '0 1px 4px rgba(0, 0, 0, 0.08)',\n pointerEvents: 'none',\n },\n});\n\nexport const spinner = style({\n display: 'block',\n width: 14,\n height: 14,\n borderWidth: 2,\n borderStyle: 'solid',\n borderColor: themeVars.border.core.subtle.default,\n borderTopColor: themeVars.fill.primary.default,\n borderRadius: '50%',\n animation: `${spin} 0.8s linear infinite`,\n});\n","import { useHubSpotAppConnect } from '../../hooks.ts';\nimport type { ButtonProps } from '../Button/Button.tsx';\nimport { Button } from '../Button/Button.tsx';\nimport {\n label,\n labelMuted,\n loadingBackdrop,\n root,\n spinner,\n} from './ConnectButton.css.ts';\n\nexport interface ConnectButtonProps extends Pick<\n ButtonProps,\n 'variant' | 'size' | 'className'\n> {}\n\nexport function ConnectButton({\n variant = 'primary',\n size = 'md',\n className,\n}: ConnectButtonProps) {\n const { status, connectToHubSpot } = useHubSpotAppConnect();\n const isConnecting = status === 'connecting' || status === 'initializing';\n const composedClassName = [root, className].filter(Boolean).join(' ');\n const labelClassName = isConnecting ? `${label} ${labelMuted}` : label;\n return (\n <Button\n variant={variant}\n size={size}\n className={composedClassName}\n aria-busy={isConnecting}\n onClick={() => void connectToHubSpot()}\n disabled={isConnecting}\n >\n <span className={labelClassName}>Connect to HubSpot</span>\n {isConnecting ? (\n <span className={loadingBackdrop[variant]} aria-hidden=\"true\">\n <span className={spinner} />\n </span>\n ) : null}\n </Button>\n );\n}\n","export interface ChevronDownIconProps {\n className?: string;\n}\n\nexport function ChevronDownIcon({ className }: ChevronDownIconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","export interface ExternalLinkIconProps {\n className?: string;\n}\n\nexport function ExternalLinkIcon({ className }: ExternalLinkIconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6.5 3.5H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-2.5M10 2.5h3.5V6M9 7l5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","export interface HubSpotDataSourceIconProps {\n className?: string;\n}\n\nexport function HubSpotDataSourceIcon({\n className,\n}: HubSpotDataSourceIconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"2.5\"\n y=\"2.5\"\n width=\"11\"\n height=\"11\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n />\n <path\n d=\"M5 6h6M5 8.25h6M5 10.5h4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n","export interface LogoutIconProps {\n className?: string;\n}\n\nexport function LogoutIcon({ className }: LogoutIconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6.5 2.5h-3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.5 11l3-3-3-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13.5 8h-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","export interface ShareIconProps {\n className?: string;\n}\n\nexport function ShareIcon({ className }: ShareIconProps) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"18\" cy=\"5\" r=\"2.75\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"6\" cy=\"12\" r=\"2.75\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle\n cx=\"18\"\n cy=\"19\"\n r=\"2.75\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M8.6 10.5L15.4 6.5M8.6 13.5L15.4 17.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n","import { style } from '@vanilla-extract/css';\n\nimport { themeVars } from '../../../theme.css.ts';\n\nconst shareBorder = '#cbd6e2';\nconst shareText = '#33475b';\n\nexport const styles = {\n shareButton: style({\n flexShrink: 0,\n appearance: 'none',\n WebkitAppearance: 'none',\n margin: 0,\n fontFamily: 'inherit',\n fontSize: 14,\n fontWeight: 500,\n lineHeight: 1,\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: themeVars.space[200],\n padding: `8px ${themeVars.space[300]}`,\n color: shareText,\n backgroundColor: themeVars.fill.surface.default.default,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: shareBorder,\n borderRadius: 100,\n transition:\n 'background-color 120ms ease, border-color 120ms ease, color 120ms ease',\n selectors: {\n '&:hover:not(:disabled)': {\n backgroundColor: '#f5f8fa',\n },\n '&:focus-visible': {\n outline: `2px solid ${themeVars.border.tertiary.default}`,\n outlineOffset: 2,\n },\n '&:disabled': {\n cursor: 'not-allowed',\n opacity: 0.55,\n },\n },\n }),\n shareIcon: style({\n width: 16,\n height: 16,\n flexShrink: 0,\n display: 'block',\n }),\n} as const;\n","import { ShareIcon } from '../icons/ShareIcon.tsx';\nimport { styles } from './ShareButton.css.ts';\n\ninterface ShareAppConnectPageOptions {\n pageTitle: string;\n}\n\nasync function shareAppConnectPage(\n options: ShareAppConnectPageOptions\n): Promise<void> {\n const { pageTitle } = options;\n const url = window.location.href;\n if (typeof navigator.share === 'function') {\n try {\n await navigator.share({ title: pageTitle, text: pageTitle, url });\n return;\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n }\n }\n if (typeof navigator.clipboard?.writeText === 'function') {\n await navigator.clipboard.writeText(url);\n }\n}\n\nexport interface ShareButtonProps {\n pageTitle: string;\n}\n\nexport function ShareButton({ pageTitle }: ShareButtonProps) {\n return (\n <button\n type=\"button\"\n className={styles.shareButton}\n onClick={() => void shareAppConnectPage({ pageTitle })}\n >\n <ShareIcon className={styles.shareIcon} />\n <span>Share</span>\n </button>\n );\n}\n","import { style } from '@vanilla-extract/css';\n\nimport { themeVars } from '../../../theme.css.ts';\n\nconst avatarOrange = themeVars.fill.brand.default;\nconst avatarTextColor = themeVars.text.primary.default;\n\nexport const styles = {\n header: style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: themeVars.space[300],\n paddingBottom: themeVars.space[300],\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: themeVars.border.core.subtle.default,\n }),\n titleRow: style({\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n minWidth: 0,\n }),\n leftStack: style({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: themeVars.space[200],\n minWidth: 0,\n flex: 1,\n }),\n contextRow: style({\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n fontSize: 14,\n lineHeight: 1.35,\n color: themeVars.text.core.subtle,\n minWidth: 0,\n }),\n contextIcon: style({\n width: 16,\n height: 16,\n flexShrink: 0,\n color: themeVars.text.core.subtle,\n }),\n contextPrefix: style({\n flexShrink: 0,\n }),\n contextLink: style({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n color: themeVars.fill.brand.default,\n textDecoration: 'none',\n fontWeight: 500,\n selectors: {\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n }),\n contextExternalIcon: style({\n width: 14,\n height: 14,\n flexShrink: 0,\n }),\n titleCluster: style({\n display: 'flex',\n alignItems: 'center',\n gap: themeVars.space[200],\n width: 'max-content',\n maxWidth: '100%',\n minWidth: 0,\n }),\n title: style({\n flex: '0 1 auto',\n fontSize: 20,\n fontWeight: 600,\n margin: 0,\n color: themeVars.text.core.default,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }),\n userTrigger: style({\n appearance: 'none',\n WebkitAppearance: 'none',\n margin: 0,\n font: 'inherit',\n lineHeight: 1,\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'center',\n gap: themeVars.space[200],\n padding: `6px ${themeVars.space[300]} 6px 6px`,\n backgroundColor: themeVars.fill.surface.default.default,\n color: themeVars.text.core.default,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: themeVars.border.core.default,\n borderRadius: 999,\n transition: 'background-color 120ms ease, border-color 120ms ease',\n selectors: {\n '&:hover': {\n backgroundColor: '#f7f7f7',\n },\n '&[data-popup-open]': {\n backgroundColor: '#f7f7f7',\n },\n },\n }),\n triggerName: style({\n fontWeight: 500,\n fontSize: 14,\n }),\n chevron: style({\n width: 14,\n height: 14,\n color: themeVars.text.core.subtle,\n transition: 'transform 150ms ease',\n selectors: {\n '[data-popup-open] &': {\n transform: 'rotate(180deg)',\n },\n },\n }),\n avatar: style({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: avatarOrange,\n color: avatarTextColor,\n fontWeight: 600,\n flexShrink: 0,\n borderRadius: '50%',\n userSelect: 'none',\n }),\n avatarSm: style({\n width: 28,\n height: 28,\n fontSize: 11,\n }),\n avatarLg: style({\n width: 40,\n height: 40,\n fontSize: 14,\n }),\n popup: style({\n minWidth: 240,\n backgroundColor: themeVars.fill.surface.default.default,\n color: themeVars.text.core.default,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: themeVars.border.core.subtle.default,\n borderRadius: themeVars.borderRadius[300],\n boxShadow:\n '0 6px 16px rgba(17, 17, 17, 0.08), 0 2px 6px rgba(17, 17, 17, 0.04)',\n padding: `${themeVars.space[200]} 0`,\n outline: 'none',\n transformOrigin: 'top right',\n opacity: 0,\n transform: 'scale(0.96)',\n transition: 'opacity 120ms ease, transform 120ms ease',\n selectors: {\n '&[data-starting-style]': {\n opacity: 0,\n transform: 'scale(0.96)',\n },\n '&[data-open]': {\n opacity: 1,\n transform: 'scale(1)',\n },\n },\n }),\n userInfo: style({\n display: 'flex',\n alignItems: 'center',\n gap: themeVars.space[300],\n padding: `${themeVars.space[200]} ${themeVars.space[300]}`,\n }),\n userInfoText: style({\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n }),\n userInfoName: style({\n fontWeight: 600,\n fontSize: 14,\n color: themeVars.text.core.default,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n userInfoEmail: style({\n fontSize: 13,\n color: themeVars.text.core.subtle,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n separator: style({\n height: 1,\n margin: `${themeVars.space[200]} 0`,\n backgroundColor: themeVars.border.core.subtle.default,\n border: 'none',\n }),\n disconnectItem: style({\n display: 'flex',\n alignItems: 'center',\n gap: themeVars.space[200],\n padding: `${themeVars.space[200]} ${themeVars.space[300]}`,\n color: themeVars.text.alert.default,\n fontSize: 14,\n fontWeight: 500,\n cursor: 'pointer',\n outline: 'none',\n userSelect: 'none',\n selectors: {\n '&[data-highlighted]': {\n backgroundColor: themeVars.fill.accent.red.subtle.default,\n },\n },\n }),\n disconnectIcon: style({\n width: 16,\n height: 16,\n }),\n} as const;\n","import { Menu } from '@base-ui/react/menu';\n\nimport { useHubSpotAppConnect } from '../../hooks.ts';\nimport { ConnectButton } from '../ConnectButton/ConnectButton.tsx';\nimport { ChevronDownIcon } from '../icons/ChevronDownIcon.tsx';\nimport { ExternalLinkIcon } from '../icons/ExternalLinkIcon.tsx';\nimport { HubSpotDataSourceIcon } from '../icons/HubSpotDataSourceIcon.tsx';\nimport { LogoutIcon } from '../icons/LogoutIcon.tsx';\nimport { ShareButton } from '../ShareButton/ShareButton.tsx';\nimport { styles } from './AppConnectHeader.css.ts';\n\ninterface FakeUser {\n firstName: string;\n lastName: string;\n email: string;\n}\n\nconst FAKE_USER: FakeUser = {\n firstName: 'Gabby',\n lastName: 'Martinez',\n email: 'gabby.martinez@acmecorp.com',\n};\n\nfunction getUserInitials(user: FakeUser): string {\n const first = user.firstName.charAt(0).toUpperCase();\n const last = user.lastName.charAt(0).toUpperCase();\n return `${first}${last}`;\n}\n\nfunction getFullName(user: FakeUser): string {\n return `${user.firstName} ${user.lastName}`;\n}\n\ninterface AppConnectHeaderProps {\n title: string;\n}\n\nexport function AppConnectHeader({ title }: AppConnectHeaderProps) {\n const { status } = useHubSpotAppConnect();\n const connectButton =\n status === 'initializing' ? null : <ConnectButton variant=\"secondary\" />;\n return (\n <header className={styles.header}>\n <div className={styles.titleRow}>\n <div className={styles.leftStack}>\n <div className={styles.titleCluster}>\n <h1 className={styles.title}>{title}</h1>\n <ShareButton pageTitle={title} />\n </div>\n {status === 'connected' ? <ViewingHubSpotContextRow /> : null}\n </div>\n </div>\n {status === 'connected' ? <UserMenu /> : connectButton}\n </header>\n );\n}\n\nfunction ViewingHubSpotContextRow() {\n return (\n <div className={styles.contextRow}>\n <HubSpotDataSourceIcon className={styles.contextIcon} />\n <span className={styles.contextPrefix}>Viewing HubSpot data from </span>\n <a\n className={styles.contextLink}\n href=\"#\"\n onClick={(event) => {\n event.preventDefault();\n }}\n >\n Acme Corp · HubSpot\n <ExternalLinkIcon className={styles.contextExternalIcon} />\n </a>\n </div>\n );\n}\n\nfunction UserMenu() {\n const { disconnectFromHubSpot } = useHubSpotAppConnect();\n const initials = getUserInitials(FAKE_USER);\n const fullName = getFullName(FAKE_USER);\n\n return (\n <Menu.Root modal={false}>\n <Menu.Trigger className={styles.userTrigger}>\n <span\n className={`${styles.avatar} ${styles.avatarSm}`}\n aria-hidden=\"true\"\n >\n {initials}\n </span>\n <span className={styles.triggerName}>{fullName}</span>\n <ChevronDownIcon className={styles.chevron} />\n </Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner sideOffset={8} align=\"end\">\n <Menu.Popup className={styles.popup}>\n <div className={styles.userInfo}>\n <span\n className={`${styles.avatar} ${styles.avatarLg}`}\n aria-hidden=\"true\"\n >\n {initials}\n </span>\n <div className={styles.userInfoText}>\n <span className={styles.userInfoName}>{fullName}</span>\n <span className={styles.userInfoEmail}>{FAKE_USER.email}</span>\n </div>\n </div>\n <Menu.Separator className={styles.separator} />\n <Menu.Item\n className={styles.disconnectItem}\n onClick={() => void disconnectFromHubSpot()}\n >\n <LogoutIcon className={styles.disconnectIcon} />\n Disconnect\n </Menu.Item>\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n}\n","import { style } from '@vanilla-extract/css';\n\nimport { themeVars } from '../../../theme.css.ts';\n\nexport const styles = {\n card: style({\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: themeVars.border.core.default,\n borderRadius: themeVars.borderRadius[400],\n padding: themeVars.space[500],\n textAlign: 'center',\n backgroundColor: themeVars.fill.surface.default.default,\n color: themeVars.text.core.default,\n }),\n message: style({\n marginTop: 0,\n marginBottom: themeVars.space[400],\n }),\n errorText: style({\n marginTop: themeVars.space[300],\n marginBottom: 0,\n color: themeVars.text.alert.default,\n }),\n} as const;\n","import type { ReactNode } from 'react';\n\nimport { useHubSpotAppConnect } from '../../hooks.ts';\nimport { ConnectButton } from '../ConnectButton/ConnectButton.tsx';\nimport { styles } from './DisconnectedBody.css.ts';\n\ninterface DisconnectedBodyProps {\n message: ReactNode;\n}\n\nexport function DisconnectedBody({ message }: DisconnectedBodyProps) {\n const { error } = useHubSpotAppConnect();\n\n return (\n <div className={styles.card}>\n <p className={styles.message}>{message}</p>\n <ConnectButton size=\"lg\" />\n {error && (\n <p className={styles.errorText}>\n Failed to connect to HubSpot. {error}\n </p>\n )}\n </div>\n );\n}\n","import { keyframes, style } from '@vanilla-extract/css';\n\nimport { themeVars } from '../../../theme.css.ts';\n\nconst spin = keyframes({\n from: { transform: 'rotate(0deg)' },\n to: { transform: 'rotate(360deg)' },\n});\n\nexport const styles = {\n wrapper: style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 200,\n padding: themeVars.space[600],\n }),\n spinner: style({\n width: 40,\n height: 40,\n borderWidth: 3,\n borderStyle: 'solid',\n borderColor: themeVars.border.core.subtle.default,\n borderTopColor: themeVars.fill.primary.default,\n borderRadius: '50%',\n animation: `${spin} 0.8s linear infinite`,\n }),\n} as const;\n","import { styles } from './LoadingIndicator.css.ts';\n\nexport function LoadingIndicator() {\n return (\n <div className={styles.wrapper} role=\"status\" aria-label=\"Loading\">\n <div className={styles.spinner} />\n </div>\n );\n}\n","import { style } from '@vanilla-extract/css';\n\nimport { themeVars } from '../../../theme.css.ts';\n\nexport const styles = {\n shell: style({\n width: '100%',\n padding: `${themeVars.space[400]} ${themeVars.space[500]}`,\n }),\n content: style({\n marginTop: themeVars.space[500],\n }),\n connectedErrorBanner: style({\n backgroundColor: themeVars.fill.alert.subtle,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: themeVars.border.alert.default,\n borderRadius: themeVars.borderRadius[300],\n padding: themeVars.space[300],\n marginBottom: themeVars.space[300],\n color: themeVars.text.alert.default,\n }),\n} as const;\n","import { useEffect, type ReactNode } from 'react';\n\nimport { themeClass } from '../../../theme.css.ts';\nimport type { AppConnectController } from '../../../types.ts';\nimport { HubSpotAppConnectControllerContext } from '../../context.ts';\nimport { useHubSpotAppConnect } from '../../hooks.ts';\nimport { AppConnectHeader } from '../AppConnectHeader/AppConnectHeader.tsx';\nimport { DisconnectedBody } from '../DisconnectedBody/DisconnectedBody.tsx';\nimport { LoadingIndicator } from '../LoadingIndicator/LoadingIndicator.tsx';\nimport { styles } from './HubSpotAppConnect.css.ts';\n\n/**\n * Props accepted by {@link HubSpotAppConnect}.\n */\nexport interface HubSpotAppConnectProps {\n /** Title text rendered in the standard SDK header. */\n title: string;\n /** Controller produced by `createAppConnectController`. */\n controller: AppConnectController;\n /** Content rendered when the controller is in the `connected` state. */\n connected: ReactNode;\n /**\n * Description text rendered inside the SDK-owned disconnected card,\n * above the primary \"Connect to HubSpot\" button.\n */\n disconnectedMessage: ReactNode;\n}\n\n/**\n * Layout component that exposes `controller` to {@link useHubSpotAppConnect},\n * starts it once on mount, and renders a standard header plus the content\n * slot that matches the current connection status.\n */\nexport function HubSpotAppConnect({\n title,\n controller,\n connected,\n disconnectedMessage,\n}: HubSpotAppConnectProps) {\n useEffect(() => {\n controller.start();\n }, [controller]);\n useEffect(() => {\n document.documentElement.classList.add(themeClass);\n return () => {\n document.documentElement.classList.remove(themeClass);\n };\n }, []);\n return (\n <HubSpotAppConnectControllerContext.Provider value={controller}>\n <div className={styles.shell}>\n <AppConnectHeader title={title} />\n <div className={styles.content}>\n <HubSpotAppConnectContent\n connected={connected}\n disconnectedMessage={disconnectedMessage}\n />\n </div>\n </div>\n </HubSpotAppConnectControllerContext.Provider>\n );\n}\n\ninterface HubSpotAppConnectContentProps {\n connected: ReactNode;\n disconnectedMessage: ReactNode;\n}\n\nfunction HubSpotAppConnectContent({\n connected,\n disconnectedMessage,\n}: HubSpotAppConnectContentProps) {\n const { status, error } = useHubSpotAppConnect();\n if (status === 'initializing') {\n return <LoadingIndicator />;\n }\n if (status === 'connected') {\n return (\n <>\n {error ? (\n <div className={styles.connectedErrorBanner} role=\"alert\">\n {error}\n </div>\n ) : null}\n {connected}\n </>\n );\n }\n return <DisconnectedBody message={disconnectedMessage} />;\n}\n"],"mappings":"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"}
@@ -35,77 +35,23 @@ const noopLogger = {
35
35
  warn: () => {},
36
36
  error: () => {}
37
37
  };
38
- //#endregion
39
- //#region src/browser/app-connect-controller/utils/timeout-utils.ts
40
- function delay(ms) {
41
- if (ms <= 0) return Promise.resolve();
42
- return new Promise((resolve) => {
43
- setTimeout(resolve, ms);
44
- });
45
- }
46
- //#endregion
47
- //#region src/browser/app-connect-controller/connect-start.ts
48
- /** Extra wait before redirect so the connect progress UI is visible; set to `0` to disable. */
49
- const ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS = 500;
50
38
  /**
51
- * Begins the OAuth connect flow:
52
- *
53
- * 1. Calls the SDK's `auth/init-session` route to mint a fresh PKCE
54
- * verifier + state and obtain HubSpot's `authorize` URL.
55
- * 2. Navigates the browser to that URL (full-page redirect).
56
- *
57
- * The `return_path` is the current path + query so the user lands
58
- * back where they started after authorizing.
59
- *
60
- * Throws when the init call fails. Does not return after the redirect
61
- * begins because the page is unloaded.
39
+ * Query parameter on the `auth/complete` POST request carrying the
40
+ * authorization `code` HubSpot returned to the frontend callback.
62
41
  */
63
- async function startHubSpotConnection(context) {
64
- const { config } = context;
65
- const returnPath = `${window.location.pathname}${window.location.search}`;
66
- const initUrl = new URL(`${config.hubSpotConnectBaseUrl}/auth/init-session`, window.location.origin);
67
- initUrl.searchParams.set("return_path", returnPath);
68
- const initResponse = await fetch(initUrl.toString(), { credentials: "include" });
69
- if (!initResponse.ok) throw new Error(`Failed to init session: ${initResponse.status}`);
70
- const { authorization_url: authorizationUrl } = await initResponse.json();
71
- await delay(ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS);
72
- window.location.href = authorizationUrl;
73
- }
74
- //#endregion
75
- //#region src/browser/app-connect-controller/default-session-storage.ts
42
+ const AUTH_COMPLETE_CODE_PARAM = "code";
76
43
  /**
77
- * Builds a `SessionStorage` adapter that delegates to the global
78
- * `sessionStorage` object exposed by browsers. The controller uses
79
- * this when no custom storage is supplied (e.g. for tests or non-DOM
80
- * environments).
44
+ * Query parameter on the `auth/complete` POST request carrying the
45
+ * OAuth `state` HubSpot echoed back to the frontend callback.
81
46
  */
82
- function createDefaultSessionStorage() {
83
- return {
84
- setItem: (key, value) => {
85
- sessionStorage.setItem(key, value);
86
- },
87
- getItem: (key) => {
88
- return sessionStorage.getItem(key);
89
- },
90
- removeItem: (key) => {
91
- sessionStorage.removeItem(key);
92
- }
93
- };
94
- }
95
- //#endregion
96
- //#region src/shared/constants.ts
47
+ const AUTH_COMPLETE_STATE_PARAM = "state";
97
48
  /**
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.
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`.
101
53
  */
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";
54
+ const OAUTH_POPUP_CALLBACK_MESSAGE_TYPE = "hubspot-app-connect:oauth-callback";
109
55
  //#endregion
110
56
  //#region src/browser/app-connect-controller/constants.ts
111
57
  /**
@@ -167,6 +113,232 @@ function isClientSessionActive(context) {
167
113
  return expiresAt !== null && Date.now() < expiresAt;
168
114
  }
169
115
  //#endregion
116
+ //#region src/browser/app-connect-controller/oauth-complete.ts
117
+ /**
118
+ * Finishes the OAuth token exchange by POSTing `code` and `state` to the
119
+ * SDK's `auth/complete` route with credentialed cookies from the current
120
+ * browsing context (must match the partition used by `auth/init-session`).
121
+ */
122
+ async function completeHubSpotOAuthSession(context, options) {
123
+ const { code, state } = options;
124
+ const completeUrl = new URL(`${context.config.hubSpotConnectBaseUrl}/auth/complete`, window.location.origin);
125
+ completeUrl.searchParams.set(AUTH_COMPLETE_CODE_PARAM, code);
126
+ completeUrl.searchParams.set(AUTH_COMPLETE_STATE_PARAM, state);
127
+ let response;
128
+ try {
129
+ response = await fetch(completeUrl.toString(), {
130
+ method: "POST",
131
+ credentials: "include"
132
+ });
133
+ } catch (err) {
134
+ clearSessionStorage(context);
135
+ throw new Error(`Failed to complete HubSpot OAuth: ${err instanceof Error ? err.message : String(err)}`);
136
+ }
137
+ if (!response.ok) {
138
+ clearSessionStorage(context);
139
+ throw new Error(`Failed to complete HubSpot OAuth: ${response.status} ${response.statusText}`);
140
+ }
141
+ return await response.json();
142
+ }
143
+ //#endregion
144
+ //#region src/browser/app-connect-controller/oauth-popup.ts
145
+ const OAUTH_POPUP_WINDOW_NAME = "hubspot-app-connect-oauth";
146
+ const OAUTH_POPUP_POLL_INTERVAL_MS = 300;
147
+ function isOAuthPopupCallbackMessage(data) {
148
+ if (typeof data !== "object" || data === null) return false;
149
+ const record = data;
150
+ return record.type === "hubspot-app-connect:oauth-callback" && typeof record.code === "string" && record.code.length > 0 && typeof record.state === "string" && record.state.length > 0;
151
+ }
152
+ /**
153
+ * Opens HubSpot's authorize URL in a popup and waits for the callback
154
+ * page to relay `code` + `state` back. The opener POSTs to
155
+ * `auth/complete` so credentialed cookies use the same CHIPS partition
156
+ * as `auth/init-session`.
157
+ */
158
+ async function waitForHubSpotOAuthPopup(options) {
159
+ const { context, authorizationUrl } = options;
160
+ const targetOrigin = window.location.origin;
161
+ return new Promise((resolve, reject) => {
162
+ let popup = null;
163
+ let pollTimer;
164
+ let isSettled = false;
165
+ let isCallbackReceived = false;
166
+ const cleanup = () => {
167
+ window.removeEventListener("message", onMessage);
168
+ if (pollTimer !== void 0) clearInterval(pollTimer);
169
+ };
170
+ const settleSuccess = (expiresAtMs) => {
171
+ if (isSettled) return;
172
+ isSettled = true;
173
+ cleanup();
174
+ storeExpiresAt({
175
+ context,
176
+ expiresAtMs
177
+ });
178
+ context.store.setState({
179
+ isSessionConnected: true,
180
+ error: null
181
+ });
182
+ resolve();
183
+ };
184
+ const settleFailure = (message) => {
185
+ if (isSettled) return;
186
+ isSettled = true;
187
+ cleanup();
188
+ try {
189
+ popup?.close();
190
+ } catch {}
191
+ reject(new Error(message));
192
+ };
193
+ const onMessage = (event) => {
194
+ if (event.origin !== targetOrigin) return;
195
+ if (!isOAuthPopupCallbackMessage(event.data)) return;
196
+ if (isCallbackReceived) return;
197
+ isCallbackReceived = true;
198
+ (async () => {
199
+ try {
200
+ settleSuccess((await completeHubSpotOAuthSession(context, {
201
+ code: event.data.code,
202
+ state: event.data.state
203
+ })).expires_at);
204
+ } catch (err) {
205
+ settleFailure(err instanceof Error ? err.message : "HubSpot OAuth failed");
206
+ }
207
+ })();
208
+ };
209
+ window.addEventListener("message", onMessage);
210
+ popup = window.open(authorizationUrl, OAUTH_POPUP_WINDOW_NAME, "popup=yes,width=600,height=700");
211
+ if (!popup) {
212
+ settleFailure("Popup blocked. Allow popups for this site and try again.");
213
+ return;
214
+ }
215
+ pollTimer = setInterval(() => {
216
+ if (popup?.closed && !isCallbackReceived) settleFailure("Connect to HubSpot was cancelled.");
217
+ }, OAUTH_POPUP_POLL_INTERVAL_MS);
218
+ });
219
+ }
220
+ /**
221
+ * Called from the OAuth callback page inside the popup. Relays `code`
222
+ * and `state` to the opener (which runs `auth/complete`) and closes.
223
+ */
224
+ function relayOAuthCallbackToOpener(options) {
225
+ const { code, state } = options;
226
+ const opener = window.opener;
227
+ if (!opener || opener.closed) return false;
228
+ const message = {
229
+ type: OAUTH_POPUP_CALLBACK_MESSAGE_TYPE,
230
+ code,
231
+ state
232
+ };
233
+ opener.postMessage(message, window.location.origin);
234
+ try {
235
+ window.close();
236
+ } catch {}
237
+ return true;
238
+ }
239
+ function hasOAuthPopupOpener() {
240
+ try {
241
+ return Boolean(window.opener && !window.opener.closed);
242
+ } catch {
243
+ return false;
244
+ }
245
+ }
246
+ function isOAuthPopupCallback() {
247
+ return window.name === "hubspot-app-connect-oauth" && hasOAuthPopupOpener();
248
+ }
249
+ //#endregion
250
+ //#region src/browser/app-connect-controller/utils/iframe-utils.ts
251
+ /**
252
+ * Returns `true` when the app runs inside a parent frame (same-origin
253
+ * or cross-origin). Cross-origin parent access throws; treat that as
254
+ * embedded so OAuth uses a popup instead of a top-level redirect.
255
+ */
256
+ function isAppEmbeddedInIframe() {
257
+ try {
258
+ return window.self !== window.top;
259
+ } catch {
260
+ return true;
261
+ }
262
+ }
263
+ //#endregion
264
+ //#region src/browser/app-connect-controller/utils/resolve-oauth-connect-mode.ts
265
+ /**
266
+ * Maps the configured {@link OAuthConnectMode} to the concrete connect
267
+ * behavior for the current browsing context.
268
+ */
269
+ function resolveOAuthConnectMode(options) {
270
+ const mode = options.oauthConnectMode ?? "auto";
271
+ if (mode === "popup") return "popup";
272
+ if (mode === "redirect") return "redirect";
273
+ return isAppEmbeddedInIframe() ? "popup" : "redirect";
274
+ }
275
+ //#endregion
276
+ //#region src/browser/app-connect-controller/utils/timeout-utils.ts
277
+ function delay(ms) {
278
+ if (ms <= 0) return Promise.resolve();
279
+ return new Promise((resolve) => {
280
+ setTimeout(resolve, ms);
281
+ });
282
+ }
283
+ //#endregion
284
+ //#region src/browser/app-connect-controller/connect-start.ts
285
+ /** Extra wait before redirect so the connect progress UI is visible; set to `0` to disable. */
286
+ const ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS = 500;
287
+ /**
288
+ * Begins the OAuth connect flow:
289
+ *
290
+ * 1. Calls the SDK's `auth/init-session` route to mint a fresh PKCE
291
+ * verifier + state and obtain HubSpot's `authorize` URL.
292
+ * 2. Navigates to that URL via full-page redirect, or opens it in a
293
+ * popup when embedded in an iframe or when `oauthConnectMode` is
294
+ * `'popup'`.
295
+ *
296
+ * The `return_path` is the current path + query so the user lands
297
+ * back where they started after authorizing (redirect mode only).
298
+ *
299
+ * Throws when the init call fails. Does not return after a redirect
300
+ * begins because the page is unloaded.
301
+ */
302
+ async function startHubSpotConnection(context) {
303
+ const { config } = context;
304
+ const returnPath = `${window.location.pathname}${window.location.search}`;
305
+ const initUrl = new URL(`${config.hubSpotConnectBaseUrl}/auth/init-session`, window.location.origin);
306
+ initUrl.searchParams.set("return_path", returnPath);
307
+ const initResponse = await fetch(initUrl.toString(), { credentials: "include" });
308
+ if (!initResponse.ok) throw new Error(`Failed to init session: ${initResponse.status}`);
309
+ const { authorization_url: authorizationUrl } = await initResponse.json();
310
+ await delay(ARTIFICIAL_CONNECT_REDIRECT_DELAY_MS);
311
+ if (resolveOAuthConnectMode(config.oauthConnectMode !== void 0 ? { oauthConnectMode: config.oauthConnectMode } : {}) === "popup") {
312
+ await waitForHubSpotOAuthPopup({
313
+ context,
314
+ authorizationUrl
315
+ });
316
+ return;
317
+ }
318
+ window.location.href = authorizationUrl;
319
+ }
320
+ //#endregion
321
+ //#region src/browser/app-connect-controller/default-session-storage.ts
322
+ /**
323
+ * Builds a `SessionStorage` adapter that delegates to the global
324
+ * `sessionStorage` object exposed by browsers. The controller uses
325
+ * this when no custom storage is supplied (e.g. for tests or non-DOM
326
+ * environments).
327
+ */
328
+ function createDefaultSessionStorage() {
329
+ return {
330
+ setItem: (key, value) => {
331
+ sessionStorage.setItem(key, value);
332
+ },
333
+ getItem: (key) => {
334
+ return sessionStorage.getItem(key);
335
+ },
336
+ removeItem: (key) => {
337
+ sessionStorage.removeItem(key);
338
+ }
339
+ };
340
+ }
341
+ //#endregion
170
342
  //#region src/browser/app-connect-controller/disconnect.ts
171
343
  /**
172
344
  * Disconnect flow:
@@ -174,8 +346,8 @@ function isClientSessionActive(context) {
174
346
  * 1. Calls the SDK's `auth/logout` route to revoke the upstream token
175
347
  * and clear the refresh-token cookie.
176
348
  * 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`.
349
+ * 3. Updates the controller state to `disconnected` so the UI re-renders
350
+ * without a page reload.
179
351
  *
180
352
  * Errors are caught, logged, and surfaced via the controller's
181
353
  * `error` field so the UI can show a retry state.
@@ -195,14 +367,13 @@ async function disconnectFromHubSpot(context) {
195
367
  credentials: "include"
196
368
  });
197
369
  if (!response.ok) throw new Error(`Logout failed: ${response.status}`);
198
- const { redirect_to: redirectTo } = await response.json();
370
+ await response.body?.cancel();
199
371
  store.setState({
200
372
  expiresAt: null,
201
373
  isSessionConnected: false,
202
374
  isDisconnectInFlight: false
203
375
  });
204
- window.location.href = redirectTo;
205
- logger.info("disconnectFromHubSpot: redirecting");
376
+ logger.info("disconnectFromHubSpot: complete");
206
377
  } catch (err) {
207
378
  const message = err instanceof Error ? err.message : "Disconnect failed";
208
379
  logger.error("disconnectFromHubSpot: failed", err);
@@ -215,25 +386,45 @@ async function disconnectFromHubSpot(context) {
215
386
  //#endregion
216
387
  //#region src/browser/app-connect-controller/init.ts
217
388
  /**
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.
389
+ * On `controller.start()`:
390
+ *
391
+ * 1. If the browser has been redirected back to the SDK's frontend
392
+ * OAuth callback path (`/__hubspot_oauth_callback`) with `?code` +
393
+ * `?state`:
394
+ * - **Redirect flow** (no `window.opener`): POST to `auth/complete`
395
+ * from this window, persist `expires_at`, and `history.replaceState`
396
+ * to `return_path`.
397
+ * - **Popup flow** (`window.opener` present): relay `code` + `state`
398
+ * to the opener via `postMessage` and close. The opener POSTs to
399
+ * `auth/complete` so partitioned cookies match `init-session`.
400
+ * 2. Pick up `?__hs_expires_at` from `window.location` (refresh hop),
401
+ * persist it, and strip it from the address bar.
221
402
  *
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).
403
+ * A no-op when neither set of parameters is present.
225
404
  */
226
405
  async function initAppConnect(context) {
406
+ await consumeOAuthCallback(context);
407
+ }
408
+ async function consumeOAuthCallback(context) {
409
+ if (window.location.pathname !== "/__hubspot_oauth_callback") return;
227
410
  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));
411
+ const code = params.get(AUTH_COMPLETE_CODE_PARAM);
412
+ const state = params.get(AUTH_COMPLETE_STATE_PARAM);
413
+ if (!code || !state) return;
414
+ if (isOAuthPopupCallback() && relayOAuthCallbackToOpener({
415
+ code,
416
+ state
417
+ })) return;
418
+ const { expires_at: expiresAt, return_path: returnPath } = await completeHubSpotOAuthSession(context, {
419
+ code,
420
+ state
421
+ });
422
+ storeExpiresAt({
423
+ context,
424
+ expiresAtMs: expiresAt
425
+ });
426
+ const targetUrl = new URL(returnPath, window.location.origin);
427
+ history.replaceState(null, "", `${targetUrl.pathname}${targetUrl.search}${targetUrl.hash}`);
237
428
  }
238
429
  //#endregion
239
430
  //#region src/browser/app-connect-controller/refresh.ts
@@ -514,4 +705,4 @@ function createAppConnectController(options) {
514
705
  //#endregion
515
706
  export { createLogger as n, createAppConnectController as t };
516
707
 
517
- //# sourceMappingURL=create-vctOhpX9.js.map
708
+ //# sourceMappingURL=create-BNQazCF-.js.map