@hubspot/app-connect-sdk 1.0.0-alpha.3 → 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 (504) hide show
  1. package/.turbo/turbo-tsdown.log +20 -492
  2. package/build/tsconfig.browser.tsbuildinfo +1 -1
  3. package/build/tsconfig.server.tsbuildinfo +1 -1
  4. package/dist/browser/{create-crdncXsh.js → create-hzqjIhmO.js} +2 -2
  5. package/dist/browser/create-hzqjIhmO.js.map +1 -0
  6. package/dist/browser/index.js +1 -1
  7. package/dist/browser/react/lovable.js +1 -1
  8. package/dist/server/api-client.d.ts +60625 -197
  9. package/dist/server/api-client.js +5826 -100
  10. package/dist/server/api-client.js.map +1 -0
  11. package/dist/server/{api-client-core/client.js → binary-data-BOalJzKu.js} +58 -3
  12. package/dist/server/binary-data-BOalJzKu.js.map +1 -0
  13. package/dist/server/lovable.d.ts +117 -6
  14. package/dist/server/lovable.js +1458 -3
  15. package/dist/server/lovable.js.map +1 -0
  16. package/dist/server/oauth.d.ts +128 -6
  17. package/dist/server/oauth.js +1 -4
  18. package/dist/server/sha256-B7y8GBFB.js +228 -0
  19. package/dist/server/sha256-B7y8GBFB.js.map +1 -0
  20. package/dist/server/{types.d.ts → types-5gfN91Fq.d.ts} +2 -2
  21. package/dist/server/{api-client-core/types.d.ts → types-DEOUH4wE.d.ts} +2 -2
  22. package/package.json +5 -11
  23. package/src/browser/app-connect-controller/connect-start.ts +2 -1
  24. package/tsdown.config.ts +1 -1
  25. package/.turbo/turbo-format$colon$check.log +0 -4
  26. package/.turbo/turbo-lint.log +0 -2
  27. package/.turbo/turbo-test.log +0 -78
  28. package/dist/browser/create-crdncXsh.js.map +0 -1
  29. package/dist/server/api-client-core/apis/account/account-info-types.generated.d.ts +0 -111
  30. package/dist/server/api-client-core/apis/account/account-info.generated.d.ts +0 -7
  31. package/dist/server/api-client-core/apis/account/account-info.generated.js +0 -9
  32. package/dist/server/api-client-core/apis/account/account-info.generated.js.map +0 -1
  33. package/dist/server/api-client-core/apis/account/audit-logs-types.generated.d.ts +0 -247
  34. package/dist/server/api-client-core/apis/account/audit-logs.generated.d.ts +0 -7
  35. package/dist/server/api-client-core/apis/account/audit-logs.generated.js +0 -28
  36. package/dist/server/api-client-core/apis/account/audit-logs.generated.js.map +0 -1
  37. package/dist/server/api-client-core/apis/auth/oauth-types.generated.d.ts +0 -121
  38. package/dist/server/api-client-core/apis/auth/oauth.generated.d.ts +0 -7
  39. package/dist/server/api-client-core/apis/auth/oauth.generated.js +0 -19
  40. package/dist/server/api-client-core/apis/auth/oauth.generated.js.map +0 -1
  41. package/dist/server/api-client-core/apis/automation/actions-types.generated.d.ts +0 -933
  42. package/dist/server/api-client-core/apis/automation/actions.generated.d.ts +0 -7
  43. package/dist/server/api-client-core/apis/automation/actions.generated.js +0 -121
  44. package/dist/server/api-client-core/apis/automation/actions.generated.js.map +0 -1
  45. package/dist/server/api-client-core/apis/automation/sequences-types.generated.d.ts +0 -422
  46. package/dist/server/api-client-core/apis/automation/sequences.generated.d.ts +0 -7
  47. package/dist/server/api-client-core/apis/automation/sequences.generated.js +0 -22
  48. package/dist/server/api-client-core/apis/automation/sequences.generated.js.map +0 -1
  49. package/dist/server/api-client-core/apis/business-units-types.generated.d.ts +0 -75
  50. package/dist/server/api-client-core/apis/business-units.generated.d.ts +0 -7
  51. package/dist/server/api-client-core/apis/business-units.generated.js +0 -12
  52. package/dist/server/api-client-core/apis/business-units.generated.js.map +0 -1
  53. package/dist/server/api-client-core/apis/cms/authors-types.generated.d.ts +0 -551
  54. package/dist/server/api-client-core/apis/cms/authors.generated.d.ts +0 -7
  55. package/dist/server/api-client-core/apis/cms/authors.generated.js +0 -163
  56. package/dist/server/api-client-core/apis/cms/authors.generated.js.map +0 -1
  57. package/dist/server/api-client-core/apis/cms/blog-settings-types.generated.d.ts +0 -366
  58. package/dist/server/api-client-core/apis/cms/blog-settings.generated.d.ts +0 -7
  59. package/dist/server/api-client-core/apis/cms/blog-settings.generated.js +0 -43
  60. package/dist/server/api-client-core/apis/cms/blog-settings.generated.js.map +0 -1
  61. package/dist/server/api-client-core/apis/cms/cms-content-audit-types.generated.d.ts +0 -157
  62. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.d.ts +0 -7
  63. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js +0 -18
  64. package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js.map +0 -1
  65. package/dist/server/api-client-core/apis/cms/domains-types.generated.d.ts +0 -193
  66. package/dist/server/api-client-core/apis/cms/domains.generated.d.ts +0 -7
  67. package/dist/server/api-client-core/apis/cms/domains.generated.js +0 -20
  68. package/dist/server/api-client-core/apis/cms/domains.generated.js.map +0 -1
  69. package/dist/server/api-client-core/apis/cms/hubdb-types.generated.d.ts +0 -1097
  70. package/dist/server/api-client-core/apis/cms/hubdb.generated.d.ts +0 -7
  71. package/dist/server/api-client-core/apis/cms/hubdb.generated.js +0 -192
  72. package/dist/server/api-client-core/apis/cms/hubdb.generated.js.map +0 -1
  73. package/dist/server/api-client-core/apis/cms/media-bridge-types.generated.d.ts +0 -1780
  74. package/dist/server/api-client-core/apis/cms/media-bridge.generated.d.ts +0 -7
  75. package/dist/server/api-client-core/apis/cms/media-bridge.generated.js +0 -185
  76. package/dist/server/api-client-core/apis/cms/media-bridge.generated.js.map +0 -1
  77. package/dist/server/api-client-core/apis/cms/pages-types.generated.d.ts +0 -1768
  78. package/dist/server/api-client-core/apis/cms/pages.generated.d.ts +0 -7
  79. package/dist/server/api-client-core/apis/cms/pages.generated.js +0 -331
  80. package/dist/server/api-client-core/apis/cms/pages.generated.js.map +0 -1
  81. package/dist/server/api-client-core/apis/cms/posts-types.generated.d.ts +0 -1090
  82. package/dist/server/api-client-core/apis/cms/posts.generated.d.ts +0 -7
  83. package/dist/server/api-client-core/apis/cms/posts.generated.js +0 -201
  84. package/dist/server/api-client-core/apis/cms/posts.generated.js.map +0 -1
  85. package/dist/server/api-client-core/apis/cms/site-search-types.generated.d.ts +0 -200
  86. package/dist/server/api-client-core/apis/cms/site-search.generated.d.ts +0 -7
  87. package/dist/server/api-client-core/apis/cms/site-search.generated.js +0 -32
  88. package/dist/server/api-client-core/apis/cms/site-search.generated.js.map +0 -1
  89. package/dist/server/api-client-core/apis/cms/source-code-types.generated.d.ts +0 -218
  90. package/dist/server/api-client-core/apis/cms/source-code.generated.d.ts +0 -7
  91. package/dist/server/api-client-core/apis/cms/source-code.generated.js +0 -52
  92. package/dist/server/api-client-core/apis/cms/source-code.generated.js.map +0 -1
  93. package/dist/server/api-client-core/apis/cms/tags-types.generated.d.ts +0 -515
  94. package/dist/server/api-client-core/apis/cms/tags.generated.d.ts +0 -7
  95. package/dist/server/api-client-core/apis/cms/tags.generated.js +0 -163
  96. package/dist/server/api-client-core/apis/cms/tags.generated.js.map +0 -1
  97. package/dist/server/api-client-core/apis/cms/url-mappings-types.generated.d.ts +0 -177
  98. package/dist/server/api-client-core/apis/cms/url-mappings.generated.d.ts +0 -7
  99. package/dist/server/api-client-core/apis/cms/url-mappings.generated.js +0 -14
  100. package/dist/server/api-client-core/apis/cms/url-mappings.generated.js.map +0 -1
  101. package/dist/server/api-client-core/apis/cms/url-redirects-types.generated.d.ts +0 -226
  102. package/dist/server/api-client-core/apis/cms/url-redirects.generated.d.ts +0 -7
  103. package/dist/server/api-client-core/apis/cms/url-redirects.generated.js +0 -26
  104. package/dist/server/api-client-core/apis/cms/url-redirects.generated.js.map +0 -1
  105. package/dist/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.d.ts +0 -802
  106. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.d.ts +0 -7
  107. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js +0 -74
  108. package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js.map +0 -1
  109. package/dist/server/api-client-core/apis/conversations/custom-channels-types.generated.d.ts +0 -551
  110. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.d.ts +0 -7
  111. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js +0 -80
  112. package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js.map +0 -1
  113. package/dist/server/api-client-core/apis/conversations/visitor-identification-types.generated.d.ts +0 -60
  114. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.d.ts +0 -7
  115. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js +0 -6
  116. package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js.map +0 -1
  117. package/dist/server/api-client-core/apis/conversations-types.generated.d.ts +0 -908
  118. package/dist/server/api-client-core/apis/conversations.generated.d.ts +0 -7
  119. package/dist/server/api-client-core/apis/conversations.generated.js +0 -108
  120. package/dist/server/api-client-core/apis/conversations.generated.js.map +0 -1
  121. package/dist/server/api-client-core/apis/crm/app-uninstalls-types.generated.d.ts +0 -37
  122. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.d.ts +0 -7
  123. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js +0 -6
  124. package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js.map +0 -1
  125. package/dist/server/api-client-core/apis/crm/appointments-types.generated.d.ts +0 -989
  126. package/dist/server/api-client-core/apis/crm/appointments.generated.d.ts +0 -7
  127. package/dist/server/api-client-core/apis/crm/appointments.generated.js +0 -118
  128. package/dist/server/api-client-core/apis/crm/appointments.generated.js.map +0 -1
  129. package/dist/server/api-client-core/apis/crm/associations-schema-types.generated.d.ts +0 -329
  130. package/dist/server/api-client-core/apis/crm/associations-schema.generated.d.ts +0 -7
  131. package/dist/server/api-client-core/apis/crm/associations-schema.generated.js +0 -60
  132. package/dist/server/api-client-core/apis/crm/associations-schema.generated.js.map +0 -1
  133. package/dist/server/api-client-core/apis/crm/associations-types.generated.d.ts +0 -661
  134. package/dist/server/api-client-core/apis/crm/associations.generated.d.ts +0 -7
  135. package/dist/server/api-client-core/apis/crm/associations.generated.js +0 -83
  136. package/dist/server/api-client-core/apis/crm/associations.generated.js.map +0 -1
  137. package/dist/server/api-client-core/apis/crm/calling-extensions-types.generated.d.ts +0 -466
  138. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.d.ts +0 -7
  139. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js +0 -42
  140. package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js.map +0 -1
  141. package/dist/server/api-client-core/apis/crm/calls-types.generated.d.ts +0 -850
  142. package/dist/server/api-client-core/apis/crm/calls.generated.d.ts +0 -7
  143. package/dist/server/api-client-core/apis/crm/calls.generated.js +0 -66
  144. package/dist/server/api-client-core/apis/crm/calls.generated.js.map +0 -1
  145. package/dist/server/api-client-core/apis/crm/carts-types.generated.d.ts +0 -850
  146. package/dist/server/api-client-core/apis/crm/carts.generated.d.ts +0 -7
  147. package/dist/server/api-client-core/apis/crm/carts.generated.js +0 -66
  148. package/dist/server/api-client-core/apis/crm/carts.generated.js.map +0 -1
  149. package/dist/server/api-client-core/apis/crm/commerce-payments-types.generated.d.ts +0 -850
  150. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.d.ts +0 -7
  151. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js +0 -66
  152. package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js.map +0 -1
  153. package/dist/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.d.ts +0 -847
  154. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.d.ts +0 -7
  155. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js +0 -66
  156. package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js.map +0 -1
  157. package/dist/server/api-client-core/apis/crm/communications-types.generated.d.ts +0 -850
  158. package/dist/server/api-client-core/apis/crm/communications.generated.d.ts +0 -7
  159. package/dist/server/api-client-core/apis/crm/communications.generated.js +0 -66
  160. package/dist/server/api-client-core/apis/crm/communications.generated.js.map +0 -1
  161. package/dist/server/api-client-core/apis/crm/companies-types.generated.d.ts +0 -884
  162. package/dist/server/api-client-core/apis/crm/companies.generated.d.ts +0 -7
  163. package/dist/server/api-client-core/apis/crm/companies.generated.js +0 -67
  164. package/dist/server/api-client-core/apis/crm/companies.generated.js.map +0 -1
  165. package/dist/server/api-client-core/apis/crm/contacts-types.generated.d.ts +0 -899
  166. package/dist/server/api-client-core/apis/crm/contacts.generated.d.ts +0 -7
  167. package/dist/server/api-client-core/apis/crm/contacts.generated.js +0 -70
  168. package/dist/server/api-client-core/apis/crm/contacts.generated.js.map +0 -1
  169. package/dist/server/api-client-core/apis/crm/contracts-types.generated.d.ts +0 -850
  170. package/dist/server/api-client-core/apis/crm/contracts.generated.d.ts +0 -7
  171. package/dist/server/api-client-core/apis/crm/contracts.generated.js +0 -66
  172. package/dist/server/api-client-core/apis/crm/contracts.generated.js.map +0 -1
  173. package/dist/server/api-client-core/apis/crm/courses-types.generated.d.ts +0 -853
  174. package/dist/server/api-client-core/apis/crm/courses.generated.d.ts +0 -7
  175. package/dist/server/api-client-core/apis/crm/courses.generated.js +0 -66
  176. package/dist/server/api-client-core/apis/crm/courses.generated.js.map +0 -1
  177. package/dist/server/api-client-core/apis/crm/crm-owners-types.generated.d.ts +0 -140
  178. package/dist/server/api-client-core/apis/crm/crm-owners.generated.d.ts +0 -7
  179. package/dist/server/api-client-core/apis/crm/crm-owners.generated.js +0 -20
  180. package/dist/server/api-client-core/apis/crm/crm-owners.generated.js.map +0 -1
  181. package/dist/server/api-client-core/apis/crm/custom-objects-types.generated.d.ts +0 -934
  182. package/dist/server/api-client-core/apis/crm/custom-objects.generated.d.ts +0 -7
  183. package/dist/server/api-client-core/apis/crm/custom-objects.generated.js +0 -101
  184. package/dist/server/api-client-core/apis/crm/custom-objects.generated.js.map +0 -1
  185. package/dist/server/api-client-core/apis/crm/deal-splits-types.generated.d.ts +0 -196
  186. package/dist/server/api-client-core/apis/crm/deal-splits.generated.d.ts +0 -7
  187. package/dist/server/api-client-core/apis/crm/deal-splits.generated.js +0 -9
  188. package/dist/server/api-client-core/apis/crm/deal-splits.generated.js.map +0 -1
  189. package/dist/server/api-client-core/apis/crm/deals-types.generated.d.ts +0 -872
  190. package/dist/server/api-client-core/apis/crm/deals.generated.d.ts +0 -7
  191. package/dist/server/api-client-core/apis/crm/deals.generated.js +0 -67
  192. package/dist/server/api-client-core/apis/crm/deals.generated.js.map +0 -1
  193. package/dist/server/api-client-core/apis/crm/discounts-types.generated.d.ts +0 -846
  194. package/dist/server/api-client-core/apis/crm/discounts.generated.d.ts +0 -7
  195. package/dist/server/api-client-core/apis/crm/discounts.generated.js +0 -66
  196. package/dist/server/api-client-core/apis/crm/discounts.generated.js.map +0 -1
  197. package/dist/server/api-client-core/apis/crm/emails-types.generated.d.ts +0 -850
  198. package/dist/server/api-client-core/apis/crm/emails.generated.d.ts +0 -7
  199. package/dist/server/api-client-core/apis/crm/emails.generated.js +0 -66
  200. package/dist/server/api-client-core/apis/crm/emails.generated.js.map +0 -1
  201. package/dist/server/api-client-core/apis/crm/exports-types.generated.d.ts +0 -281
  202. package/dist/server/api-client-core/apis/crm/exports.generated.d.ts +0 -7
  203. package/dist/server/api-client-core/apis/crm/exports.generated.js +0 -12
  204. package/dist/server/api-client-core/apis/crm/exports.generated.js.map +0 -1
  205. package/dist/server/api-client-core/apis/crm/feedback-submissions-types.generated.d.ts +0 -616
  206. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.d.ts +0 -7
  207. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js +0 -55
  208. package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js.map +0 -1
  209. package/dist/server/api-client-core/apis/crm/fees-types.generated.d.ts +0 -850
  210. package/dist/server/api-client-core/apis/crm/fees.generated.d.ts +0 -7
  211. package/dist/server/api-client-core/apis/crm/fees.generated.js +0 -66
  212. package/dist/server/api-client-core/apis/crm/fees.generated.js.map +0 -1
  213. package/dist/server/api-client-core/apis/crm/goal-targets-types.generated.d.ts +0 -850
  214. package/dist/server/api-client-core/apis/crm/goal-targets.generated.d.ts +0 -7
  215. package/dist/server/api-client-core/apis/crm/goal-targets.generated.js +0 -66
  216. package/dist/server/api-client-core/apis/crm/goal-targets.generated.js.map +0 -1
  217. package/dist/server/api-client-core/apis/crm/imports-types.generated.d.ts +0 -371
  218. package/dist/server/api-client-core/apis/crm/imports.generated.d.ts +0 -7
  219. package/dist/server/api-client-core/apis/crm/imports.generated.js +0 -30
  220. package/dist/server/api-client-core/apis/crm/imports.generated.js.map +0 -1
  221. package/dist/server/api-client-core/apis/crm/invoices-types.generated.d.ts +0 -850
  222. package/dist/server/api-client-core/apis/crm/invoices.generated.d.ts +0 -7
  223. package/dist/server/api-client-core/apis/crm/invoices.generated.js +0 -66
  224. package/dist/server/api-client-core/apis/crm/invoices.generated.js.map +0 -1
  225. package/dist/server/api-client-core/apis/crm/leads-types.generated.d.ts +0 -850
  226. package/dist/server/api-client-core/apis/crm/leads.generated.d.ts +0 -7
  227. package/dist/server/api-client-core/apis/crm/leads.generated.js +0 -66
  228. package/dist/server/api-client-core/apis/crm/leads.generated.js.map +0 -1
  229. package/dist/server/api-client-core/apis/crm/limits-tracking-types.generated.d.ts +0 -331
  230. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.d.ts +0 -7
  231. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js +0 -22
  232. package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js.map +0 -1
  233. package/dist/server/api-client-core/apis/crm/line-items-types.generated.d.ts +0 -850
  234. package/dist/server/api-client-core/apis/crm/line-items.generated.d.ts +0 -7
  235. package/dist/server/api-client-core/apis/crm/line-items.generated.js +0 -66
  236. package/dist/server/api-client-core/apis/crm/line-items.generated.js.map +0 -1
  237. package/dist/server/api-client-core/apis/crm/listings-types.generated.d.ts +0 -853
  238. package/dist/server/api-client-core/apis/crm/listings.generated.d.ts +0 -7
  239. package/dist/server/api-client-core/apis/crm/listings.generated.js +0 -66
  240. package/dist/server/api-client-core/apis/crm/listings.generated.js.map +0 -1
  241. package/dist/server/api-client-core/apis/crm/lists-types.generated.d.ts +0 -2265
  242. package/dist/server/api-client-core/apis/crm/lists.generated.d.ts +0 -7
  243. package/dist/server/api-client-core/apis/crm/lists.generated.js +0 -105
  244. package/dist/server/api-client-core/apis/crm/lists.generated.js.map +0 -1
  245. package/dist/server/api-client-core/apis/crm/meetings-types.generated.d.ts +0 -850
  246. package/dist/server/api-client-core/apis/crm/meetings.generated.d.ts +0 -7
  247. package/dist/server/api-client-core/apis/crm/meetings.generated.js +0 -66
  248. package/dist/server/api-client-core/apis/crm/meetings.generated.js.map +0 -1
  249. package/dist/server/api-client-core/apis/crm/notes-types.generated.d.ts +0 -850
  250. package/dist/server/api-client-core/apis/crm/notes.generated.d.ts +0 -7
  251. package/dist/server/api-client-core/apis/crm/notes.generated.js +0 -66
  252. package/dist/server/api-client-core/apis/crm/notes.generated.js.map +0 -1
  253. package/dist/server/api-client-core/apis/crm/object-library-types.generated.d.ts +0 -60
  254. package/dist/server/api-client-core/apis/crm/object-library.generated.d.ts +0 -7
  255. package/dist/server/api-client-core/apis/crm/object-library.generated.js +0 -9
  256. package/dist/server/api-client-core/apis/crm/object-library.generated.js.map +0 -1
  257. package/dist/server/api-client-core/apis/crm/objects-types.generated.d.ts +0 -712
  258. package/dist/server/api-client-core/apis/crm/objects.generated.d.ts +0 -7
  259. package/dist/server/api-client-core/apis/crm/objects.generated.js +0 -76
  260. package/dist/server/api-client-core/apis/crm/objects.generated.js.map +0 -1
  261. package/dist/server/api-client-core/apis/crm/orders-types.generated.d.ts +0 -850
  262. package/dist/server/api-client-core/apis/crm/orders.generated.d.ts +0 -7
  263. package/dist/server/api-client-core/apis/crm/orders.generated.js +0 -66
  264. package/dist/server/api-client-core/apis/crm/orders.generated.js.map +0 -1
  265. package/dist/server/api-client-core/apis/crm/partner-clients-types.generated.d.ts +0 -725
  266. package/dist/server/api-client-core/apis/crm/partner-clients.generated.d.ts +0 -7
  267. package/dist/server/api-client-core/apis/crm/partner-clients.generated.js +0 -71
  268. package/dist/server/api-client-core/apis/crm/partner-clients.generated.js.map +0 -1
  269. package/dist/server/api-client-core/apis/crm/partner-services-types.generated.d.ts +0 -725
  270. package/dist/server/api-client-core/apis/crm/partner-services.generated.d.ts +0 -7
  271. package/dist/server/api-client-core/apis/crm/partner-services.generated.js +0 -71
  272. package/dist/server/api-client-core/apis/crm/partner-services.generated.js.map +0 -1
  273. package/dist/server/api-client-core/apis/crm/pipelines-types.generated.d.ts +0 -430
  274. package/dist/server/api-client-core/apis/crm/pipelines.generated.d.ts +0 -7
  275. package/dist/server/api-client-core/apis/crm/pipelines.generated.js +0 -94
  276. package/dist/server/api-client-core/apis/crm/pipelines.generated.js.map +0 -1
  277. package/dist/server/api-client-core/apis/crm/postal-mail-types.generated.d.ts +0 -844
  278. package/dist/server/api-client-core/apis/crm/postal-mail.generated.d.ts +0 -7
  279. package/dist/server/api-client-core/apis/crm/postal-mail.generated.js +0 -66
  280. package/dist/server/api-client-core/apis/crm/postal-mail.generated.js.map +0 -1
  281. package/dist/server/api-client-core/apis/crm/products-types.generated.d.ts +0 -850
  282. package/dist/server/api-client-core/apis/crm/products.generated.d.ts +0 -7
  283. package/dist/server/api-client-core/apis/crm/products.generated.js +0 -66
  284. package/dist/server/api-client-core/apis/crm/products.generated.js.map +0 -1
  285. package/dist/server/api-client-core/apis/crm/projects-types.generated.d.ts +0 -881
  286. package/dist/server/api-client-core/apis/crm/projects.generated.d.ts +0 -7
  287. package/dist/server/api-client-core/apis/crm/projects.generated.js +0 -67
  288. package/dist/server/api-client-core/apis/crm/projects.generated.js.map +0 -1
  289. package/dist/server/api-client-core/apis/crm/properties-types.generated.d.ts +0 -603
  290. package/dist/server/api-client-core/apis/crm/properties.generated.d.ts +0 -7
  291. package/dist/server/api-client-core/apis/crm/properties.generated.js +0 -86
  292. package/dist/server/api-client-core/apis/crm/properties.generated.js.map +0 -1
  293. package/dist/server/api-client-core/apis/crm/property-validations-types.generated.d.ts +0 -121
  294. package/dist/server/api-client-core/apis/crm/property-validations.generated.d.ts +0 -7
  295. package/dist/server/api-client-core/apis/crm/property-validations.generated.js +0 -25
  296. package/dist/server/api-client-core/apis/crm/property-validations.generated.js.map +0 -1
  297. package/dist/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.d.ts +0 -486
  298. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.d.ts +0 -7
  299. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js +0 -34
  300. package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js.map +0 -1
  301. package/dist/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.d.ts +0 -247
  302. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.d.ts +0 -7
  303. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js +0 -69
  304. package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js.map +0 -1
  305. package/dist/server/api-client-core/apis/crm/quotes-types.generated.d.ts +0 -850
  306. package/dist/server/api-client-core/apis/crm/quotes.generated.d.ts +0 -7
  307. package/dist/server/api-client-core/apis/crm/quotes.generated.js +0 -66
  308. package/dist/server/api-client-core/apis/crm/quotes.generated.js.map +0 -1
  309. package/dist/server/api-client-core/apis/crm/schemas-types.generated.d.ts +0 -669
  310. package/dist/server/api-client-core/apis/crm/schemas.generated.d.ts +0 -7
  311. package/dist/server/api-client-core/apis/crm/schemas.generated.js +0 -41
  312. package/dist/server/api-client-core/apis/crm/schemas.generated.js.map +0 -1
  313. package/dist/server/api-client-core/apis/crm/services-types.generated.d.ts +0 -853
  314. package/dist/server/api-client-core/apis/crm/services.generated.d.ts +0 -7
  315. package/dist/server/api-client-core/apis/crm/services.generated.js +0 -66
  316. package/dist/server/api-client-core/apis/crm/services.generated.js.map +0 -1
  317. package/dist/server/api-client-core/apis/crm/tasks-types.generated.d.ts +0 -850
  318. package/dist/server/api-client-core/apis/crm/tasks.generated.d.ts +0 -7
  319. package/dist/server/api-client-core/apis/crm/tasks.generated.js +0 -66
  320. package/dist/server/api-client-core/apis/crm/tasks.generated.js.map +0 -1
  321. package/dist/server/api-client-core/apis/crm/taxes-types.generated.d.ts +0 -850
  322. package/dist/server/api-client-core/apis/crm/taxes.generated.d.ts +0 -7
  323. package/dist/server/api-client-core/apis/crm/taxes.generated.js +0 -66
  324. package/dist/server/api-client-core/apis/crm/taxes.generated.js.map +0 -1
  325. package/dist/server/api-client-core/apis/crm/tickets-types.generated.d.ts +0 -884
  326. package/dist/server/api-client-core/apis/crm/tickets.generated.d.ts +0 -7
  327. package/dist/server/api-client-core/apis/crm/tickets.generated.js +0 -67
  328. package/dist/server/api-client-core/apis/crm/tickets.generated.js.map +0 -1
  329. package/dist/server/api-client-core/apis/crm/timeline-types.generated.d.ts +0 -187
  330. package/dist/server/api-client-core/apis/crm/timeline.generated.d.ts +0 -7
  331. package/dist/server/api-client-core/apis/crm/timeline.generated.js +0 -12
  332. package/dist/server/api-client-core/apis/crm/timeline.generated.js.map +0 -1
  333. package/dist/server/api-client-core/apis/crm/transcriptions-types.generated.d.ts +0 -152
  334. package/dist/server/api-client-core/apis/crm/transcriptions.generated.d.ts +0 -7
  335. package/dist/server/api-client-core/apis/crm/transcriptions.generated.js +0 -15
  336. package/dist/server/api-client-core/apis/crm/transcriptions.generated.js.map +0 -1
  337. package/dist/server/api-client-core/apis/crm/users-types.generated.d.ts +0 -850
  338. package/dist/server/api-client-core/apis/crm/users.generated.d.ts +0 -7
  339. package/dist/server/api-client-core/apis/crm/users.generated.js +0 -66
  340. package/dist/server/api-client-core/apis/crm/users.generated.js.map +0 -1
  341. package/dist/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.d.ts +0 -72
  342. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.d.ts +0 -7
  343. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js +0 -13
  344. package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js.map +0 -1
  345. package/dist/server/api-client-core/apis/events/manage-event-definitions-types.generated.d.ts +0 -1005
  346. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.d.ts +0 -7
  347. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js +0 -39
  348. package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js.map +0 -1
  349. package/dist/server/api-client-core/apis/events/send-event-completions-types.generated.d.ts +0 -94
  350. package/dist/server/api-client-core/apis/events/send-event-completions.generated.d.ts +0 -7
  351. package/dist/server/api-client-core/apis/events/send-event-completions.generated.js +0 -9
  352. package/dist/server/api-client-core/apis/events/send-event-completions.generated.js.map +0 -1
  353. package/dist/server/api-client-core/apis/events-types.generated.d.ts +0 -137
  354. package/dist/server/api-client-core/apis/events.generated.d.ts +0 -7
  355. package/dist/server/api-client-core/apis/events.generated.js +0 -23
  356. package/dist/server/api-client-core/apis/events.generated.js.map +0 -1
  357. package/dist/server/api-client-core/apis/files-types.generated.d.ts +0 -791
  358. package/dist/server/api-client-core/apis/files.generated.d.ts +0 -7
  359. package/dist/server/api-client-core/apis/files.generated.js +0 -119
  360. package/dist/server/api-client-core/apis/files.generated.js.map +0 -1
  361. package/dist/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.d.ts +0 -989
  362. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.d.ts +0 -7
  363. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js +0 -139
  364. package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js.map +0 -1
  365. package/dist/server/api-client-core/apis/marketing/marketing-emails-types.generated.d.ts +0 -883
  366. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.d.ts +0 -7
  367. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js +0 -108
  368. package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js.map +0 -1
  369. package/dist/server/api-client-core/apis/marketing/marketing-events-types.generated.d.ts +0 -1788
  370. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.d.ts +0 -7
  371. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js +0 -176
  372. package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js.map +0 -1
  373. package/dist/server/api-client-core/apis/marketing/single-send-types.generated.d.ts +0 -123
  374. package/dist/server/api-client-core/apis/marketing/single-send.generated.d.ts +0 -7
  375. package/dist/server/api-client-core/apis/marketing/single-send.generated.js +0 -6
  376. package/dist/server/api-client-core/apis/marketing/single-send.generated.js.map +0 -1
  377. package/dist/server/api-client-core/apis/marketing/transactional-single-send-types.generated.d.ts +0 -257
  378. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.d.ts +0 -7
  379. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js +0 -20
  380. package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js.map +0 -1
  381. package/dist/server/api-client-core/apis/meta/origins-types.generated.d.ts +0 -77
  382. package/dist/server/api-client-core/apis/meta/origins.generated.d.ts +0 -7
  383. package/dist/server/api-client-core/apis/meta/origins.generated.js +0 -15
  384. package/dist/server/api-client-core/apis/meta/origins.generated.js.map +0 -1
  385. package/dist/server/api-client-core/apis/scheduler/meetings-types.generated.d.ts +0 -913
  386. package/dist/server/api-client-core/apis/scheduler/meetings.generated.d.ts +0 -7
  387. package/dist/server/api-client-core/apis/scheduler/meetings.generated.js +0 -34
  388. package/dist/server/api-client-core/apis/scheduler/meetings.generated.js.map +0 -1
  389. package/dist/server/api-client-core/apis/settings/multicurrency-types.generated.d.ts +0 -404
  390. package/dist/server/api-client-core/apis/settings/multicurrency.generated.d.ts +0 -7
  391. package/dist/server/api-client-core/apis/settings/multicurrency.generated.js +0 -38
  392. package/dist/server/api-client-core/apis/settings/multicurrency.generated.js.map +0 -1
  393. package/dist/server/api-client-core/apis/settings/tax-rates-types.generated.d.ts +0 -111
  394. package/dist/server/api-client-core/apis/settings/tax-rates.generated.d.ts +0 -7
  395. package/dist/server/api-client-core/apis/settings/tax-rates.generated.js +0 -13
  396. package/dist/server/api-client-core/apis/settings/tax-rates.generated.js.map +0 -1
  397. package/dist/server/api-client-core/apis/settings/user-provisioning-types.generated.d.ts +0 -297
  398. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.d.ts +0 -7
  399. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js +0 -31
  400. package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js.map +0 -1
  401. package/dist/server/api-client-core/apis/webhooks-journal-types.generated.d.ts +0 -643
  402. package/dist/server/api-client-core/apis/webhooks-journal.generated.d.ts +0 -7
  403. package/dist/server/api-client-core/apis/webhooks-journal.generated.js +0 -75
  404. package/dist/server/api-client-core/apis/webhooks-journal.generated.js.map +0 -1
  405. package/dist/server/api-client-core/apis/webhooks-types.generated.d.ts +0 -1016
  406. package/dist/server/api-client-core/apis/webhooks.generated.d.ts +0 -7
  407. package/dist/server/api-client-core/apis/webhooks.generated.js +0 -105
  408. package/dist/server/api-client-core/apis/webhooks.generated.js.map +0 -1
  409. package/dist/server/api-client-core/binary-data.d.ts +0 -33
  410. package/dist/server/api-client-core/binary-data.js +0 -29
  411. package/dist/server/api-client-core/binary-data.js.map +0 -1
  412. package/dist/server/api-client-core/client.d.ts +0 -14
  413. package/dist/server/api-client-core/client.js.map +0 -1
  414. package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js +0 -25
  415. package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js.map +0 -1
  416. package/dist/server/api-client-core/errors.d.ts +0 -27
  417. package/dist/server/api-client-core/errors.js +0 -33
  418. package/dist/server/api-client-core/errors.js.map +0 -1
  419. package/dist/server/api-client-core/op.d.ts +0 -37
  420. package/dist/server/api-client-core/op.js +0 -44
  421. package/dist/server/api-client-core/op.js.map +0 -1
  422. package/dist/server/api-client-core/pagination.d.ts +0 -60
  423. package/dist/server/api-client-core/pagination.js +0 -103
  424. package/dist/server/api-client-core/pagination.js.map +0 -1
  425. package/dist/server/api-client-core/plugins/fetch-transport.js +0 -76
  426. package/dist/server/api-client-core/plugins/fetch-transport.js.map +0 -1
  427. package/dist/server/constants.js +0 -73
  428. package/dist/server/constants.js.map +0 -1
  429. package/dist/server/deno/start.d.ts +0 -12
  430. package/dist/server/deno/start.js +0 -21
  431. package/dist/server/deno/start.js.map +0 -1
  432. package/dist/server/hono/hono-request-handler.js +0 -59
  433. package/dist/server/hono/hono-request-handler.js.map +0 -1
  434. package/dist/server/hono/hubspot-connect-routes/auth-complete.js +0 -154
  435. package/dist/server/hono/hubspot-connect-routes/auth-complete.js.map +0 -1
  436. package/dist/server/hono/hubspot-connect-routes/auth-init-session.js +0 -101
  437. package/dist/server/hono/hubspot-connect-routes/auth-init-session.js.map +0 -1
  438. package/dist/server/hono/hubspot-connect-routes/auth-logout.js +0 -114
  439. package/dist/server/hono/hubspot-connect-routes/auth-logout.js.map +0 -1
  440. package/dist/server/hono/hubspot-connect-routes/auth-refresh.js +0 -107
  441. package/dist/server/hono/hubspot-connect-routes/auth-refresh.js.map +0 -1
  442. package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.d.ts +0 -16
  443. package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js +0 -13
  444. package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js.map +0 -1
  445. package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js +0 -42
  446. package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js.map +0 -1
  447. package/dist/server/hono/hubspot-connect-routes/constants.js +0 -8
  448. package/dist/server/hono/hubspot-connect-routes/constants.js.map +0 -1
  449. package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js +0 -43
  450. package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js.map +0 -1
  451. package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js +0 -37
  452. package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js.map +0 -1
  453. package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js +0 -34
  454. package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js.map +0 -1
  455. package/dist/server/hono/hubspot-connect-routes/oauth-client.js +0 -104
  456. package/dist/server/hono/hubspot-connect-routes/oauth-client.js.map +0 -1
  457. package/dist/server/hono/hubspot-connect-routes/utils.js +0 -120
  458. package/dist/server/hono/hubspot-connect-routes/utils.js.map +0 -1
  459. package/dist/server/hono/index.js +0 -4
  460. package/dist/server/hono/types.d.ts +0 -32
  461. package/dist/server/hono/utils/cookie-utils.js +0 -30
  462. package/dist/server/hono/utils/cookie-utils.js.map +0 -1
  463. package/dist/server/hono/utils/cors-middleware.js +0 -85
  464. package/dist/server/hono/utils/cors-middleware.js.map +0 -1
  465. package/dist/server/import-app-keys.js +0 -42
  466. package/dist/server/import-app-keys.js.map +0 -1
  467. package/dist/server/lovable/create-app-function-start.d.ts +0 -26
  468. package/dist/server/lovable/create-app-function-start.js +0 -28
  469. package/dist/server/lovable/create-app-function-start.js.map +0 -1
  470. package/dist/server/lovable/hubspot-connect/index.d.ts +0 -15
  471. package/dist/server/lovable/hubspot-connect/index.js +0 -20
  472. package/dist/server/lovable/hubspot-connect/index.js.map +0 -1
  473. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js +0 -29
  474. package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js.map +0 -1
  475. package/dist/server/proxy.js +0 -68
  476. package/dist/server/proxy.js.map +0 -1
  477. package/dist/server/sanitize-request.js +0 -55
  478. package/dist/server/sanitize-request.js.map +0 -1
  479. package/dist/server/secure-start-core.d.ts +0 -23
  480. package/dist/server/secure-start-core.js +0 -28
  481. package/dist/server/secure-start-core.js.map +0 -1
  482. package/dist/server/shared/constants.js +0 -30
  483. package/dist/server/shared/constants.js.map +0 -1
  484. package/dist/server/shared/encoding/base64.js +0 -45
  485. package/dist/server/shared/encoding/base64.js.map +0 -1
  486. package/dist/server/shared/encoding/sha256.d.ts +0 -10
  487. package/dist/server/shared/encoding/sha256.js +0 -15
  488. package/dist/server/shared/encoding/sha256.js.map +0 -1
  489. package/dist/server/shared/logger.d.ts +0 -15
  490. package/dist/server/shared/logger.js +0 -16
  491. package/dist/server/shared/logger.js.map +0 -1
  492. package/dist/server/utils/cookie-utils.js +0 -21
  493. package/dist/server/utils/cookie-utils.js.map +0 -1
  494. package/dist/server/utils/dpop-utils.d.ts +0 -67
  495. package/dist/server/utils/dpop-utils.js +0 -75
  496. package/dist/server/utils/dpop-utils.js.map +0 -1
  497. package/dist/server/utils/env-utils.js +0 -54
  498. package/dist/server/utils/env-utils.js.map +0 -1
  499. package/dist/server/utils/jwk-utils.d.ts +0 -16
  500. package/dist/server/utils/jwk-utils.js +0 -24
  501. package/dist/server/utils/jwk-utils.js.map +0 -1
  502. package/dist/server/utils/jwt-utils.d.ts +0 -39
  503. package/dist/server/utils/jwt-utils.js +0 -87
  504. package/dist/server/utils/jwt-utils.js.map +0 -1
@@ -1,76 +0,0 @@
1
- import { isBinaryData } from "../binary-data.js";
2
- //#region src/server/api-client-core/plugins/fetch-transport.ts
3
- const BASE_URL = "https://api.hubapi.com";
4
- function appendRecordToUrlSearchParams(params, record) {
5
- for (const [key, value] of Object.entries(record)) {
6
- if (value == null) continue;
7
- if (Array.isArray(value)) for (const item of value) params.append(key, String(item));
8
- else params.append(key, String(value));
9
- }
10
- }
11
- /**
12
- * Transport plugin that executes HTTP requests using the Fetch API.
13
- *
14
- * This is the terminal middleware in the chain — it builds the actual HTTP
15
- * request from the operation descriptor and returns a normalized response.
16
- * It handles path-parameter interpolation, query-string serialization,
17
- * Bearer-token auth, and content-type negotiation (JSON, form-urlencoded, multipart).
18
- */
19
- function fetchTransportPlugin(options) {
20
- return { activate(api) {
21
- api.addMiddleware(async (ctx) => {
22
- const { operation } = ctx;
23
- let url = `${BASE_URL}${operation.path}`;
24
- if (operation.pathParams) for (const [key, value] of Object.entries(operation.pathParams)) url = url.replace(`{${key}}`, encodeURIComponent(String(value)));
25
- if (operation.queryParams) {
26
- const params = new URLSearchParams();
27
- appendRecordToUrlSearchParams(params, operation.queryParams);
28
- const qs = params.toString();
29
- if (qs) url += `?${qs}`;
30
- }
31
- const headers = {
32
- ...operation.headers ?? {},
33
- Authorization: `Bearer ${options.getAccessToken()}`
34
- };
35
- const init = {
36
- method: operation.method.toUpperCase(),
37
- headers
38
- };
39
- if (operation.contentType === "multipart/form-data" && operation.body) {
40
- const formData = new FormData();
41
- for (const [key, value] of Object.entries(operation.body)) {
42
- if (value == null) continue;
43
- if (isBinaryData(value)) formData.append(key, value.source);
44
- else formData.append(key, String(value));
45
- }
46
- init.body = formData;
47
- } else if (operation.contentType === "application/x-www-form-urlencoded") {
48
- headers["Content-Type"] = "application/x-www-form-urlencoded";
49
- if (operation.body) {
50
- const params = new URLSearchParams();
51
- appendRecordToUrlSearchParams(params, operation.body);
52
- const encoded = params.toString();
53
- if (encoded) init.body = encoded;
54
- }
55
- } else {
56
- headers["Content-Type"] = "application/json";
57
- if (operation.body) init.body = JSON.stringify(operation.body);
58
- }
59
- const response = await fetch(url, init);
60
- const responseHeaders = Object.create(null);
61
- response.headers.forEach((value, key) => {
62
- responseHeaders[key] = value;
63
- });
64
- return {
65
- status: response.status,
66
- statusText: response.statusText,
67
- headers: responseHeaders,
68
- bodyJson: response.status === 204 ? void 0 : await response.json()
69
- };
70
- });
71
- } };
72
- }
73
- //#endregion
74
- export { fetchTransportPlugin };
75
-
76
- //# sourceMappingURL=fetch-transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-transport.js","names":[],"sources":["../../../../src/server/api-client-core/plugins/fetch-transport.ts"],"sourcesContent":["import { isBinaryData } from '../binary-data.ts';\nimport type { Plugin } from '../types.ts';\n\nconst BASE_URL = 'https://api.hubapi.com';\n\nexport interface FetchTransportPluginOptions {\n getAccessToken: () => string;\n}\n\nfunction appendRecordToUrlSearchParams(\n params: URLSearchParams,\n record: Record<string, unknown>\n): void {\n for (const [key, value] of Object.entries(record)) {\n if (value == null) continue;\n if (Array.isArray(value)) {\n for (const item of value) {\n params.append(key, String(item as string));\n }\n } else {\n params.append(key, String(value));\n }\n }\n}\n\n/**\n * Transport plugin that executes HTTP requests using the Fetch API.\n *\n * This is the terminal middleware in the chain — it builds the actual HTTP\n * request from the operation descriptor and returns a normalized response.\n * It handles path-parameter interpolation, query-string serialization,\n * Bearer-token auth, and content-type negotiation (JSON, form-urlencoded, multipart).\n */\nexport function fetchTransportPlugin(\n options: FetchTransportPluginOptions\n): Plugin {\n return {\n activate(api) {\n api.addMiddleware(async (ctx) => {\n const { operation } = ctx;\n\n // Interpolate path parameters (e.g. \"/contacts/{contactId}\" → \"/contacts/123\")\n let url = `${BASE_URL}${operation.path}`;\n if (operation.pathParams) {\n for (const [key, value] of Object.entries(operation.pathParams)) {\n url = url.replace(`{${key}}`, encodeURIComponent(String(value)));\n }\n }\n\n // Serialize query parameters, supporting repeated keys for array values\n if (operation.queryParams) {\n const params = new URLSearchParams();\n appendRecordToUrlSearchParams(params, operation.queryParams);\n const qs = params.toString();\n if (qs) url += `?${qs}`;\n }\n\n const headers: Record<string, string> = {\n ...(operation.headers ?? {}),\n Authorization: `Bearer ${options.getAccessToken()}`,\n };\n\n const init: RequestInit = {\n method: operation.method.toUpperCase(),\n headers,\n };\n\n // For file uploads the API expects multipart/form-data; BinaryData\n // values are appended as Blobs while everything else is stringified.\n // Form bodies use application/x-www-form-urlencoded. Otherwise JSON.\n if (operation.contentType === 'multipart/form-data' && operation.body) {\n const formData = new FormData();\n for (const [key, value] of Object.entries(\n operation.body as Record<string, unknown>\n )) {\n if (value == null) continue;\n if (isBinaryData(value)) {\n formData.append(key, value.source as Blob);\n } else {\n formData.append(key, String(value));\n }\n }\n init.body = formData;\n } else if (\n operation.contentType === 'application/x-www-form-urlencoded'\n ) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n if (operation.body) {\n const params = new URLSearchParams();\n appendRecordToUrlSearchParams(\n params,\n operation.body as Record<string, unknown>\n );\n const encoded = params.toString();\n if (encoded) init.body = encoded;\n }\n } else {\n headers['Content-Type'] = 'application/json';\n if (operation.body) {\n init.body = JSON.stringify(operation.body);\n }\n }\n const response = await fetch(url, init);\n const responseHeaders: Record<string, string> = Object.create(null);\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n // 204 No Content responses have no body to parse\n bodyJson: response.status === 204 ? undefined : await response.json(),\n };\n });\n },\n };\n}\n"],"mappings":";;AAGA,MAAM,WAAW;AAMjB,SAAS,8BACP,QACA,QACM;CACN,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;EACjD,IAAI,SAAS,MAAM;EACnB,IAAI,MAAM,QAAQ,MAAM,EACtB,KAAK,MAAM,QAAQ,OACjB,OAAO,OAAO,KAAK,OAAO,KAAe,CAAC;OAG5C,OAAO,OAAO,KAAK,OAAO,MAAM,CAAC;;;;;;;;;;;AAavC,SAAgB,qBACd,SACQ;CACR,OAAO,EACL,SAAS,KAAK;EACZ,IAAI,cAAc,OAAO,QAAQ;GAC/B,MAAM,EAAE,cAAc;GAGtB,IAAI,MAAM,GAAG,WAAW,UAAU;GAClC,IAAI,UAAU,YACZ,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,UAAU,WAAW,EAC7D,MAAM,IAAI,QAAQ,IAAI,IAAI,IAAI,mBAAmB,OAAO,MAAM,CAAC,CAAC;GAKpE,IAAI,UAAU,aAAa;IACzB,MAAM,SAAS,IAAI,iBAAiB;IACpC,8BAA8B,QAAQ,UAAU,YAAY;IAC5D,MAAM,KAAK,OAAO,UAAU;IAC5B,IAAI,IAAI,OAAO,IAAI;;GAGrB,MAAM,UAAkC;IACtC,GAAI,UAAU,WAAW,EAAE;IAC3B,eAAe,UAAU,QAAQ,gBAAgB;IAClD;GAED,MAAM,OAAoB;IACxB,QAAQ,UAAU,OAAO,aAAa;IACtC;IACD;GAKD,IAAI,UAAU,gBAAgB,yBAAyB,UAAU,MAAM;IACrE,MAAM,WAAW,IAAI,UAAU;IAC/B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAChC,UAAU,KACX,EAAE;KACD,IAAI,SAAS,MAAM;KACnB,IAAI,aAAa,MAAM,EACrB,SAAS,OAAO,KAAK,MAAM,OAAe;UAE1C,SAAS,OAAO,KAAK,OAAO,MAAM,CAAC;;IAGvC,KAAK,OAAO;UACP,IACL,UAAU,gBAAgB,qCAC1B;IACA,QAAQ,kBAAkB;IAC1B,IAAI,UAAU,MAAM;KAClB,MAAM,SAAS,IAAI,iBAAiB;KACpC,8BACE,QACA,UAAU,KACX;KACD,MAAM,UAAU,OAAO,UAAU;KACjC,IAAI,SAAS,KAAK,OAAO;;UAEtB;IACL,QAAQ,kBAAkB;IAC1B,IAAI,UAAU,MACZ,KAAK,OAAO,KAAK,UAAU,UAAU,KAAK;;GAG9C,MAAM,WAAW,MAAM,MAAM,KAAK,KAAK;GACvC,MAAM,kBAA0C,OAAO,OAAO,KAAK;GACnE,SAAS,QAAQ,SAAS,OAAO,QAAQ;IACvC,gBAAgB,OAAO;KACvB;GAEF,OAAO;IACL,QAAQ,SAAS;IACjB,YAAY,SAAS;IACrB,SAAS;IAET,UAAU,SAAS,WAAW,MAAM,KAAA,IAAY,MAAM,SAAS,MAAM;IACtE;IACD;IAEL"}
@@ -1,73 +0,0 @@
1
- //#region src/server/constants.ts
2
- /**
3
- * Cookie name carrying the DPoP-bound access token. Uses the
4
- * `__Host-` prefix so the browser only accepts it from a `Secure`
5
- * response with `Path=/` — a defense-in-depth against subdomain
6
- * cookie injection.
7
- */
8
- const HUBSPOT_ACCESS_TOKEN_COOKIE_NAME = "__Host-hs_access_token";
9
- /**
10
- * Cookie carrying the opaque app-session ID. Hashed before being put
11
- * on the wire as a DPoP `sid` claim.
12
- */
13
- const HUBSPOT_APP_SID_COOKIE_NAME = "__Host-hs_app_sid";
14
- /**
15
- * Cookie pinning the browser-facing app origin (e.g.
16
- * `https://app.example.com`) for the lifetime of an app session.
17
- * Set by `auth/init-session` from the request's `Origin` header and
18
- * read by:
19
- *
20
- * - The CORS middleware to emit a credentialed
21
- * `Access-Control-Allow-Origin` value (`*` is forbidden when
22
- * `Access-Control-Allow-Credentials: true`).
23
- * - `auth/complete` to rebuild the OAuth `redirect_uri` it sent to
24
- * HubSpot during `init-session` (the token endpoint validates that
25
- * the two values match).
26
- *
27
- * `__Host-` prefixed (Path=/, Secure, no Domain), so the same
28
- * function host can serve both `hubspot-connect` and `api` routes
29
- * and read the cookie from either.
30
- */
31
- const HUBSPOT_APP_ORIGIN_COOKIE_NAME = "__Host-hs_app_origin";
32
- /**
33
- * Prefix used for refresh-token cookies. Each session gets its own
34
- * cookie name (`hs_refresh_<sidHash>`) so multiple devices/tabs can
35
- * coexist without overwriting each other's refresh tokens.
36
- */
37
- const HUBSPOT_REFRESH_COOKIE_PREFIX = "hs_refresh_";
38
- const PROTECTED_COOKIE_NAMES = new Set([
39
- HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,
40
- HUBSPOT_APP_SID_COOKIE_NAME,
41
- HUBSPOT_APP_ORIGIN_COOKIE_NAME
42
- ]);
43
- /**
44
- * Returns `true` for cookies the SDK manages internally
45
- * (access token, session ID, any refresh-token cookie). The
46
- * `sanitizeRequest` helper uses this to strip these cookies from the
47
- * request before user code sees it, ensuring user route handlers
48
- * cannot accidentally leak them in logs or proxy them upstream.
49
- */
50
- function isProtectedCookieName(cookieName) {
51
- return PROTECTED_COOKIE_NAMES.has(cookieName) || cookieName.startsWith("hs_refresh_");
52
- }
53
- /**
54
- * Cookie carrying the PKCE code verifier between `init-session` and
55
- * `auth/complete`. Set with `SameSite=None; Secure; Partitioned` so the
56
- * frontend's credentialed cross-site `POST /auth/complete` (made from
57
- * the OAuth callback page on the app origin to the SDK's edge function
58
- * origin) carries it through. `Lax` would silently drop it on that
59
- * fetch, breaking every successful HubSpot redirect.
60
- */
61
- const TEMP_COOKIE_PKCE_VERIFIER = "__hs_pkce_verifier";
62
- /**
63
- * Cookie carrying the OAuth `state` value between `init-session` and
64
- * `auth/complete`. Compared against the `state` query parameter as the
65
- * primary CSRF defense. Same `SameSite=None; Secure; Partitioned`
66
- * attributes as `TEMP_COOKIE_PKCE_VERIFIER` for the same cross-site
67
- * `POST /auth/complete` reason.
68
- */
69
- const TEMP_COOKIE_OAUTH_STATE = "__hs_oauth_state";
70
- //#endregion
71
- export { HUBSPOT_ACCESS_TOKEN_COOKIE_NAME, HUBSPOT_APP_ORIGIN_COOKIE_NAME, HUBSPOT_APP_SID_COOKIE_NAME, HUBSPOT_REFRESH_COOKIE_PREFIX, TEMP_COOKIE_OAUTH_STATE, TEMP_COOKIE_PKCE_VERIFIER, isProtectedCookieName };
72
-
73
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../src/server/constants.ts"],"sourcesContent":["/**\n * Cookie name carrying the DPoP-bound access token. Uses the\n * `__Host-` prefix so the browser only accepts it from a `Secure`\n * response with `Path=/` — a defense-in-depth against subdomain\n * cookie injection.\n */\nexport const HUBSPOT_ACCESS_TOKEN_COOKIE_NAME = '__Host-hs_access_token';\n\n/**\n * Cookie carrying the opaque app-session ID. Hashed before being put\n * on the wire as a DPoP `sid` claim.\n */\nexport const HUBSPOT_APP_SID_COOKIE_NAME = '__Host-hs_app_sid';\n\n/**\n * Cookie pinning the browser-facing app origin (e.g.\n * `https://app.example.com`) for the lifetime of an app session.\n * Set by `auth/init-session` from the request's `Origin` header and\n * read by:\n *\n * - The CORS middleware to emit a credentialed\n * `Access-Control-Allow-Origin` value (`*` is forbidden when\n * `Access-Control-Allow-Credentials: true`).\n * - `auth/complete` to rebuild the OAuth `redirect_uri` it sent to\n * HubSpot during `init-session` (the token endpoint validates that\n * the two values match).\n *\n * `__Host-` prefixed (Path=/, Secure, no Domain), so the same\n * function host can serve both `hubspot-connect` and `api` routes\n * and read the cookie from either.\n */\nexport const HUBSPOT_APP_ORIGIN_COOKIE_NAME = '__Host-hs_app_origin';\n\n/**\n * Prefix used for refresh-token cookies. Each session gets its own\n * cookie name (`hs_refresh_<sidHash>`) so multiple devices/tabs can\n * coexist without overwriting each other's refresh tokens.\n */\nexport const HUBSPOT_REFRESH_COOKIE_PREFIX = 'hs_refresh_';\n\nconst PROTECTED_COOKIE_NAMES = new Set([\n HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,\n HUBSPOT_APP_SID_COOKIE_NAME,\n HUBSPOT_APP_ORIGIN_COOKIE_NAME,\n]);\n\n/**\n * Returns `true` for cookies the SDK manages internally\n * (access token, session ID, any refresh-token cookie). The\n * `sanitizeRequest` helper uses this to strip these cookies from the\n * request before user code sees it, ensuring user route handlers\n * cannot accidentally leak them in logs or proxy them upstream.\n */\nexport function isProtectedCookieName(cookieName: string): boolean {\n return (\n PROTECTED_COOKIE_NAMES.has(cookieName) ||\n cookieName.startsWith(HUBSPOT_REFRESH_COOKIE_PREFIX)\n );\n}\n\n/**\n * Cookie carrying the PKCE code verifier between `init-session` and\n * `auth/complete`. Set with `SameSite=None; Secure; Partitioned` so the\n * frontend's credentialed cross-site `POST /auth/complete` (made from\n * the OAuth callback page on the app origin to the SDK's edge function\n * origin) carries it through. `Lax` would silently drop it on that\n * fetch, breaking every successful HubSpot redirect.\n */\nexport const TEMP_COOKIE_PKCE_VERIFIER = '__hs_pkce_verifier';\n\n/**\n * Cookie carrying the OAuth `state` value between `init-session` and\n * `auth/complete`. Compared against the `state` query parameter as the\n * primary CSRF defense. Same `SameSite=None; Secure; Partitioned`\n * attributes as `TEMP_COOKIE_PKCE_VERIFIER` for the same cross-site\n * `POST /auth/complete` reason.\n */\nexport const TEMP_COOKIE_OAUTH_STATE = '__hs_oauth_state';\n"],"mappings":";;;;;;;AAMA,MAAa,mCAAmC;;;;;AAMhD,MAAa,8BAA8B;;;;;;;;;;;;;;;;;;AAmB3C,MAAa,iCAAiC;;;;;;AAO9C,MAAa,gCAAgC;AAE7C,MAAM,yBAAyB,IAAI,IAAI;CACrC;CACA;CACA;CACD,CAAC;;;;;;;;AASF,SAAgB,sBAAsB,YAA6B;CACjE,OACE,uBAAuB,IAAI,WAAW,IACtC,WAAW,WAAA,cAAyC;;;;;;;;;;AAYxD,MAAa,4BAA4B;;;;;;;;AASzC,MAAa,0BAA0B"}
@@ -1,12 +0,0 @@
1
- import { SecureStartContext, SecureStartLoader } from "../secure-start-core.js";
2
-
3
- //#region src/server/deno/start.d.ts
4
- /**
5
- * Deno entrypoint helper. Reads `HUBSPOT_APP_PRIVATE_KEY` from `Deno.env`
6
- * when CIMD or DPoP is enabled, imports the supplied loader, and invokes
7
- * `start` with `AppKeys` or `null`.
8
- */
9
- declare function secureStart(loader: SecureStartLoader): Promise<void>;
10
- //#endregion
11
- export { secureStart };
12
- //# sourceMappingURL=start.d.ts.map
@@ -1,21 +0,0 @@
1
- import { runSecureStart } from "../secure-start-core.js";
2
- //#region src/server/deno/start.ts
3
- const denoSecureStartAdapter = {
4
- readEnv: (key) => Deno.env.get(key),
5
- deleteEnv: (key) => {
6
- Deno.env.delete(key);
7
- },
8
- exit: (code) => Deno.exit(code)
9
- };
10
- /**
11
- * Deno entrypoint helper. Reads `HUBSPOT_APP_PRIVATE_KEY` from `Deno.env`
12
- * when CIMD or DPoP is enabled, imports the supplied loader, and invokes
13
- * `start` with `AppKeys` or `null`.
14
- */
15
- function secureStart(loader) {
16
- return runSecureStart(loader, denoSecureStartAdapter);
17
- }
18
- //#endregion
19
- export { secureStart };
20
-
21
- //# sourceMappingURL=start.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"start.js","names":[],"sources":["../../../src/server/deno/start.ts"],"sourcesContent":["import {\n runSecureStart,\n type SecureStartAdapter,\n type SecureStartContext,\n type SecureStartLoader,\n} from '../secure-start-core.ts';\n\nexport type { SecureStartContext, SecureStartLoader };\n\nconst denoSecureStartAdapter: SecureStartAdapter = {\n readEnv: (key) => Deno.env.get(key),\n deleteEnv: (key) => {\n Deno.env.delete(key);\n },\n exit: (code) => Deno.exit(code),\n};\n\n/**\n * Deno entrypoint helper. Reads `HUBSPOT_APP_PRIVATE_KEY` from `Deno.env`\n * when CIMD or DPoP is enabled, imports the supplied loader, and invokes\n * `start` with `AppKeys` or `null`.\n */\nexport function secureStart(loader: SecureStartLoader): Promise<void> {\n return runSecureStart(loader, denoSecureStartAdapter);\n}\n"],"mappings":";;AASA,MAAM,yBAA6C;CACjD,UAAU,QAAQ,KAAK,IAAI,IAAI,IAAI;CACnC,YAAY,QAAQ;EAClB,KAAK,IAAI,OAAO,IAAI;;CAEtB,OAAO,SAAS,KAAK,KAAK,KAAK;CAChC;;;;;;AAOD,SAAgB,YAAY,QAA0C;CACpE,OAAO,eAAe,QAAQ,uBAAuB"}
@@ -1,59 +0,0 @@
1
- import { createHubSpotClient } from "../api-client-core/client.js";
2
- import { noopLogger } from "../shared/logger.js";
3
- import { fetchTransportPlugin } from "../api-client-core/plugins/fetch-transport.js";
4
- import { HUBSPOT_ACCESS_TOKEN_COOKIE_NAME, HUBSPOT_APP_SID_COOKIE_NAME } from "../constants.js";
5
- import { createHubSpotProxy } from "../proxy.js";
6
- import { parseCookies } from "../utils/cookie-utils.js";
7
- import { sanitizeRequest } from "../sanitize-request.js";
8
- import { corsMiddleware } from "./utils/cors-middleware.js";
9
- import { Hono } from "hono";
10
- //#region src/server/hono/hono-request-handler.ts
11
- /**
12
- * Wraps a Hono app so its `fetch` handler additionally:
13
- *
14
- * - Strips SDK-managed cookies (access token, refresh, sid) from the
15
- * request before the app sees them, via `sanitizeRequest`.
16
- * - Exposes a `hubSpotProxy` on the Hono context so route handlers
17
- * can issue authenticated calls to HubSpot's API on behalf of the
18
- * browser session.
19
- */
20
- function createAppConnectRequestHandler(options) {
21
- const { registerRoutes, appKeys, logger = noopLogger } = options;
22
- const app = new Hono();
23
- app.use("*", corsMiddleware());
24
- app.use("*", async (c, next) => {
25
- const { authenticated } = c.env.hubSpot;
26
- if (!authenticated) return c.json({ error: "Unauthorized" }, 401);
27
- await next();
28
- });
29
- registerRoutes(app);
30
- return (request) => {
31
- const cookie = request.headers.get("Cookie");
32
- if (!cookie) throw new Error("Missing auth cookies");
33
- const cookies = parseCookies(cookie);
34
- const accessToken = cookies[HUBSPOT_ACCESS_TOKEN_COOKIE_NAME];
35
- const proxy = createHubSpotProxy({
36
- userCredentials: {
37
- accessToken,
38
- sessionId: cookies[HUBSPOT_APP_SID_COOKIE_NAME]
39
- },
40
- appKeys,
41
- logger
42
- });
43
- const client = createHubSpotClient({ plugins: [fetchTransportPlugin({ getAccessToken: () => {
44
- if (!accessToken) throw new Error("Missing access token");
45
- return accessToken;
46
- } })] });
47
- const sanitizedRequest = sanitizeRequest(request);
48
- const honoBindings = { hubSpot: {
49
- proxy,
50
- client,
51
- authenticated: proxy.authenticated
52
- } };
53
- return app.fetch(sanitizedRequest, honoBindings);
54
- };
55
- }
56
- //#endregion
57
- export { createAppConnectRequestHandler };
58
-
59
- //# sourceMappingURL=hono-request-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hono-request-handler.js","names":[],"sources":["../../../src/server/hono/hono-request-handler.ts"],"sourcesContent":["import { Hono } from 'hono';\n\nimport { noopLogger, type Logger } from '../../shared/logger.ts';\nimport { createHubSpotClient } from '../api-client-core/client.ts';\nimport { fetchTransportPlugin } from '../api-client-core/plugins/fetch-transport.ts';\nimport {\n HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,\n HUBSPOT_APP_SID_COOKIE_NAME,\n} from '../constants.ts';\nimport { createHubSpotProxy } from '../proxy.ts';\nimport { sanitizeRequest } from '../sanitize-request.ts';\nimport type { AppKeys, UserCredentials } from '../types.ts';\nimport { parseCookies } from '../utils/cookie-utils.ts';\nimport type { AppConnectHonoBindings, AppConnectHonoEnv } from './types.ts';\nimport { corsMiddleware } from './utils/cors-middleware.ts';\n\n/**\n * Web-standard fetch handler signature returned by\n * {@link createAppConnectRequestHandler}.\n */\nexport type AppConnectFetchHandler = (\n request: Request\n) => Response | Promise<Response>;\n\n/**\n * Callback used to attach application routes to the SDK-owned Hono\n * app instance.\n */\nexport type RegisterAppConnectRoutesFunction = (\n app: Hono<AppConnectHonoEnv>\n) => void;\n\n/**\n * Options accepted by {@link createAppConnectRequestHandler}.\n */\nexport interface CreateAppConnectRequestHandlerOptions {\n /** Registers application routes on the SDK-owned Hono app. */\n registerRoutes: RegisterAppConnectRoutesFunction;\n /**\n * Imported app keys from `secureStart`, or `null` when CIMD and DPoP\n * are both disabled.\n */\n appKeys: AppKeys | null;\n /**\n * Optional logger. When omitted the SDK uses a no-op logger so\n * server-side state never leaks into the host application's\n * console.\n */\n logger?: Logger;\n}\n\n/**\n * Wraps a Hono app so its `fetch` handler additionally:\n *\n * - Strips SDK-managed cookies (access token, refresh, sid) from the\n * request before the app sees them, via `sanitizeRequest`.\n * - Exposes a `hubSpotProxy` on the Hono context so route handlers\n * can issue authenticated calls to HubSpot's API on behalf of the\n * browser session.\n */\nexport function createAppConnectRequestHandler(\n options: CreateAppConnectRequestHandlerOptions\n): AppConnectFetchHandler {\n const { registerRoutes, appKeys, logger = noopLogger } = options;\n const app = new Hono<AppConnectHonoEnv>();\n // Credentialed CORS first: preflights short-circuit with 204\n // before the auth check runs, and 401 responses still carry\n // `Access-Control-Allow-*` headers (the browser drops responses\n // without them on credentialed cross-site fetches).\n app.use('*', corsMiddleware());\n\n // Auth gate: every non-OPTIONS request must arrive with the\n // SDK-managed access-token + session-id cookies. The CORS\n // middleware above short-circuits OPTIONS, so this only runs on\n // real requests; missing cookies now surface as a normal 401 with\n // CORS headers attached on the way back out (the previous\n // implementation threw on a missing `Cookie` header before any\n // middleware ran, which broke browser preflights).\n app.use('*', async (c, next) => {\n const { authenticated } = c.env.hubSpot;\n if (!authenticated) {\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n await next();\n return;\n });\n\n registerRoutes(app);\n\n return (request: Request) => {\n const cookie = request.headers.get('Cookie');\n if (!cookie) {\n throw new Error('Missing auth cookies');\n }\n const cookies = parseCookies(cookie);\n const accessToken = cookies[HUBSPOT_ACCESS_TOKEN_COOKIE_NAME];\n const sessionId = cookies[HUBSPOT_APP_SID_COOKIE_NAME];\n\n const userCredentials: UserCredentials = { accessToken, sessionId };\n\n const proxy = createHubSpotProxy({\n userCredentials,\n appKeys,\n logger,\n });\n\n const client = createHubSpotClient({\n plugins: [\n fetchTransportPlugin({\n getAccessToken: () => {\n if (!accessToken) {\n throw new Error('Missing access token');\n }\n return accessToken;\n },\n }),\n ],\n });\n\n const sanitizedRequest = sanitizeRequest(request);\n\n const honoBindings: AppConnectHonoBindings = {\n hubSpot: {\n proxy,\n client,\n authenticated: proxy.authenticated,\n },\n };\n\n return app.fetch(sanitizedRequest, honoBindings);\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA4DA,SAAgB,+BACd,SACwB;CACxB,MAAM,EAAE,gBAAgB,SAAS,SAAS,eAAe;CACzD,MAAM,MAAM,IAAI,MAAyB;CAKzC,IAAI,IAAI,KAAK,gBAAgB,CAAC;CAS9B,IAAI,IAAI,KAAK,OAAO,GAAG,SAAS;EAC9B,MAAM,EAAE,kBAAkB,EAAE,IAAI;EAChC,IAAI,CAAC,eACH,OAAO,EAAE,KAAK,EAAE,OAAO,gBAAgB,EAAE,IAAI;EAG/C,MAAM,MAAM;GAEZ;CAEF,eAAe,IAAI;CAEnB,QAAQ,YAAqB;EAC3B,MAAM,SAAS,QAAQ,QAAQ,IAAI,SAAS;EAC5C,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,uBAAuB;EAEzC,MAAM,UAAU,aAAa,OAAO;EACpC,MAAM,cAAc,QAAQ;EAK5B,MAAM,QAAQ,mBAAmB;GAC/B,iBAAA;IAHyC;IAAa,WAFtC,QAAQ;IAKT;GACf;GACA;GACD,CAAC;EAEF,MAAM,SAAS,oBAAoB,EACjC,SAAS,CACP,qBAAqB,EACnB,sBAAsB;GACpB,IAAI,CAAC,aACH,MAAM,IAAI,MAAM,uBAAuB;GAEzC,OAAO;KAEV,CAAC,CACH,EACF,CAAC;EAEF,MAAM,mBAAmB,gBAAgB,QAAQ;EAEjD,MAAM,eAAuC,EAC3C,SAAS;GACP;GACA;GACA,eAAe,MAAM;GACtB,EACF;EAED,OAAO,IAAI,MAAM,kBAAkB,aAAa"}
@@ -1,154 +0,0 @@
1
- import { base64urlDecode } from "../../shared/encoding/base64.js";
2
- import { HUBSPOT_ACCESS_TOKEN_COOKIE_NAME, HUBSPOT_APP_ORIGIN_COOKIE_NAME, HUBSPOT_REFRESH_COOKIE_PREFIX, TEMP_COOKIE_OAUTH_STATE, TEMP_COOKIE_PKCE_VERIFIER } from "../../constants.js";
3
- import { parseCookies } from "../../utils/cookie-utils.js";
4
- import { AUTH_COMPLETE_CODE_PARAM, AUTH_COMPLETE_STATE_PARAM } from "../../shared/constants.js";
5
- import { serializeCookie, setResponseCookie } from "../utils/cookie-utils.js";
6
- import { REFRESH_COOKIE_MAX_AGE_SEC } from "./constants.js";
7
- import { buildClientAssertion, buildClientAssertionFormParams, buildClientSecretFormParams, buildTokenEndpointDpopProof, requestOAuthToken } from "./oauth-client.js";
8
- import { buildCimdClientIdUrlFromRequest, buildFrontendOAuthRedirectUri, clearTempCookie, isPositiveFiniteNumber, isSafeReturnPath, parseAppOriginHeader } from "./utils.js";
9
- //#region src/server/hono/hubspot-connect-routes/auth-complete.ts
10
- /**
11
- * Cross-origin OAuth completion endpoint.
12
- *
13
- * Called from the React app on the frontend OAuth callback path
14
- * (`HUBSPOT_FRONTEND_CALLBACK_PATH`) once HubSpot has redirected the
15
- * browser back with `?code` + `?state`. The browser POSTs both
16
- * values here as a credentialed cross-site fetch — same partition as
17
- * `init-session`, so the temp PKCE/state cookies are visible — and
18
- * the SDK:
19
- *
20
- * 1. Validates `state` against the temp `__hs_oauth_state` cookie.
21
- * 2. Pulls the PKCE verifier from `__hs_pkce_verifier`.
22
- * 3. Rebuilds the same `redirect_uri` it sent to HubSpot during
23
- * `init-session` (frontend origin + the fixed callback path);
24
- * the OAuth token endpoint requires the two values to match.
25
- * 4. Exchanges `code` for an access + refresh token (with DPoP /
26
- * CIMD client-assertion when enabled).
27
- * 5. Sets the durable session cookies (access token, refresh) with
28
- * `SameSite=None; Secure; Partitioned` so they live in the
29
- * `(frontend, edge)` partition where subsequent API fetches will
30
- * read them.
31
- * 6. Clears the temp cookies.
32
- * 7. Returns `{ expires_at, return_path }` so the controller can
33
- * update its session-storage expiry tracking and navigate back to
34
- * the page the user started the connect flow from.
35
- */
36
- async function handleAuthComplete(c, options) {
37
- const { appKeys, refreshCookiePath, hubspotConnectEnv } = options;
38
- const xForwardedProto = c.req.header("x-forwarded-proto") ?? void 0;
39
- const xForwardedHost = c.req.header("x-forwarded-host") ?? void 0;
40
- const requestHostHeader = c.req.header("host") ?? void 0;
41
- const code = c.req.query(AUTH_COMPLETE_CODE_PARAM);
42
- const state = c.req.query(AUTH_COMPLETE_STATE_PARAM);
43
- if (!code || !state) return c.json({ error: "Missing code or state" }, 400);
44
- if (hubspotConnectEnv.isAppPrivateKeyRequired && !appKeys) return c.json({ error: "Server misconfiguration: HUBSPOT_APP_PRIVATE_KEY is required when CIMD or DPoP is enabled" }, 500);
45
- const cookies = parseCookies(c.req.header("Cookie"));
46
- const expectedState = cookies[TEMP_COOKIE_OAUTH_STATE];
47
- const codeVerifier = cookies[TEMP_COOKIE_PKCE_VERIFIER];
48
- const appOriginCookie = cookies[HUBSPOT_APP_ORIGIN_COOKIE_NAME];
49
- if (!expectedState || state !== decodeURIComponent(expectedState)) return c.json({ error: "State mismatch" }, 403);
50
- if (!codeVerifier) return c.json({ error: "Missing PKCE verifier" }, 400);
51
- const appOrigin = parseAppOriginHeader(appOriginCookie);
52
- if (!appOrigin) return c.json({ error: "Missing app origin cookie" }, 400);
53
- let statePayload;
54
- try {
55
- statePayload = JSON.parse(new TextDecoder().decode(base64urlDecode(decodeURIComponent(state))));
56
- } catch {
57
- return c.json({ error: "Malformed state value" }, 400);
58
- }
59
- const returnPath = statePayload.return_path;
60
- if (!returnPath || !isSafeReturnPath(returnPath)) return c.json({ error: "Invalid return path in state" }, 400);
61
- const sessionId = statePayload.sid;
62
- if (!sessionId) return c.json({ error: "Missing app session cookie" }, 400);
63
- const decodedCodeVerifier = decodeURIComponent(codeVerifier);
64
- const clientId = hubspotConnectEnv.isCimdEnabled ? buildCimdClientIdUrlFromRequest({
65
- requestUrl: c.req.url,
66
- basePath: options.basePath,
67
- xForwardedProto,
68
- xForwardedHost,
69
- requestHostHeader
70
- }) : hubspotConnectEnv.hubspotClientId;
71
- const redirectUri = buildFrontendOAuthRedirectUri(appOrigin);
72
- const tokenEndpointUrl = new URL("/oauth/v1/token", hubspotConnectEnv.hubspotOAuthApiOrigin).href;
73
- let dpopProof;
74
- if (hubspotConnectEnv.isDpopEnabled) dpopProof = await buildTokenEndpointDpopProof({
75
- appKeys,
76
- tokenEndpointUrl,
77
- sessionIdHash: sessionId
78
- });
79
- let formParams;
80
- if (hubspotConnectEnv.isCimdEnabled) formParams = {
81
- grant_type: "authorization_code",
82
- code,
83
- code_verifier: decodedCodeVerifier,
84
- redirect_uri: redirectUri,
85
- ...buildClientAssertionFormParams({
86
- clientId,
87
- clientAssertion: await buildClientAssertion({
88
- appKeys,
89
- clientId,
90
- audience: tokenEndpointUrl
91
- })
92
- })
93
- };
94
- else formParams = {
95
- grant_type: "authorization_code",
96
- code,
97
- code_verifier: decodedCodeVerifier,
98
- redirect_uri: redirectUri,
99
- ...buildClientSecretFormParams({
100
- clientId,
101
- clientSecret: hubspotConnectEnv.hubspotClientSecret
102
- })
103
- };
104
- const tokenResult = await requestOAuthToken({
105
- tokenEndpointUrl,
106
- isDpopEnabled: hubspotConnectEnv.isDpopEnabled,
107
- ...dpopProof !== void 0 ? { dpopProof } : {},
108
- formParams
109
- });
110
- if (!tokenResult.ok) return c.json({ error: `Token exchange failed: ${tokenResult.errorText}` }, 502);
111
- const { access_token: accessToken, refresh_token: refreshToken, expires_in } = tokenResult.body;
112
- if (!refreshToken) return c.json({ error: "Token response missing refresh_token" }, 502);
113
- if (!isPositiveFiniteNumber(expires_in)) return c.json({ error: "Token response missing or invalid expires_in" }, 502);
114
- const expiresAt = Date.now() + expires_in * 1e3;
115
- const refreshCookieName = `${HUBSPOT_REFRESH_COOKIE_PREFIX}${sessionId}`;
116
- setResponseCookie({
117
- c,
118
- value: serializeCookie({
119
- name: HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,
120
- value: accessToken,
121
- path: "/",
122
- sameSite: "None",
123
- partitioned: true,
124
- maxAge: expires_in
125
- })
126
- });
127
- setResponseCookie({
128
- c,
129
- value: serializeCookie({
130
- name: refreshCookieName,
131
- value: refreshToken,
132
- path: refreshCookiePath,
133
- sameSite: "None",
134
- partitioned: true,
135
- maxAge: REFRESH_COOKIE_MAX_AGE_SEC
136
- })
137
- });
138
- setResponseCookie({
139
- c,
140
- value: clearTempCookie(TEMP_COOKIE_PKCE_VERIFIER)
141
- });
142
- setResponseCookie({
143
- c,
144
- value: clearTempCookie(TEMP_COOKIE_OAUTH_STATE)
145
- });
146
- return c.json({
147
- expires_at: expiresAt,
148
- return_path: returnPath
149
- });
150
- }
151
- //#endregion
152
- export { handleAuthComplete };
153
-
154
- //# sourceMappingURL=auth-complete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-complete.js","names":[],"sources":["../../../../src/server/hono/hubspot-connect-routes/auth-complete.ts"],"sourcesContent":["import type { Context } from 'hono';\n\nimport {\n AUTH_COMPLETE_CODE_PARAM,\n AUTH_COMPLETE_STATE_PARAM,\n} from '../../../shared/constants.ts';\nimport {\n HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,\n HUBSPOT_APP_ORIGIN_COOKIE_NAME,\n HUBSPOT_REFRESH_COOKIE_PREFIX,\n TEMP_COOKIE_OAUTH_STATE,\n TEMP_COOKIE_PKCE_VERIFIER,\n} from '../../constants.ts';\nimport { base64urlDecode } from '../../utils/base64-utils.ts';\nimport { parseCookies } from '../../utils/cookie-utils.ts';\nimport { serializeCookie, setResponseCookie } from '../utils/cookie-utils.ts';\nimport { REFRESH_COOKIE_MAX_AGE_SEC } from './constants.ts';\nimport {\n buildClientAssertion,\n buildClientAssertionFormParams,\n buildClientSecretFormParams,\n buildTokenEndpointDpopProof,\n requestOAuthToken,\n} from './oauth-client.ts';\nimport type { HubSpotConnectOAuthRouteOptions } from './types.ts';\nimport {\n buildCimdClientIdUrlFromRequest,\n buildFrontendOAuthRedirectUri,\n clearTempCookie,\n isPositiveFiniteNumber,\n isSafeReturnPath,\n parseAppOriginHeader,\n} from './utils.ts';\n\ninterface OAuthStatePayload {\n return_path?: string;\n sid?: string;\n}\n\n/**\n * Cross-origin OAuth completion endpoint.\n *\n * Called from the React app on the frontend OAuth callback path\n * (`HUBSPOT_FRONTEND_CALLBACK_PATH`) once HubSpot has redirected the\n * browser back with `?code` + `?state`. The browser POSTs both\n * values here as a credentialed cross-site fetch — same partition as\n * `init-session`, so the temp PKCE/state cookies are visible — and\n * the SDK:\n *\n * 1. Validates `state` against the temp `__hs_oauth_state` cookie.\n * 2. Pulls the PKCE verifier from `__hs_pkce_verifier`.\n * 3. Rebuilds the same `redirect_uri` it sent to HubSpot during\n * `init-session` (frontend origin + the fixed callback path);\n * the OAuth token endpoint requires the two values to match.\n * 4. Exchanges `code` for an access + refresh token (with DPoP /\n * CIMD client-assertion when enabled).\n * 5. Sets the durable session cookies (access token, refresh) with\n * `SameSite=None; Secure; Partitioned` so they live in the\n * `(frontend, edge)` partition where subsequent API fetches will\n * read them.\n * 6. Clears the temp cookies.\n * 7. Returns `{ expires_at, return_path }` so the controller can\n * update its session-storage expiry tracking and navigate back to\n * the page the user started the connect flow from.\n */\nexport async function handleAuthComplete(\n c: Context,\n options: HubSpotConnectOAuthRouteOptions\n) {\n const { appKeys, refreshCookiePath, hubspotConnectEnv } = options;\n const xForwardedProto = c.req.header('x-forwarded-proto') ?? undefined;\n const xForwardedHost = c.req.header('x-forwarded-host') ?? undefined;\n const requestHostHeader = c.req.header('host') ?? undefined;\n const code = c.req.query(AUTH_COMPLETE_CODE_PARAM);\n const state = c.req.query(AUTH_COMPLETE_STATE_PARAM);\n\n if (!code || !state) {\n return c.json({ error: 'Missing code or state' }, 400);\n }\n\n if (hubspotConnectEnv.isAppPrivateKeyRequired && !appKeys) {\n return c.json(\n {\n error:\n 'Server misconfiguration: HUBSPOT_APP_PRIVATE_KEY is required when CIMD or DPoP is enabled',\n },\n 500\n );\n }\n\n const cookies = parseCookies(c.req.header('Cookie'));\n const expectedState = cookies[TEMP_COOKIE_OAUTH_STATE];\n const codeVerifier = cookies[TEMP_COOKIE_PKCE_VERIFIER];\n const appOriginCookie = cookies[HUBSPOT_APP_ORIGIN_COOKIE_NAME];\n\n if (!expectedState || state !== decodeURIComponent(expectedState)) {\n return c.json({ error: 'State mismatch' }, 403);\n }\n if (!codeVerifier) {\n return c.json({ error: 'Missing PKCE verifier' }, 400);\n }\n // The redirect_uri the OAuth token endpoint validates must equal\n // the one we sent during init-session. We rebuild it from the\n // pinned origin cookie so that value is anchored server-side, not\n // taken from the (caller-controlled) request `Origin` on this call.\n const appOrigin = parseAppOriginHeader(appOriginCookie);\n if (!appOrigin) {\n return c.json({ error: 'Missing app origin cookie' }, 400);\n }\n\n let statePayload: OAuthStatePayload;\n try {\n statePayload = JSON.parse(\n new TextDecoder().decode(base64urlDecode(decodeURIComponent(state)))\n ) as OAuthStatePayload;\n } catch {\n return c.json({ error: 'Malformed state value' }, 400);\n }\n const returnPath = statePayload.return_path;\n if (!returnPath || !isSafeReturnPath(returnPath)) {\n return c.json({ error: 'Invalid return path in state' }, 400);\n }\n\n const sessionId = statePayload.sid;\n if (!sessionId) {\n return c.json({ error: 'Missing app session cookie' }, 400);\n }\n\n const decodedCodeVerifier = decodeURIComponent(codeVerifier);\n\n const clientId = hubspotConnectEnv.isCimdEnabled\n ? buildCimdClientIdUrlFromRequest({\n requestUrl: c.req.url,\n basePath: options.basePath,\n xForwardedProto,\n xForwardedHost,\n requestHostHeader,\n })\n : hubspotConnectEnv.hubspotClientId;\n\n const redirectUri = buildFrontendOAuthRedirectUri(appOrigin);\n\n const tokenEndpointUrl = new URL(\n '/oauth/v1/token',\n hubspotConnectEnv.hubspotOAuthApiOrigin\n ).href;\n\n let dpopProof: string | undefined;\n if (hubspotConnectEnv.isDpopEnabled) {\n dpopProof = await buildTokenEndpointDpopProof({\n appKeys: appKeys!,\n tokenEndpointUrl,\n sessionIdHash: sessionId,\n });\n }\n\n let formParams: Record<string, string>;\n if (hubspotConnectEnv.isCimdEnabled) {\n const clientAssertion = await buildClientAssertion({\n appKeys: appKeys!,\n clientId,\n audience: tokenEndpointUrl,\n });\n formParams = {\n grant_type: 'authorization_code',\n code,\n code_verifier: decodedCodeVerifier,\n redirect_uri: redirectUri,\n ...buildClientAssertionFormParams({ clientId, clientAssertion }),\n };\n } else {\n formParams = {\n grant_type: 'authorization_code',\n code,\n code_verifier: decodedCodeVerifier,\n redirect_uri: redirectUri,\n ...buildClientSecretFormParams({\n clientId,\n clientSecret: hubspotConnectEnv.hubspotClientSecret,\n }),\n };\n }\n\n const tokenResult = await requestOAuthToken({\n tokenEndpointUrl,\n isDpopEnabled: hubspotConnectEnv.isDpopEnabled,\n ...(dpopProof !== undefined ? { dpopProof } : {}),\n formParams,\n });\n if (!tokenResult.ok) {\n return c.json(\n { error: `Token exchange failed: ${tokenResult.errorText}` },\n 502\n );\n }\n\n const {\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_in,\n } = tokenResult.body;\n if (!refreshToken) {\n return c.json({ error: 'Token response missing refresh_token' }, 502);\n }\n if (!isPositiveFiniteNumber(expires_in)) {\n return c.json(\n { error: 'Token response missing or invalid expires_in' },\n 502\n );\n }\n\n const expiresAt = Date.now() + expires_in * 1000;\n const refreshCookieName = `${HUBSPOT_REFRESH_COOKIE_PREFIX}${sessionId}`;\n\n setResponseCookie({\n c,\n value: serializeCookie({\n name: HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,\n value: accessToken,\n path: '/',\n sameSite: 'None',\n partitioned: true,\n maxAge: expires_in,\n }),\n });\n setResponseCookie({\n c,\n value: serializeCookie({\n name: refreshCookieName,\n value: refreshToken,\n path: refreshCookiePath,\n sameSite: 'None',\n partitioned: true,\n maxAge: REFRESH_COOKIE_MAX_AGE_SEC,\n }),\n });\n setResponseCookie({ c, value: clearTempCookie(TEMP_COOKIE_PKCE_VERIFIER) });\n setResponseCookie({ c, value: clearTempCookie(TEMP_COOKIE_OAUTH_STATE) });\n\n return c.json({ expires_at: expiresAt, return_path: returnPath });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,eAAsB,mBACpB,GACA,SACA;CACA,MAAM,EAAE,SAAS,mBAAmB,sBAAsB;CAC1D,MAAM,kBAAkB,EAAE,IAAI,OAAO,oBAAoB,IAAI,KAAA;CAC7D,MAAM,iBAAiB,EAAE,IAAI,OAAO,mBAAmB,IAAI,KAAA;CAC3D,MAAM,oBAAoB,EAAE,IAAI,OAAO,OAAO,IAAI,KAAA;CAClD,MAAM,OAAO,EAAE,IAAI,MAAM,yBAAyB;CAClD,MAAM,QAAQ,EAAE,IAAI,MAAM,0BAA0B;CAEpD,IAAI,CAAC,QAAQ,CAAC,OACZ,OAAO,EAAE,KAAK,EAAE,OAAO,yBAAyB,EAAE,IAAI;CAGxD,IAAI,kBAAkB,2BAA2B,CAAC,SAChD,OAAO,EAAE,KACP,EACE,OACE,6FACH,EACD,IACD;CAGH,MAAM,UAAU,aAAa,EAAE,IAAI,OAAO,SAAS,CAAC;CACpD,MAAM,gBAAgB,QAAQ;CAC9B,MAAM,eAAe,QAAQ;CAC7B,MAAM,kBAAkB,QAAQ;CAEhC,IAAI,CAAC,iBAAiB,UAAU,mBAAmB,cAAc,EAC/D,OAAO,EAAE,KAAK,EAAE,OAAO,kBAAkB,EAAE,IAAI;CAEjD,IAAI,CAAC,cACH,OAAO,EAAE,KAAK,EAAE,OAAO,yBAAyB,EAAE,IAAI;CAMxD,MAAM,YAAY,qBAAqB,gBAAgB;CACvD,IAAI,CAAC,WACH,OAAO,EAAE,KAAK,EAAE,OAAO,6BAA6B,EAAE,IAAI;CAG5D,IAAI;CACJ,IAAI;EACF,eAAe,KAAK,MAClB,IAAI,aAAa,CAAC,OAAO,gBAAgB,mBAAmB,MAAM,CAAC,CAAC,CACrE;SACK;EACN,OAAO,EAAE,KAAK,EAAE,OAAO,yBAAyB,EAAE,IAAI;;CAExD,MAAM,aAAa,aAAa;CAChC,IAAI,CAAC,cAAc,CAAC,iBAAiB,WAAW,EAC9C,OAAO,EAAE,KAAK,EAAE,OAAO,gCAAgC,EAAE,IAAI;CAG/D,MAAM,YAAY,aAAa;CAC/B,IAAI,CAAC,WACH,OAAO,EAAE,KAAK,EAAE,OAAO,8BAA8B,EAAE,IAAI;CAG7D,MAAM,sBAAsB,mBAAmB,aAAa;CAE5D,MAAM,WAAW,kBAAkB,gBAC/B,gCAAgC;EAC9B,YAAY,EAAE,IAAI;EAClB,UAAU,QAAQ;EAClB;EACA;EACA;EACD,CAAC,GACF,kBAAkB;CAEtB,MAAM,cAAc,8BAA8B,UAAU;CAE5D,MAAM,mBAAmB,IAAI,IAC3B,mBACA,kBAAkB,sBACnB,CAAC;CAEF,IAAI;CACJ,IAAI,kBAAkB,eACpB,YAAY,MAAM,4BAA4B;EACnC;EACT;EACA,eAAe;EAChB,CAAC;CAGJ,IAAI;CACJ,IAAI,kBAAkB,eAMpB,aAAa;EACX,YAAY;EACZ;EACA,eAAe;EACf,cAAc;EACd,GAAG,+BAA+B;GAAE;GAAU,iBAAA,MAVlB,qBAAqB;IACxC;IACT;IACA,UAAU;IACX,CAAC;GAM+D,CAAC;EACjE;MAED,aAAa;EACX,YAAY;EACZ;EACA,eAAe;EACf,cAAc;EACd,GAAG,4BAA4B;GAC7B;GACA,cAAc,kBAAkB;GACjC,CAAC;EACH;CAGH,MAAM,cAAc,MAAM,kBAAkB;EAC1C;EACA,eAAe,kBAAkB;EACjC,GAAI,cAAc,KAAA,IAAY,EAAE,WAAW,GAAG,EAAE;EAChD;EACD,CAAC;CACF,IAAI,CAAC,YAAY,IACf,OAAO,EAAE,KACP,EAAE,OAAO,0BAA0B,YAAY,aAAa,EAC5D,IACD;CAGH,MAAM,EACJ,cAAc,aACd,eAAe,cACf,eACE,YAAY;CAChB,IAAI,CAAC,cACH,OAAO,EAAE,KAAK,EAAE,OAAO,wCAAwC,EAAE,IAAI;CAEvE,IAAI,CAAC,uBAAuB,WAAW,EACrC,OAAO,EAAE,KACP,EAAE,OAAO,gDAAgD,EACzD,IACD;CAGH,MAAM,YAAY,KAAK,KAAK,GAAG,aAAa;CAC5C,MAAM,oBAAoB,GAAG,gCAAgC;CAE7D,kBAAkB;EAChB;EACA,OAAO,gBAAgB;GACrB,MAAM;GACN,OAAO;GACP,MAAM;GACN,UAAU;GACV,aAAa;GACb,QAAQ;GACT,CAAC;EACH,CAAC;CACF,kBAAkB;EAChB;EACA,OAAO,gBAAgB;GACrB,MAAM;GACN,OAAO;GACP,MAAM;GACN,UAAU;GACV,aAAa;GACb,QAAQ;GACT,CAAC;EACH,CAAC;CACF,kBAAkB;EAAE;EAAG,OAAO,gBAAgB,0BAA0B;EAAE,CAAC;CAC3E,kBAAkB;EAAE;EAAG,OAAO,gBAAgB,wBAAwB;EAAE,CAAC;CAEzE,OAAO,EAAE,KAAK;EAAE,YAAY;EAAW,aAAa;EAAY,CAAC"}
@@ -1,101 +0,0 @@
1
- import { base64url } from "../../shared/encoding/base64.js";
2
- import { sha256base64url } from "../../shared/encoding/sha256.js";
3
- import { HUBSPOT_APP_ORIGIN_COOKIE_NAME, HUBSPOT_APP_SID_COOKIE_NAME, TEMP_COOKIE_OAUTH_STATE, TEMP_COOKIE_PKCE_VERIFIER } from "../../constants.js";
4
- import { serializeCookie, setResponseCookie } from "../utils/cookie-utils.js";
5
- import { OAUTH_TEMP_MAX_AGE_SEC, SESSION_MAX_AGE_SEC } from "./constants.js";
6
- import { buildCimdClientIdUrlFromRequest, buildFrontendOAuthRedirectUri, isSafeReturnPath, parseAppOriginHeader } from "./utils.js";
7
- import { deriveHubSpotAuthorizeScopesFromClientMetadata } from "./fetch-hubspot-client-metadata.js";
8
- //#region src/server/hono/hubspot-connect-routes/auth-init-session.ts
9
- async function handleAuthInitSession(c, options) {
10
- const { hubspotConnectEnv, cimdClientMetadata } = options;
11
- const xForwardedProto = c.req.header("x-forwarded-proto") ?? void 0;
12
- const xForwardedHost = c.req.header("x-forwarded-host") ?? void 0;
13
- const requestHostHeader = c.req.header("host") ?? void 0;
14
- const returnPath = new URL(c.req.url).searchParams.get("return_path") ?? "/";
15
- if (!isSafeReturnPath(returnPath)) return c.text("Invalid return_path", 400);
16
- const appOrigin = parseAppOriginHeader(c.req.header("Origin"));
17
- if (!appOrigin) return c.text("Missing or invalid Origin header; init-session must be called from a browser", 400);
18
- const sessionIdBytes = new Uint8Array(32);
19
- crypto.getRandomValues(sessionIdBytes);
20
- const sessionId = base64url(sessionIdBytes);
21
- const sessionIdHash = await sha256base64url(sessionId);
22
- const codeVerifierBytes = new Uint8Array(32);
23
- crypto.getRandomValues(codeVerifierBytes);
24
- const codeVerifier = base64url(codeVerifierBytes);
25
- const codeChallenge = await sha256base64url(codeVerifier);
26
- const stateValue = base64url(new TextEncoder().encode(JSON.stringify({
27
- return_path: returnPath,
28
- sid: sessionIdHash
29
- })));
30
- const clientId = hubspotConnectEnv.isCimdEnabled ? buildCimdClientIdUrlFromRequest({
31
- requestUrl: c.req.url,
32
- basePath: options.basePath,
33
- xForwardedProto,
34
- xForwardedHost,
35
- requestHostHeader
36
- }) : hubspotConnectEnv.hubspotClientId;
37
- const redirectUri = buildFrontendOAuthRedirectUri(appOrigin);
38
- const authorizeUrl = new URL(hubspotConnectEnv.hubspotAuthorizationEndpoint);
39
- authorizeUrl.searchParams.set("response_type", "code");
40
- authorizeUrl.searchParams.set("client_id", clientId);
41
- authorizeUrl.searchParams.set("redirect_uri", redirectUri);
42
- authorizeUrl.searchParams.set("code_challenge", codeChallenge);
43
- authorizeUrl.searchParams.set("code_challenge_method", "S256");
44
- authorizeUrl.searchParams.set("state", stateValue);
45
- authorizeUrl.searchParams.set("sid", sessionIdHash);
46
- if (!hubspotConnectEnv.isCimdEnabled) {
47
- const scopesResult = deriveHubSpotAuthorizeScopesFromClientMetadata(cimdClientMetadata);
48
- if (!scopesResult.ok) return c.text(scopesResult.message, scopesResult.status);
49
- authorizeUrl.searchParams.set("scope", scopesResult.scope);
50
- if (scopesResult.optionalScope !== void 0) authorizeUrl.searchParams.set("optional_scope", scopesResult.optionalScope);
51
- }
52
- setResponseCookie({
53
- c,
54
- value: serializeCookie({
55
- name: HUBSPOT_APP_ORIGIN_COOKIE_NAME,
56
- value: appOrigin,
57
- path: "/",
58
- sameSite: "None",
59
- partitioned: true,
60
- maxAge: SESSION_MAX_AGE_SEC
61
- })
62
- });
63
- setResponseCookie({
64
- c,
65
- value: serializeCookie({
66
- name: HUBSPOT_APP_SID_COOKIE_NAME,
67
- value: sessionId,
68
- path: "/",
69
- sameSite: "None",
70
- partitioned: true,
71
- maxAge: SESSION_MAX_AGE_SEC
72
- })
73
- });
74
- setResponseCookie({
75
- c,
76
- value: serializeCookie({
77
- name: TEMP_COOKIE_PKCE_VERIFIER,
78
- value: encodeURIComponent(codeVerifier),
79
- path: "/",
80
- sameSite: "None",
81
- partitioned: true,
82
- maxAge: OAUTH_TEMP_MAX_AGE_SEC
83
- })
84
- });
85
- setResponseCookie({
86
- c,
87
- value: serializeCookie({
88
- name: TEMP_COOKIE_OAUTH_STATE,
89
- value: encodeURIComponent(stateValue),
90
- path: "/",
91
- sameSite: "None",
92
- partitioned: true,
93
- maxAge: OAUTH_TEMP_MAX_AGE_SEC
94
- })
95
- });
96
- return c.json({ authorization_url: authorizeUrl.toString() });
97
- }
98
- //#endregion
99
- export { handleAuthInitSession };
100
-
101
- //# sourceMappingURL=auth-init-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-init-session.js","names":[],"sources":["../../../../src/server/hono/hubspot-connect-routes/auth-init-session.ts"],"sourcesContent":["import type { Context } from 'hono';\n\nimport {\n HUBSPOT_APP_ORIGIN_COOKIE_NAME,\n HUBSPOT_APP_SID_COOKIE_NAME,\n TEMP_COOKIE_OAUTH_STATE,\n TEMP_COOKIE_PKCE_VERIFIER,\n} from '../../constants.ts';\nimport { base64url } from '../../utils/base64-utils.ts';\nimport { sha256base64url } from '../../utils/crypto-utils.ts';\nimport { serializeCookie, setResponseCookie } from '../utils/cookie-utils.ts';\nimport { OAUTH_TEMP_MAX_AGE_SEC, SESSION_MAX_AGE_SEC } from './constants.ts';\nimport { deriveHubSpotAuthorizeScopesFromClientMetadata } from './fetch-hubspot-client-metadata.ts';\nimport type { HubSpotConnectOAuthRouteOptions } from './types.ts';\nimport {\n buildCimdClientIdUrlFromRequest,\n buildFrontendOAuthRedirectUri,\n isSafeReturnPath,\n parseAppOriginHeader,\n} from './utils.ts';\n\nexport async function handleAuthInitSession(\n c: Context,\n options: HubSpotConnectOAuthRouteOptions\n) {\n const { hubspotConnectEnv, cimdClientMetadata } = options;\n const xForwardedProto = c.req.header('x-forwarded-proto') ?? undefined;\n const xForwardedHost = c.req.header('x-forwarded-host') ?? undefined;\n const requestHostHeader = c.req.header('host') ?? undefined;\n const url = new URL(c.req.url);\n const returnPath = url.searchParams.get('return_path') ?? '/';\n if (!isSafeReturnPath(returnPath)) {\n return c.text('Invalid return_path', 400);\n }\n\n // The app origin pins the OAuth `redirect_uri` (which lands on the\n // frontend, not on this edge function) and, via the persisted\n // `__Host-hs_app_origin` cookie, drives credentialed\n // `Access-Control-Allow-Origin` on every subsequent SDK response.\n const appOrigin = parseAppOriginHeader(c.req.header('Origin'));\n if (!appOrigin) {\n return c.text(\n 'Missing or invalid Origin header; init-session must be called from a browser',\n 400\n );\n }\n\n const sessionIdBytes = new Uint8Array(32);\n crypto.getRandomValues(sessionIdBytes);\n const sessionId = base64url(sessionIdBytes);\n const sessionIdHash = await sha256base64url(sessionId);\n\n const codeVerifierBytes = new Uint8Array(32);\n crypto.getRandomValues(codeVerifierBytes);\n const codeVerifier = base64url(codeVerifierBytes);\n const codeChallenge = await sha256base64url(codeVerifier);\n\n const stateValue = base64url(\n new TextEncoder().encode(\n JSON.stringify({\n return_path: returnPath,\n sid: sessionIdHash,\n })\n )\n );\n\n const clientId = hubspotConnectEnv.isCimdEnabled\n ? buildCimdClientIdUrlFromRequest({\n requestUrl: c.req.url,\n basePath: options.basePath,\n xForwardedProto,\n xForwardedHost,\n requestHostHeader,\n })\n : hubspotConnectEnv.hubspotClientId;\n\n const redirectUri = buildFrontendOAuthRedirectUri(appOrigin);\n\n const authorizeUrl = new URL(hubspotConnectEnv.hubspotAuthorizationEndpoint);\n authorizeUrl.searchParams.set('response_type', 'code');\n authorizeUrl.searchParams.set('client_id', clientId);\n authorizeUrl.searchParams.set('redirect_uri', redirectUri);\n authorizeUrl.searchParams.set('code_challenge', codeChallenge);\n authorizeUrl.searchParams.set('code_challenge_method', 'S256');\n authorizeUrl.searchParams.set('state', stateValue);\n authorizeUrl.searchParams.set('sid', sessionIdHash);\n\n if (!hubspotConnectEnv.isCimdEnabled) {\n const scopesResult =\n deriveHubSpotAuthorizeScopesFromClientMetadata(cimdClientMetadata);\n if (!scopesResult.ok) {\n return c.text(scopesResult.message, scopesResult.status as 500 | 502);\n }\n authorizeUrl.searchParams.set('scope', scopesResult.scope);\n if (scopesResult.optionalScope !== undefined) {\n authorizeUrl.searchParams.set(\n 'optional_scope',\n scopesResult.optionalScope\n );\n }\n }\n\n setResponseCookie({\n c,\n value: serializeCookie({\n name: HUBSPOT_APP_ORIGIN_COOKIE_NAME,\n value: appOrigin,\n path: '/',\n sameSite: 'None',\n partitioned: true,\n maxAge: SESSION_MAX_AGE_SEC,\n }),\n });\n setResponseCookie({\n c,\n value: serializeCookie({\n name: HUBSPOT_APP_SID_COOKIE_NAME,\n value: sessionId,\n path: '/',\n sameSite: 'None',\n partitioned: true,\n maxAge: SESSION_MAX_AGE_SEC,\n }),\n });\n setResponseCookie({\n c,\n value: serializeCookie({\n name: TEMP_COOKIE_PKCE_VERIFIER,\n value: encodeURIComponent(codeVerifier),\n path: '/',\n sameSite: 'None',\n partitioned: true,\n maxAge: OAUTH_TEMP_MAX_AGE_SEC,\n }),\n });\n setResponseCookie({\n c,\n value: serializeCookie({\n name: TEMP_COOKIE_OAUTH_STATE,\n value: encodeURIComponent(stateValue),\n path: '/',\n sameSite: 'None',\n partitioned: true,\n maxAge: OAUTH_TEMP_MAX_AGE_SEC,\n }),\n });\n\n return c.json({ authorization_url: authorizeUrl.toString() });\n}\n"],"mappings":";;;;;;;;AAqBA,eAAsB,sBACpB,GACA,SACA;CACA,MAAM,EAAE,mBAAmB,uBAAuB;CAClD,MAAM,kBAAkB,EAAE,IAAI,OAAO,oBAAoB,IAAI,KAAA;CAC7D,MAAM,iBAAiB,EAAE,IAAI,OAAO,mBAAmB,IAAI,KAAA;CAC3D,MAAM,oBAAoB,EAAE,IAAI,OAAO,OAAO,IAAI,KAAA;CAElD,MAAM,aAAa,IADH,IAAI,EAAE,IAAI,IACJ,CAAC,aAAa,IAAI,cAAc,IAAI;CAC1D,IAAI,CAAC,iBAAiB,WAAW,EAC/B,OAAO,EAAE,KAAK,uBAAuB,IAAI;CAO3C,MAAM,YAAY,qBAAqB,EAAE,IAAI,OAAO,SAAS,CAAC;CAC9D,IAAI,CAAC,WACH,OAAO,EAAE,KACP,gFACA,IACD;CAGH,MAAM,iBAAiB,IAAI,WAAW,GAAG;CACzC,OAAO,gBAAgB,eAAe;CACtC,MAAM,YAAY,UAAU,eAAe;CAC3C,MAAM,gBAAgB,MAAM,gBAAgB,UAAU;CAEtD,MAAM,oBAAoB,IAAI,WAAW,GAAG;CAC5C,OAAO,gBAAgB,kBAAkB;CACzC,MAAM,eAAe,UAAU,kBAAkB;CACjD,MAAM,gBAAgB,MAAM,gBAAgB,aAAa;CAEzD,MAAM,aAAa,UACjB,IAAI,aAAa,CAAC,OAChB,KAAK,UAAU;EACb,aAAa;EACb,KAAK;EACN,CAAC,CACH,CACF;CAED,MAAM,WAAW,kBAAkB,gBAC/B,gCAAgC;EAC9B,YAAY,EAAE,IAAI;EAClB,UAAU,QAAQ;EAClB;EACA;EACA;EACD,CAAC,GACF,kBAAkB;CAEtB,MAAM,cAAc,8BAA8B,UAAU;CAE5D,MAAM,eAAe,IAAI,IAAI,kBAAkB,6BAA6B;CAC5E,aAAa,aAAa,IAAI,iBAAiB,OAAO;CACtD,aAAa,aAAa,IAAI,aAAa,SAAS;CACpD,aAAa,aAAa,IAAI,gBAAgB,YAAY;CAC1D,aAAa,aAAa,IAAI,kBAAkB,cAAc;CAC9D,aAAa,aAAa,IAAI,yBAAyB,OAAO;CAC9D,aAAa,aAAa,IAAI,SAAS,WAAW;CAClD,aAAa,aAAa,IAAI,OAAO,cAAc;CAEnD,IAAI,CAAC,kBAAkB,eAAe;EACpC,MAAM,eACJ,+CAA+C,mBAAmB;EACpE,IAAI,CAAC,aAAa,IAChB,OAAO,EAAE,KAAK,aAAa,SAAS,aAAa,OAAoB;EAEvE,aAAa,aAAa,IAAI,SAAS,aAAa,MAAM;EAC1D,IAAI,aAAa,kBAAkB,KAAA,GACjC,aAAa,aAAa,IACxB,kBACA,aAAa,cACd;;CAIL,kBAAkB;EAChB;EACA,OAAO,gBAAgB;GACrB,MAAM;GACN,OAAO;GACP,MAAM;GACN,UAAU;GACV,aAAa;GACb,QAAQ;GACT,CAAC;EACH,CAAC;CACF,kBAAkB;EAChB;EACA,OAAO,gBAAgB;GACrB,MAAM;GACN,OAAO;GACP,MAAM;GACN,UAAU;GACV,aAAa;GACb,QAAQ;GACT,CAAC;EACH,CAAC;CACF,kBAAkB;EAChB;EACA,OAAO,gBAAgB;GACrB,MAAM;GACN,OAAO,mBAAmB,aAAa;GACvC,MAAM;GACN,UAAU;GACV,aAAa;GACb,QAAQ;GACT,CAAC;EACH,CAAC;CACF,kBAAkB;EAChB;EACA,OAAO,gBAAgB;GACrB,MAAM;GACN,OAAO,mBAAmB,WAAW;GACrC,MAAM;GACN,UAAU;GACV,aAAa;GACb,QAAQ;GACT,CAAC;EACH,CAAC;CAEF,OAAO,EAAE,KAAK,EAAE,mBAAmB,aAAa,UAAU,EAAE,CAAC"}