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

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 (532) hide show
  1. package/.turbo/turbo-tsdown.log +41 -510
  2. package/build/tsconfig.browser.tsbuildinfo +1 -1
  3. package/build/tsconfig.server.tsbuildinfo +1 -1
  4. package/dist/browser/{HubSpotAppConnect-BW45gyDs.js → HubSpotAppConnect-COQgPrFn.js} +5 -3
  5. package/dist/browser/HubSpotAppConnect-COQgPrFn.js.map +1 -0
  6. package/dist/browser/{create-vctOhpX9.js → create-hzqjIhmO.js} +54 -25
  7. package/dist/browser/create-hzqjIhmO.js.map +1 -0
  8. package/dist/browser/index.js +1 -1
  9. package/dist/browser/react/lovable.js +2 -2
  10. package/dist/browser/react.js +1 -1
  11. package/dist/server/api-client.d.ts +60625 -197
  12. package/dist/server/api-client.js +5826 -100
  13. package/dist/server/api-client.js.map +1 -0
  14. package/dist/server/{api-client-core/client.js → binary-data-BOalJzKu.js} +58 -3
  15. package/dist/server/binary-data-BOalJzKu.js.map +1 -0
  16. package/dist/server/lovable.d.ts +117 -6
  17. package/dist/server/lovable.js +1458 -3
  18. package/dist/server/lovable.js.map +1 -0
  19. package/dist/server/oauth.d.ts +128 -6
  20. package/dist/server/oauth.js +1 -4
  21. package/dist/server/sha256-B7y8GBFB.js +228 -0
  22. package/dist/server/sha256-B7y8GBFB.js.map +1 -0
  23. package/dist/server/{types.d.ts → types-5gfN91Fq.d.ts} +2 -2
  24. package/dist/server/{api-client-core/types.d.ts → types-DEOUH4wE.d.ts} +2 -2
  25. package/package.json +4 -10
  26. package/src/browser/app-connect-controller/connect-start.ts +2 -1
  27. package/src/browser/app-connect-controller/init.test.ts +167 -0
  28. package/src/browser/app-connect-controller/init.ts +70 -19
  29. package/src/browser/react/components/AppConnectHeader/AppConnectHeader.tsx +3 -5
  30. package/src/browser/react/components/ConnectButton/ConnectButton.tsx +2 -1
  31. package/src/server/api-client-core/plugins/fetch-transport.ts +5 -1
  32. package/src/server/constants.ts +29 -4
  33. package/src/server/hono/hono-request-handler.ts +42 -15
  34. package/src/server/hono/hubspot-connect-routes/auth-complete.test.ts +285 -0
  35. package/src/server/hono/hubspot-connect-routes/{auth-callback.ts → auth-complete.ts} +73 -30
  36. package/src/server/hono/hubspot-connect-routes/auth-init-session.test.ts +114 -30
  37. package/src/server/hono/hubspot-connect-routes/auth-init-session.ts +33 -10
  38. package/src/server/hono/hubspot-connect-routes/auth-logout.test.ts +13 -0
  39. package/src/server/hono/hubspot-connect-routes/auth-logout.ts +18 -0
  40. package/src/server/hono/hubspot-connect-routes/auth-refresh.test.ts +6 -0
  41. package/src/server/hono/hubspot-connect-routes/auth-refresh.ts +6 -0
  42. package/src/server/hono/hubspot-connect-routes/hubspot-connect-routes.ts +9 -2
  43. package/src/server/hono/hubspot-connect-routes/utils.ts +57 -1
  44. package/src/server/hono/types.ts +15 -9
  45. package/src/server/hono/utils/cookie-utils.ts +27 -2
  46. package/src/server/hono/utils/cors-middleware.test.ts +79 -0
  47. package/src/server/hono/utils/cors-middleware.ts +95 -0
  48. package/src/server/sanitize-request.ts +25 -11
  49. package/src/server/types.ts +2 -2
  50. package/src/shared/constants.ts +31 -3
  51. package/src/shared/wire-types.ts +19 -0
  52. package/tsdown.config.ts +1 -1
  53. package/.turbo/turbo-format$colon$check.log +0 -4
  54. package/.turbo/turbo-lint.log +0 -2
  55. package/.turbo/turbo-test.log +0 -76
  56. package/dist/browser/HubSpotAppConnect-BW45gyDs.js.map +0 -1
  57. package/dist/browser/create-vctOhpX9.js.map +0 -1
  58. package/dist/server/api-client-core/apis/account/account-info-types.generated.d.ts +0 -111
  59. package/dist/server/api-client-core/apis/account/account-info.generated.d.ts +0 -7
  60. package/dist/server/api-client-core/apis/account/account-info.generated.js +0 -9
  61. package/dist/server/api-client-core/apis/account/account-info.generated.js.map +0 -1
  62. package/dist/server/api-client-core/apis/account/audit-logs-types.generated.d.ts +0 -247
  63. package/dist/server/api-client-core/apis/account/audit-logs.generated.d.ts +0 -7
  64. package/dist/server/api-client-core/apis/account/audit-logs.generated.js +0 -28
  65. package/dist/server/api-client-core/apis/account/audit-logs.generated.js.map +0 -1
  66. package/dist/server/api-client-core/apis/auth/oauth-types.generated.d.ts +0 -121
  67. package/dist/server/api-client-core/apis/auth/oauth.generated.d.ts +0 -7
  68. package/dist/server/api-client-core/apis/auth/oauth.generated.js +0 -19
  69. package/dist/server/api-client-core/apis/auth/oauth.generated.js.map +0 -1
  70. package/dist/server/api-client-core/apis/automation/actions-types.generated.d.ts +0 -933
  71. package/dist/server/api-client-core/apis/automation/actions.generated.d.ts +0 -7
  72. package/dist/server/api-client-core/apis/automation/actions.generated.js +0 -121
  73. package/dist/server/api-client-core/apis/automation/actions.generated.js.map +0 -1
  74. package/dist/server/api-client-core/apis/automation/sequences-types.generated.d.ts +0 -422
  75. package/dist/server/api-client-core/apis/automation/sequences.generated.d.ts +0 -7
  76. package/dist/server/api-client-core/apis/automation/sequences.generated.js +0 -22
  77. package/dist/server/api-client-core/apis/automation/sequences.generated.js.map +0 -1
  78. package/dist/server/api-client-core/apis/business-units-types.generated.d.ts +0 -75
  79. package/dist/server/api-client-core/apis/business-units.generated.d.ts +0 -7
  80. package/dist/server/api-client-core/apis/business-units.generated.js +0 -12
  81. package/dist/server/api-client-core/apis/business-units.generated.js.map +0 -1
  82. package/dist/server/api-client-core/apis/cms/authors-types.generated.d.ts +0 -551
  83. package/dist/server/api-client-core/apis/cms/authors.generated.d.ts +0 -7
  84. package/dist/server/api-client-core/apis/cms/authors.generated.js +0 -163
  85. package/dist/server/api-client-core/apis/cms/authors.generated.js.map +0 -1
  86. package/dist/server/api-client-core/apis/cms/blog-settings-types.generated.d.ts +0 -366
  87. package/dist/server/api-client-core/apis/cms/blog-settings.generated.d.ts +0 -7
  88. package/dist/server/api-client-core/apis/cms/blog-settings.generated.js +0 -43
  89. package/dist/server/api-client-core/apis/cms/blog-settings.generated.js.map +0 -1
  90. package/dist/server/api-client-core/apis/cms/cms-content-audit-types.generated.d.ts +0 -157
  91. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.d.ts +0 -7
  92. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js +0 -18
  93. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js.map +0 -1
  94. package/dist/server/api-client-core/apis/cms/domains-types.generated.d.ts +0 -193
  95. package/dist/server/api-client-core/apis/cms/domains.generated.d.ts +0 -7
  96. package/dist/server/api-client-core/apis/cms/domains.generated.js +0 -20
  97. package/dist/server/api-client-core/apis/cms/domains.generated.js.map +0 -1
  98. package/dist/server/api-client-core/apis/cms/hubdb-types.generated.d.ts +0 -1097
  99. package/dist/server/api-client-core/apis/cms/hubdb.generated.d.ts +0 -7
  100. package/dist/server/api-client-core/apis/cms/hubdb.generated.js +0 -192
  101. package/dist/server/api-client-core/apis/cms/hubdb.generated.js.map +0 -1
  102. package/dist/server/api-client-core/apis/cms/media-bridge-types.generated.d.ts +0 -1780
  103. package/dist/server/api-client-core/apis/cms/media-bridge.generated.d.ts +0 -7
  104. package/dist/server/api-client-core/apis/cms/media-bridge.generated.js +0 -185
  105. package/dist/server/api-client-core/apis/cms/media-bridge.generated.js.map +0 -1
  106. package/dist/server/api-client-core/apis/cms/pages-types.generated.d.ts +0 -1768
  107. package/dist/server/api-client-core/apis/cms/pages.generated.d.ts +0 -7
  108. package/dist/server/api-client-core/apis/cms/pages.generated.js +0 -331
  109. package/dist/server/api-client-core/apis/cms/pages.generated.js.map +0 -1
  110. package/dist/server/api-client-core/apis/cms/posts-types.generated.d.ts +0 -1090
  111. package/dist/server/api-client-core/apis/cms/posts.generated.d.ts +0 -7
  112. package/dist/server/api-client-core/apis/cms/posts.generated.js +0 -201
  113. package/dist/server/api-client-core/apis/cms/posts.generated.js.map +0 -1
  114. package/dist/server/api-client-core/apis/cms/site-search-types.generated.d.ts +0 -200
  115. package/dist/server/api-client-core/apis/cms/site-search.generated.d.ts +0 -7
  116. package/dist/server/api-client-core/apis/cms/site-search.generated.js +0 -32
  117. package/dist/server/api-client-core/apis/cms/site-search.generated.js.map +0 -1
  118. package/dist/server/api-client-core/apis/cms/source-code-types.generated.d.ts +0 -218
  119. package/dist/server/api-client-core/apis/cms/source-code.generated.d.ts +0 -7
  120. package/dist/server/api-client-core/apis/cms/source-code.generated.js +0 -52
  121. package/dist/server/api-client-core/apis/cms/source-code.generated.js.map +0 -1
  122. package/dist/server/api-client-core/apis/cms/tags-types.generated.d.ts +0 -515
  123. package/dist/server/api-client-core/apis/cms/tags.generated.d.ts +0 -7
  124. package/dist/server/api-client-core/apis/cms/tags.generated.js +0 -163
  125. package/dist/server/api-client-core/apis/cms/tags.generated.js.map +0 -1
  126. package/dist/server/api-client-core/apis/cms/url-mappings-types.generated.d.ts +0 -177
  127. package/dist/server/api-client-core/apis/cms/url-mappings.generated.d.ts +0 -7
  128. package/dist/server/api-client-core/apis/cms/url-mappings.generated.js +0 -14
  129. package/dist/server/api-client-core/apis/cms/url-mappings.generated.js.map +0 -1
  130. package/dist/server/api-client-core/apis/cms/url-redirects-types.generated.d.ts +0 -226
  131. package/dist/server/api-client-core/apis/cms/url-redirects.generated.d.ts +0 -7
  132. package/dist/server/api-client-core/apis/cms/url-redirects.generated.js +0 -26
  133. package/dist/server/api-client-core/apis/cms/url-redirects.generated.js.map +0 -1
  134. package/dist/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.d.ts +0 -802
  135. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.d.ts +0 -7
  136. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js +0 -74
  137. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js.map +0 -1
  138. package/dist/server/api-client-core/apis/conversations/custom-channels-types.generated.d.ts +0 -551
  139. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.d.ts +0 -7
  140. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js +0 -80
  141. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js.map +0 -1
  142. package/dist/server/api-client-core/apis/conversations/visitor-identification-types.generated.d.ts +0 -60
  143. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.d.ts +0 -7
  144. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js +0 -6
  145. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js.map +0 -1
  146. package/dist/server/api-client-core/apis/conversations-types.generated.d.ts +0 -908
  147. package/dist/server/api-client-core/apis/conversations.generated.d.ts +0 -7
  148. package/dist/server/api-client-core/apis/conversations.generated.js +0 -108
  149. package/dist/server/api-client-core/apis/conversations.generated.js.map +0 -1
  150. package/dist/server/api-client-core/apis/crm/app-uninstalls-types.generated.d.ts +0 -37
  151. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.d.ts +0 -7
  152. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js +0 -6
  153. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js.map +0 -1
  154. package/dist/server/api-client-core/apis/crm/appointments-types.generated.d.ts +0 -989
  155. package/dist/server/api-client-core/apis/crm/appointments.generated.d.ts +0 -7
  156. package/dist/server/api-client-core/apis/crm/appointments.generated.js +0 -118
  157. package/dist/server/api-client-core/apis/crm/appointments.generated.js.map +0 -1
  158. package/dist/server/api-client-core/apis/crm/associations-schema-types.generated.d.ts +0 -329
  159. package/dist/server/api-client-core/apis/crm/associations-schema.generated.d.ts +0 -7
  160. package/dist/server/api-client-core/apis/crm/associations-schema.generated.js +0 -60
  161. package/dist/server/api-client-core/apis/crm/associations-schema.generated.js.map +0 -1
  162. package/dist/server/api-client-core/apis/crm/associations-types.generated.d.ts +0 -661
  163. package/dist/server/api-client-core/apis/crm/associations.generated.d.ts +0 -7
  164. package/dist/server/api-client-core/apis/crm/associations.generated.js +0 -83
  165. package/dist/server/api-client-core/apis/crm/associations.generated.js.map +0 -1
  166. package/dist/server/api-client-core/apis/crm/calling-extensions-types.generated.d.ts +0 -466
  167. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.d.ts +0 -7
  168. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js +0 -42
  169. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js.map +0 -1
  170. package/dist/server/api-client-core/apis/crm/calls-types.generated.d.ts +0 -850
  171. package/dist/server/api-client-core/apis/crm/calls.generated.d.ts +0 -7
  172. package/dist/server/api-client-core/apis/crm/calls.generated.js +0 -66
  173. package/dist/server/api-client-core/apis/crm/calls.generated.js.map +0 -1
  174. package/dist/server/api-client-core/apis/crm/carts-types.generated.d.ts +0 -850
  175. package/dist/server/api-client-core/apis/crm/carts.generated.d.ts +0 -7
  176. package/dist/server/api-client-core/apis/crm/carts.generated.js +0 -66
  177. package/dist/server/api-client-core/apis/crm/carts.generated.js.map +0 -1
  178. package/dist/server/api-client-core/apis/crm/commerce-payments-types.generated.d.ts +0 -850
  179. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.d.ts +0 -7
  180. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js +0 -66
  181. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js.map +0 -1
  182. package/dist/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.d.ts +0 -847
  183. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.d.ts +0 -7
  184. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js +0 -66
  185. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js.map +0 -1
  186. package/dist/server/api-client-core/apis/crm/communications-types.generated.d.ts +0 -850
  187. package/dist/server/api-client-core/apis/crm/communications.generated.d.ts +0 -7
  188. package/dist/server/api-client-core/apis/crm/communications.generated.js +0 -66
  189. package/dist/server/api-client-core/apis/crm/communications.generated.js.map +0 -1
  190. package/dist/server/api-client-core/apis/crm/companies-types.generated.d.ts +0 -884
  191. package/dist/server/api-client-core/apis/crm/companies.generated.d.ts +0 -7
  192. package/dist/server/api-client-core/apis/crm/companies.generated.js +0 -67
  193. package/dist/server/api-client-core/apis/crm/companies.generated.js.map +0 -1
  194. package/dist/server/api-client-core/apis/crm/contacts-types.generated.d.ts +0 -899
  195. package/dist/server/api-client-core/apis/crm/contacts.generated.d.ts +0 -7
  196. package/dist/server/api-client-core/apis/crm/contacts.generated.js +0 -70
  197. package/dist/server/api-client-core/apis/crm/contacts.generated.js.map +0 -1
  198. package/dist/server/api-client-core/apis/crm/contracts-types.generated.d.ts +0 -850
  199. package/dist/server/api-client-core/apis/crm/contracts.generated.d.ts +0 -7
  200. package/dist/server/api-client-core/apis/crm/contracts.generated.js +0 -66
  201. package/dist/server/api-client-core/apis/crm/contracts.generated.js.map +0 -1
  202. package/dist/server/api-client-core/apis/crm/courses-types.generated.d.ts +0 -853
  203. package/dist/server/api-client-core/apis/crm/courses.generated.d.ts +0 -7
  204. package/dist/server/api-client-core/apis/crm/courses.generated.js +0 -66
  205. package/dist/server/api-client-core/apis/crm/courses.generated.js.map +0 -1
  206. package/dist/server/api-client-core/apis/crm/crm-owners-types.generated.d.ts +0 -140
  207. package/dist/server/api-client-core/apis/crm/crm-owners.generated.d.ts +0 -7
  208. package/dist/server/api-client-core/apis/crm/crm-owners.generated.js +0 -20
  209. package/dist/server/api-client-core/apis/crm/crm-owners.generated.js.map +0 -1
  210. package/dist/server/api-client-core/apis/crm/custom-objects-types.generated.d.ts +0 -934
  211. package/dist/server/api-client-core/apis/crm/custom-objects.generated.d.ts +0 -7
  212. package/dist/server/api-client-core/apis/crm/custom-objects.generated.js +0 -101
  213. package/dist/server/api-client-core/apis/crm/custom-objects.generated.js.map +0 -1
  214. package/dist/server/api-client-core/apis/crm/deal-splits-types.generated.d.ts +0 -196
  215. package/dist/server/api-client-core/apis/crm/deal-splits.generated.d.ts +0 -7
  216. package/dist/server/api-client-core/apis/crm/deal-splits.generated.js +0 -9
  217. package/dist/server/api-client-core/apis/crm/deal-splits.generated.js.map +0 -1
  218. package/dist/server/api-client-core/apis/crm/deals-types.generated.d.ts +0 -872
  219. package/dist/server/api-client-core/apis/crm/deals.generated.d.ts +0 -7
  220. package/dist/server/api-client-core/apis/crm/deals.generated.js +0 -67
  221. package/dist/server/api-client-core/apis/crm/deals.generated.js.map +0 -1
  222. package/dist/server/api-client-core/apis/crm/discounts-types.generated.d.ts +0 -846
  223. package/dist/server/api-client-core/apis/crm/discounts.generated.d.ts +0 -7
  224. package/dist/server/api-client-core/apis/crm/discounts.generated.js +0 -66
  225. package/dist/server/api-client-core/apis/crm/discounts.generated.js.map +0 -1
  226. package/dist/server/api-client-core/apis/crm/emails-types.generated.d.ts +0 -850
  227. package/dist/server/api-client-core/apis/crm/emails.generated.d.ts +0 -7
  228. package/dist/server/api-client-core/apis/crm/emails.generated.js +0 -66
  229. package/dist/server/api-client-core/apis/crm/emails.generated.js.map +0 -1
  230. package/dist/server/api-client-core/apis/crm/exports-types.generated.d.ts +0 -281
  231. package/dist/server/api-client-core/apis/crm/exports.generated.d.ts +0 -7
  232. package/dist/server/api-client-core/apis/crm/exports.generated.js +0 -12
  233. package/dist/server/api-client-core/apis/crm/exports.generated.js.map +0 -1
  234. package/dist/server/api-client-core/apis/crm/feedback-submissions-types.generated.d.ts +0 -616
  235. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.d.ts +0 -7
  236. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js +0 -55
  237. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js.map +0 -1
  238. package/dist/server/api-client-core/apis/crm/fees-types.generated.d.ts +0 -850
  239. package/dist/server/api-client-core/apis/crm/fees.generated.d.ts +0 -7
  240. package/dist/server/api-client-core/apis/crm/fees.generated.js +0 -66
  241. package/dist/server/api-client-core/apis/crm/fees.generated.js.map +0 -1
  242. package/dist/server/api-client-core/apis/crm/goal-targets-types.generated.d.ts +0 -850
  243. package/dist/server/api-client-core/apis/crm/goal-targets.generated.d.ts +0 -7
  244. package/dist/server/api-client-core/apis/crm/goal-targets.generated.js +0 -66
  245. package/dist/server/api-client-core/apis/crm/goal-targets.generated.js.map +0 -1
  246. package/dist/server/api-client-core/apis/crm/imports-types.generated.d.ts +0 -371
  247. package/dist/server/api-client-core/apis/crm/imports.generated.d.ts +0 -7
  248. package/dist/server/api-client-core/apis/crm/imports.generated.js +0 -30
  249. package/dist/server/api-client-core/apis/crm/imports.generated.js.map +0 -1
  250. package/dist/server/api-client-core/apis/crm/invoices-types.generated.d.ts +0 -850
  251. package/dist/server/api-client-core/apis/crm/invoices.generated.d.ts +0 -7
  252. package/dist/server/api-client-core/apis/crm/invoices.generated.js +0 -66
  253. package/dist/server/api-client-core/apis/crm/invoices.generated.js.map +0 -1
  254. package/dist/server/api-client-core/apis/crm/leads-types.generated.d.ts +0 -850
  255. package/dist/server/api-client-core/apis/crm/leads.generated.d.ts +0 -7
  256. package/dist/server/api-client-core/apis/crm/leads.generated.js +0 -66
  257. package/dist/server/api-client-core/apis/crm/leads.generated.js.map +0 -1
  258. package/dist/server/api-client-core/apis/crm/limits-tracking-types.generated.d.ts +0 -331
  259. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.d.ts +0 -7
  260. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js +0 -22
  261. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js.map +0 -1
  262. package/dist/server/api-client-core/apis/crm/line-items-types.generated.d.ts +0 -850
  263. package/dist/server/api-client-core/apis/crm/line-items.generated.d.ts +0 -7
  264. package/dist/server/api-client-core/apis/crm/line-items.generated.js +0 -66
  265. package/dist/server/api-client-core/apis/crm/line-items.generated.js.map +0 -1
  266. package/dist/server/api-client-core/apis/crm/listings-types.generated.d.ts +0 -853
  267. package/dist/server/api-client-core/apis/crm/listings.generated.d.ts +0 -7
  268. package/dist/server/api-client-core/apis/crm/listings.generated.js +0 -66
  269. package/dist/server/api-client-core/apis/crm/listings.generated.js.map +0 -1
  270. package/dist/server/api-client-core/apis/crm/lists-types.generated.d.ts +0 -2265
  271. package/dist/server/api-client-core/apis/crm/lists.generated.d.ts +0 -7
  272. package/dist/server/api-client-core/apis/crm/lists.generated.js +0 -105
  273. package/dist/server/api-client-core/apis/crm/lists.generated.js.map +0 -1
  274. package/dist/server/api-client-core/apis/crm/meetings-types.generated.d.ts +0 -850
  275. package/dist/server/api-client-core/apis/crm/meetings.generated.d.ts +0 -7
  276. package/dist/server/api-client-core/apis/crm/meetings.generated.js +0 -66
  277. package/dist/server/api-client-core/apis/crm/meetings.generated.js.map +0 -1
  278. package/dist/server/api-client-core/apis/crm/notes-types.generated.d.ts +0 -850
  279. package/dist/server/api-client-core/apis/crm/notes.generated.d.ts +0 -7
  280. package/dist/server/api-client-core/apis/crm/notes.generated.js +0 -66
  281. package/dist/server/api-client-core/apis/crm/notes.generated.js.map +0 -1
  282. package/dist/server/api-client-core/apis/crm/object-library-types.generated.d.ts +0 -60
  283. package/dist/server/api-client-core/apis/crm/object-library.generated.d.ts +0 -7
  284. package/dist/server/api-client-core/apis/crm/object-library.generated.js +0 -9
  285. package/dist/server/api-client-core/apis/crm/object-library.generated.js.map +0 -1
  286. package/dist/server/api-client-core/apis/crm/objects-types.generated.d.ts +0 -712
  287. package/dist/server/api-client-core/apis/crm/objects.generated.d.ts +0 -7
  288. package/dist/server/api-client-core/apis/crm/objects.generated.js +0 -76
  289. package/dist/server/api-client-core/apis/crm/objects.generated.js.map +0 -1
  290. package/dist/server/api-client-core/apis/crm/orders-types.generated.d.ts +0 -850
  291. package/dist/server/api-client-core/apis/crm/orders.generated.d.ts +0 -7
  292. package/dist/server/api-client-core/apis/crm/orders.generated.js +0 -66
  293. package/dist/server/api-client-core/apis/crm/orders.generated.js.map +0 -1
  294. package/dist/server/api-client-core/apis/crm/partner-clients-types.generated.d.ts +0 -725
  295. package/dist/server/api-client-core/apis/crm/partner-clients.generated.d.ts +0 -7
  296. package/dist/server/api-client-core/apis/crm/partner-clients.generated.js +0 -71
  297. package/dist/server/api-client-core/apis/crm/partner-clients.generated.js.map +0 -1
  298. package/dist/server/api-client-core/apis/crm/partner-services-types.generated.d.ts +0 -725
  299. package/dist/server/api-client-core/apis/crm/partner-services.generated.d.ts +0 -7
  300. package/dist/server/api-client-core/apis/crm/partner-services.generated.js +0 -71
  301. package/dist/server/api-client-core/apis/crm/partner-services.generated.js.map +0 -1
  302. package/dist/server/api-client-core/apis/crm/pipelines-types.generated.d.ts +0 -430
  303. package/dist/server/api-client-core/apis/crm/pipelines.generated.d.ts +0 -7
  304. package/dist/server/api-client-core/apis/crm/pipelines.generated.js +0 -94
  305. package/dist/server/api-client-core/apis/crm/pipelines.generated.js.map +0 -1
  306. package/dist/server/api-client-core/apis/crm/postal-mail-types.generated.d.ts +0 -844
  307. package/dist/server/api-client-core/apis/crm/postal-mail.generated.d.ts +0 -7
  308. package/dist/server/api-client-core/apis/crm/postal-mail.generated.js +0 -66
  309. package/dist/server/api-client-core/apis/crm/postal-mail.generated.js.map +0 -1
  310. package/dist/server/api-client-core/apis/crm/products-types.generated.d.ts +0 -850
  311. package/dist/server/api-client-core/apis/crm/products.generated.d.ts +0 -7
  312. package/dist/server/api-client-core/apis/crm/products.generated.js +0 -66
  313. package/dist/server/api-client-core/apis/crm/products.generated.js.map +0 -1
  314. package/dist/server/api-client-core/apis/crm/projects-types.generated.d.ts +0 -881
  315. package/dist/server/api-client-core/apis/crm/projects.generated.d.ts +0 -7
  316. package/dist/server/api-client-core/apis/crm/projects.generated.js +0 -67
  317. package/dist/server/api-client-core/apis/crm/projects.generated.js.map +0 -1
  318. package/dist/server/api-client-core/apis/crm/properties-types.generated.d.ts +0 -603
  319. package/dist/server/api-client-core/apis/crm/properties.generated.d.ts +0 -7
  320. package/dist/server/api-client-core/apis/crm/properties.generated.js +0 -86
  321. package/dist/server/api-client-core/apis/crm/properties.generated.js.map +0 -1
  322. package/dist/server/api-client-core/apis/crm/property-validations-types.generated.d.ts +0 -121
  323. package/dist/server/api-client-core/apis/crm/property-validations.generated.d.ts +0 -7
  324. package/dist/server/api-client-core/apis/crm/property-validations.generated.js +0 -25
  325. package/dist/server/api-client-core/apis/crm/property-validations.generated.js.map +0 -1
  326. package/dist/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.d.ts +0 -486
  327. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.d.ts +0 -7
  328. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js +0 -34
  329. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js.map +0 -1
  330. package/dist/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.d.ts +0 -247
  331. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.d.ts +0 -7
  332. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js +0 -69
  333. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js.map +0 -1
  334. package/dist/server/api-client-core/apis/crm/quotes-types.generated.d.ts +0 -850
  335. package/dist/server/api-client-core/apis/crm/quotes.generated.d.ts +0 -7
  336. package/dist/server/api-client-core/apis/crm/quotes.generated.js +0 -66
  337. package/dist/server/api-client-core/apis/crm/quotes.generated.js.map +0 -1
  338. package/dist/server/api-client-core/apis/crm/schemas-types.generated.d.ts +0 -669
  339. package/dist/server/api-client-core/apis/crm/schemas.generated.d.ts +0 -7
  340. package/dist/server/api-client-core/apis/crm/schemas.generated.js +0 -41
  341. package/dist/server/api-client-core/apis/crm/schemas.generated.js.map +0 -1
  342. package/dist/server/api-client-core/apis/crm/services-types.generated.d.ts +0 -853
  343. package/dist/server/api-client-core/apis/crm/services.generated.d.ts +0 -7
  344. package/dist/server/api-client-core/apis/crm/services.generated.js +0 -66
  345. package/dist/server/api-client-core/apis/crm/services.generated.js.map +0 -1
  346. package/dist/server/api-client-core/apis/crm/tasks-types.generated.d.ts +0 -850
  347. package/dist/server/api-client-core/apis/crm/tasks.generated.d.ts +0 -7
  348. package/dist/server/api-client-core/apis/crm/tasks.generated.js +0 -66
  349. package/dist/server/api-client-core/apis/crm/tasks.generated.js.map +0 -1
  350. package/dist/server/api-client-core/apis/crm/taxes-types.generated.d.ts +0 -850
  351. package/dist/server/api-client-core/apis/crm/taxes.generated.d.ts +0 -7
  352. package/dist/server/api-client-core/apis/crm/taxes.generated.js +0 -66
  353. package/dist/server/api-client-core/apis/crm/taxes.generated.js.map +0 -1
  354. package/dist/server/api-client-core/apis/crm/tickets-types.generated.d.ts +0 -884
  355. package/dist/server/api-client-core/apis/crm/tickets.generated.d.ts +0 -7
  356. package/dist/server/api-client-core/apis/crm/tickets.generated.js +0 -67
  357. package/dist/server/api-client-core/apis/crm/tickets.generated.js.map +0 -1
  358. package/dist/server/api-client-core/apis/crm/timeline-types.generated.d.ts +0 -187
  359. package/dist/server/api-client-core/apis/crm/timeline.generated.d.ts +0 -7
  360. package/dist/server/api-client-core/apis/crm/timeline.generated.js +0 -12
  361. package/dist/server/api-client-core/apis/crm/timeline.generated.js.map +0 -1
  362. package/dist/server/api-client-core/apis/crm/transcriptions-types.generated.d.ts +0 -152
  363. package/dist/server/api-client-core/apis/crm/transcriptions.generated.d.ts +0 -7
  364. package/dist/server/api-client-core/apis/crm/transcriptions.generated.js +0 -15
  365. package/dist/server/api-client-core/apis/crm/transcriptions.generated.js.map +0 -1
  366. package/dist/server/api-client-core/apis/crm/users-types.generated.d.ts +0 -850
  367. package/dist/server/api-client-core/apis/crm/users.generated.d.ts +0 -7
  368. package/dist/server/api-client-core/apis/crm/users.generated.js +0 -66
  369. package/dist/server/api-client-core/apis/crm/users.generated.js.map +0 -1
  370. package/dist/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.d.ts +0 -72
  371. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.d.ts +0 -7
  372. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js +0 -13
  373. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js.map +0 -1
  374. package/dist/server/api-client-core/apis/events/manage-event-definitions-types.generated.d.ts +0 -1005
  375. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.d.ts +0 -7
  376. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js +0 -39
  377. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js.map +0 -1
  378. package/dist/server/api-client-core/apis/events/send-event-completions-types.generated.d.ts +0 -94
  379. package/dist/server/api-client-core/apis/events/send-event-completions.generated.d.ts +0 -7
  380. package/dist/server/api-client-core/apis/events/send-event-completions.generated.js +0 -9
  381. package/dist/server/api-client-core/apis/events/send-event-completions.generated.js.map +0 -1
  382. package/dist/server/api-client-core/apis/events-types.generated.d.ts +0 -137
  383. package/dist/server/api-client-core/apis/events.generated.d.ts +0 -7
  384. package/dist/server/api-client-core/apis/events.generated.js +0 -23
  385. package/dist/server/api-client-core/apis/events.generated.js.map +0 -1
  386. package/dist/server/api-client-core/apis/files-types.generated.d.ts +0 -791
  387. package/dist/server/api-client-core/apis/files.generated.d.ts +0 -7
  388. package/dist/server/api-client-core/apis/files.generated.js +0 -119
  389. package/dist/server/api-client-core/apis/files.generated.js.map +0 -1
  390. package/dist/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.d.ts +0 -989
  391. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.d.ts +0 -7
  392. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js +0 -139
  393. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js.map +0 -1
  394. package/dist/server/api-client-core/apis/marketing/marketing-emails-types.generated.d.ts +0 -883
  395. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.d.ts +0 -7
  396. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js +0 -108
  397. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js.map +0 -1
  398. package/dist/server/api-client-core/apis/marketing/marketing-events-types.generated.d.ts +0 -1788
  399. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.d.ts +0 -7
  400. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js +0 -176
  401. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js.map +0 -1
  402. package/dist/server/api-client-core/apis/marketing/single-send-types.generated.d.ts +0 -123
  403. package/dist/server/api-client-core/apis/marketing/single-send.generated.d.ts +0 -7
  404. package/dist/server/api-client-core/apis/marketing/single-send.generated.js +0 -6
  405. package/dist/server/api-client-core/apis/marketing/single-send.generated.js.map +0 -1
  406. package/dist/server/api-client-core/apis/marketing/transactional-single-send-types.generated.d.ts +0 -257
  407. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.d.ts +0 -7
  408. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js +0 -20
  409. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js.map +0 -1
  410. package/dist/server/api-client-core/apis/meta/origins-types.generated.d.ts +0 -77
  411. package/dist/server/api-client-core/apis/meta/origins.generated.d.ts +0 -7
  412. package/dist/server/api-client-core/apis/meta/origins.generated.js +0 -15
  413. package/dist/server/api-client-core/apis/meta/origins.generated.js.map +0 -1
  414. package/dist/server/api-client-core/apis/scheduler/meetings-types.generated.d.ts +0 -913
  415. package/dist/server/api-client-core/apis/scheduler/meetings.generated.d.ts +0 -7
  416. package/dist/server/api-client-core/apis/scheduler/meetings.generated.js +0 -34
  417. package/dist/server/api-client-core/apis/scheduler/meetings.generated.js.map +0 -1
  418. package/dist/server/api-client-core/apis/settings/multicurrency-types.generated.d.ts +0 -404
  419. package/dist/server/api-client-core/apis/settings/multicurrency.generated.d.ts +0 -7
  420. package/dist/server/api-client-core/apis/settings/multicurrency.generated.js +0 -38
  421. package/dist/server/api-client-core/apis/settings/multicurrency.generated.js.map +0 -1
  422. package/dist/server/api-client-core/apis/settings/tax-rates-types.generated.d.ts +0 -111
  423. package/dist/server/api-client-core/apis/settings/tax-rates.generated.d.ts +0 -7
  424. package/dist/server/api-client-core/apis/settings/tax-rates.generated.js +0 -13
  425. package/dist/server/api-client-core/apis/settings/tax-rates.generated.js.map +0 -1
  426. package/dist/server/api-client-core/apis/settings/user-provisioning-types.generated.d.ts +0 -297
  427. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.d.ts +0 -7
  428. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js +0 -31
  429. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js.map +0 -1
  430. package/dist/server/api-client-core/apis/webhooks-journal-types.generated.d.ts +0 -643
  431. package/dist/server/api-client-core/apis/webhooks-journal.generated.d.ts +0 -7
  432. package/dist/server/api-client-core/apis/webhooks-journal.generated.js +0 -75
  433. package/dist/server/api-client-core/apis/webhooks-journal.generated.js.map +0 -1
  434. package/dist/server/api-client-core/apis/webhooks-types.generated.d.ts +0 -1016
  435. package/dist/server/api-client-core/apis/webhooks.generated.d.ts +0 -7
  436. package/dist/server/api-client-core/apis/webhooks.generated.js +0 -105
  437. package/dist/server/api-client-core/apis/webhooks.generated.js.map +0 -1
  438. package/dist/server/api-client-core/binary-data.d.ts +0 -33
  439. package/dist/server/api-client-core/binary-data.js +0 -29
  440. package/dist/server/api-client-core/binary-data.js.map +0 -1
  441. package/dist/server/api-client-core/client.d.ts +0 -14
  442. package/dist/server/api-client-core/client.js.map +0 -1
  443. package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js +0 -25
  444. package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js.map +0 -1
  445. package/dist/server/api-client-core/errors.d.ts +0 -27
  446. package/dist/server/api-client-core/errors.js +0 -33
  447. package/dist/server/api-client-core/errors.js.map +0 -1
  448. package/dist/server/api-client-core/op.d.ts +0 -37
  449. package/dist/server/api-client-core/op.js +0 -44
  450. package/dist/server/api-client-core/op.js.map +0 -1
  451. package/dist/server/api-client-core/pagination.d.ts +0 -60
  452. package/dist/server/api-client-core/pagination.js +0 -103
  453. package/dist/server/api-client-core/pagination.js.map +0 -1
  454. package/dist/server/api-client-core/plugins/fetch-transport.js +0 -72
  455. package/dist/server/api-client-core/plugins/fetch-transport.js.map +0 -1
  456. package/dist/server/constants.js +0 -46
  457. package/dist/server/constants.js.map +0 -1
  458. package/dist/server/deno/start.d.ts +0 -12
  459. package/dist/server/deno/start.js +0 -21
  460. package/dist/server/deno/start.js.map +0 -1
  461. package/dist/server/hono/hono-request-handler.js +0 -54
  462. package/dist/server/hono/hono-request-handler.js.map +0 -1
  463. package/dist/server/hono/hubspot-connect-routes/auth-callback.js +0 -125
  464. package/dist/server/hono/hubspot-connect-routes/auth-callback.js.map +0 -1
  465. package/dist/server/hono/hubspot-connect-routes/auth-init-session.js +0 -90
  466. package/dist/server/hono/hubspot-connect-routes/auth-init-session.js.map +0 -1
  467. package/dist/server/hono/hubspot-connect-routes/auth-logout.js +0 -97
  468. package/dist/server/hono/hubspot-connect-routes/auth-logout.js.map +0 -1
  469. package/dist/server/hono/hubspot-connect-routes/auth-refresh.js +0 -101
  470. package/dist/server/hono/hubspot-connect-routes/auth-refresh.js.map +0 -1
  471. package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.d.ts +0 -16
  472. package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js +0 -13
  473. package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js.map +0 -1
  474. package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js +0 -42
  475. package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js.map +0 -1
  476. package/dist/server/hono/hubspot-connect-routes/constants.js +0 -8
  477. package/dist/server/hono/hubspot-connect-routes/constants.js.map +0 -1
  478. package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js +0 -43
  479. package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js.map +0 -1
  480. package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js +0 -35
  481. package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js.map +0 -1
  482. package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js +0 -34
  483. package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js.map +0 -1
  484. package/dist/server/hono/hubspot-connect-routes/oauth-client.js +0 -104
  485. package/dist/server/hono/hubspot-connect-routes/oauth-client.js.map +0 -1
  486. package/dist/server/hono/hubspot-connect-routes/utils.js +0 -73
  487. package/dist/server/hono/hubspot-connect-routes/utils.js.map +0 -1
  488. package/dist/server/hono/index.js +0 -4
  489. package/dist/server/hono/types.d.ts +0 -28
  490. package/dist/server/hono/utils/cookie-utils.js +0 -29
  491. package/dist/server/hono/utils/cookie-utils.js.map +0 -1
  492. package/dist/server/import-app-keys.js +0 -42
  493. package/dist/server/import-app-keys.js.map +0 -1
  494. package/dist/server/lovable/create-app-function-start.d.ts +0 -26
  495. package/dist/server/lovable/create-app-function-start.js +0 -28
  496. package/dist/server/lovable/create-app-function-start.js.map +0 -1
  497. package/dist/server/lovable/hubspot-connect/index.d.ts +0 -15
  498. package/dist/server/lovable/hubspot-connect/index.js +0 -20
  499. package/dist/server/lovable/hubspot-connect/index.js.map +0 -1
  500. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js +0 -29
  501. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js.map +0 -1
  502. package/dist/server/proxy.js +0 -68
  503. package/dist/server/proxy.js.map +0 -1
  504. package/dist/server/sanitize-request.js +0 -41
  505. package/dist/server/sanitize-request.js.map +0 -1
  506. package/dist/server/secure-start-core.d.ts +0 -23
  507. package/dist/server/secure-start-core.js +0 -28
  508. package/dist/server/secure-start-core.js.map +0 -1
  509. package/dist/server/shared/constants.js +0 -17
  510. package/dist/server/shared/constants.js.map +0 -1
  511. package/dist/server/shared/encoding/base64.js +0 -45
  512. package/dist/server/shared/encoding/base64.js.map +0 -1
  513. package/dist/server/shared/encoding/sha256.d.ts +0 -10
  514. package/dist/server/shared/encoding/sha256.js +0 -15
  515. package/dist/server/shared/encoding/sha256.js.map +0 -1
  516. package/dist/server/shared/logger.d.ts +0 -15
  517. package/dist/server/shared/logger.js +0 -16
  518. package/dist/server/shared/logger.js.map +0 -1
  519. package/dist/server/utils/cookie-utils.js +0 -21
  520. package/dist/server/utils/cookie-utils.js.map +0 -1
  521. package/dist/server/utils/dpop-utils.d.ts +0 -67
  522. package/dist/server/utils/dpop-utils.js +0 -75
  523. package/dist/server/utils/dpop-utils.js.map +0 -1
  524. package/dist/server/utils/env-utils.js +0 -54
  525. package/dist/server/utils/env-utils.js.map +0 -1
  526. package/dist/server/utils/jwk-utils.d.ts +0 -16
  527. package/dist/server/utils/jwk-utils.js +0 -24
  528. package/dist/server/utils/jwk-utils.js.map +0 -1
  529. package/dist/server/utils/jwt-utils.d.ts +0 -39
  530. package/dist/server/utils/jwt-utils.js +0 -87
  531. package/dist/server/utils/jwt-utils.js.map +0 -1
  532. package/src/server/hono/hubspot-connect-routes/auth-callback.test.ts +0 -225
@@ -0,0 +1,285 @@
1
+ import { Hono } from 'hono';
2
+ import { afterEach, describe, expect, it, vi } from 'vitest';
3
+
4
+ import { HUBSPOT_FRONTEND_CALLBACK_PATH } from '../../../shared/constants.ts';
5
+ import {
6
+ HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,
7
+ HUBSPOT_APP_ORIGIN_COOKIE_NAME,
8
+ HUBSPOT_REFRESH_COOKIE_PREFIX,
9
+ TEMP_COOKIE_OAUTH_STATE,
10
+ TEMP_COOKIE_PKCE_VERIFIER,
11
+ } from '../../constants.ts';
12
+ import { handleAuthComplete } from './auth-complete.ts';
13
+ import type { HubSpotConnectRoutesEnvClientSecret } from './load-hubspot-connect-routes-env.ts';
14
+ import type { HubSpotConnectOAuthRouteOptions } from './types.ts';
15
+
16
+ const hubspotConnectEnv = {
17
+ hubspotAuthorizationEndpoint: 'https://auth.example.test/oauth/authorize',
18
+ hubspotOAuthApiOrigin: 'https://auth.example.test',
19
+ isCimdEnabled: false,
20
+ isDpopEnabled: false,
21
+ isAppPrivateKeyRequired: false,
22
+ hubspotClientId: 'test-client-id',
23
+ hubspotClientSecret: 'test-client-secret',
24
+ } satisfies HubSpotConnectRoutesEnvClientSecret;
25
+
26
+ const BASE_PATH = '/functions/v1/hubspot-connect';
27
+ const APP_ORIGIN = 'https://app.example.com';
28
+
29
+ function buildOAuthRouteOptions(): HubSpotConnectOAuthRouteOptions {
30
+ return {
31
+ appKeys: null,
32
+ refreshCookiePath: `${BASE_PATH}/auth`,
33
+ logger: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
34
+ basePath: BASE_PATH,
35
+ hubspotConnectEnv,
36
+ cimdClientMetadata: { scope: { required: ['crm.objects.contacts.read'] } },
37
+ };
38
+ }
39
+
40
+ function base64urlEncode(input: string): string {
41
+ let binary = '';
42
+ const bytes = new TextEncoder().encode(input);
43
+ for (const byte of bytes) binary += String.fromCharCode(byte);
44
+ return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
45
+ }
46
+
47
+ interface CompleteFixture {
48
+ stateValue: string;
49
+ cookieHeader: string;
50
+ }
51
+
52
+ function buildCompleteFixture(options?: {
53
+ returnPath?: string;
54
+ sid?: string;
55
+ appOrigin?: string | null;
56
+ }): CompleteFixture {
57
+ const returnPath = options?.returnPath ?? '/dashboard';
58
+ const sid = options?.sid ?? 'test-session-id-hash';
59
+ const appOrigin =
60
+ options?.appOrigin === null ? null : (options?.appOrigin ?? APP_ORIGIN);
61
+ const stateValue = base64urlEncode(
62
+ JSON.stringify({ return_path: returnPath, sid })
63
+ );
64
+ const cookieParts = [
65
+ `${TEMP_COOKIE_OAUTH_STATE}=${encodeURIComponent(stateValue)}`,
66
+ `${TEMP_COOKIE_PKCE_VERIFIER}=${encodeURIComponent('test-pkce-verifier')}`,
67
+ ];
68
+ if (appOrigin !== null) {
69
+ cookieParts.push(`${HUBSPOT_APP_ORIGIN_COOKIE_NAME}=${appOrigin}`);
70
+ }
71
+ return { stateValue, cookieHeader: cookieParts.join('; ') };
72
+ }
73
+
74
+ function buildCompleteUrl(stateValue: string, code = 'test-auth-code'): string {
75
+ const url = new URL(`http://localhost${BASE_PATH}/auth/complete`);
76
+ url.searchParams.set('code', code);
77
+ url.searchParams.set('state', stateValue);
78
+ return url.toString();
79
+ }
80
+
81
+ describe('handleAuthComplete', () => {
82
+ afterEach(() => {
83
+ vi.restoreAllMocks();
84
+ });
85
+
86
+ it('returns 400 when code is missing', async () => {
87
+ const app = new Hono();
88
+ app.post('/auth/complete', (c) =>
89
+ handleAuthComplete(c, buildOAuthRouteOptions())
90
+ );
91
+ const res = await app.request('http://localhost/auth/complete?state=abc', {
92
+ method: 'POST',
93
+ });
94
+ expect(res.status).toBe(400);
95
+ expect(await res.json()).toMatchObject({ error: 'Missing code or state' });
96
+ });
97
+
98
+ it('returns 400 when state is missing', async () => {
99
+ const app = new Hono();
100
+ app.post('/auth/complete', (c) =>
101
+ handleAuthComplete(c, buildOAuthRouteOptions())
102
+ );
103
+ const res = await app.request('http://localhost/auth/complete?code=abc', {
104
+ method: 'POST',
105
+ });
106
+ expect(res.status).toBe(400);
107
+ expect(await res.json()).toMatchObject({ error: 'Missing code or state' });
108
+ });
109
+
110
+ it('returns 403 when state cookie is missing', async () => {
111
+ const app = new Hono();
112
+ app.post(`${BASE_PATH}/auth/complete`, (c) =>
113
+ handleAuthComplete(c, buildOAuthRouteOptions())
114
+ );
115
+ const { stateValue } = buildCompleteFixture();
116
+ const res = await app.request(buildCompleteUrl(stateValue), {
117
+ method: 'POST',
118
+ });
119
+ expect(res.status).toBe(403);
120
+ expect(await res.json()).toMatchObject({ error: 'State mismatch' });
121
+ });
122
+
123
+ it('returns 403 when state does not match cookie', async () => {
124
+ const app = new Hono();
125
+ app.post(`${BASE_PATH}/auth/complete`, (c) =>
126
+ handleAuthComplete(c, buildOAuthRouteOptions())
127
+ );
128
+ const { cookieHeader } = buildCompleteFixture();
129
+ const res = await app.request(buildCompleteUrl('wrong-state-value'), {
130
+ method: 'POST',
131
+ headers: { Cookie: cookieHeader },
132
+ });
133
+ expect(res.status).toBe(403);
134
+ });
135
+
136
+ it('returns 400 when state payload has invalid return_path', async () => {
137
+ const app = new Hono();
138
+ app.post(`${BASE_PATH}/auth/complete`, (c) =>
139
+ handleAuthComplete(c, buildOAuthRouteOptions())
140
+ );
141
+ const { stateValue, cookieHeader } = buildCompleteFixture({
142
+ returnPath: '//evil.example.com',
143
+ });
144
+ const res = await app.request(buildCompleteUrl(stateValue), {
145
+ method: 'POST',
146
+ headers: { Cookie: cookieHeader },
147
+ });
148
+ expect(res.status).toBe(400);
149
+ expect(await res.json()).toMatchObject({
150
+ error: expect.stringContaining('Invalid return path'),
151
+ });
152
+ });
153
+
154
+ it('returns 400 when the pinned app-origin cookie is absent', async () => {
155
+ const app = new Hono();
156
+ app.post(`${BASE_PATH}/auth/complete`, (c) =>
157
+ handleAuthComplete(c, buildOAuthRouteOptions())
158
+ );
159
+ const { stateValue, cookieHeader } = buildCompleteFixture({
160
+ appOrigin: null,
161
+ });
162
+ const res = await app.request(buildCompleteUrl(stateValue), {
163
+ method: 'POST',
164
+ headers: { Cookie: cookieHeader },
165
+ });
166
+ expect(res.status).toBe(400);
167
+ expect(await res.json()).toMatchObject({
168
+ error: expect.stringContaining('app origin'),
169
+ });
170
+ });
171
+
172
+ it('returns 502 when upstream token exchange fails', async () => {
173
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue(
174
+ new Response('{"error":"invalid_grant"}', {
175
+ status: 400,
176
+ statusText: 'Bad Request',
177
+ })
178
+ );
179
+ const app = new Hono();
180
+ app.post(`${BASE_PATH}/auth/complete`, (c) =>
181
+ handleAuthComplete(c, buildOAuthRouteOptions())
182
+ );
183
+ const { stateValue, cookieHeader } = buildCompleteFixture();
184
+ const res = await app.request(buildCompleteUrl(stateValue), {
185
+ method: 'POST',
186
+ headers: { Cookie: cookieHeader },
187
+ });
188
+ expect(res.status).toBe(502);
189
+ expect(await res.json()).toMatchObject({
190
+ error: expect.stringContaining('Token exchange failed'),
191
+ });
192
+ });
193
+
194
+ it('sends the OAuth token endpoint the same redirect_uri it advertised in init-session', async () => {
195
+ const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue(
196
+ new Response(
197
+ JSON.stringify({
198
+ access_token: 'at',
199
+ refresh_token: 'rt',
200
+ expires_in: 1800,
201
+ }),
202
+ { status: 200 }
203
+ )
204
+ );
205
+ const app = new Hono();
206
+ app.post(`${BASE_PATH}/auth/complete`, (c) =>
207
+ handleAuthComplete(c, buildOAuthRouteOptions())
208
+ );
209
+ const { stateValue, cookieHeader } = buildCompleteFixture();
210
+ await app.request(buildCompleteUrl(stateValue), {
211
+ method: 'POST',
212
+ headers: { Cookie: cookieHeader },
213
+ });
214
+
215
+ const [, init] = fetchSpy.mock.calls[0]!;
216
+ const body = (init as RequestInit).body as URLSearchParams | string;
217
+ const formParams = new URLSearchParams(body as string);
218
+ expect(formParams.get('redirect_uri')).toBe(
219
+ `${APP_ORIGIN}${HUBSPOT_FRONTEND_CALLBACK_PATH}`
220
+ );
221
+ expect(formParams.get('grant_type')).toBe('authorization_code');
222
+ });
223
+
224
+ it('returns 200 with expires_at + return_path and sets durable cookies on success', async () => {
225
+ const beforeMs = Date.now();
226
+ vi.spyOn(globalThis, 'fetch').mockResolvedValue(
227
+ new Response(
228
+ JSON.stringify({
229
+ access_token: 'new-access-token',
230
+ refresh_token: 'new-refresh-token',
231
+ expires_in: 1800,
232
+ }),
233
+ { status: 200 }
234
+ )
235
+ );
236
+ const app = new Hono();
237
+ app.post(`${BASE_PATH}/auth/complete`, (c) =>
238
+ handleAuthComplete(c, buildOAuthRouteOptions())
239
+ );
240
+ const { stateValue, cookieHeader } = buildCompleteFixture({
241
+ returnPath: '/dashboard',
242
+ sid: 'abc123sid',
243
+ });
244
+ const res = await app.request(buildCompleteUrl(stateValue), {
245
+ method: 'POST',
246
+ headers: { Cookie: cookieHeader },
247
+ });
248
+
249
+ expect(res.status).toBe(200);
250
+ const body = (await res.json()) as {
251
+ expires_at: number;
252
+ return_path: string;
253
+ };
254
+ expect(body.return_path).toBe('/dashboard');
255
+ expect(body.expires_at).toBeGreaterThanOrEqual(beforeMs + 1800 * 1000 - 50);
256
+
257
+ const setCookies = res.headers.getSetCookie();
258
+
259
+ const accessCookie = setCookies.find((h) =>
260
+ h.startsWith(`${HUBSPOT_ACCESS_TOKEN_COOKIE_NAME}=`)
261
+ );
262
+ expect(accessCookie).toBeDefined();
263
+ expect(accessCookie).toContain('new-access-token');
264
+ expect(accessCookie).toContain('SameSite=None');
265
+ expect(accessCookie).toContain('Partitioned');
266
+
267
+ const refreshCookie = setCookies.find((h) =>
268
+ h.startsWith(`${HUBSPOT_REFRESH_COOKIE_PREFIX}`)
269
+ );
270
+ expect(refreshCookie).toBeDefined();
271
+ expect(refreshCookie).toContain('new-refresh-token');
272
+ expect(refreshCookie).toContain('SameSite=None');
273
+ expect(refreshCookie).toContain('Partitioned');
274
+
275
+ const pkceCleared = setCookies.find((h) =>
276
+ h.startsWith(`${TEMP_COOKIE_PKCE_VERIFIER}=`)
277
+ );
278
+ expect(pkceCleared).toContain('Max-Age=0');
279
+
280
+ const stateCleared = setCookies.find((h) =>
281
+ h.startsWith(`${TEMP_COOKIE_OAUTH_STATE}=`)
282
+ );
283
+ expect(stateCleared).toContain('Max-Age=0');
284
+ });
285
+ });
@@ -1,8 +1,12 @@
1
1
  import type { Context } from 'hono';
2
2
 
3
- import { EXPIRES_AT_URL_PARAM } from '../../../shared/constants.ts';
3
+ import {
4
+ AUTH_COMPLETE_CODE_PARAM,
5
+ AUTH_COMPLETE_STATE_PARAM,
6
+ } from '../../../shared/constants.ts';
4
7
  import {
5
8
  HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,
9
+ HUBSPOT_APP_ORIGIN_COOKIE_NAME,
6
10
  HUBSPOT_REFRESH_COOKIE_PREFIX,
7
11
  TEMP_COOKIE_OAUTH_STATE,
8
12
  TEMP_COOKIE_PKCE_VERIFIER,
@@ -21,10 +25,11 @@ import {
21
25
  import type { HubSpotConnectOAuthRouteOptions } from './types.ts';
22
26
  import {
23
27
  buildCimdClientIdUrlFromRequest,
24
- buildOAuthRedirectUriFromRequest,
28
+ buildFrontendOAuthRedirectUri,
25
29
  clearTempCookie,
26
30
  isPositiveFiniteNumber,
27
31
  isSafeReturnPath,
32
+ parseAppOriginHeader,
28
33
  } from './utils.ts';
29
34
 
30
35
  interface OAuthStatePayload {
@@ -32,24 +37,53 @@ interface OAuthStatePayload {
32
37
  sid?: string;
33
38
  }
34
39
 
35
- export async function handleAuthCallback(
40
+ /**
41
+ * Cross-origin OAuth completion endpoint.
42
+ *
43
+ * Called from the React app on the frontend OAuth callback path
44
+ * (`HUBSPOT_FRONTEND_CALLBACK_PATH`) once HubSpot has redirected the
45
+ * browser back with `?code` + `?state`. The browser POSTs both
46
+ * values here as a credentialed cross-site fetch — same partition as
47
+ * `init-session`, so the temp PKCE/state cookies are visible — and
48
+ * the SDK:
49
+ *
50
+ * 1. Validates `state` against the temp `__hs_oauth_state` cookie.
51
+ * 2. Pulls the PKCE verifier from `__hs_pkce_verifier`.
52
+ * 3. Rebuilds the same `redirect_uri` it sent to HubSpot during
53
+ * `init-session` (frontend origin + the fixed callback path);
54
+ * the OAuth token endpoint requires the two values to match.
55
+ * 4. Exchanges `code` for an access + refresh token (with DPoP /
56
+ * CIMD client-assertion when enabled).
57
+ * 5. Sets the durable session cookies (access token, refresh) with
58
+ * `SameSite=None; Secure; Partitioned` so they live in the
59
+ * `(frontend, edge)` partition where subsequent API fetches will
60
+ * read them.
61
+ * 6. Clears the temp cookies.
62
+ * 7. Returns `{ expires_at, return_path }` so the controller can
63
+ * update its session-storage expiry tracking and navigate back to
64
+ * the page the user started the connect flow from.
65
+ */
66
+ export async function handleAuthComplete(
36
67
  c: Context,
37
68
  options: HubSpotConnectOAuthRouteOptions
38
69
  ) {
39
- const { appKeys, refreshCookiePath, basePath, hubspotConnectEnv } = options;
70
+ const { appKeys, refreshCookiePath, hubspotConnectEnv } = options;
40
71
  const xForwardedProto = c.req.header('x-forwarded-proto') ?? undefined;
41
72
  const xForwardedHost = c.req.header('x-forwarded-host') ?? undefined;
42
73
  const requestHostHeader = c.req.header('host') ?? undefined;
43
- const code = c.req.query('code');
44
- const state = c.req.query('state');
74
+ const code = c.req.query(AUTH_COMPLETE_CODE_PARAM);
75
+ const state = c.req.query(AUTH_COMPLETE_STATE_PARAM);
45
76
 
46
77
  if (!code || !state) {
47
- return c.text('Missing code or state', 400);
78
+ return c.json({ error: 'Missing code or state' }, 400);
48
79
  }
49
80
 
50
81
  if (hubspotConnectEnv.isAppPrivateKeyRequired && !appKeys) {
51
- return c.text(
52
- 'Server misconfiguration: HUBSPOT_APP_PRIVATE_KEY is required when CIMD or DPoP is enabled',
82
+ return c.json(
83
+ {
84
+ error:
85
+ 'Server misconfiguration: HUBSPOT_APP_PRIVATE_KEY is required when CIMD or DPoP is enabled',
86
+ },
53
87
  500
54
88
  );
55
89
  }
@@ -57,12 +91,21 @@ export async function handleAuthCallback(
57
91
  const cookies = parseCookies(c.req.header('Cookie'));
58
92
  const expectedState = cookies[TEMP_COOKIE_OAUTH_STATE];
59
93
  const codeVerifier = cookies[TEMP_COOKIE_PKCE_VERIFIER];
94
+ const appOriginCookie = cookies[HUBSPOT_APP_ORIGIN_COOKIE_NAME];
60
95
 
61
96
  if (!expectedState || state !== decodeURIComponent(expectedState)) {
62
- return c.text('State mismatch', 403);
97
+ return c.json({ error: 'State mismatch' }, 403);
63
98
  }
64
99
  if (!codeVerifier) {
65
- return c.text('Missing PKCE verifier', 400);
100
+ return c.json({ error: 'Missing PKCE verifier' }, 400);
101
+ }
102
+ // The redirect_uri the OAuth token endpoint validates must equal
103
+ // the one we sent during init-session. We rebuild it from the
104
+ // pinned origin cookie so that value is anchored server-side, not
105
+ // taken from the (caller-controlled) request `Origin` on this call.
106
+ const appOrigin = parseAppOriginHeader(appOriginCookie);
107
+ if (!appOrigin) {
108
+ return c.json({ error: 'Missing app origin cookie' }, 400);
66
109
  }
67
110
 
68
111
  let statePayload: OAuthStatePayload;
@@ -71,16 +114,16 @@ export async function handleAuthCallback(
71
114
  new TextDecoder().decode(base64urlDecode(decodeURIComponent(state)))
72
115
  ) as OAuthStatePayload;
73
116
  } catch {
74
- return c.text('Malformed state value', 400);
117
+ return c.json({ error: 'Malformed state value' }, 400);
75
118
  }
76
119
  const returnPath = statePayload.return_path;
77
120
  if (!returnPath || !isSafeReturnPath(returnPath)) {
78
- return c.text('Invalid return path in state', 400);
121
+ return c.json({ error: 'Invalid return path in state' }, 400);
79
122
  }
80
123
 
81
124
  const sessionId = statePayload.sid;
82
125
  if (!sessionId) {
83
- return c.text('Missing app session cookie', 400);
126
+ return c.json({ error: 'Missing app session cookie' }, 400);
84
127
  }
85
128
 
86
129
  const decodedCodeVerifier = decodeURIComponent(codeVerifier);
@@ -88,20 +131,14 @@ export async function handleAuthCallback(
88
131
  const clientId = hubspotConnectEnv.isCimdEnabled
89
132
  ? buildCimdClientIdUrlFromRequest({
90
133
  requestUrl: c.req.url,
91
- basePath,
134
+ basePath: options.basePath,
92
135
  xForwardedProto,
93
136
  xForwardedHost,
94
137
  requestHostHeader,
95
138
  })
96
139
  : hubspotConnectEnv.hubspotClientId;
97
140
 
98
- const redirectUri = buildOAuthRedirectUriFromRequest({
99
- requestUrl: c.req.url,
100
- basePath,
101
- xForwardedProto,
102
- xForwardedHost,
103
- requestHostHeader,
104
- });
141
+ const redirectUri = buildFrontendOAuthRedirectUri(appOrigin);
105
142
 
106
143
  const tokenEndpointUrl = new URL(
107
144
  '/oauth/v1/token',
@@ -151,7 +188,10 @@ export async function handleAuthCallback(
151
188
  formParams,
152
189
  });
153
190
  if (!tokenResult.ok) {
154
- return c.text(`Token exchange failed: ${tokenResult.errorText}`, 502);
191
+ return c.json(
192
+ { error: `Token exchange failed: ${tokenResult.errorText}` },
193
+ 502
194
+ );
155
195
  }
156
196
 
157
197
  const {
@@ -160,10 +200,13 @@ export async function handleAuthCallback(
160
200
  expires_in,
161
201
  } = tokenResult.body;
162
202
  if (!refreshToken) {
163
- return c.text('Token response missing refresh_token', 502);
203
+ return c.json({ error: 'Token response missing refresh_token' }, 502);
164
204
  }
165
205
  if (!isPositiveFiniteNumber(expires_in)) {
166
- return c.text('Token response missing or invalid expires_in', 502);
206
+ return c.json(
207
+ { error: 'Token response missing or invalid expires_in' },
208
+ 502
209
+ );
167
210
  }
168
211
 
169
212
  const expiresAt = Date.now() + expires_in * 1000;
@@ -175,6 +218,8 @@ export async function handleAuthCallback(
175
218
  name: HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,
176
219
  value: accessToken,
177
220
  path: '/',
221
+ sameSite: 'None',
222
+ partitioned: true,
178
223
  maxAge: expires_in,
179
224
  }),
180
225
  });
@@ -184,15 +229,13 @@ export async function handleAuthCallback(
184
229
  name: refreshCookieName,
185
230
  value: refreshToken,
186
231
  path: refreshCookiePath,
232
+ sameSite: 'None',
233
+ partitioned: true,
187
234
  maxAge: REFRESH_COOKIE_MAX_AGE_SEC,
188
235
  }),
189
236
  });
190
237
  setResponseCookie({ c, value: clearTempCookie(TEMP_COOKIE_PKCE_VERIFIER) });
191
238
  setResponseCookie({ c, value: clearTempCookie(TEMP_COOKIE_OAUTH_STATE) });
192
239
 
193
- const separator = returnPath.includes('?') ? '&' : '?';
194
- return c.redirect(
195
- `${returnPath}${separator}${EXPIRES_AT_URL_PARAM}=${expiresAt}`,
196
- 302
197
- );
240
+ return c.json({ expires_at: expiresAt, return_path: returnPath });
198
241
  }