@hubspot/app-connect-sdk 1.0.0-alpha.1
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.
- package/.turbo/turbo-format$colon$check.log +4 -0
- package/.turbo/turbo-lint.log +2 -0
- package/.turbo/turbo-test.log +76 -0
- package/.turbo/turbo-tsc.log +2 -0
- package/.turbo/turbo-tsdown.log +521 -0
- package/README.md +5 -0
- package/build/tsconfig.browser.tsbuildinfo +1 -0
- package/build/tsconfig.server.tsbuildinfo +1 -0
- package/dist/browser/HubSpotAppConnect-BW45gyDs.js +489 -0
- package/dist/browser/HubSpotAppConnect-BW45gyDs.js.map +1 -0
- package/dist/browser/assets/src/browser/react/components/AppConnectHeader/AppConnectHeader.css.ts.vanilla-DpJ0aBGF.css +211 -0
- package/dist/browser/assets/src/browser/react/components/Button/Button.css.ts.vanilla-Df16gUKx.css +42 -0
- package/dist/browser/assets/src/browser/react/components/ConnectButton/ConnectButton.css.ts.vanilla-BXXMQqfA.css +66 -0
- package/dist/browser/assets/src/browser/react/components/DisconnectedBody/DisconnectedBody.css.ts.vanilla-DLvostZL.css +19 -0
- package/dist/browser/assets/src/browser/react/components/HubSpotAppConnect/HubSpotAppConnect.css.ts.vanilla-Boi40eip.css +17 -0
- package/dist/browser/assets/src/browser/react/components/LoadingIndicator/LoadingIndicator.css.ts.vanilla-RVWGi6Ny.css +25 -0
- package/dist/browser/assets/src/browser/react/components/ShareButton/ShareButton.css.ts.vanilla-CY8SC-0T.css +40 -0
- package/dist/browser/assets/src/browser/theme-tokens.generated.css.ts.vanilla-C8Rjb8NH.css +220 -0
- package/dist/browser/assets/src/browser/theme.css.ts.vanilla-D_GBwEeI.css +12 -0
- package/dist/browser/create-vctOhpX9.js +517 -0
- package/dist/browser/create-vctOhpX9.js.map +1 -0
- package/dist/browser/index.d.ts +465 -0
- package/dist/browser/index.js +3 -0
- package/dist/browser/react/lovable.d.ts +30 -0
- package/dist/browser/react/lovable.js +23 -0
- package/dist/browser/react/lovable.js.map +1 -0
- package/dist/browser/react.d.ts +47 -0
- package/dist/browser/react.js +2 -0
- package/dist/browser/theme.css-CJbxi5hC.js +368 -0
- package/dist/browser/theme.css-CJbxi5hC.js.map +1 -0
- package/dist/browser/types-rTQw6A54.d.ts +79 -0
- package/dist/server/api-client-core/apis/account/account-info-types.generated.d.ts +111 -0
- package/dist/server/api-client-core/apis/account/account-info.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/account/account-info.generated.js +9 -0
- package/dist/server/api-client-core/apis/account/account-info.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/account/audit-logs-types.generated.d.ts +247 -0
- package/dist/server/api-client-core/apis/account/audit-logs.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/account/audit-logs.generated.js +28 -0
- package/dist/server/api-client-core/apis/account/audit-logs.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/auth/oauth-types.generated.d.ts +121 -0
- package/dist/server/api-client-core/apis/auth/oauth.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/auth/oauth.generated.js +19 -0
- package/dist/server/api-client-core/apis/auth/oauth.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/automation/actions-types.generated.d.ts +933 -0
- package/dist/server/api-client-core/apis/automation/actions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/automation/actions.generated.js +121 -0
- package/dist/server/api-client-core/apis/automation/actions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/automation/sequences-types.generated.d.ts +422 -0
- package/dist/server/api-client-core/apis/automation/sequences.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/automation/sequences.generated.js +22 -0
- package/dist/server/api-client-core/apis/automation/sequences.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/business-units-types.generated.d.ts +75 -0
- package/dist/server/api-client-core/apis/business-units.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/business-units.generated.js +12 -0
- package/dist/server/api-client-core/apis/business-units.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/authors-types.generated.d.ts +551 -0
- package/dist/server/api-client-core/apis/cms/authors.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/authors.generated.js +163 -0
- package/dist/server/api-client-core/apis/cms/authors.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/blog-settings-types.generated.d.ts +366 -0
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.js +43 -0
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/cms-content-audit-types.generated.d.ts +157 -0
- package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js +18 -0
- package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/domains-types.generated.d.ts +193 -0
- package/dist/server/api-client-core/apis/cms/domains.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/domains.generated.js +20 -0
- package/dist/server/api-client-core/apis/cms/domains.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/hubdb-types.generated.d.ts +1097 -0
- package/dist/server/api-client-core/apis/cms/hubdb.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/hubdb.generated.js +192 -0
- package/dist/server/api-client-core/apis/cms/hubdb.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/media-bridge-types.generated.d.ts +1780 -0
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.js +185 -0
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/pages-types.generated.d.ts +1768 -0
- package/dist/server/api-client-core/apis/cms/pages.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/pages.generated.js +331 -0
- package/dist/server/api-client-core/apis/cms/pages.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/posts-types.generated.d.ts +1090 -0
- package/dist/server/api-client-core/apis/cms/posts.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/posts.generated.js +201 -0
- package/dist/server/api-client-core/apis/cms/posts.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/site-search-types.generated.d.ts +200 -0
- package/dist/server/api-client-core/apis/cms/site-search.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/site-search.generated.js +32 -0
- package/dist/server/api-client-core/apis/cms/site-search.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/source-code-types.generated.d.ts +218 -0
- package/dist/server/api-client-core/apis/cms/source-code.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/source-code.generated.js +52 -0
- package/dist/server/api-client-core/apis/cms/source-code.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/tags-types.generated.d.ts +515 -0
- package/dist/server/api-client-core/apis/cms/tags.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/tags.generated.js +163 -0
- package/dist/server/api-client-core/apis/cms/tags.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/url-mappings-types.generated.d.ts +177 -0
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.js +14 -0
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/cms/url-redirects-types.generated.d.ts +226 -0
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.js +26 -0
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.d.ts +802 -0
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js +74 -0
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/conversations/custom-channels-types.generated.d.ts +551 -0
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js +80 -0
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/conversations/visitor-identification-types.generated.d.ts +60 -0
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js +6 -0
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/conversations-types.generated.d.ts +908 -0
- package/dist/server/api-client-core/apis/conversations.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/conversations.generated.js +108 -0
- package/dist/server/api-client-core/apis/conversations.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/app-uninstalls-types.generated.d.ts +37 -0
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js +6 -0
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/appointments-types.generated.d.ts +989 -0
- package/dist/server/api-client-core/apis/crm/appointments.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/appointments.generated.js +118 -0
- package/dist/server/api-client-core/apis/crm/appointments.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/associations-schema-types.generated.d.ts +329 -0
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.js +60 -0
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/associations-types.generated.d.ts +661 -0
- package/dist/server/api-client-core/apis/crm/associations.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/associations.generated.js +83 -0
- package/dist/server/api-client-core/apis/crm/associations.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/calling-extensions-types.generated.d.ts +466 -0
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js +42 -0
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/calls-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/calls.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/calls.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/calls.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/carts-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/carts.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/carts.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/carts.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/commerce-payments-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.d.ts +847 -0
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/communications-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/communications.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/communications.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/communications.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/companies-types.generated.d.ts +884 -0
- package/dist/server/api-client-core/apis/crm/companies.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/companies.generated.js +67 -0
- package/dist/server/api-client-core/apis/crm/companies.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/contacts-types.generated.d.ts +899 -0
- package/dist/server/api-client-core/apis/crm/contacts.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/contacts.generated.js +70 -0
- package/dist/server/api-client-core/apis/crm/contacts.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/contracts-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/contracts.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/contracts.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/contracts.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/courses-types.generated.d.ts +853 -0
- package/dist/server/api-client-core/apis/crm/courses.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/courses.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/courses.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/crm-owners-types.generated.d.ts +140 -0
- package/dist/server/api-client-core/apis/crm/crm-owners.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/crm-owners.generated.js +20 -0
- package/dist/server/api-client-core/apis/crm/crm-owners.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/custom-objects-types.generated.d.ts +934 -0
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.js +101 -0
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/deal-splits-types.generated.d.ts +196 -0
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.js +9 -0
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/deals-types.generated.d.ts +872 -0
- package/dist/server/api-client-core/apis/crm/deals.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/deals.generated.js +67 -0
- package/dist/server/api-client-core/apis/crm/deals.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/discounts-types.generated.d.ts +846 -0
- package/dist/server/api-client-core/apis/crm/discounts.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/discounts.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/discounts.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/emails-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/emails.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/emails.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/emails.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/exports-types.generated.d.ts +281 -0
- package/dist/server/api-client-core/apis/crm/exports.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/exports.generated.js +12 -0
- package/dist/server/api-client-core/apis/crm/exports.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/feedback-submissions-types.generated.d.ts +616 -0
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js +55 -0
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/fees-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/fees.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/fees.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/fees.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/goal-targets-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/imports-types.generated.d.ts +371 -0
- package/dist/server/api-client-core/apis/crm/imports.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/imports.generated.js +30 -0
- package/dist/server/api-client-core/apis/crm/imports.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/invoices-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/invoices.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/invoices.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/invoices.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/leads-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/leads.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/leads.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/leads.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/limits-tracking-types.generated.d.ts +331 -0
- package/dist/server/api-client-core/apis/crm/limits-tracking.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js +22 -0
- package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/line-items-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/line-items.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/line-items.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/line-items.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/listings-types.generated.d.ts +853 -0
- package/dist/server/api-client-core/apis/crm/listings.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/listings.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/listings.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/lists-types.generated.d.ts +2265 -0
- package/dist/server/api-client-core/apis/crm/lists.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/lists.generated.js +105 -0
- package/dist/server/api-client-core/apis/crm/lists.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/meetings-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/meetings.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/meetings.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/meetings.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/notes-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/notes.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/notes.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/notes.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/object-library-types.generated.d.ts +60 -0
- package/dist/server/api-client-core/apis/crm/object-library.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/object-library.generated.js +9 -0
- package/dist/server/api-client-core/apis/crm/object-library.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/objects-types.generated.d.ts +712 -0
- package/dist/server/api-client-core/apis/crm/objects.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/objects.generated.js +76 -0
- package/dist/server/api-client-core/apis/crm/objects.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/orders-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/orders.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/orders.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/orders.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/partner-clients-types.generated.d.ts +725 -0
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.js +71 -0
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/partner-services-types.generated.d.ts +725 -0
- package/dist/server/api-client-core/apis/crm/partner-services.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/partner-services.generated.js +71 -0
- package/dist/server/api-client-core/apis/crm/partner-services.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/pipelines-types.generated.d.ts +430 -0
- package/dist/server/api-client-core/apis/crm/pipelines.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/pipelines.generated.js +94 -0
- package/dist/server/api-client-core/apis/crm/pipelines.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/postal-mail-types.generated.d.ts +844 -0
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/products-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/products.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/products.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/products.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/projects-types.generated.d.ts +881 -0
- package/dist/server/api-client-core/apis/crm/projects.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/projects.generated.js +67 -0
- package/dist/server/api-client-core/apis/crm/projects.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/properties-types.generated.d.ts +603 -0
- package/dist/server/api-client-core/apis/crm/properties.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/properties.generated.js +86 -0
- package/dist/server/api-client-core/apis/crm/properties.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/property-validations-types.generated.d.ts +121 -0
- package/dist/server/api-client-core/apis/crm/property-validations.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/property-validations.generated.js +25 -0
- package/dist/server/api-client-core/apis/crm/property-validations.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.d.ts +486 -0
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js +34 -0
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.d.ts +247 -0
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js +69 -0
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/quotes-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/quotes.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/quotes.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/quotes.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/schemas-types.generated.d.ts +669 -0
- package/dist/server/api-client-core/apis/crm/schemas.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/schemas.generated.js +41 -0
- package/dist/server/api-client-core/apis/crm/schemas.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/services-types.generated.d.ts +853 -0
- package/dist/server/api-client-core/apis/crm/services.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/services.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/services.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/tasks-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/tasks.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/tasks.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/tasks.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/taxes-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/taxes.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/taxes.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/taxes.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/tickets-types.generated.d.ts +884 -0
- package/dist/server/api-client-core/apis/crm/tickets.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/tickets.generated.js +67 -0
- package/dist/server/api-client-core/apis/crm/tickets.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/timeline-types.generated.d.ts +187 -0
- package/dist/server/api-client-core/apis/crm/timeline.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/timeline.generated.js +12 -0
- package/dist/server/api-client-core/apis/crm/timeline.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/transcriptions-types.generated.d.ts +152 -0
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.js +15 -0
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/users-types.generated.d.ts +850 -0
- package/dist/server/api-client-core/apis/crm/users.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/users.generated.js +66 -0
- package/dist/server/api-client-core/apis/crm/users.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.d.ts +72 -0
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js +13 -0
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/events/manage-event-definitions-types.generated.d.ts +1005 -0
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js +39 -0
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/events/send-event-completions-types.generated.d.ts +94 -0
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.js +9 -0
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/events-types.generated.d.ts +137 -0
- package/dist/server/api-client-core/apis/events.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/events.generated.js +23 -0
- package/dist/server/api-client-core/apis/events.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/files-types.generated.d.ts +791 -0
- package/dist/server/api-client-core/apis/files.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/files.generated.js +119 -0
- package/dist/server/api-client-core/apis/files.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.d.ts +989 -0
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js +139 -0
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/marketing/marketing-emails-types.generated.d.ts +883 -0
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js +108 -0
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/marketing/marketing-events-types.generated.d.ts +1788 -0
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js +176 -0
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/marketing/single-send-types.generated.d.ts +123 -0
- package/dist/server/api-client-core/apis/marketing/single-send.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/marketing/single-send.generated.js +6 -0
- package/dist/server/api-client-core/apis/marketing/single-send.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/marketing/transactional-single-send-types.generated.d.ts +257 -0
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js +20 -0
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/meta/origins-types.generated.d.ts +77 -0
- package/dist/server/api-client-core/apis/meta/origins.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/meta/origins.generated.js +15 -0
- package/dist/server/api-client-core/apis/meta/origins.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/scheduler/meetings-types.generated.d.ts +913 -0
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.js +34 -0
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/settings/multicurrency-types.generated.d.ts +404 -0
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.js +38 -0
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/settings/tax-rates-types.generated.d.ts +111 -0
- package/dist/server/api-client-core/apis/settings/tax-rates.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/settings/tax-rates.generated.js +13 -0
- package/dist/server/api-client-core/apis/settings/tax-rates.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/settings/user-provisioning-types.generated.d.ts +297 -0
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js +31 -0
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/webhooks-journal-types.generated.d.ts +643 -0
- package/dist/server/api-client-core/apis/webhooks-journal.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/webhooks-journal.generated.js +75 -0
- package/dist/server/api-client-core/apis/webhooks-journal.generated.js.map +1 -0
- package/dist/server/api-client-core/apis/webhooks-types.generated.d.ts +1016 -0
- package/dist/server/api-client-core/apis/webhooks.generated.d.ts +7 -0
- package/dist/server/api-client-core/apis/webhooks.generated.js +105 -0
- package/dist/server/api-client-core/apis/webhooks.generated.js.map +1 -0
- package/dist/server/api-client-core/binary-data.d.ts +33 -0
- package/dist/server/api-client-core/binary-data.js +29 -0
- package/dist/server/api-client-core/binary-data.js.map +1 -0
- package/dist/server/api-client-core/client.d.ts +14 -0
- package/dist/server/api-client-core/client.js +75 -0
- package/dist/server/api-client-core/client.js.map +1 -0
- package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js +25 -0
- package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js.map +1 -0
- package/dist/server/api-client-core/errors.d.ts +27 -0
- package/dist/server/api-client-core/errors.js +33 -0
- package/dist/server/api-client-core/errors.js.map +1 -0
- package/dist/server/api-client-core/op.d.ts +37 -0
- package/dist/server/api-client-core/op.js +44 -0
- package/dist/server/api-client-core/op.js.map +1 -0
- package/dist/server/api-client-core/pagination.d.ts +60 -0
- package/dist/server/api-client-core/pagination.js +103 -0
- package/dist/server/api-client-core/pagination.js.map +1 -0
- package/dist/server/api-client-core/plugins/fetch-transport.js +72 -0
- package/dist/server/api-client-core/plugins/fetch-transport.js.map +1 -0
- package/dist/server/api-client-core/types.d.ts +135 -0
- package/dist/server/api-client.d.ts +197 -0
- package/dist/server/api-client.js +101 -0
- package/dist/server/constants.js +46 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/deno/start.d.ts +12 -0
- package/dist/server/deno/start.js +21 -0
- package/dist/server/deno/start.js.map +1 -0
- package/dist/server/hono/hono-request-handler.js +54 -0
- package/dist/server/hono/hono-request-handler.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/auth-callback.js +125 -0
- package/dist/server/hono/hubspot-connect-routes/auth-callback.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/auth-init-session.js +90 -0
- package/dist/server/hono/hubspot-connect-routes/auth-init-session.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/auth-logout.js +97 -0
- package/dist/server/hono/hubspot-connect-routes/auth-logout.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/auth-refresh.js +101 -0
- package/dist/server/hono/hubspot-connect-routes/auth-refresh.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.d.ts +16 -0
- package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js +13 -0
- package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js +42 -0
- package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/constants.js +8 -0
- package/dist/server/hono/hubspot-connect-routes/constants.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js +43 -0
- package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js +35 -0
- package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js +34 -0
- package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/oauth-client.js +104 -0
- package/dist/server/hono/hubspot-connect-routes/oauth-client.js.map +1 -0
- package/dist/server/hono/hubspot-connect-routes/utils.js +73 -0
- package/dist/server/hono/hubspot-connect-routes/utils.js.map +1 -0
- package/dist/server/hono/index.js +4 -0
- package/dist/server/hono/types.d.ts +28 -0
- package/dist/server/hono/utils/cookie-utils.js +29 -0
- package/dist/server/hono/utils/cookie-utils.js.map +1 -0
- package/dist/server/import-app-keys.js +42 -0
- package/dist/server/import-app-keys.js.map +1 -0
- package/dist/server/lovable/create-app-function-start.d.ts +26 -0
- package/dist/server/lovable/create-app-function-start.js +28 -0
- package/dist/server/lovable/create-app-function-start.js.map +1 -0
- package/dist/server/lovable/hubspot-connect/index.d.ts +15 -0
- package/dist/server/lovable/hubspot-connect/index.js +20 -0
- package/dist/server/lovable/hubspot-connect/index.js.map +1 -0
- package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js +29 -0
- package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js.map +1 -0
- package/dist/server/lovable.d.ts +6 -0
- package/dist/server/lovable.js +4 -0
- package/dist/server/oauth.d.ts +6 -0
- package/dist/server/oauth.js +5 -0
- package/dist/server/proxy.js +68 -0
- package/dist/server/proxy.js.map +1 -0
- package/dist/server/sanitize-request.js +41 -0
- package/dist/server/sanitize-request.js.map +1 -0
- package/dist/server/secure-start-core.d.ts +23 -0
- package/dist/server/secure-start-core.js +28 -0
- package/dist/server/secure-start-core.js.map +1 -0
- package/dist/server/shared/constants.js +17 -0
- package/dist/server/shared/constants.js.map +1 -0
- package/dist/server/shared/encoding/base64.js +45 -0
- package/dist/server/shared/encoding/base64.js.map +1 -0
- package/dist/server/shared/encoding/sha256.d.ts +10 -0
- package/dist/server/shared/encoding/sha256.js +15 -0
- package/dist/server/shared/encoding/sha256.js.map +1 -0
- package/dist/server/shared/logger.d.ts +15 -0
- package/dist/server/shared/logger.js +16 -0
- package/dist/server/shared/logger.js.map +1 -0
- package/dist/server/types.d.ts +56 -0
- package/dist/server/utils/cookie-utils.js +21 -0
- package/dist/server/utils/cookie-utils.js.map +1 -0
- package/dist/server/utils/dpop-utils.d.ts +67 -0
- package/dist/server/utils/dpop-utils.js +75 -0
- package/dist/server/utils/dpop-utils.js.map +1 -0
- package/dist/server/utils/env-utils.js +54 -0
- package/dist/server/utils/env-utils.js.map +1 -0
- package/dist/server/utils/jwk-utils.d.ts +16 -0
- package/dist/server/utils/jwk-utils.js +24 -0
- package/dist/server/utils/jwk-utils.js.map +1 -0
- package/dist/server/utils/jwt-utils.d.ts +39 -0
- package/dist/server/utils/jwt-utils.js +87 -0
- package/dist/server/utils/jwt-utils.js.map +1 -0
- package/eslint.config.js +5 -0
- package/package.json +68 -0
- package/src/browser/app-connect-controller/README.md +92 -0
- package/src/browser/app-connect-controller/connect-start.ts +45 -0
- package/src/browser/app-connect-controller/constants.ts +15 -0
- package/src/browser/app-connect-controller/create.ts +137 -0
- package/src/browser/app-connect-controller/default-session-storage.ts +21 -0
- package/src/browser/app-connect-controller/disconnect.ts +54 -0
- package/src/browser/app-connect-controller/init.ts +35 -0
- package/src/browser/app-connect-controller/refresh.ts +124 -0
- package/src/browser/app-connect-controller/types.ts +48 -0
- package/src/browser/app-connect-controller/utils/crypto-utils.ts +1 -0
- package/src/browser/app-connect-controller/utils/encode-utils.ts +1 -0
- package/src/browser/app-connect-controller/utils/memoize-utils.test.ts +48 -0
- package/src/browser/app-connect-controller/utils/memoize-utils.ts +26 -0
- package/src/browser/app-connect-controller/utils/session-utils.test.ts +127 -0
- package/src/browser/app-connect-controller/utils/session-utils.ts +58 -0
- package/src/browser/app-connect-controller/utils/store-utils.test.ts +102 -0
- package/src/browser/app-connect-controller/utils/store-utils.ts +119 -0
- package/src/browser/app-connect-controller/utils/timeout-utils.ts +8 -0
- package/src/browser/app-connect-controller/view-state.test.ts +70 -0
- package/src/browser/app-connect-controller/view-state.ts +40 -0
- package/src/browser/index.ts +13 -0
- package/src/browser/react/components/AppConnectHeader/AppConnectHeader.css.ts +231 -0
- package/src/browser/react/components/AppConnectHeader/AppConnectHeader.tsx +124 -0
- package/src/browser/react/components/Button/Button.css.ts +59 -0
- package/src/browser/react/components/Button/Button.tsx +38 -0
- package/src/browser/react/components/ConnectButton/ConnectButton.css.ts +73 -0
- package/src/browser/react/components/ConnectButton/ConnectButton.tsx +43 -0
- package/src/browser/react/components/DisconnectedBody/DisconnectedBody.css.ts +25 -0
- package/src/browser/react/components/DisconnectedBody/DisconnectedBody.tsx +25 -0
- package/src/browser/react/components/HubSpotAppConnect/HubSpotAppConnect.css.ts +23 -0
- package/src/browser/react/components/HubSpotAppConnect/HubSpotAppConnect.tsx +90 -0
- package/src/browser/react/components/LoadingIndicator/LoadingIndicator.css.ts +28 -0
- package/src/browser/react/components/LoadingIndicator/LoadingIndicator.tsx +9 -0
- package/src/browser/react/components/ShareButton/ShareButton.css.ts +52 -0
- package/src/browser/react/components/ShareButton/ShareButton.tsx +43 -0
- package/src/browser/react/components/icons/ChevronDownIcon.tsx +23 -0
- package/src/browser/react/components/icons/ExternalLinkIcon.tsx +23 -0
- package/src/browser/react/components/icons/HubSpotDataSourceIcon.tsx +33 -0
- package/src/browser/react/components/icons/LogoutIcon.tsx +37 -0
- package/src/browser/react/components/icons/ShareIcon.tsx +31 -0
- package/src/browser/react/context.ts +12 -0
- package/src/browser/react/hooks.ts +28 -0
- package/src/browser/react/index.ts +6 -0
- package/src/browser/react/lovable/LovableHubSpotAppConnect.tsx +37 -0
- package/src/browser/react/lovable/index.ts +4 -0
- package/src/browser/theme-tokens.generated.css.ts +424 -0
- package/src/browser/theme.css.ts +21 -0
- package/src/browser/types.ts +83 -0
- package/src/server/api-client-core/apis/account/account-info-types.generated.ts +116 -0
- package/src/server/api-client-core/apis/account/account-info.generated.ts +14 -0
- package/src/server/api-client-core/apis/account/audit-logs-types.generated.ts +409 -0
- package/src/server/api-client-core/apis/account/audit-logs.generated.ts +41 -0
- package/src/server/api-client-core/apis/auth/oauth-types.generated.ts +138 -0
- package/src/server/api-client-core/apis/auth/oauth.generated.ts +26 -0
- package/src/server/api-client-core/apis/automation/actions-types.generated.ts +1337 -0
- package/src/server/api-client-core/apis/automation/actions.generated.ts +166 -0
- package/src/server/api-client-core/apis/automation/sequences-types.generated.ts +456 -0
- package/src/server/api-client-core/apis/automation/sequences.generated.ts +34 -0
- package/src/server/api-client-core/apis/business-units-types.generated.ts +82 -0
- package/src/server/api-client-core/apis/business-units.generated.ts +16 -0
- package/src/server/api-client-core/apis/cms/authors-types.generated.ts +4003 -0
- package/src/server/api-client-core/apis/cms/authors.generated.ts +199 -0
- package/src/server/api-client-core/apis/cms/blog-settings-types.generated.ts +3795 -0
- package/src/server/api-client-core/apis/cms/blog-settings.generated.ts +79 -0
- package/src/server/api-client-core/apis/cms/cms-content-audit-types.generated.ts +198 -0
- package/src/server/api-client-core/apis/cms/cms-content-audit.generated.ts +31 -0
- package/src/server/api-client-core/apis/cms/domains-types.generated.ts +201 -0
- package/src/server/api-client-core/apis/cms/domains.generated.ts +30 -0
- package/src/server/api-client-core/apis/cms/hubdb-types.generated.ts +1276 -0
- package/src/server/api-client-core/apis/cms/hubdb.generated.ts +220 -0
- package/src/server/api-client-core/apis/cms/media-bridge-types.generated.ts +8928 -0
- package/src/server/api-client-core/apis/cms/media-bridge.generated.ts +244 -0
- package/src/server/api-client-core/apis/cms/pages-types.generated.ts +5548 -0
- package/src/server/api-client-core/apis/cms/pages.generated.ts +423 -0
- package/src/server/api-client-core/apis/cms/posts-types.generated.ts +4682 -0
- package/src/server/api-client-core/apis/cms/posts.generated.ts +254 -0
- package/src/server/api-client-core/apis/cms/site-search-types.generated.ts +1914 -0
- package/src/server/api-client-core/apis/cms/site-search.generated.ts +40 -0
- package/src/server/api-client-core/apis/cms/source-code-types.generated.ts +240 -0
- package/src/server/api-client-core/apis/cms/source-code.generated.ts +54 -0
- package/src/server/api-client-core/apis/cms/tags-types.generated.ts +3969 -0
- package/src/server/api-client-core/apis/cms/tags.generated.ts +199 -0
- package/src/server/api-client-core/apis/cms/url-mappings-types.generated.ts +245 -0
- package/src/server/api-client-core/apis/cms/url-mappings.generated.ts +25 -0
- package/src/server/api-client-core/apis/cms/url-redirects-types.generated.ts +241 -0
- package/src/server/api-client-core/apis/cms/url-redirects.generated.ts +40 -0
- package/src/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.ts +893 -0
- package/src/server/api-client-core/apis/communication-preferences/subscriptions.generated.ts +108 -0
- package/src/server/api-client-core/apis/conversations/custom-channels-types.generated.ts +687 -0
- package/src/server/api-client-core/apis/conversations/custom-channels.generated.ts +121 -0
- package/src/server/api-client-core/apis/conversations/visitor-identification-types.generated.ts +66 -0
- package/src/server/api-client-core/apis/conversations/visitor-identification.generated.ts +14 -0
- package/src/server/api-client-core/apis/conversations-types.generated.ts +1126 -0
- package/src/server/api-client-core/apis/conversations.generated.ts +152 -0
- package/src/server/api-client-core/apis/crm/app-uninstalls-types.generated.ts +37 -0
- package/src/server/api-client-core/apis/crm/app-uninstalls.generated.ts +12 -0
- package/src/server/api-client-core/apis/crm/appointments-types.generated.ts +1094 -0
- package/src/server/api-client-core/apis/crm/appointments.generated.ts +153 -0
- package/src/server/api-client-core/apis/crm/associations-schema-types.generated.ts +403 -0
- package/src/server/api-client-core/apis/crm/associations-schema.generated.ts +99 -0
- package/src/server/api-client-core/apis/crm/associations-types.generated.ts +750 -0
- package/src/server/api-client-core/apis/crm/associations.generated.ts +134 -0
- package/src/server/api-client-core/apis/crm/calling-extensions-types.generated.ts +565 -0
- package/src/server/api-client-core/apis/crm/calling-extensions.generated.ts +75 -0
- package/src/server/api-client-core/apis/crm/calls-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/calls.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/carts-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/carts.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/commerce-payments-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/commerce-payments.generated.ts +115 -0
- package/src/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.ts +935 -0
- package/src/server/api-client-core/apis/crm/commerce-subscriptions.generated.ts +109 -0
- package/src/server/api-client-core/apis/crm/communications-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/communications.generated.ts +115 -0
- package/src/server/api-client-core/apis/crm/companies-types.generated.ts +976 -0
- package/src/server/api-client-core/apis/crm/companies.generated.ts +112 -0
- package/src/server/api-client-core/apis/crm/contacts-types.generated.ts +996 -0
- package/src/server/api-client-core/apis/crm/contacts.generated.ts +114 -0
- package/src/server/api-client-core/apis/crm/contracts-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/contracts.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/courses-types.generated.ts +941 -0
- package/src/server/api-client-core/apis/crm/courses.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/crm-owners-types.generated.ts +148 -0
- package/src/server/api-client-core/apis/crm/crm-owners.generated.ts +25 -0
- package/src/server/api-client-core/apis/crm/custom-objects-types.generated.ts +1024 -0
- package/src/server/api-client-core/apis/crm/custom-objects.generated.ts +136 -0
- package/src/server/api-client-core/apis/crm/deal-splits-types.generated.ts +208 -0
- package/src/server/api-client-core/apis/crm/deal-splits.generated.ts +14 -0
- package/src/server/api-client-core/apis/crm/deals-types.generated.ts +963 -0
- package/src/server/api-client-core/apis/crm/deals.generated.ts +107 -0
- package/src/server/api-client-core/apis/crm/discounts-types.generated.ts +934 -0
- package/src/server/api-client-core/apis/crm/discounts.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/emails-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/emails.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/exports-types.generated.ts +360 -0
- package/src/server/api-client-core/apis/crm/exports.generated.ts +24 -0
- package/src/server/api-client-core/apis/crm/feedback-submissions-types.generated.ts +676 -0
- package/src/server/api-client-core/apis/crm/feedback-submissions.generated.ts +89 -0
- package/src/server/api-client-core/apis/crm/fees-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/fees.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/goal-targets-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/goal-targets.generated.ts +107 -0
- package/src/server/api-client-core/apis/crm/imports-types.generated.ts +754 -0
- package/src/server/api-client-core/apis/crm/imports.generated.ts +41 -0
- package/src/server/api-client-core/apis/crm/invoices-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/invoices.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/leads-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/leads.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/limits-tracking-types.generated.ts +371 -0
- package/src/server/api-client-core/apis/crm/limits-tracking.generated.ts +42 -0
- package/src/server/api-client-core/apis/crm/line-items-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/line-items.generated.ts +107 -0
- package/src/server/api-client-core/apis/crm/listings-types.generated.ts +941 -0
- package/src/server/api-client-core/apis/crm/listings.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/lists-types.generated.ts +3053 -0
- package/src/server/api-client-core/apis/crm/lists.generated.ts +166 -0
- package/src/server/api-client-core/apis/crm/meetings-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/meetings.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/notes-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/notes.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/object-library-types.generated.ts +67 -0
- package/src/server/api-client-core/apis/crm/object-library.generated.ts +16 -0
- package/src/server/api-client-core/apis/crm/objects-types.generated.ts +785 -0
- package/src/server/api-client-core/apis/crm/objects.generated.ts +90 -0
- package/src/server/api-client-core/apis/crm/orders-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/orders.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/partner-clients-types.generated.ts +804 -0
- package/src/server/api-client-core/apis/crm/partner-clients.generated.ts +108 -0
- package/src/server/api-client-core/apis/crm/partner-services-types.generated.ts +802 -0
- package/src/server/api-client-core/apis/crm/partner-services.generated.ts +108 -0
- package/src/server/api-client-core/apis/crm/pipelines-types.generated.ts +491 -0
- package/src/server/api-client-core/apis/crm/pipelines.generated.ts +144 -0
- package/src/server/api-client-core/apis/crm/postal-mail-types.generated.ts +932 -0
- package/src/server/api-client-core/apis/crm/postal-mail.generated.ts +107 -0
- package/src/server/api-client-core/apis/crm/products-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/products.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/projects-types.generated.ts +973 -0
- package/src/server/api-client-core/apis/crm/projects.generated.ts +112 -0
- package/src/server/api-client-core/apis/crm/properties-types.generated.ts +705 -0
- package/src/server/api-client-core/apis/crm/properties.generated.ts +97 -0
- package/src/server/api-client-core/apis/crm/property-validations-types.generated.ts +225 -0
- package/src/server/api-client-core/apis/crm/property-validations.generated.ts +47 -0
- package/src/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.ts +550 -0
- package/src/server/api-client-core/apis/crm/public-app-crm-cards.generated.ts +46 -0
- package/src/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.ts +284 -0
- package/src/server/api-client-core/apis/crm/public-app-feature-flags.generated.ts +89 -0
- package/src/server/api-client-core/apis/crm/quotes-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/quotes.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/schemas-types.generated.ts +735 -0
- package/src/server/api-client-core/apis/crm/schemas.generated.ts +68 -0
- package/src/server/api-client-core/apis/crm/services-types.generated.ts +941 -0
- package/src/server/api-client-core/apis/crm/services.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/tasks-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/tasks.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/taxes-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/taxes.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/tickets-types.generated.ts +976 -0
- package/src/server/api-client-core/apis/crm/tickets.generated.ts +112 -0
- package/src/server/api-client-core/apis/crm/timeline-types.generated.ts +207 -0
- package/src/server/api-client-core/apis/crm/timeline.generated.ts +23 -0
- package/src/server/api-client-core/apis/crm/transcriptions-types.generated.ts +200 -0
- package/src/server/api-client-core/apis/crm/transcriptions.generated.ts +29 -0
- package/src/server/api-client-core/apis/crm/users-types.generated.ts +938 -0
- package/src/server/api-client-core/apis/crm/users.generated.ts +106 -0
- package/src/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.ts +78 -0
- package/src/server/api-client-core/apis/crm/video-conferencing-extension.generated.ts +25 -0
- package/src/server/api-client-core/apis/events/manage-event-definitions-types.generated.ts +1621 -0
- package/src/server/api-client-core/apis/events/manage-event-definitions.generated.ts +73 -0
- package/src/server/api-client-core/apis/events/send-event-completions-types.generated.ts +103 -0
- package/src/server/api-client-core/apis/events/send-event-completions.generated.ts +19 -0
- package/src/server/api-client-core/apis/events-types.generated.ts +145 -0
- package/src/server/api-client-core/apis/events.generated.ts +30 -0
- package/src/server/api-client-core/apis/files-types.generated.ts +904 -0
- package/src/server/api-client-core/apis/files.generated.ts +164 -0
- package/src/server/api-client-core/apis/index.generated.ts +97 -0
- package/src/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.ts +1434 -0
- package/src/server/api-client-core/apis/marketing/campaigns-public-api.generated.ts +191 -0
- package/src/server/api-client-core/apis/marketing/marketing-emails-types.generated.ts +3858 -0
- package/src/server/api-client-core/apis/marketing/marketing-emails.generated.ts +146 -0
- package/src/server/api-client-core/apis/marketing/marketing-events-types.generated.ts +2122 -0
- package/src/server/api-client-core/apis/marketing/marketing-events.generated.ts +320 -0
- package/src/server/api-client-core/apis/marketing/single-send-types.generated.ts +178 -0
- package/src/server/api-client-core/apis/marketing/single-send.generated.ts +15 -0
- package/src/server/api-client-core/apis/marketing/transactional-single-send-types.generated.ts +337 -0
- package/src/server/api-client-core/apis/marketing/transactional-single-send.generated.ts +44 -0
- package/src/server/api-client-core/apis/meta/origins-types.generated.ts +84 -0
- package/src/server/api-client-core/apis/meta/origins.generated.ts +19 -0
- package/src/server/api-client-core/apis/scheduler/meetings-types.generated.ts +1110 -0
- package/src/server/api-client-core/apis/scheduler/meetings.generated.ts +50 -0
- package/src/server/api-client-core/apis/settings/multicurrency-types.generated.ts +2054 -0
- package/src/server/api-client-core/apis/settings/multicurrency.generated.ts +78 -0
- package/src/server/api-client-core/apis/settings/tax-rates-types.generated.ts +119 -0
- package/src/server/api-client-core/apis/settings/tax-rates.generated.ts +23 -0
- package/src/server/api-client-core/apis/settings/user-provisioning-types.generated.ts +322 -0
- package/src/server/api-client-core/apis/settings/user-provisioning.generated.ts +48 -0
- package/src/server/api-client-core/apis/webhooks-journal-types.generated.ts +906 -0
- package/src/server/api-client-core/apis/webhooks-journal.generated.ts +131 -0
- package/src/server/api-client-core/apis/webhooks-types.generated.ts +1423 -0
- package/src/server/api-client-core/apis/webhooks.generated.ts +171 -0
- package/src/server/api-client-core/binary-data.ts +38 -0
- package/src/server/api-client-core/client.ts +115 -0
- package/src/server/api-client-core/codegen-helpers/file-op-wrappers.ts +25 -0
- package/src/server/api-client-core/errors.ts +31 -0
- package/src/server/api-client-core/index.ts +49 -0
- package/src/server/api-client-core/op.ts +61 -0
- package/src/server/api-client-core/pagination.ts +106 -0
- package/src/server/api-client-core/plugins/fetch-transport.ts +115 -0
- package/src/server/api-client-core/plugins/index.ts +10 -0
- package/src/server/api-client-core/types.ts +148 -0
- package/src/server/api-client.ts +1 -0
- package/src/server/constants.ts +53 -0
- package/src/server/deno/index.ts +1 -0
- package/src/server/deno/start.ts +25 -0
- package/src/server/hono/hono-request-handler.ts +106 -0
- package/src/server/hono/hubspot-connect-routes/auth-callback.test.ts +225 -0
- package/src/server/hono/hubspot-connect-routes/auth-callback.ts +198 -0
- package/src/server/hono/hubspot-connect-routes/auth-init-session.test.ts +144 -0
- package/src/server/hono/hubspot-connect-routes/auth-init-session.ts +126 -0
- package/src/server/hono/hubspot-connect-routes/auth-logout.test.ts +124 -0
- package/src/server/hono/hubspot-connect-routes/auth-logout.ts +140 -0
- package/src/server/hono/hubspot-connect-routes/auth-refresh.test.ts +224 -0
- package/src/server/hono/hubspot-connect-routes/auth-refresh.ts +171 -0
- package/src/server/hono/hubspot-connect-routes/cimd-client-metadata-types.ts +54 -0
- package/src/server/hono/hubspot-connect-routes/cimd-public-routes.test.ts +128 -0
- package/src/server/hono/hubspot-connect-routes/cimd-public-routes.ts +72 -0
- package/src/server/hono/hubspot-connect-routes/constants.ts +3 -0
- package/src/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.test.ts +75 -0
- package/src/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.ts +73 -0
- package/src/server/hono/hubspot-connect-routes/hubspot-connect-routes.ts +95 -0
- package/src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.test.ts +145 -0
- package/src/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.ts +67 -0
- package/src/server/hono/hubspot-connect-routes/oauth-client.ts +181 -0
- package/src/server/hono/hubspot-connect-routes/types.ts +36 -0
- package/src/server/hono/hubspot-connect-routes/utils.test.ts +132 -0
- package/src/server/hono/hubspot-connect-routes/utils.ts +138 -0
- package/src/server/hono/index.ts +6 -0
- package/src/server/hono/types.ts +25 -0
- package/src/server/hono/utils/cookie-utils.ts +55 -0
- package/src/server/import-app-keys.ts +55 -0
- package/src/server/lovable/create-app-function-start.ts +55 -0
- package/src/server/lovable/hubspot-connect/index.ts +28 -0
- package/src/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.ts +40 -0
- package/src/server/lovable/index.ts +16 -0
- package/src/server/node/index.ts +1 -0
- package/src/server/node/start.ts +25 -0
- package/src/server/oauth.ts +6 -0
- package/src/server/proxy.test.ts +80 -0
- package/src/server/proxy.ts +116 -0
- package/src/server/sanitize-request.test.ts +65 -0
- package/src/server/sanitize-request.ts +52 -0
- package/src/server/secure-start-core.ts +67 -0
- package/src/server/types.ts +62 -0
- package/src/server/utils/base64-utils.ts +5 -0
- package/src/server/utils/cookie-utils.test.ts +48 -0
- package/src/server/utils/cookie-utils.ts +26 -0
- package/src/server/utils/crypto-utils.ts +1 -0
- package/src/server/utils/dpop-utils.test.ts +102 -0
- package/src/server/utils/dpop-utils.ts +161 -0
- package/src/server/utils/env-utils.test.ts +92 -0
- package/src/server/utils/env-utils.ts +65 -0
- package/src/server/utils/jwk-utils.test.ts +34 -0
- package/src/server/utils/jwk-utils.ts +30 -0
- package/src/server/utils/jwt-utils.test.ts +81 -0
- package/src/server/utils/jwt-utils.ts +141 -0
- package/src/server/utils/test-fixtures.ts +32 -0
- package/src/shared/constants.ts +13 -0
- package/src/shared/encoding/base64.test.ts +57 -0
- package/src/shared/encoding/base64.ts +50 -0
- package/src/shared/encoding/sha256.test.ts +25 -0
- package/src/shared/encoding/sha256.ts +14 -0
- package/src/shared/logger.ts +50 -0
- package/src/shared/wire-types.ts +40 -0
- package/tsconfig.browser.json +10 -0
- package/tsconfig.json +8 -0
- package/tsconfig.server.json +12 -0
- package/tsdown.config.ts +38 -0
- package/vitest.config.ts +9 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { secureStart } from '../../deno/start.ts';
|
|
2
|
+
import { assertHubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';
|
|
3
|
+
import type { HubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';
|
|
4
|
+
import { runHubSpotConnectLovableServer } from './run-hubspot-connect-lovable-server.ts';
|
|
5
|
+
|
|
6
|
+
export type { HubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';
|
|
7
|
+
|
|
8
|
+
export interface StartHubSpotConnectFunctionOptions {
|
|
9
|
+
client: HubSpotConnectCimdClientMetadata;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Lovable-style entry point for the hubspot-connect Deno function.
|
|
14
|
+
* Loads `HUBSPOT_APP_PRIVATE_KEY` via `secureStart`, then serves OAuth
|
|
15
|
+
* and CIMD routes under `/functions/v1/hubspot-connect`.
|
|
16
|
+
*/
|
|
17
|
+
export async function startHubSpotConnectFunction(
|
|
18
|
+
options: StartHubSpotConnectFunctionOptions
|
|
19
|
+
): Promise<void> {
|
|
20
|
+
assertHubSpotConnectCimdClientMetadata(options.client);
|
|
21
|
+
await secureStart(async () => ({
|
|
22
|
+
start: (context) =>
|
|
23
|
+
runHubSpotConnectLovableServer({
|
|
24
|
+
...context,
|
|
25
|
+
cimdClientMetadata: options.client,
|
|
26
|
+
}),
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
|
|
3
|
+
import type { SecureStartContext } from '../../deno/start.ts';
|
|
4
|
+
import type { HubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';
|
|
5
|
+
import {
|
|
6
|
+
loadHubSpotConnectRoutesEnv,
|
|
7
|
+
registerHubSpotConnectRoutes,
|
|
8
|
+
} from '../../hono/index.ts';
|
|
9
|
+
|
|
10
|
+
const PORT = Deno.env.get('PORT');
|
|
11
|
+
const serveOptions =
|
|
12
|
+
typeof PORT === 'string' ? { port: parseInt(PORT, 10) } : {};
|
|
13
|
+
const HUBSPOT_CONNECT_BASE_PATH = '/functions/v1/hubspot-connect';
|
|
14
|
+
|
|
15
|
+
export interface RunHubSpotConnectLovableServerOptions extends SecureStartContext {
|
|
16
|
+
cimdClientMetadata: HubSpotConnectCimdClientMetadata;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function runHubSpotConnectLovableServer(
|
|
20
|
+
options: RunHubSpotConnectLovableServerOptions
|
|
21
|
+
): Promise<void> {
|
|
22
|
+
const { appKeys, cimdClientMetadata } = options;
|
|
23
|
+
const hubspotConnectEnv = loadHubSpotConnectRoutesEnv();
|
|
24
|
+
const result = Deno.serve(serveOptions, (request) => {
|
|
25
|
+
const app = new Hono();
|
|
26
|
+
|
|
27
|
+
registerHubSpotConnectRoutes({
|
|
28
|
+
app: app.basePath(HUBSPOT_CONNECT_BASE_PATH),
|
|
29
|
+
appKeys,
|
|
30
|
+
basePath: HUBSPOT_CONNECT_BASE_PATH,
|
|
31
|
+
hubspotConnectEnv,
|
|
32
|
+
cimdClientMetadata,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
return app.fetch(request);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
console.log(`[hubspot-connect] Listening on ${result.addr.port}`);
|
|
39
|
+
return Promise.resolve();
|
|
40
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export {
|
|
2
|
+
secureStart,
|
|
3
|
+
type SecureStartContext,
|
|
4
|
+
type SecureStartLoader,
|
|
5
|
+
} from '../deno/start.ts';
|
|
6
|
+
export {
|
|
7
|
+
startHubSpotConnectFunction,
|
|
8
|
+
type HubSpotConnectCimdClientMetadata,
|
|
9
|
+
type StartHubSpotConnectFunctionOptions,
|
|
10
|
+
} from './hubspot-connect/index.ts';
|
|
11
|
+
export {
|
|
12
|
+
createAppFunctionStart,
|
|
13
|
+
type CreateAppFunctionStartOptions,
|
|
14
|
+
type RegisterAppFunctionRoutesFunction,
|
|
15
|
+
type AppFunctionStart,
|
|
16
|
+
} from './create-app-function-start.ts';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './start.ts';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
runSecureStart,
|
|
3
|
+
type SecureStartAdapter,
|
|
4
|
+
type SecureStartContext,
|
|
5
|
+
type SecureStartLoader,
|
|
6
|
+
} from '../secure-start-core.ts';
|
|
7
|
+
|
|
8
|
+
export type { SecureStartContext, SecureStartLoader };
|
|
9
|
+
|
|
10
|
+
const nodeAdapter: SecureStartAdapter = {
|
|
11
|
+
readEnv: (key) => process.env[key],
|
|
12
|
+
deleteEnv: (key) => {
|
|
13
|
+
delete process.env[key];
|
|
14
|
+
},
|
|
15
|
+
exit: (code) => process.exit(code),
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Node entrypoint helper. Reads `HUBSPOT_APP_PRIVATE_KEY` from
|
|
20
|
+
* `process.env` when CIMD or DPoP is enabled, imports the supplied
|
|
21
|
+
* loader, and invokes `start` with `AppKeys` or `null`.
|
|
22
|
+
*/
|
|
23
|
+
export function secureStart(loader: SecureStartLoader): Promise<void> {
|
|
24
|
+
return runSecureStart(loader, nodeAdapter);
|
|
25
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { getJwkThumbprint } from './utils/jwk-utils.ts';
|
|
2
|
+
export { verifyDpopProof } from './utils/dpop-utils.ts';
|
|
3
|
+
export { verifyJwt } from './utils/jwt-utils.ts';
|
|
4
|
+
export { type JwkSet } from './types.ts';
|
|
5
|
+
export { sha256base64url } from './utils/crypto-utils.ts';
|
|
6
|
+
export { signJwt } from './utils/jwt-utils.ts';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {
|
|
2
|
+
afterEach,
|
|
3
|
+
beforeAll,
|
|
4
|
+
beforeEach,
|
|
5
|
+
describe,
|
|
6
|
+
expect,
|
|
7
|
+
it,
|
|
8
|
+
vi,
|
|
9
|
+
} from 'vitest';
|
|
10
|
+
|
|
11
|
+
import { createTestAppKeys } from './utils/test-fixtures.ts';
|
|
12
|
+
|
|
13
|
+
describe('createHubSpotProxy', () => {
|
|
14
|
+
let createHubSpotProxy: typeof import('./proxy.ts').createHubSpotProxy;
|
|
15
|
+
|
|
16
|
+
beforeAll(async () => {
|
|
17
|
+
vi.stubEnv('HUBSPOT_API_ORIGIN', 'https://api.example.test');
|
|
18
|
+
({ createHubSpotProxy } = await import('./proxy.ts'));
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
vi.stubEnv('HUBSPOT_API_ORIGIN', 'https://api.example.test');
|
|
23
|
+
vi.stubEnv('HUBSPOT_DPOP_ENABLED', 'false');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
vi.unstubAllEnvs();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('throws when DPoP is enabled and appKeys is null', () => {
|
|
31
|
+
vi.stubEnv('HUBSPOT_DPOP_ENABLED', 'true');
|
|
32
|
+
expect(() =>
|
|
33
|
+
createHubSpotProxy({
|
|
34
|
+
userCredentials: { accessToken: 't', sessionId: 's' },
|
|
35
|
+
appKeys: null,
|
|
36
|
+
})
|
|
37
|
+
).toThrow(
|
|
38
|
+
'createHubSpotProxy: appKeys is required when HUBSPOT_DPOP_ENABLED is not false'
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('uses Bearer when DPoP is disabled and appKeys is null', async () => {
|
|
43
|
+
const fetchSpy = vi
|
|
44
|
+
.spyOn(globalThis, 'fetch')
|
|
45
|
+
.mockResolvedValue(new Response('{}'));
|
|
46
|
+
const proxy = createHubSpotProxy({
|
|
47
|
+
userCredentials: { accessToken: 'tok', sessionId: 'sid' },
|
|
48
|
+
appKeys: null,
|
|
49
|
+
});
|
|
50
|
+
expect(proxy.authenticated).toBe(true);
|
|
51
|
+
await proxy.fetch({ path: '/crm/v3/objects/contacts' });
|
|
52
|
+
expect(fetchSpy).toHaveBeenCalledWith(
|
|
53
|
+
'https://api.example.test/crm/v3/objects/contacts',
|
|
54
|
+
expect.objectContaining({
|
|
55
|
+
headers: expect.objectContaining({
|
|
56
|
+
Authorization: 'Bearer tok',
|
|
57
|
+
}),
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
fetchSpy.mockRestore();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('sends DPoP when enabled and appKeys are provided', async () => {
|
|
64
|
+
vi.stubEnv('HUBSPOT_DPOP_ENABLED', 'true');
|
|
65
|
+
const fetchSpy = vi
|
|
66
|
+
.spyOn(globalThis, 'fetch')
|
|
67
|
+
.mockResolvedValue(new Response('{}'));
|
|
68
|
+
const appKeys = await createTestAppKeys();
|
|
69
|
+
const proxy = createHubSpotProxy({
|
|
70
|
+
userCredentials: { accessToken: 'tok', sessionId: 'sid' },
|
|
71
|
+
appKeys,
|
|
72
|
+
});
|
|
73
|
+
await proxy.fetch({ path: '/x' });
|
|
74
|
+
const init = fetchSpy.mock.calls[0]?.[1] as RequestInit;
|
|
75
|
+
const headers = init.headers as Record<string, string>;
|
|
76
|
+
expect(headers.Authorization).toMatch(/^DPoP /);
|
|
77
|
+
expect(headers.DPoP).toBeDefined();
|
|
78
|
+
fetchSpy.mockRestore();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { noopLogger, type Logger } from '../shared/logger.ts';
|
|
2
|
+
import {
|
|
3
|
+
type AppKeys,
|
|
4
|
+
type HubSpotProxy,
|
|
5
|
+
type HubSpotProxyRequest,
|
|
6
|
+
type UserCredentials,
|
|
7
|
+
} from './types.ts';
|
|
8
|
+
import { sha256base64url } from './utils/crypto-utils.ts';
|
|
9
|
+
import { signDpopProof } from './utils/dpop-utils.ts';
|
|
10
|
+
import { isHubspotDpopEnabled, requireEnv } from './utils/env-utils.ts';
|
|
11
|
+
|
|
12
|
+
const HUBSPOT_API_ORIGIN = requireEnv('HUBSPOT_API_ORIGIN');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Options accepted by {@link createHubSpotProxy}.
|
|
16
|
+
*/
|
|
17
|
+
export interface CreateHubSpotProxyOptions {
|
|
18
|
+
/**
|
|
19
|
+
* User session context from the incoming browser request.
|
|
20
|
+
*/
|
|
21
|
+
userCredentials: UserCredentials;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Imported app keys from `secureStart`, or `null` when CIMD and DPoP
|
|
25
|
+
* are both disabled.
|
|
26
|
+
*/
|
|
27
|
+
appKeys: AppKeys | null;
|
|
28
|
+
/** Optional logger. Defaults to a no-op logger. */
|
|
29
|
+
logger?: Logger;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const notAuthenticated: HubSpotProxy = {
|
|
33
|
+
authenticated: false,
|
|
34
|
+
fetch: async (): Promise<Response> => {
|
|
35
|
+
return new Response(null, {
|
|
36
|
+
status: 401,
|
|
37
|
+
statusText: 'Unauthorized',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const EMPTY_HEADERS = {};
|
|
46
|
+
|
|
47
|
+
export function createHubSpotProxy(
|
|
48
|
+
options: CreateHubSpotProxyOptions
|
|
49
|
+
): HubSpotProxy {
|
|
50
|
+
const { userCredentials, appKeys, logger = noopLogger } = options;
|
|
51
|
+
|
|
52
|
+
if (isHubspotDpopEnabled() && appKeys === null) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
'createHubSpotProxy: appKeys is required when HUBSPOT_DPOP_ENABLED is not false'
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const { accessToken, sessionId } = userCredentials;
|
|
59
|
+
|
|
60
|
+
if (!accessToken || !sessionId) {
|
|
61
|
+
logger.debug(
|
|
62
|
+
'createHubSpotProxy: returning unauthenticated proxy (missing cookies)'
|
|
63
|
+
);
|
|
64
|
+
return notAuthenticated;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function proxyFetch(request: HubSpotProxyRequest): Promise<Response> {
|
|
68
|
+
const { path, method = 'GET', headers = EMPTY_HEADERS, body } = request;
|
|
69
|
+
|
|
70
|
+
const targetUrl = `${HUBSPOT_API_ORIGIN}${path}`;
|
|
71
|
+
const useDpop = isHubspotDpopEnabled();
|
|
72
|
+
|
|
73
|
+
let authorizationHeaders: Record<string, string>;
|
|
74
|
+
if (useDpop) {
|
|
75
|
+
const ath = await sha256base64url(accessToken!);
|
|
76
|
+
const sid = await sha256base64url(sessionId!);
|
|
77
|
+
const dpopProof = await signDpopProof({
|
|
78
|
+
appKeys: appKeys!,
|
|
79
|
+
claims: {
|
|
80
|
+
htm: method,
|
|
81
|
+
htu: targetUrl,
|
|
82
|
+
jti: crypto.randomUUID(),
|
|
83
|
+
iat: Math.floor(Date.now() / 1000),
|
|
84
|
+
ath,
|
|
85
|
+
sid,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
authorizationHeaders = {
|
|
89
|
+
Authorization: `DPoP ${accessToken}`,
|
|
90
|
+
DPoP: dpopProof,
|
|
91
|
+
};
|
|
92
|
+
} else {
|
|
93
|
+
authorizationHeaders = {
|
|
94
|
+
Authorization: `Bearer ${accessToken}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const finalHeaders = { ...headers, ...authorizationHeaders };
|
|
99
|
+
|
|
100
|
+
const requestInit: RequestInit = {
|
|
101
|
+
headers: finalHeaders,
|
|
102
|
+
method,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
if (body != null) {
|
|
106
|
+
requestInit.body = body;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return fetch(targetUrl, requestInit);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
authenticated: true,
|
|
114
|
+
fetch: proxyFetch,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
HUBSPOT_ACCESS_TOKEN_COOKIE_NAME,
|
|
5
|
+
HUBSPOT_APP_SID_COOKIE_NAME,
|
|
6
|
+
HUBSPOT_REFRESH_COOKIE_PREFIX,
|
|
7
|
+
} from './constants.ts';
|
|
8
|
+
import { sanitizeRequest } from './sanitize-request.ts';
|
|
9
|
+
|
|
10
|
+
function buildRequest(cookieHeader: string | null): Request {
|
|
11
|
+
const headers = new Headers();
|
|
12
|
+
if (cookieHeader !== null) headers.set('Cookie', cookieHeader);
|
|
13
|
+
return new Request('https://example.test/api/foo', {
|
|
14
|
+
method: 'GET',
|
|
15
|
+
headers,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe('sanitizeRequest', () => {
|
|
20
|
+
it('removes the access-token cookie', () => {
|
|
21
|
+
const request = buildRequest(
|
|
22
|
+
`${HUBSPOT_ACCESS_TOKEN_COOKIE_NAME}=secret; user_pref=light`
|
|
23
|
+
);
|
|
24
|
+
const sanitized = sanitizeRequest(request);
|
|
25
|
+
expect(sanitized.headers.get('cookie')).toBe('user_pref=light');
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('removes the app-session-id cookie', () => {
|
|
29
|
+
const request = buildRequest(
|
|
30
|
+
`${HUBSPOT_APP_SID_COOKIE_NAME}=abc; user_pref=light`
|
|
31
|
+
);
|
|
32
|
+
const sanitized = sanitizeRequest(request);
|
|
33
|
+
expect(sanitized.headers.get('cookie')).toBe('user_pref=light');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('removes any cookie with the refresh prefix', () => {
|
|
37
|
+
const request = buildRequest(
|
|
38
|
+
`${HUBSPOT_REFRESH_COOKIE_PREFIX}abc=opaque; user_pref=light`
|
|
39
|
+
);
|
|
40
|
+
const sanitized = sanitizeRequest(request);
|
|
41
|
+
expect(sanitized.headers.get('cookie')).toBe('user_pref=light');
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('drops the Cookie header entirely when nothing survives', () => {
|
|
45
|
+
const request = buildRequest(`${HUBSPOT_ACCESS_TOKEN_COOKIE_NAME}=x`);
|
|
46
|
+
const sanitized = sanitizeRequest(request);
|
|
47
|
+
expect(sanitized.headers.get('cookie')).toBeNull();
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('keeps non-managed cookies untouched', () => {
|
|
51
|
+
const request = buildRequest('a=1; b=2; c=3');
|
|
52
|
+
const sanitized = sanitizeRequest(request);
|
|
53
|
+
expect(sanitized.headers.get('cookie')).toBe('a=1; b=2; c=3');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('preserves method and url', () => {
|
|
57
|
+
const original = new Request('https://example.test/api/foo', {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: { Cookie: `${HUBSPOT_ACCESS_TOKEN_COOKIE_NAME}=x; foo=bar` },
|
|
60
|
+
});
|
|
61
|
+
const sanitized = sanitizeRequest(original);
|
|
62
|
+
expect(sanitized.method).toBe('POST');
|
|
63
|
+
expect(sanitized.url).toBe('https://example.test/api/foo');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isProtectedCookieName } from './constants.ts';
|
|
2
|
+
import { parseCookies } from './utils/cookie-utils.ts';
|
|
3
|
+
|
|
4
|
+
function serializeCookies(cookies: Map<string, string>): string {
|
|
5
|
+
const parts: string[] = [];
|
|
6
|
+
for (const [name, value] of cookies) {
|
|
7
|
+
parts.push(`${name}=${value}`);
|
|
8
|
+
}
|
|
9
|
+
return parts.join('; ');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Returns a clone of `original` whose `Cookie` header has every
|
|
14
|
+
* protected cookie removed (see
|
|
15
|
+
* {@link isProtectedCookieName}). When no other cookies
|
|
16
|
+
* remain, the header is dropped entirely.
|
|
17
|
+
*
|
|
18
|
+
* Used by `createAppConnectRequestHandler` so the user's route
|
|
19
|
+
* handlers never see — and therefore cannot leak — the access token,
|
|
20
|
+
* session ID, or refresh-token cookies.
|
|
21
|
+
*/
|
|
22
|
+
export function sanitizeRequest(original: Request): Request {
|
|
23
|
+
const cookies = parseCookies(original.headers.get('Cookie'));
|
|
24
|
+
|
|
25
|
+
const surviving = new Map<string, string>();
|
|
26
|
+
for (const [name, value] of Object.entries(cookies)) {
|
|
27
|
+
if (!isProtectedCookieName(name)) {
|
|
28
|
+
surviving.set(name, value);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const headers = new Headers(original.headers);
|
|
33
|
+
if (surviving.size === 0) {
|
|
34
|
+
headers.delete('cookie');
|
|
35
|
+
} else {
|
|
36
|
+
headers.set('cookie', serializeCookies(surviving));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const init: RequestInit = {
|
|
40
|
+
method: original.method,
|
|
41
|
+
headers,
|
|
42
|
+
redirect: original.redirect,
|
|
43
|
+
signal: original.signal,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
if (original.body !== null) {
|
|
47
|
+
init.body = original.body;
|
|
48
|
+
(init as RequestInit & { duplex: 'half' }).duplex = 'half';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return new Request(original.url, init);
|
|
52
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { importAppKeys } from './import-app-keys.ts';
|
|
2
|
+
import type { AppKeys } from './types.ts';
|
|
3
|
+
import { isHubspotAppPrivateKeyRequired } from './utils/env-utils.ts';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Context passed to a function-style entrypoint loaded by `runSecureStart`.
|
|
7
|
+
* Contains imported `AppKeys` when CIMD or DPoP is enabled; otherwise
|
|
8
|
+
* `null` (traditional OAuth with `client_secret` and Bearer API calls).
|
|
9
|
+
*/
|
|
10
|
+
export interface SecureStartContext {
|
|
11
|
+
appKeys: AppKeys | null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface SecureEntryPointExports {
|
|
15
|
+
start: (context: SecureStartContext) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Loader returned to `runSecureStart` that produces the entrypoint
|
|
20
|
+
* module. Always pass an `() => import('...')` arrow so the bundler
|
|
21
|
+
* preserves dynamic-import semantics.
|
|
22
|
+
*/
|
|
23
|
+
export type SecureStartLoader = () => Promise<SecureEntryPointExports>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Platform adapters injected by the runtime-specific shim
|
|
27
|
+
* (`node/start.ts` or `deno/start.ts`). Keeping the env/exit/delete
|
|
28
|
+
* functions out of the core lets the shared logic stay platform-free.
|
|
29
|
+
*/
|
|
30
|
+
export interface SecureStartAdapter {
|
|
31
|
+
/** Reads the named env var, or returns `undefined` when unset. */
|
|
32
|
+
readEnv: (key: string) => string | undefined;
|
|
33
|
+
/** Removes the named env var so child processes cannot read it. */
|
|
34
|
+
deleteEnv: (key: string) => void;
|
|
35
|
+
/** Terminates the process with the given exit code. */
|
|
36
|
+
exit: (code: number) => never;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const APP_PRIVATE_KEY_ENV = 'HUBSPOT_APP_PRIVATE_KEY';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Loads `HUBSPOT_APP_PRIVATE_KEY` when CIMD or DPoP is enabled, deletes
|
|
43
|
+
* it from the environment so later code cannot re-read it, imports the
|
|
44
|
+
* entrypoint module via `loader`, and invokes `start` with `AppKeys` or
|
|
45
|
+
* `null` when both features are off. On failure, logs the error and
|
|
46
|
+
* exits with code 1.
|
|
47
|
+
*/
|
|
48
|
+
export async function runSecureStart(
|
|
49
|
+
loader: SecureStartLoader,
|
|
50
|
+
adapter: SecureStartAdapter
|
|
51
|
+
): Promise<void> {
|
|
52
|
+
let appKeys: AppKeys | null = null;
|
|
53
|
+
if (isHubspotAppPrivateKeyRequired()) {
|
|
54
|
+
const envKey = adapter.readEnv(APP_PRIVATE_KEY_ENV)?.trim();
|
|
55
|
+
if (!envKey) {
|
|
56
|
+
throw new Error(`${APP_PRIVATE_KEY_ENV} is not set`);
|
|
57
|
+
}
|
|
58
|
+
appKeys = await importAppKeys(envKey);
|
|
59
|
+
adapter.deleteEnv(APP_PRIVATE_KEY_ENV);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const exports = await loader();
|
|
63
|
+
return exports.start({ appKeys }).catch((error) => {
|
|
64
|
+
console.error(error);
|
|
65
|
+
return adapter.exit(1);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Imported app key material used to sign client assertions and DPoP
|
|
3
|
+
* proofs. Produced by `secureStart`/`importAppKeys`; never store this
|
|
4
|
+
* shape on disk.
|
|
5
|
+
*/
|
|
6
|
+
export interface AppKeys {
|
|
7
|
+
/** ES256 private key as a non-extractable WebCrypto `CryptoKey`. */
|
|
8
|
+
appPrivateKey: CryptoKey;
|
|
9
|
+
/** Public key in JWK form. Used to derive the JWK thumbprint and `cnf`. */
|
|
10
|
+
appPublicKeyJwk: JsonWebKey;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Request shape accepted by `HubSpotProxy.fetch`. Only the `path`
|
|
15
|
+
* is required; everything else mirrors the equivalent fetch fields.
|
|
16
|
+
*/
|
|
17
|
+
export interface HubSpotProxyRequest {
|
|
18
|
+
/** Path component of the upstream URL, including leading slash. */
|
|
19
|
+
path: string;
|
|
20
|
+
/** HTTP method. Defaults to `GET`. */
|
|
21
|
+
method?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Extra request headers. The proxy adds `Authorization` itself
|
|
24
|
+
* (`DPoP` access token plus `DPoP` proof when `HUBSPOT_DPOP_ENABLED` is
|
|
25
|
+
* not `"false"` and `appKeys` is non-null; otherwise `Bearer` only).
|
|
26
|
+
*/
|
|
27
|
+
headers?: Record<string, string>;
|
|
28
|
+
/** Optional request body. Pass `null`/`undefined` for empty bodies. */
|
|
29
|
+
body?: string | null | undefined;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Authenticated proxy returned by `createHubSpotProxy`. Use it
|
|
34
|
+
* inside Hono handlers (via `c.env.hubSpotProxy`) to call
|
|
35
|
+
* HubSpot's API on behalf of the browser session that issued the
|
|
36
|
+
* incoming request.
|
|
37
|
+
*/
|
|
38
|
+
export interface HubSpotProxy {
|
|
39
|
+
/**
|
|
40
|
+
* `true` when the session cookies present on the inbound request
|
|
41
|
+
* yielded a usable access token. When `false`, every `fetch()` call
|
|
42
|
+
* returns a 401 without contacting the upstream.
|
|
43
|
+
*/
|
|
44
|
+
authenticated: boolean;
|
|
45
|
+
/** Performs an authenticated upstream request. */
|
|
46
|
+
fetch: (request: HubSpotProxyRequest) => Promise<Response>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* RFC 7517 JWK Set. Returned by HubSpot's `/oauth/v1/jwks` endpoint
|
|
51
|
+
* and used to verify access tokens on the resource server.
|
|
52
|
+
*/
|
|
53
|
+
export interface JwkSet {
|
|
54
|
+
keys: JsonWebKey[];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface UserCredentials {
|
|
58
|
+
/** Access token. */
|
|
59
|
+
accessToken: string;
|
|
60
|
+
/** Session ID. */
|
|
61
|
+
sessionId: string;
|
|
62
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { parseCookies } from './cookie-utils.ts';
|
|
4
|
+
|
|
5
|
+
describe('parseCookies', () => {
|
|
6
|
+
it('returns empty object for null/undefined/empty input', () => {
|
|
7
|
+
expect(parseCookies(null)).toEqual({});
|
|
8
|
+
expect(parseCookies(undefined)).toEqual({});
|
|
9
|
+
expect(parseCookies('')).toEqual({});
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('parses a single cookie', () => {
|
|
13
|
+
expect(parseCookies('foo=bar')).toEqual({ foo: 'bar' });
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('parses multiple cookies separated by `;`', () => {
|
|
17
|
+
expect(parseCookies('a=1; b=2; c=3')).toEqual({ a: '1', b: '2', c: '3' });
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('trims surrounding whitespace from names and values', () => {
|
|
21
|
+
expect(parseCookies(' foo = bar ; baz = qux ')).toEqual({
|
|
22
|
+
foo: 'bar',
|
|
23
|
+
baz: 'qux',
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('handles cookies whose value contains `=`', () => {
|
|
28
|
+
expect(parseCookies('token=eyJhbGciPSJIUzI=; sid=abc')).toEqual({
|
|
29
|
+
token: 'eyJhbGciPSJIUzI=',
|
|
30
|
+
sid: 'abc',
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('treats cookies without `=` as empty values', () => {
|
|
35
|
+
expect(parseCookies('foo; bar=baz')).toEqual({ foo: '', bar: 'baz' });
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('lets later cookies overwrite earlier duplicates', () => {
|
|
39
|
+
expect(parseCookies('foo=1; foo=2')).toEqual({ foo: '2' });
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('skips empty segments produced by trailing `;`', () => {
|
|
43
|
+
expect(parseCookies('foo=bar; ; baz=qux;')).toEqual({
|
|
44
|
+
foo: 'bar',
|
|
45
|
+
baz: 'qux',
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses an HTTP `Cookie` request header into a `name -> value` map.
|
|
3
|
+
* Tolerates leading/trailing whitespace, missing `=` (treats the
|
|
4
|
+
* cookie value as empty), and duplicate names (last write wins).
|
|
5
|
+
*
|
|
6
|
+
* Returns an empty object when `cookieHeader` is `null`/`undefined`
|
|
7
|
+
* /empty so callers don't have to null-check the input.
|
|
8
|
+
*/
|
|
9
|
+
export function parseCookies(
|
|
10
|
+
cookieHeader: string | null | undefined
|
|
11
|
+
): Record<string, string> {
|
|
12
|
+
if (!cookieHeader) return {};
|
|
13
|
+
return Object.fromEntries(
|
|
14
|
+
cookieHeader
|
|
15
|
+
.split(';')
|
|
16
|
+
.map((pair) => {
|
|
17
|
+
const eqIdx = pair.indexOf('=');
|
|
18
|
+
if (eqIdx === -1) return [pair.trim(), ''] as [string, string];
|
|
19
|
+
return [pair.slice(0, eqIdx).trim(), pair.slice(eqIdx + 1).trim()] as [
|
|
20
|
+
string,
|
|
21
|
+
string,
|
|
22
|
+
];
|
|
23
|
+
})
|
|
24
|
+
.filter(([name]) => name.length > 0)
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { sha256base64url } from '../../shared/encoding/sha256.ts';
|